Vectorをコンテナで動かしてhost metricsを取得しようとした話
メトリクス取得の対象マシン上にVectorを直接インストールするのではなく、コンテナとして動かしてみました。
その過程でつまづいた点を簡単にご紹介します。
Vectorとは?
Vector は、Rust製の軽量かつ高速なオブザーバビリティパイプライン構築ツールです。ログやメトリクスといったシステム情報を収集、変換、そして転送する機能を提供します。Prometheus形式でのエクスポートや、各種ストレージへの転送も可能です。
他の軽量エージェントと比較して、データ変換の自由度が高い点が特徴で、複雑なパイプライン構築にも適しています。
Datadog社が開発元のOSSですが、Datadogに限らず、Elastic, Prometheus, Lokiといった他の観測基盤と組み合わせて使うこともできます。
現時点では成熟度でやや劣るものの、開発は活発であり、今後の発展が期待されるツールです。
サンプル設定
sources:
host_metrics:
type: host_metrics
collectors: ["process"]
scrape_interval_secs: 15
process:
processes:
includes: ["node"]
sinks:
prometheus_exporter:
type: prometheus_exporter
address: "0.0.0.0:9598"
inputs: ["host_metrics"]
| プロパティ | 意味 |
|---|---|
type |
データ源の種類。host_metricsはシステムリソースからデータを取得 |
collectors |
取得するメトリクス種類。processはプロセス関連のメトリクス |
scrape_interval_secs |
取得間隔(秒) |
process.processes.includes |
監視対象のプロセス名を限定する(glob形式) |
つまり、process関連のメトリクスを、nodeという名前のプロセスに限定して取得する設定です。
コンテナ上でホスト側のprocessメトリクスを取得する際の注意点
Vectorに限った話ではありませんが、コンテナ内でエージェントを動かすと、PID名前空間を共有しなければホスト側のプロセス情報を取得できません。
Dockerでは--pid=hostを指定します。
docker run --rm \
--pid=host \
-v ./vector.yaml:/etc/vector/vector.yaml \
-p 9598:9598 \
timberio/vector:latest-alpine
Docker Composeではpid: hostを指定します。
services:
vector:
image: timberio/vector:latest-alpine
pid: host
ports:
- "9598:9598"
volumes:
- ./vector.yaml:/etc/vector/vector.yaml
host_process_cpu_usage を取得するには v0.46 以降が必要
host_process_cpu_usageは、プロセスごとのCPU使用率を表すメトリクスです。
2025年4月3日現在の最新版であるv0.45では、host_process_cpu_usageの値が0になってしまうようでした(コンテナでも、普通にインストールしても同じ)。
プロセス名フィルタはglob形式
-
process/processes/includesは glob(ワイルドカード)形式です(正規表現ではありません)-
nodeのように書けば、完全一致するプロセスのデータのみを取得 -
vm*ならvmagent,vmselectなどのプロセス名にマッチ
-
よく見ると、公式ドキュメントにも書いてはあるのですが・・。
雑感
本格導入にはまだ検証の余地はありますが、Vectorの柔軟さと軽量さは魅力的だと思います。
ちょっとした監視やPoC用途から、じわじわ使っていくにはちょうど良いかもしれません。
Discussion