Diary of a Perpetual Student

Perpetual Student: A person who remains at university far beyond the normal period

OTel Collectorでrunnによるシナリオテストの結果を投稿できるrunnreceiverを作りました

blog.arthur1.dev

の続編です。今回はrunnによるシナリオテストの結果を投稿するツールをOpenTelemetry CollectorのReceiver (Scraper)として作ってみました。

リポジトリ

以下のリポジトリで id:arthur-1 によるOpenTelemetry Collectorの自作Component群を公開しています。

github.com

使い方

ビルド

ocb (builder)によってOpenTelemetry Collectorをカスタムビルドする必要があります。カスタムビルドの方法は公式のドキュメントBuilding a custom collector | OpenTelemetryを参照してください。

runnreceivcerをビルドに含める場合には、ocbのconfig YAMLのreceivers部分に、以下のように行を追加しましょう。

 receivers:
+   - gomod: github.com/Arthur1/opentelemetry-collector-arthur1/receiver/runnreceiver v0.2.0

 exporters:
   - gomod: go.opentelemetry.io/collector/exporter/otlpexporter v0.101.0

config

利用する際は以下のようにOpenTelemetry Collectorのconfigを記述します。runbooksにはrunnのYAMLの文字列の配列を記述してください。

receivers:
  runn:
    runbooks:
      - |
        desc: blog.arthur1.dev's test
        runners:
          req: https://blog.arthur1.dev
        steps:
          test1:
            req:
              '/':
                get:
                  body: null
            test: current.res.status == 200
          test2:
            req:
              '/hoge':
                get:
                  body: null
            test: current.res.status == 404
    collection_interval: 1m

exporters:
  otlp/mackerel:
    endpoint: otlp.mackerelio.com:4317
    compression: gzip
    headers:
      Mackerel-Api-Key: ***censored***

service:
  pipelines:
    metrics:
      receivers:
        - runn
      exporters:
        - otlp/mackerel

これで./otelcol-custom .--config ./otelcol-config.yamlのようにしてOpenTelemetry Collectorを実行すると、以下のように、テストが成功したかどうかと、テストに含まれる各ステップの所要時間をメトリックとして投稿します。(以下のグラフはMackerelのOpenTelemetry対応機能によって生成されたグラフを公開したものです。)

将来的にはメトリックだけでなくトレースとしても投稿できるようにする予定です。

おまけ:Receiver自作に関する情報

先日、Pepabo Tech Conference #22 春のSREまつりに登壇させていただき、「otelcol receiver 自作RTA」というタイトルでLT(というよりライブコーディング実演)しました。

speakerdeck.com

こちらのスライドでは、OpenTelemetry CollectorのReceiverを自作する際の流れや気をつけたいTIPSをご紹介しています。ぜひご覧ください。

日本語で書かれた他のエントリにはないおもしろポイントは、

  • mdatagenは現在単純なgo installでインストールできないのでソースコードを持ってくる必要がある
  • mdatagenで記述するYAMLをVSCodeで快適に書くためにJSONスキーマを自作した https://github.com/Arthur1/otelcol-metadata-schema

あたりです。