OpenTelemetry Collectorでログファイルの更新を取り込む
Hi, この記事は OpenTelemetry Advent Calendar 2022、1日目の記事です!
OpenTelemetryコミュニティでは様々なテレメトリデータの取り扱いについて議論されており、ログの扱いについても例外ではありません。 最新状況は公式ブログでのロードマップ情報に譲るとして、 OpenTelemetry Collectorのレシーバーを眺めていると、File Log Receiverというものがあるらしいので、ちょっと動かしてみました。
otel collector config
設定はシンプルに、ファイルの更新を検知して、外部に送る感じにします。
- レシーバーとして
/var/log/myservice/
ディレクトリにあるjsonファイルをすべてtailする指定をします。 - わかりやすさのため、
deployment.environment=hello-otel-log
となる属性を追加します。 - それを
splunk_hec
エクスポーターを使って外部(Splunk Log Observer)に送ります。
receivers: filelog/myservice: include: [ /var/log/myservice/*.json ] operators: - type: json_parser timestamp: parse_from: attributes.time layout: '%Y-%m-%d %H:%M:%S' exporters: splunk_hec: token: "${SPLUNK_HEC_TOKEN}" endpoint: "${SPLUNK_HEC_URL}" source: "otel" sourcetype: "otel" processors: batch: resource/environment: attributes: - key: deployment.environment action: insert value: hello-otel-log service: pipelines: logs: receivers: [filelog/myservice] processors: [batch, resource/environment] exporters: [splunk_hec]
ログを出してみる
シンプルに、echoコマンドでログを出してみます。こんな感じ:
echo '{"time": "2022-12-01 12:34:57", "message": "otel log!"}' >> /var/log/myservice/hoge.json
すると、otel collectorのログにはファイルを見始めた旨のログが吐かれています
info fileconsumer/file.go:161 Started watching file from end. To read preexisting logs, configure the argument 'start_at' to 'beginning' {"kind": "receiver", "name": "filelog/myservice", "pipeline": "logs", "component": "fileconsumer", "path": "/var/log/myservice/hoge.json"}
そして、Splunk Log Observerを開くと、いい感じにログが取り込まれている様子がわかります。
もちろん、Splunk以外にも、ログに対応したエクスポーターであれば何でも動きます。 公式ドキュメントのレジストリや、 GitHubリポジトリ https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter を眺めてみてください!
この記事は OpenTelemetry Advent Calendar 2022、1日目の記事でした。明日は @ymotongpooです!