コンテンツにスキップ

OpenObserve - ペタバイト規模 可観測性 プラットフォーム チートシート

OpenObserve - ペタバイト規模 可観測性 プラットフォーム チートシート

OpenObserve (O2) はログ、メトリクス、トレース用のオープンソース可観測性プラットフォームで、Rust で書かれている。その定義する設計選択は、データをオブジェクト ストレージ (S3、GCS、MinIO) に圧縮 Parquet として保存することである — Elasticsearch ベースのスタックより大幅に低いストレージコストの主張の基礎。それは単一バイナリとして出荷され、組み込み UI、OpenTelemetry をネイティブに話す、そして SQL でクエリ。

インストール

方法コマンド
バイナリGitHub Releases からダウンロードし、./openobserve を実行
Dockerdocker run -d -p 5080:5080 -e ZO_ROOT_USER_EMAIL=a@b.c -e ZO_ROOT_USER_PASSWORD=pass public.ecr.aws/zinclabs/openobserve:latest
KubernetesHelm チャート利用可能
UIhttp://localhost:5080
確認設定した root 認証情報でログイン

ストレージ モード

モード使用
ローカル ディスクシングル ノード、dev/小規模デプロイ
S3 / GCS / Azure Blob本番、安い長期保持
MinIO自己ホスト オブジェクト ストレージ
# 本番ストレージのため S3 をポイント
export ZO_LOCAL_MODE=false
export ZO_S3_BUCKET_NAME=my-o2-bucket
export ZO_S3_REGION_NAME=us-east-1

データの取り込み

ソース方法
OpenTelemetryOTLP を/api/{org}/v1/traces/v1/logs/v1/metrics に送信
HTTP JSONPOST /api/{org}/{stream}/_json
Fluent Bit / VectorO2 HTTP エンドポイント への出力プラグイン
Prometheus リモート書き込み/api/{org}/prometheus/api/v1/write
SyslogTCP/UDP リスナー
# JSON ログをバルク取り込み
curl -u "$USER:$PASS" -X POST \
  "http://localhost:5080/api/default/app_logs/_json" \
  -H "Content-Type: application/json" \
  -d '[{"level":"error","message":"db timeout","service":"api"}]'

クエリ (SQL)

-- 1 つのサービスの最近のエラーを見つけ
SELECT * FROM app_logs
WHERE level = 'error' AND service = 'api'
ORDER BY _timestamp DESC
LIMIT 100;

-- 時間以上の サービス別エラー数
SELECT service, count(*) AS errors
FROM app_logs
WHERE level = 'error'
GROUP BY service
ORDER BY errors DESC;
機能注記
SQL クエリログ ストリーム 上の親しみやすい シンタックス
フルテキスト検索match_all(''timeout'')
時間範囲UI で選択されるか、_timestamp フィルター経由
保存されたサーチ再利用可能なクエリ

コア コンセプト

用語意味
組織トップレベル テナント
ストリーム名前付きデータ ストリーム (インデックスのような)
スキーマ取り込まれたデータから推定
関数取り込みまたはクエリ時に適用される VRL トランスフォーム
アラートスケジュール クエリ + 宛先

アラートとダッシュボード

機能方法
スケジュール アラートクエリ + しきい値 + 評価間隔
リアルタイム アラート一致する取り込まれたレコードでトリガー
宛先Webhook、Slack、メール、PagerDuty
ダッシュボードSQL クエリからパネルを構築
テンプレート再利用可能なアラート メッセージ形式

取り込み時関数 (VRL)

# 取り込み時にフィールドをマスクし、新しいフィールドを導き出す
.email = "REDACTED"
.status_class = floor(.status / 100)

関数により、PII をスクラブしたり、ストレージ前にレコードをエンリッチ — ストレージ後に行うより安い。

OpenObserve vs 選択肢

側面OpenObserveElasticsearch/ELKGrafana Loki
ストレージオブジェクト ストレージ (Parquet)ローカル ディスク インデックスオブジェクト ストレージ (チャンク)
コスト プロファイル非常に低い高い低い
クエリSQLクエリ DSL / KQLLogQL
スコープログ + メトリクス + トレースログ (+ APM)ログ (Grafana スタック用の残り)
セットアップシングル バイナリマルチ コンポーネントマルチ コンポーネント

インストルメンテーション用OpenTelemetryと組み合わせ;Grafana LokiおよびElasticsearchと比較。

リソース