Pipeline API
共通仕様
認証、エラー形式、レート制限、共通ヘッダーは API 概要・認証 を参照してください。
Pipeline(ログ取り込み定義)の管理を行う API です。 Pipeline は取り込み先と、検索時に適用するパースルールを定義します。
Pipeline 一覧取得
レスポンス例:
[
{
"id": "pipe-001",
"name": "firewall_logs",
"is_active": true,
"druid_parse": "^(\\d+\\.\\d+\\.\\d+\\.\\d+) - - \\[([^\\]]+)\\] \"(\\w+) ([^ ]+) HTTP/[\\d.]+\" (\\d+) (\\d+)$",
"druid_parse_field": "client_ip, __time, http_method, request_path, status_code, bytes_sent",
"druid_ttl": 90,
"created_at": "2025-01-01T00:00:00Z",
"updated_at": "2025-01-15T10:30:00Z"
}
]
Pipeline 作成
リクエストボディ:
{
"name": "web_access_logs",
"druid_parse": "^(\\d+\\.\\d+\\.\\d+\\.\\d+) - - \\[([^\\]]+)\\] \"(\\w+) ([^ ]+) HTTP/[\\d.]+\" (\\d+) (\\d+)$",
"druid_parse_field": "client_ip, __time, http_method, request_path, status_code, bytes_sent",
"druid_ttl": 90,
"is_active": true
}
フィールド説明:
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
name |
string | Yes | Pipeline 名(組織内で一意。英数字とハイフン推奨) |
druid_parse |
string | No | 正規表現パターン(キャプチャグループ使用) |
druid_parse_field |
string | No | カンマ区切りのフィールド名リスト(name(Type) で型指定可) |
druid_ttl |
integer | No | データ保持期間(日数、0 = 無制限) |
is_active |
boolean | No | 有効/無効 |
パースルールの仕組み
druid_parse と druid_parse_field は別々のフィールドとして保存されます。
正規表現のキャプチャグループとフィールド名は出現位置(順番)で対応付けされます。
抽出は取り込み時ではなく検索(クエリ)時に行われます(schema-on-read)。
生ログは messages 列にそのまま保持され、検索時に指定のパースルールでフィールドが取り出されます。
詳細は Pipeline ユーザーガイド を参照してください。
JSON ログの場合
druid_parse を空(省略)にすると JSON モードで動作します。
このとき messages 列の内容を JSON とみなし、検索時に JSON からフィールドを抽出します。
druid_parse に正規表現を指定した場合は正規表現モードになります。
Pipeline 詳細取得
レスポンス例:
{
"id": "pipe-001",
"name": "firewall_logs",
"is_active": true,
"druid_parse": "^(\\S+) (\\S+) (.*)$",
"druid_parse_field": "timestamp, level, message",
"druid_ttl": 90,
"created_at": "2025-01-01T00:00:00Z",
"updated_at": "2025-01-15T10:30:00Z"
}
Pipeline 更新
リクエストボディ:
{
"druid_parse": "^(\\w+ \\d+ \\d+:\\d+:\\d+) (\\S+) (\\S+): (.*)$",
"druid_parse_field": "__time, hostname, process, message",
"druid_ttl": 180
}
Pipeline 削除
パースルール生成
サンプルログから生成 AI がパースルール(正規表現とフィールド名)の案を生成します。 生成された案はユーザーが確認・調整してから適用します。 自動では適用されません。
リクエストボディ:
{
"sample_log": "192.168.1.100 - - [15/Jan/2025:10:30:00 +0900] \"GET /api/users HTTP/1.1\" 200 1234"
}
レスポンス例:
{
"druid_parse": "^(\\d+\\.\\d+\\.\\d+\\.\\d+) - - \\[([^\\]]+)\\] \"(\\w+) ([^ ]+) HTTP/[\\d.]+\" (\\d+) (\\d+)$",
"druid_parse_field": "client_ip, __time, http_method, request_path, status_code, bytes_sent"
}
生成の流れ
- サンプルログを生成 AI(大規模言語モデル)に送信する。
- Grok パターン(
%{IPV4:client_ip}形式)が生成される。 - Grok パターンを正規表現とフィールド名リストに変換する。
- フィールド名は ECS スキーマに正規化し、結果を
druid_parseとdruid_parse_fieldとして返す。 - 生成結果はユーザーが確認・調整してから適用する。自動適用ではない。
生成 AI はマネージド生成 AI 基盤を経由して呼び出します。 モデルは更新され得るため、特定のモデル ID やバージョンは固定しません。 パース生成の経路は、AI Investigate などのアシスタント機能とは別系統です。
Pipeline 共有
共有の作成
リクエストボディ:
共有の解除
共有リスト
アクセス可能なケースドメイン
パースルールの書式
基本形式
標準的なキャプチャグループ (...) を使用して正規表現パターンを記述します。フィールド名はカンマ区切りで別途指定します。
druid_parse(正規表現):
druid_parse_field(フィールド名):
この場合、以下のように対応します:
| キャプチャグループ | フィールド名 |
|---|---|
1 番目の (\S+) |
timestamp |
2 番目の (\S+) |
level |
3 番目の (.*) |
message |
注意
- Python スタイルの名前付きキャプチャグループ
(?P<name>...)は使用しません - キャプチャグループの数とフィールド名の数は一致させてください
- 不要な部分は非キャプチャグループ
(?:...)を使用してください
フィールドの型指定
druid_parse_field の各フィールド名には 名前(型) の形式で型を併記できます。
型を指定すると検索時にその型で抽出され、数値比較や集計、日時比較などを変換関数なしで行えます。
抽出は検索時に行われる(schema-on-read)ため、型を変更すると既存ログにも次回検索から適用されます。
| 表記 | 抽出される型 |
|---|---|
dst_port(型なし) |
文字列(既定)。dst_port == "22" のように文字列で比較 |
dst_port(Int32) |
整数。dst_port == 22 のように数値で比較 |
bytes(Int64) |
整数。sum bytes などの集計が可能 |
指定できる主な型は次のとおりです(大文字小文字を区別)。
String(既定), Int8 / Int16 / Int32 / Int64, UInt8 / UInt16 / UInt32 / UInt64, Float32 / Float64, Bool, Date, DateTime
型指定は両モードで有効
型指定は正規表現モードと JSON モードのどちらでも有効です。
JSON モードでは _source.MsgNum(Int64) のようにドット区切りのネストしたキーにも指定できます。
値が型に合わない行は、そのフィールドが空(NULL)になります。
__time フィールド
__time が指定されていない場合は、システムが自動的にタイムスタンプを推定し、日時型の __time として扱います。
原則として __time は druid_parse_field に含めない
druid_parse_field に __time を含めると、抽出された値は文字列型として保存されます。
この場合、検索画面の既定の時間範囲フィルタ(日時型との比較)で型エラーになります。
タイムスタンプはキャプチャせず(例: 先頭を ^\S+ とする)、自動推定に任せることを推奨します。
パースルール例
druid_parse:
druid_parse_field:
druid_parse:
druid_parse_field: