2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenTelemetry Collectorの役割の整理

Last updated at Posted at 2025-02-28

はじめに

OpenTelemetry導入時にOpenTelemetry Collectorも導入したので、ここに記録します。

OpenTelemetryとは

OpenTelemetry とは、ログ、トレース、メトリクスなどのテレメトリーデータを作成・管理するためのツールです。
ベンダーに依存しない設計になっており、各種言語向けのライブラリが豊富に揃っているのが特徴です。

OpenTelemetry Collectorとは

テレメトリーデータを集約し、バックエンドに転送するためのツールです。
OpenTelemetry から直接バックエンドに送る方法もありますが、Collector を使うことでバックエンドの変更やラベルの追加などを容易に行えるようになります。

以下の図は構成の一例です。
アプリケーションサーバーから Collector にデータを送信しています。図の通り、アプリケーションサーバーから Collector にデータを送れば、その先は Collector 側で制御できる状態を作れます。
スクリーンショット 2025-02-28 19.34.37.png

OpenTelemetry Collectorの構成要素

実際にOpenTelemetry Collectorのの中身はどのような設定で動いているか見ていきましょう

構成要素としては主に以下のようながあります

  • Receivers (データの受信)
  • Processors (データの変換)
  • Exporters (データの送信)
  • Extensions (拡張機能)
  • Pipelines (データの一連の流れ)

それぞれどんな役割があるか説明していきます

Receivers

テレメトリデータを収集するための設定を行います

httpのリクエストを全て許可する場合は以下のように設定します
※デフォルトの値がv0.104.0以降でlocalhostになっているので注意してください
明示的にIPアドレス等を設定していない場合にデータの受付を拒否してしまします。
https://github.com/open-telemetry/opentelemetry-collector/releases/tag/v0.104.0

receivers:
  otlp:
    protocols:
      http:
        endpoint: "0.0.0.0:4318"

主な設定項目

  • IPアドレスの許可
  • ポートの許可
  • プロトコルの許可
    など

Processors

Receiversで受け取ったデータをExportersに送るまでのデータ処理を行う部分

  • 受け取ったデータから特定の文字が含まれているデータを除外
  • データの変換
  • 送信するデータの制御
    など

自動計装をしている時に受け取ったspanのうちhealth-checkだけ除外する設定の例です
Receiversから受け取ったデータを様々な形式に変換ができます。

processors:
  batch:
  filter:
    spans:
      include:
        match_type: regexp
        services: [".*"]
      exclude:
        match_type: regexp
        attributes:
          - key: url.path
            value: "health-check.*"

以上の設定は一例ですがProcessors で受け取ったデータを様々な形式に変換したり、特定の条件で除外することが可能です。

Exporters

Receiversで受け取り、Processorsで編集したデータをどこに送るかを設定するものです
例えば、zipkinとtempoに送りたい場合は以下のようになります

exporters:
  zipkin:
    endpoint: "http://{zipkin_endpoint}:9411/api/v2/spans"
    format: proto
  otlp:
    endpoint: "http://{tempo_endpoint}:4317"
    tls:
      insecure: true

どの宛先に対してどんな仕様でデータを送信するか設定できます。
詳しく知りたい方はこちらのリンクにexporterの詳細情報がありますので参照してください
https://github.com/open-telemetry/opentelemetry-collector/tree/main/exporter

Extensions

拡張機能を使う場合に設定する項目です

機能の例

  • ヘルスチェック
  • 認証機能
    など

colecctor自身にhealth_checkのエンドポイントを用意したい場合、以下のように設定します

extensions:
  health_check:

拡張機能に関してはこちらのリンクあたりが使えるものになります
https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension

Pipelines

コレクター内のデータのルートを定義するもの。
これまで設定したReceivers、Processors、Exporters、Extensionsを繋げるために必要な項目です。

以下の設定がpipelineの例です。
それぞれ設定したextensions、receivers、processors、exportersをservice:内のpipelines内に記述することで一連のデータの流れを定義できます。

extensions:
  health_check:

receivers:
  otlp:
    protocols:
      grpc:
      http:

processors:
  batch:
   send_batch_size: 100

exporters:
  zipkin:
    endpoint: "http://zipkin:9411/api/v2/spans"
    format: proto

service:
  extensions: [health_check]
  pipelines:
    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [zipkin]

おわりに

以上が OpenTelemetry Collector の主な構成要素と設定例になります。
実際に運用していると、監視ツールの変更などに柔軟に対応できるメリットを感じています。
OpenTelemetry を導入するときは、Collector を活用してみてください。

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?