👌

Vectorをコンテナで動かしてhost metricsを取得しようとした話

に公開

メトリクス取得の対象マシン上にVectorを直接インストールするのではなく、コンテナとして動かしてみました。
その過程でつまづいた点を簡単にご紹介します。

Vectorとは?

Vector は、Rust製の軽量かつ高速なオブザーバビリティパイプライン構築ツールです。ログやメトリクスといったシステム情報を収集、変換、そして転送する機能を提供します。Prometheus形式でのエクスポートや、各種ストレージへの転送も可能です。
他の軽量エージェントと比較して、データ変換の自由度が高い点が特徴で、複雑なパイプライン構築にも適しています。

Datadog社が開発元のOSSですが、Datadogに限らず、Elastic, Prometheus, Lokiといった他の観測基盤と組み合わせて使うこともできます。

現時点では成熟度でやや劣るものの、開発は活発であり、今後の発展が期待されるツールです。

サンプル設定

vector.yaml
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/includesglob(ワイルドカード)形式です(正規表現ではありません)
    • node のように書けば、完全一致するプロセスのデータのみを取得
    • vm* なら vmagent, vmselect などのプロセス名にマッチ

よく見ると、公式ドキュメントにも書いてはあるのですが・・。

雑感

本格導入にはまだ検証の余地はありますが、Vectorの柔軟さと軽量さは魅力的だと思います。
ちょっとした監視やPoC用途から、じわじわ使っていくにはちょうど良いかもしれません。

Discussion