Vector - 高性能 可観測性 データ パイプライン チートシート
Vector (Datadog、オープンソース) は Rust で書かれた高性能可観測性 データ パイプライン。ログ、メトリクス、トレースを任意のソースから収集し、トランスフォームを通じて変形し、任意のシンクに配信 — すべてベンダー非依存で、再インストルメント化なしでバックエンドを切り替えられる。通常、Logstash または Fluentd の CPU とメモリの一部を使用し、エージェントはすべてのノードで実行される場合、これは重要。
インストール
| 方法 | コマンド |
|---|
| インストール スクリプト | `curl —proto ‘=https’ —tlsv1.2 -sSf https://sh.vector.dev |
| Debian/Ubuntu | Vector リリースの.deb |
| macOS (Homebrew) | brew install vectordotdev/brew/vector |
| Docker | docker run -v $PWD/vector.yaml:/etc/vector/vector.yaml timberio/vector:latest-alpine |
| 確認 | vector --version |
モデル:ソース → トランスフォーム → シンク
# vector.yaml
sources:
app_logs:
type: file
include: ["/var/log/app/*.log"]
transforms:
parse:
type: remap
inputs: ["app_logs"]
source: |
. = parse_json!(.message)
.env = "production"
del(.password)
sinks:
out:
type: elasticsearch
inputs: ["parse"]
endpoints: ["http://es:9200"]
| ステージ | 目的 |
|---|
sources | データがどこから来るか |
transforms | 解析、フィルター、エンリッチ、マスク、集約 |
sinks | データがどこに行くか |
inputs | コンポーネントを DAG にワイヤ |
共通のソース
| ソース | 収集 |
|---|
file | ログ ファイル (テーリング) |
journald | systemd ジャーナル |
kubernetes_logs | k8s メタデータ付き Pod ログ |
docker_logs | コンテナ ログ |
http_server | プッシュ エンドポイント |
syslog | TCP/UDP Syslog |
prometheus_scrape | メトリクス エンドポイント をスクレイプ |
opentelemetry | OTLP 取り込み |
共通のシンク
| シンク | 送信先 |
|---|
elasticsearch | Elasticsearch/OpenSearch |
loki | Grafana Loki |
clickhouse | ClickHouse |
aws_s3 | S3 (アーカイブ) |
prometheus_exporter | スクレイプ用メトリクスを公開 |
datadog_logs / splunk_hec | ベンダー バックエンド |
console | stdout (デバッグ) |
blackhole | 破棄 (テスト) |
VRL (Vector Remap Language)
remap トランスフォームはほとんどの作業がされる場所。
# 解析、エンリッチ、マスク、ノイズを削除
. = parse_json!(.message)
.timestamp = parse_timestamp!(.ts, "%+")
.service = "checkout"
del(.credit_card)
if .level == "debug" { abort }
| VRL 関数 | 目的 |
|---|
parse_json!、parse_regex!、parse_grok! | 生テキストを構造化 |
del(.field) | フィールドを削除 (PII マスク) |
to_int!、to_float! | 型強制 |
abort | イベントをドロップ |
merge、flatten | オブジェクトを変形 |
便利なトランスフォーム
| トランスフォーム | 行うこと |
|---|
remap | VRL ベースの変形 (主力) |
filter | 条件に一致するイベントを保持 |
route | ストリームを名前付きブランチに分割 |
aggregate | 間隔以上のメトリクスをロール アップ |
throttle | うるさいイベントをレート制限 |
dedupe | 重複を削除 |
sample | イベントのパーセンテージを保持 |
Vector の操作
| コマンド | 説明 |
|---|
vector --config vector.yaml | コンフィギュレーション で実行 |
vector validate | デプロイ前にコンフィギュレーション をチェック |
vector test | コンフィギュレーション で定義されたユニット テストを実行 |
vector top | コンポーネント当たりのスループット のライブ TUI |
vector tap <component> | コンポーネント を通じて流れるイベントをストリーム |
--watch-config | コンフィギュレーション 変更時にホット リロード |
# トランスフォーム が実際に何を出力しているかをデバッグ
vector tap parse
信頼性
| 機能 | 注記 |
|---|
| ディスク バッファ | 再起動/バックプレッシャーを生き残る (buffer.type: disk) |
| 確認応答 | エンド ツー エンド配信保証 |
| 適応 同時実行性 | シンク リクエスト レートを自動調整 |
| ヘルス チェック | 到達不可能なシンク で高速フェイル |
Vector vs 代替
| 側面 | Vector | Fluent Bit | Logstash |
|---|
| 言語 | Rust | C | JRuby/JVM |
| リソース使用 | 非常に低い | 非常に低い | 高い |
| トランスフォーム言語 | VRL (豊か) | Lua/フィルター | Ruby/grok |
| データ タイプ | ログ、メトリクス、トレース | ログ、メトリクス | ログ |
| 最適用途 | ベンダー非依存パイプライン | ウルトラ ライト エッジ エージェント | レガシー ELK スタック |
OpenObserve、Loki、Elasticsearchのようなシンク をフィード;Fluentdと比較。
リソース