🏇

OpenTelemetry Collectorの無難な設定

2023/10/04に公開

OpenTelemetry CollectorはSDKなどで作られたデータを受け取って別の場所に送信するツールです。

https://opentelemetry.io/docs/collector

Collectorを使うことで送信先の情報をまとめて管理できたり、データに共通処理を追加したりすることができます。

この記事ではOpenTelemetry Collectorでトレースを送信するときに使う無難な設定を紹介します。

具体例

最初に、このページで使用する具体的な設定を紹介します。
この設定で、Collectorが受信したトレースのデータをサーバーに送信できます。

receivers:
  otlp:
    protocols:
      http:
        endpoint: localhost:4318

processors:
  memory_limiter:
    check_interval: 1s
    limit_mib: 500
  batch:

exporters:
  otlphttp:
    endpoint: https://xxx.example.com
    headers:
      "ヘッダー名": "ヘッダー値"

extensions:
  health_check:
  pprof:
  zpages:

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

設定しているのは大まかに次の5箇所です。

  1. recivers
  2. processors
  3. exporters
  4. extensions
  5. service

設定内容の説明

具体例で使った設定について詳しくみていきましょう。

1. recivers

receiversでは外部から来るデータの受け口の設定をします。
httpやgrpcなど様々な方法で受信できますが、具体例ではhttpを設定しています。

receivers:
  otlp:
    protocols:
      http:
        endpoint: localhost:4318

この例では次のことを設定しています。

  • protocols でhttpを受け入れること。
  • endpointlocalhost:4318 へのデータを受け入れること。 (デフォルトは 0.0.0.0:4318 となっていて全てのネットワークから受け入れるようになっています。localhostと指定することで送信元を限定しています)

2. processors

processorsでは受け取ったデータを送信する前に実行する処理を設定します。
OpenTelemetry Collectorが使うメモリ量を制限したり、データをまとめたりすることができます。

processors:
  memory_limiter:
    check_interval: 1s
    limit_mib: 500
  batch:

この例では次のことを設定しています。

  • memory_limiter でメモリ使用量の上限を設定します。
    • check_interval でメモリ使用量の確認を1秒づつ確認するように設定します。
    • limit_mib でメモリ使用量が500MiBを上限(ハードリミット)に設定しています。ソフトリミットは80%の400MiBに自動的に設定されます。
  • batch で受け取ったデータをまとめるように設定しています。

※ memory_limitterの上限や確認の間隔に適した値は実行しているサーバーによって大きく変わるので、各環境に合わせて設定してください。

3. exporters

exportersではデータの送信方法を設定します。
httpやgrpcなど様々な方法で送信できますが、具体例ではhttpを設定しています。

exporters:
  otlphttp:
    endpoint: https://xxx.example.com
    headers:
      "ヘッダー名": "ヘッダー値"

この例では次のことを設定しています。

  • endpoint で送信先を https://xxx.example.com に設定しています。
  • headers でリクエストヘッダーを設定しています。認証が必要な時にトークンを渡すために使うことが多いです。

4. extensions

extensionsではデータの処理には関係しない処理を追加できます。
ヘルスチェックや

extensions:
  health_check:
  pprof:
  zpages:

この例では次のことを設定しています。

  • health_check でlocalhost:13133 からヘルスチェックが出来るようになります。
  • pprof で localhost:1888/debug/pprof/ からプロファイル情報を取得できるようになります。
  • zpages で localhost:55679/debug/servicez などからCollectorの情報を取得できるようになります。

5. service

今までの設定をserviceで有効化します。

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

この例では次のことを設定しています。

  • extensions でextensionsで設定した処理を有効化します。
  • pipelines で receivers,processors,exporters のそれぞれで使用するものを有効化します。

設定をまとめる

これまでの設定をまとめてファイルにすると、OpenTelemetry Collectorが受け取ったデータを他の場所に送るようになります。

終わりに

以上、OpenTelemetry Collectorを使う時の無難な設定を紹介しました。

Vaxila

Discussion