でご紹介した、OpenTelemetry Metricsを手軽に投稿できるCLIツール「otlc」のv0.2.0をリリースしたので再度ご紹介します。
使い方
インストール
(macOS, Linux)×(x86_64, arm64)向けのバイナリをGitHubのReleaseで配布しています。
Homebrewをお使いの方は以下のコマンド1つでインストールが可能です。
$ brew install Arthur1/tap/otlc $ otlc --version otlc is a Command-line Tool to Export Telemetry by OTLP (OpenTelemetry Protocol). Version: unknown Go version: go1.22.4 Arch: arm64
go install派の方はこちらからどうぞ。こっちならWindowsでも動くかもしれない(未検証)。
go install github.com/Arthur1/otlc/cmd/otlc@latest
メトリックの投稿
まずは環境変数に投稿先の情報を入れます。今回はMackerelのOpenTelemetry対応機能に投稿してみましょう。これらの情報は環境変数を利用しなくても対応するオプションでセット可能です。(詳しくは--helpオプションで確認してください。)
export OTEL_EXPORTER_OTLP_ENDPOINT="otlp.mackerelio.com:4317" export OTEL_EXPORTER_OTLP_HEADERS="Mackerel-Api-Key=***your_api_key***"
その後、以下のようなコマンドを実行すると、上記で設定した宛先にOTLPでメトリックが投稿されます。
- メトリック名: awesome.metric
- メトリック種類: Gauge
- データポイント属性: hoge="poyo"・fuga="1"
- データポイント値: 123.45
- データポイント時刻: 現在
otlc metrics post --name awesome.metric --attrs hoge=poyo,fuga=1 123.45
ちょっとしたメトリックを継続的に投稿する時や検証の際に、SDKを使ったプログラムを書かなくてもコマンドラインでシュッと投稿できて便利です。
どうぞご利用ください。
v0.1.xとの差異
駆け出しなので結構破壊的な変更をしました。今後は仕様を安定させるつもりです。早くv1に上げたいのでフィードバックお待ちしています。
設定ファイルの廃止とOTel Exporterの標準的な環境変数の読み取りに対応
v0.1.xでは投稿先を設定する際にYAMLの設定ファイルを書くのが標準のやり方だったのですが、これを廃止しました。代わりに、同様の情報をコマンドラインオプションで指定できる他、OTLP Exporter onfigurationで定義された名前での環境変数の読み取りに対応しました。
--valueオプションの廃止
メトリックの値を指定する際に--valueオプションを利用していましたが、これをやめて単に引数としました。
--timestampオプションの追加
--timestampオプションでメトリックの時刻をUNIX秒で指定できるようになりました。
otlc metrics post --name awesome.metric --attrs hoge=poyo,fuga=1 --timestamp 1719276600 123.45
過去の時刻で投稿したため、先ほどのグラフが点から線になりました。
投稿時に異常終了するように
メトリックが投稿できない場合、これまではエラー内容がログに出力されるだけでしたが、コマンドとして異常終了するようになりました。
$ otlc metrics post --name awesome.metric --attrs hoge=poyo,fuga=1 123.45 otlc: error: failed to upload metrics: rpc error: code = PermissionDenied desc = authenticate error, please check mackerel-api-key $ echo $? 1
実装の変化
元々はアプリケーションを計装する際に用いるOpenTelemetry SDK GoのMeterとInstrumentを使って実装していました。Instrumentでメトリックを生成したのちにMeterProviderをすぐにシャットダウンすることで即時に投稿することを期待した、という形です。
前回のブログで
より低いレイヤーのメソッドを利用して組み立てるとより自由なコマンドラインツールに仕上げられるかもしれません。
と書いた通り、MeterやInstrumentに頼る実装を改め、メトリックデータを直接生成してエクスポートするようにしました。
メトリックの時刻が指定できるようになったり、投稿失敗時に異常終了するようになったりしたのはこの置き換えによるものです。