OpenTelemetry コレクターのレシーバーとして Host Metrics Receiver を使用することで、Collector 自身をエージェントとしてホストのメトリックを収集できます。これは、Mackerel で従来の mackerel-agent を使用してホストメトリックを収集する方法に相当します。
この記事では、Host Metrics Receiver を使用してホストメトリックを収集し、Mackerel に送信する方法をご紹介します。
- Host Metrics Receiver を使用する
- OpenTelemetry コレクターをカスタムビルドする
- OpenTelemetry コレクターを起動する
- Mackerel のカスタムダッシュボードでメトリックを確認する
- まとめ
- 「ラベル付きメトリック機能」ベータ版テストの参加者募集中
Host Metrics Receiver を使用する
OpenTelemetry コレクターで Host Metrics Receiver を使用するには、以下のような設定ファイルを用意します。otel-collector-config.yaml
という名前で保存してください。
receivers: hostmetrics: scrapers: cpu: disk: filesystem: load: memory: network: paging: processors: batch: timeout: 1m exporters: otlp/mackerel: endpoint: otlp.mackerelio.com:4317 compression: gzip headers: Mackerel-Api-Key: ${env:MACKEREL_APIKEY} service: pipelines: metrics: receivers: [hostmetrics] processors: [batch] exporters: [otlp/mackerel]
receivers
として hostmetrics
を設定しています。Host Metrics Receiver は、 scrapers
オプションとして以下の値を設定できます。
- cpu:CPU の使用率
- disk:ディスク I/O
- load:CPU ロードアベレージ
- filesystem:ファイルシステムの使用量
- memory:メモリの使用量
- network:ネットワーク I/O と TCP コネクション
- paging:ページング/スワップの使用量
- processes:プロセスカウント
- process:プロセスの CPU 使用率とメモリ使用量
scrapers
の配下のオプションで指定したキーが収集されるメトリックの種類になります。この例では、cpu
、disk
、filesystem
、load
、memory
、network
、paging
のメトリックが収集されます。
なお、Host Metrics Receiver を使用する場合には Resource の項目を OpenTelemetry コレクターからは設定できません。Resource とは、アプリケーションが実行される環境の属性の集合のことです。サービスの名前や ID を Resource と指定することで、メトリックの属性にサービス名やサービス ID が含まれるようになります。これにより、どのアプリケーションから送信されたメトリックなのかを識別できます。
Host Metrics Receiver を使用して Resource を設定する場合には、環境変数を利用する必要があります。OpenTelemetry では Semantic Conversions として、どの環境変数をどのように解釈するかがあらかじめ定義されています。Resource の属性を定義する場合には、OTEL_RESOURCE_ATTRIBUTES
という環境変数を使用します。
export OTEL_RESOURCE_ATTRIBUTES=service.name=example-service,service.id=example-service-id
exporters
として otel/mackerel
を設定して、メトリックが Mackerel に送信されるための設定を行っています。エンドポイントは otlp.mackerelio.com:4317
で固定となります。headers/Mackerel-Api-Key
にはメトリックを送信したい Mackerel のオーガニゼーションの API キーを設定してください。この API キーには書き込み権限が必要です。
最後に、service
の pipelines
でホストメトリックを Mackerel に送信するパイプラインを構築します。これで OpenTelemetry コレクターの設定は完了です。
OpenTelemetry コレクターをカスタムビルドする
今回構築した OpenTelemetry コレクターの設定では、以下のコンポーネントを使用しています。
- Host Metrics Receiver
- Batch Processor
- OTLP Exporter
OpenTelemetry コレクターを起動する際には、これらのコンポーネントを含めたバイナリを用意する必要があります。opentelemetry-collector-contrib という公式のディストリビューションにはあらかじめ多くのコンポーネントが含まれています。そのため簡単な動作確認などの目的には便利なのですが、不要なコンポーネントが含まれるため本番環境で使用することは推奨されておりません。ここでは、必要なコンポーネントのみを含めたバイナリを作成する方法をご紹介します。
ビルダーをインストールする
まずは ocb(OpenTelemetry コレクターBuilder)というツールをインストールします。
go install go.opentelemetry.io/collector/cmd/builder@latest
インストールが正常に完了したか、以下のコマンドで確認してみましょう。
builder version ocb version dev
マニフェストファイルを作成する
マニフェストファイルはビルダーに対して、どのコンポーネントを含めるかを指定するためのファイルです。manifest.yaml
という名前で以下の内容を保存してください。
dist: name: otelcol-dev description: Basic OTel Collector distribution for Developers output_path: ./otelcol-dev otelcol_version: 0.84.0 exporters: - gomod: go.opentelemetry.io/collector/exporter/otlpexporter v0.84.0 processors: - gomod: go.opentelemetry.io/collector/processor/batchprocessor v0.84.0 receivers: - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.84.0
exporters
, processors
, receivers
には、それぞれビルダーに含めるコンポーネントを指定します。dist
には、ビルダーが生成するバイナリの名前やバージョンを指定します。ここでは、以下の 3 つのコンポーネントを指定しています。
- Host Metrics Receiver
- Batch Processor
- OTLP Exporter
ビルド
マニフェストファイルを作成したら、以下のコマンドでビルドを実行します。
builder --config=manifest.yaml
ビルドが成功した場合、otelcol-dev
というディレクトリが生成されます。
OpenTelemetry コレクターを起動する
ビルドが完了したら、OpenTelemetry コレクターを起動してみましょう。まずは先程設定した OpenTelemetry コレクターの設定ファイルを otelcol-dev
ディレクトリにコピーします。
cp otel-collector-config.yaml otelcol-dev
以下のコマンドで OpenTelemetry コレクターを起動します。
cd otelcol-dev go build ./otelcol-dev --config otel-collector-config.yaml
Mackerel のカスタムダッシュボードでメトリックを確認する
起動が完了したら、Mackerel のダッシュボードでホストメトリックが収集されていることを確認してみましょう。以下の URL からカスタムダッシュボードの作成画面に移動します。
https://mackerel.io/my/dashboards/-/new#period=30m
グラフウィジェットを選択して、「グラフのタイプ」で「クエリグラフ」を選択します。PromQL を記述するエディタが表示されるので、右上のメニューをクリックしてオーガニゼーションに投稿されているメトリックの一覧を表示します。
ここでは system.cpu.load_average.1m
を選択してみましょう。すると、以下のようにグラフが表示されます。
たしかに、ホストの CPU ロードアベレージが表示されていますね。
まとめ
今回の内容をまとめます。
- Host Metrics Receiver を使用してホストメトリックを収集することができる
- OpenTelemetry コレクターをカスタムビルドすることで、必要なコンポーネントのみを含めたバイナリを生成できる
「ラベル付きメトリック機能」ベータ版テストの参加者募集中
現在、「ラベル付きメトリック機能」ベータ版テストの参加者を募集しています。下記のフォームよりベータ版テストへの参加お申し込みをいただけます。