自動化スクレイピング

監視対象はスクレイパーだけじゃない:OpenTelemetryパイプライン健全性の監視

OpenTelemetry Collectorのパイプライン健全性を監視するために、health_check・zPages・pprof・self-metricsの使い分けと、ドロップ/遅延/再試行/キュー滞留を検知する指標・アラート設計を解説します。

Ibuki Yamamoto
Ibuki Yamamoto
2026年4月24日 11分で読めます

監視対象はスクレイパーだけじゃない:OpenTelemetryパイプライン健全性の監視

OpenTelemetry(OTel)Collector を入れると、アプリのテレメトリは整います。一方で、Collector 自体が詰まったり落ちたりすると「観測できているつもりで、実は欠損していた」という状態になりがちです。この記事では、スクレイパー(クローラー)だけを監視するのではなく、OTel のパイプライン(receiver→processor→exporter)を健全に保つための監視ポイントと、実装の具体例(設定例・メトリクス・アラート設計)を整理します。

この記事でわかること
  • OTel Collector の「パイプライン健全性」で見るべき指標
  • zPages/health_check/self-metrics を使った可視化と検知
  • 詰まり・ドロップ・再試行を早期に拾うアラート設計

なぜ監視が必要か

スクレイピング基盤でありがちなのが「スクレイパーの稼働監視はしているが、観測基盤は監視していない」状態です。ところが実務では、障害はスクレイパー以外でも起きます。たとえば以下です。

  • Collector のメモリ逼迫で OOMKill、あるいはスロットリング
  • exporter 先(バックエンド/SaaS)が詰まり、キューが増える
  • バッチ処理やサンプリングで遅延が増え、SLO を割る
  • 受信はできているのに、特定シグナル(logs だけ等)が落ちる

押さえたい前提:OTel Collector は「受信」「加工」「転送」のパイプラインです。したがって健全性も、CPU/メモリのようなプロセス監視だけでは足りず、データフローの監視が必要になります。

健全性の定義

「パイプラインが健全」と言うと曖昧です。監視設計では、少なくとも次の3つに分けると事故が減ります。

1) 生存

Collector プロセスが生きていて、受信エンドポイントが応答している状態です。Kubernetes の readiness/liveness、HTTP のヘルスエンドポイントが該当します。

2) 受信できている

receiver が想定通りに受信し、processor へ流れている状態です。証拠は「受信件数」「拒否/エラー」「キュー増加」です。

3) 転送できている

exporter がバックエンドへ送れている状態です。証拠は「送信成功」「送信失敗」「再試行」「ドロップ」「キュー滞留」です。

注意:ヘルスチェックが OK でも、exporter 先が詰まってキューが増え続けていることがあります。生存監視だけで「観測基盤は健康」と判断すると、欠損に気づけません。

まず入れる拡張

Collector には、運用を助ける extension が用意されています。公式ドキュメントでも、extensions に health_check/pprof/zpages を追加する例が示されています。opentelemetry.io

health_check

ロードバランサや Kubernetes の probe から叩くためのエンドポイントです。「生存」を見る用途で使います。

zPages

Collector 内部のライブ状態を覗くための UI です。公式トラブルシューティングでも、receiver/exporter のライブデータ確認に使える旨が案内されています。opentelemetry.io

pprof

CPU/メモリのプロファイルを取る用途です。データ詰まりの根因が「高負荷」なのか「設定」なのかを切り分ける際に効きます。

Collector自己監視

OTel Collector は、自身のメトリクス(self-metrics)も出せます。これを Prometheus などで収集し、ダッシュボードとアラートに落とすのが王道です。ここからが本題です。

見るべき指標

具体的なメトリクス名はディストリビューションやバージョンで差が出ることがあります。とはいえ「何を監視するか」は普遍です。最低限、次の観点を揃えてください。

  • 受信量:receiver 別・パイプライン別の受信件数/バイト
  • 転送量:exporter 別の成功件数/バイト
  • 失敗:exporter エラー、再試行回数、拒否(reject)
  • ドロップ:processor/exporter での drop(欠損の直接原因)
  • 滞留:送信キュー長、バックプレッシャー、遅延
  • リソース:CPU、メモリ、GC、ゴルーチン等(環境により)

運用上のコツ:まず「入口(受信)と出口(送信)の差分」を可視化します。差分が増え続けるなら、どこかで滞留・再試行・ドロップが発生しています。

メモリ事故の防止

Collector の事故で多いのが OOM(メモリ不足)です。そこで memory_limiter processor を入れて、閾値超過時に制御します。公式の Go パッケージドキュメントには「メモリリミッタが拒否する前に追加メモリを消費し得る」という警告が明記されています。つまり、入れて終わりではなく、適切な余裕を持って設計が必要です。pkg.go.dev

設定例

以下は「ヘルス」「内部可視化」「自己メトリクス収集」を最小構成で揃える例です。実際の exporter(Prometheus/OTLP/ベンダー)や認証は環境に合わせて調整してください。

