OpenTelemetry Advent Calendar 2022、22日目の記事です
メトリクスは今までPrometheusで収集していたけどOpenTelemetry Collector(以下Otel)に置き換えたい、もしくはOtel使い始めたけど(今のところ)満たせない監視要件がある、という方向けです。
Prometheus ExporterをOpenTelemetry CollectorでもScrapeできるよ、という話
Otelには様々なReceiverがありますが、Prometheusも歴史が長いだけあり更に幅広いPrometheus Exporterがあります。
今までPrometheus Exporterで実現してきた監視がOtelに置き替えることでできなくなるというケースがもしかしたらあるかもしれませんが、ご心配には及びません、OtelにはPrometheus Receiverというものがあり、これによりPrometheus ExporterをOtelでScrapeし(Pullで取り込み)、お好きなバックエンドに送ることができます。
※名称がすごくややこしいですが、Prometheus Exporter ≒ Otel Receiverで、Otel Receiverの一つにPrometheus Receiverがあります。
例えば、OtelにはICMP(Ping)やTCPによるポーリングテスト機能はないため(本記事作成時点)、PrometheusのBlackbox exporterを使ってみます。
なお、以降の設定方法は他のExporterでも考え方は同じです。
まずPrometheusでBlackbox exporterを試してみる
Prometheusを立て、Blackbox exporterもGithubのページ通りにセットアップします(詳細は割愛)。
処理の流れはこうです。
適当にいくつかのサイトにhttpテストをしてみます。
scrape_configs:
- job_name: 'blackbox'
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- http://prometheus.io
- https://prometheus.io
- https://opentelemetry.io
- https://qiita.com
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 127.0.0.1:9115
Prometheusで結果を確認してみます。
probe_success=1でサイトのUpを確認できました。
いいですね、とりあえず想定通りです。
OtelでBlackbox exporterをScrapeしてみる
それではOtelでPrometheus receiverを使ってみましょう。
変更点は以下の通りです。
OpenTelemetry Collector:新規にインストールします
Prometheus Exporter(今回はblackbox):何も変更しません
Prometheus:Otelが代わりにBlackbox exporterをScrapeしてくれますので不要になります
処理の流れはこうなります。
設定についてです。
PrometheusのScrape設定がOtelでも同じものをそのまま使える嬉しい仕様です。
これまでの資産が無駄にはなりませんね。
Otelコンフィグの以下にPrometheusのscrape_configs
を移してあげます。
receivers:
prometheus:
config:
scrape_configs:
ScrapeしたメトリクスはSplunk Observability Cloudに送信、可視化してみます。
作成したOtelコンフィグは以下の通りです。
※Otelのインストール方法や設定ファイルの見方についてはこちら
※本番では適宜、適切なProcessorを追加してください
receivers:
prometheus:
config:
scrape_configs:
- job_name: 'blackbox'
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- http://prometheus.io
- https://prometheus.io
- https://opentelemetry.io
- https://qiita.com
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 127.0.0.1:9115
exporters:
signalfx: # Splunk Observability Cloud
access_token: "*****"
realm: "*****"
service:
pipelines:
metrics:
receivers: [prometheus]
processors: []
exporters: [signalfx]
Splunk Observability Cloudで見てみましょう。
素晴らしい!
つまり・・・?
これだけ見たら「結果は何も変わってないじゃん」と思われるかもしれません。
しかし、Otelの真の能力は、メトリクスだけではなく、アプリケーショントレース、ログも同じくコンテキストを付与しつつ取り込み、バックエンドで解析することでオブザーバビリティを簡単に実現できますよ、というものです。
Otelでテレメトリーデータ収集を標準化し、更にそこにPrometheus Exporterもお借りして監視範囲を広げることもできるということですね。
それでは良いOtelライフを!