LoginSignup
1
0

Prometheus ReceiverでOpenTelemetry Collectorを拡張

Last updated at Posted at 2022-12-21

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のページ通りにセットアップします(詳細は割愛)。

処理の流れはこうです。

image.png

適当にいくつかのサイトにhttpテストをしてみます。

prometheus.yaml
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で結果を確認してみます。

image.png

probe_success=1でサイトのUpを確認できました。
いいですね、とりあえず想定通りです。

OtelでBlackbox exporterをScrapeしてみる

それではOtelでPrometheus receiverを使ってみましょう。

変更点は以下の通りです。

OpenTelemetry Collector:新規にインストールします
Prometheus Exporter(今回はblackbox):何も変更しません
Prometheus:Otelが代わりにBlackbox exporterをScrapeしてくれますので不要になります

処理の流れはこうなります。

image.png

設定についてです。
PrometheusのScrape設定がOtelでも同じものをそのまま使える嬉しい仕様です。
これまでの資産が無駄にはなりませんね。
Otelコンフィグの以下にPrometheusのscrape_configsを移してあげます。

receivers:
  prometheus:
    config:
      scrape_configs:

ScrapeしたメトリクスはSplunk Observability Cloudに送信、可視化してみます。
作成したOtelコンフィグは以下の通りです。
※Otelのインストール方法や設定ファイルの見方についてはこちら
※本番では適宜、適切なProcessorを追加してください

config.yaml
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で見てみましょう。

image.png

素晴らしい!

つまり・・・?

これだけ見たら「結果は何も変わってないじゃん」と思われるかもしれません。

しかし、Otelの真の能力は、メトリクスだけではなく、アプリケーショントレース、ログも同じくコンテキストを付与しつつ取り込み、バックエンドで解析することでオブザーバビリティを簡単に実現できますよ、というものです。
Otelでテレメトリーデータ収集を標準化し、更にそこにPrometheus Exporterもお借りして監視範囲を広げることもできるということですね。

それでは良いOtelライフを!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0