Quickwit - クラウド ネイティブ ログ検索エンジン チートシート
Quickwit はオープンソース、Rust ベースの検索エンジン、追加専用データ用に設計 — ログ、トレース、監査イベント — オブジェクト ストレージ (S3、GCS、Azure) で直接実行。Elasticsearch とは異なり、インデックス用のローカル ディスクまたはクラスター状態マシンは不要で、インデックスはそれらを S3 に不変スプリットとして存在するため、コンピュートをストレージから分離し、ペタバイト規模の保持を経済的にする。Elasticsearch 互換検索 API を公開し、トレース用のネイティブ Jaeger バックエンド。
インストール
| 方法 | コマンド |
|---|
| インストール スクリプト | `curl -L https://install.quickwit.io |
| Docker | docker run -p 7280:7280 quickwit/quickwit run |
| Kubernetes | Helm チャート利用可能 |
| ノードを開始 | ./quickwit run |
| UI / API | http://localhost:7280 |
コア コンセプト
| 用語 | 意味 |
|---|
| インデックス | ドキュメント マッピング を持つ名前付きデータセット |
| スプリット | オブジェクト ストレージに保存された不変インデックス シャード |
| メタストア | インデックス/スプリット を追跡 (ファイルまたは PostgreSQL) |
| ソース | ドキュメントの出処 (Kafka、ファイル、取り込み API) |
| ノード ロール | インデクサー、サーチャー、メタストア、コントロール プレーン |
インデックスを作成
# index-config.yaml
version: 0.8
index_id: app-logs
doc_mapping:
field_mappings:
- name: timestamp
type: datetime
fast: true
input_formats: [rfc3339, unix_timestamp]
- name: level
type: text
tokenizer: raw
- name: service
type: text
tokenizer: raw
- name: message
type: text
tokenizer: default
timestamp_field: timestamp
indexing_settings:
commit_timeout_secs: 30
search_settings:
default_search_fields: [message]
quickwit index create --index-config index-config.yaml
データを取り込み
| 方法 | コマンド |
|---|
| ファイル | quickwit index ingest --index app-logs --input-path logs.json |
| 標準入力 | `cat logs.json |
| 取り込み API | POST /api/v1/app-logs/ingest |
| Kafka ソース | インデックス コンフィギュレーション でソースを定義 |
| OTLP | ログ/トレース用のネイティブ OpenTelemetry エンドポイント |
curl -XPOST "http://localhost:7280/api/v1/app-logs/ingest" \
--data-binary @logs.ndjson
検索
# CLI 検索
quickwit index search --index app-logs --query "level:ERROR AND service:api"
# REST 検索
curl "http://localhost:7280/api/v1/app-logs/search?query=level:ERROR&max_hits=20"
| クエリ シンタックス | マッチ |
|---|
term | デフォルト フィールド でのフルテキスト用語 |
field:value | 正確なフィールド マッチ |
a AND b、a OR b、NOT a | ブール ロジック |
field:[10 TO 100] | 範囲 |
"exact phrase" | フレーズ マッチ |
field:prefix* | プリフィックス マッチ |
集約と時間フィルター
# 時間境界検索 (高速タイムスタンプ フィールドを使用)
curl "http://localhost:7280/api/v1/app-logs/search?query=*&start_timestamp=1753400000&end_timestamp=1753486400"
Quickwit は Elasticsearch スタイル集約をサポートするため、既存のダッシュボードとクエリは大きな変更なしでしばしば移植される。
インデックスを管理
| コマンド | 説明 |
|---|
quickwit index list | インデックスをリスト表示 |
quickwit index describe --index X | 統計/スプリット を表示 |
quickwit index clear --index X | すべてのドキュメント を削除 |
quickwit index delete --index X | インデックスを削除 |
quickwit split list --index X | スプリット を検査 |
保持
retention:
period: 90 days
schedule: daily
スプリット はオブジェクト ストレージに存在するため、保持は単に古いスプリット を削除すること — 安く、高速。
統合
| ターゲット | 注記 |
|---|
| Jaeger | Quickwit はネイティブ Jaeger ストレージ バックエンド |
| Grafana | ダッシュボード用データ ソース プラグイン |
| OpenTelemetry | ログとトレース用のネイティブ OTLP 取り込み |
| Elasticsearch API | 互換検索エンドポイント マイグレーション を容易に |
Quickwit vs 代替
| 側面 | Quickwit | Elasticsearch | Loki |
|---|
| ストレージ | オブジェクト ストレージのみ | ローカル ディスク | オブジェクト ストレージ |
| フルテキスト インデックス | はい (真の検索) | はい | ラベルベース、限定的 |
| 規模でのコスト | 非常に低い | 高い | 低い |
| トレース | ネイティブ Jaeger バックエンド | APM アドオン | Tempo 経由 |
| 最適用途 | 安い検索可能なログ/トレース保持 | 一般検索 | Grafana ネイティブ ログ |
LokiおよびOpenObserveと比較;取り込み用にVectorと組み合わせ。
リソース