extensions:
  health_check: {}
  pprof: {}
  zpages: {}

receivers:
  otlp:
    protocols:
      grpc: {}
      http: {}

processors:
  memory_limiter:
    # 値は環境に合わせて調整
    check_interval: 1s
    limit_mib: 512
    spike_limit_mib: 128
  batch: {}

exporters:
  debug: {}

service:
  extensions: [health_check, pprof, zpages]
  pipelines:
    traces:
      receivers: [otlp]
      processors: [memory_limiter, batch]
      exporters: [debug]
    metrics:
      receivers: [otlp]
      processors: [memory_limiter, batch]
      exporters: [debug]
    logs:
      receivers: [otlp]
      processors: [memory_limiter, batch]
      exporters: [debug]

extensions を service.extensions に紐付ける点が重要です。Collector の設定の全体像(pipelines/receivers/processors/exporters/extensions)は公式ドキュメントでも説明されています。opentelemetry.io

よくある異常パターン

受信は増えるが送信が増えない

exporter 先の障害、認証切れ、DNS/ネットワーク断、レート制限が典型です。再試行やキュー長の増加を合わせて見ます。

ドロップが増える

メモリ制限、キュー飽和、exporter の恒久エラーなどが原因になり得ます。欠損が確定するので最優先で検知します。

遅延が増える

batch の設定、サンプリング、exporter のバックプレッシャーなどが関係します。SLO を持つなら「遅延」も監視対象です。

Collectorが落ちる

OOM のほか、設定不備や証明書不足で「受信ができていないように見える」ことがあります。distroless などでツールが入っていないと切り分けが難しいため、health_check/zPages の露出は運用上の保険になります(現場知見として有用です)。reddit.com

注意:Reddit の内容は経験談です。判断の補助としては有効ですが、最終的には自環境のメトリクスと公式ドキュメントで裏取りしてください。

アラート設計

アラートは「落ちたら鳴らす」だけだと遅すぎます。データフローの劣化を早期に拾う条件を用意しましょう。

おすすめ条件

  • ドロップ:5分間で drop が 0 以外になったら即通知
  • 受信-送信差分:差分が継続的に増える(10〜15分)なら通知
  • exporter 失敗率:一定割合(例 1% 超)が継続したら通知
  • メモリ逼迫:limit 近傍に張り付く、または GC 圧が継続するなら通知

通知先の分離

「すぐ直す(オンコール)」と「翌営業日対応(改善)」を分けると運用が回ります。ドロップや collector down は前者、遅延増やキュー増は後者に寄せるのが現実的です。

比較:監視手段

パイプライン監視に使う代表的な手段を、目的別に整理します。

手段 主な目的 強み 弱み
health_check 生存確認 軽量でLB/Probe向き データ欠損は見えない
zPages 即時デバッグ ライブ状態を目視できる 常時監視には不向き
self-metrics 継続監視 アラート/可視化の中核 設計と整備が必要
pprof 根因分析 CPU/メモリの原因追跡 運用者のスキルが必要

運用の落とし穴

「Collectorは安定」の思い込み

Collector は Go 製で堅牢ですが、入力が増えたり export 先が詰まれば当然不安定化します。特にスクレイピングはピークが尖りやすいので、メモリ保護(memory_limiter)とバッチングの前提で設計したいところです。pkg.go.dev

監視が分断される

アプリは APM、Collector は別監視、バックエンドは別…となると、障害時のトリアージが遅れます。「入口→Collector→出口」の一連を同じダッシュボードに載せると、切り分けが高速化します。

参考リンク

設定・デバッグ・メモリ保護は、まず公式情報を起点に確認してください。




監視設計を改善しませんか?

スクレイピング基盤の観測欠損は、Collector・exporter・バックエンドまで含めた監視設計で大きく減らせます。現状の構成を前提に、指標設計とアラートの最適化をご相談ください。

お問い合わせスクレイピングに関するご相談・お見積もりはお気軽にどうぞ
相談する

まとめ

  • OTel の健全性は「生存」だけでなく「受信できている」「転送できている」で定義する
  • health_check/zPages/pprof に加え、self-metrics を中核にして継続監視を組む
  • ドロップ、受信-送信差分、失敗率、キュー滞留を先回りでアラート化する

この記事を書いた人

Ibuki Yamamoto
Ibuki Yamamoto

Webスクレイピングエンジニア。10年以上の実務経験を持ち、大規模なデータ収集プロジェクトを数多く手がける。PythonとJavaScriptを得意とし、技術ブログでは実践的なスクレイピング手法を発信している。

データ収集のプロに
お任せください

年間1億件以上のデータ収集実績を持つプロフェッショナルチームが、大規模スクレイピング・アンチボット対策など、あらゆる課題を解決します。

1億+
年間データ収集件数
24/7
安定稼働
高品質
データ精度