Mackerel チームで Web アプリケーションエンジニアをやっている inommm です。
この記事は Mackerel Advent Calendar 2023 12/13 の記事になります。
Mackerel では現在 OpenTelemetry の対応を進めており、 OpenTelemetry Protocol をサポートした「ラベル付きメトリック機能」はオープンベータテスト中です。 この記事では OpenTelemetry Collector で PostgreSQL のメトリックを収集し、Mackerel で閲覧できるようにする手順を紹介します。
Collector の準備をする
OpenTelemetry Collector を使って、メトリックの収集と送信を行えるようにしていきます。 今回は PostgreSQL のメトリックを収集するための PostgreSQL Receiver と、収集したメトリックを Mackerel に送信するための OTLP gRPC Exporter を使用するための設定をしていきます。
Collector の設定
Collector の設定を記述する YAML ファイルを作成します。
vim config.yaml
receivers: postgresql: endpoint: 192.0.2.254:5432 transport: tcp username: example password: **** databases: - example collection_interval: 10s tls: insecure: true processors: batch: timeout: 1m exporters: otlp: endpoint: otlp.mackerelio.com:4317 compression: gzip headers: Mackerel-Api-Key: **** service: pipelines: metrics: receivers: [postgresql] processors: [batch] exporters: [otlp]
receivers
の部分で PostgreSQL に接続するための設定を書いていきます。
PostgreSQL Receiver は DB 接続時もTLS がデフォルトで有効になっているようでした。手元で動かしている PostgreSQL では TLS が無効になっているので、insecure: true
を設定する必要がありました。
exporters
の部分では Mackerel のエンドポイントと API キーの設定をしておきました。
Collector の起動
作成した設定ファイルを指定しつつ、Docker で collector を起動します。
イメージには PostgreSQL Receiver も含まれている otel/opentelemetry-collector-contrib
を使用しました。
docker run -v $(pwd)/config.yaml:/etc/otelcol-contrib/config.yaml otel/opentelemetry-collector-contrib:latest
こちらが起動している様子です。しばらく動かしてみて、エラーがないか確認します。
2023-12-12T23:08:16.825Z info service/telemetry.go:90 Setting up own telemetry... 2023-12-12T23:08:16.826Z info service/telemetry.go:116 Serving Prometheus metrics {"address": ":8888", "level": "Basic"} 2023-12-12T23:08:16.826Z info service/service.go:140 Starting otelcol-contrib... {"Version": "0.72.0", "NumCPU": 2} 2023-12-12T23:08:16.827Z info extensions/extensions.go:41 Starting extensions... 2023-12-12T23:08:16.827Z info service/service.go:157 Everything is ready. Begin running and processing data.
問題がなければ mackerel 側で送信されたメトリックを確認してみましょう。
Mackerel で収集したメトリックの確認をする
検索ボックスに postgresql
と入力すると、メトリックの候補がでてきます。
メトリックを選択し、保存します。
グラフが作成され、指定したデータベースのテーブル毎の行数が確認できるようになりました。
最後に
思ったよりもサクッと動かすことができてしまいました。
ひとまず「手元で試しに動かしてみた。」という感じですが、自宅で稼働している様々なミドルウェア等にも仕込んでいこうかなと思っています。