victorialogs-query について
victorialogs-queryは、curlでVictoriaLogsのHTTP APIを照会するスキルです。ログ検索、統計クエリ、フィールドやストリームの検出、ログ量分析、ファセットに対応します。
主な機能
- 01LogsQLによるログ検索
- 02瞬時・範囲統計クエリの実行
- 03期間ごとのログ量分析
- 04フィールド、ストリーム、値の検出
- 05フィールドの分布確認
活用シーン
- 01指定した名前空間と期間のエラー検索
- 02期間ごとのエラー件数の集計
- 03該当ログに含まれるフィールド値の探索
- 04クエリに関連するストリームの特定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ victoriametrics/ skills --skill victorialogs-queryインストール後、Claude Code で/victorialogs-queryを入力して読み込まれたか確認します。
同梱ファイルreferences/api-reference.md
詳細
VictoriaLogs のクエリ
curl を介して VictoriaLogs HTTP API に直接クエリを送信します。ログ検索、統計クエリ、フィールド/ストリームの検出、ヒット分析、ファセットを扱います。
環境
# $VM_LOGS_URL - base URL
# Example: export VM_LOGS_URL="https://vlselect.example.com"
# $VM_CURL_CONFIG - curl config file with auth header (set for remote, unset for local)
# Remote: export VM_CURL_CONFIG="$HOME/.config/victoriametrics/curl.conf"
# Local: leave unset (defaults to /dev/null - no auth)
認証パターン
すべての curl コマンドは、curl 設定ファイルから認証情報を読み込みます。
curl -q --config "${VM_CURL_CONFIG:-/dev/null}" -s \
"$VM_LOGS_URL/select/logsql/query?query=*&start=2026-03-07T00:00:00Z&limit=10"
VM_CURL_CONFIG が設定されていない場合、curl は /dev/null を読み込み、認証ヘッダーを送信しません。設定されている場合は、header = "Authorization: Bearer <token>" を含むモード 0600 の curl 設定ファイルを指定する必要があります。内容を表示しないでください。
重要なルール
- すべての VictoriaLogs エンドポイントでは、必ず
startを指定してください。省略すると、保存されているすべてのデータがスキャンされ、非常に高いコストがかかります。API 上は必須ではありませんが、省略するのが望ましいケースはほとんどありません。 stats_queryではtimeを使用します(必ず明示的に指定し、デフォルト値に依存しないでください)。stats_query_rangeではstart/end/stepを使用します。hitsエンドポイントではstepが必須です。/select/logsql/queryは JSON Lines(1 行に JSON オブジェクト 1 つ)を返します。JSON 配列ではありません。- 特殊文字を含む LogsQL クエリは URL エンコードする必要があります(POST には
--data-urlencodeを使用してください)。 stats_queryとstats_query_rangeのクエリには、必ず| statsパイプを含めてください。
主なエンドポイント
ログクエリ
# Basic query (last hour, limit 100)
curl -q --config "${VM_CURL_CONFIG:-/dev/null}" -s \
--data-urlencode 'query={namespace="myapp"} error' \
"$VM_LOGS_URL/select/logsql/query?start=2026-03-07T00:00:00Z&limit=100"
# With time range and field selection
curl -q --config "${VM_CURL_CONFIG:-/dev/null}" -s \
--data-urlencode 'query={namespace="myapp"} error' \
"$VM_LOGS_URL/select/logsql/query?start=2026-03-07T00:00:00Z&end=2026-03-07T12:00:00Z&limit=50&fields=_time,_msg,level"
パラメーター:query(必須)、start(必須、RFC3339)、end、limit、offset、fields(カンマ区切り)、timeout
レスポンス:JSON Lines(1 行に JSON オブジェクト 1 つ)。jq -s . に渡して配列にまとめるか、1 行ずつ処理してください。
統計クエリ(インスタント)
# Count errors by level at a point in time
curl -q --config "${VM_CURL_CONFIG:-/dev/null}" -s \
--data-urlencode 'query={namespace="myapp"} | stats by (level) count() as total' \
"$VM_LOGS_URL/select/logsql/stats_query?time=2026-03-07T09:00:00Z" | jq .
パラメーター:query(必須、| stats パイプを含める必要があります)、time(必須、RFC3339)、start(任意、time の代替)。
レスポンス:Prometheus 互換の JSON 形式。
統計クエリ範囲
# Error count over time with 1h steps
curl -q --config "${VM_CURL_CONFIG:-/dev/null}" -s \
--data-urlencode 'query={namespace="myapp"} error | stats count() as total' \
"$VM_LOGS_URL/select/logsql/stats_query_range?start=2026-03-07T00:00:00Z&end=2026-03-07T12:00:00Z&step=1h" | jq .
パラメーター:query(必須、| stats パイプを含める必要があります)、start(必須)、end、step(例:1h、5m)
レスポンス:Prometheus のマトリックス形式。
ヒット数(ログ量)
# Log volume over time
curl -q --config "${VM_CURL_CONFIG:-/dev/null}" -s \
--data-urlencode 'query={namespace="myapp"}' \
"$VM_LOGS_URL/select/logsql/hits?start=2026-03-07T00:00:00Z&end=2026-03-07T12:00:00Z&step=1h" | jq .
パラメーター:query(必須)、start(必須)、end、step(必須)、field(任意、フィールドでグループ化)
ファセット(最適な検出ツール)
# Discover field value distributions
curl -q --config "${VM_CURL_CONFIG:-/dev/null}" -s \
--data-urlencode 'query={namespace="myapp"}' \
"$VM_LOGS_URL/select/logsql/facets?start=2026-03-07T00:00:00Z&end=2026-03-07T12:00:00Z" | jq .
パラメーター:query(必須)、start(必須)、end。1 回の呼び出しで、すべてのフィールドの最頻値を返します。
検出エンドポイント
フィールド名と値
# Discover non-stream field names
curl -q --config "${VM_CURL_CONFIG:-/dev/null}" -s \
--data-urlencode 'query={namespace="myapp"}' \
"$VM_LOGS_URL/select/logsql/field_names?start=2026-03-07T00:00:00Z" | jq .
# Get values for a specific field
curl -q --config "${VM_CURL_CONFIG:-/dev/null}" -s \
--data-urlencode 'query={namespace="myapp"}' \
"$VM_LOGS_URL/select/logsql/field_values?start=2026-03-07T00:00:00Z&field=level&limit=20" | jq .
ストリームフィールド
# Discover stream field names (e.g., namespace, pod)
curl -q --config "${VM_CURL_CONFIG:-/dev/null}" -s \
--data-urlencode 'query=*' \
"$VM_LOGS_URL/select/logsql/stream_field_names?start=2026-03-07T00:00:00Z" | jq .
# Get values for a stream field
curl -q --config "${VM_CURL_CONFIG:-/dev/null}" -s \
--data-urlencode 'query=*' \
"$VM_LOGS_URL/select/logsql/stream_field_values?start=2026-03-07T00:00:00Z&field=namespace" | jq .
ストリームとストリーム ID
# List log stream identifiers
curl -q --config "${VM_CURL_CONFIG:-/dev/null}" -s \
--data-urlencode 'query={namespace="myapp"}' \
"$VM_LOGS_URL/select/logsql/streams?start=2026-03-07T00:00:00Z&limit=20" | jq .
# List stream IDs
curl -q --config "${VM_CURL_CONFIG:-/dev/null}" -s \
--data-urlencode 'query={namespace="myapp"}' \
"$VM_LOGS_URL/select/logsql/stream_ids?start=2026-03-07T00:00:00Z" | jq .
LogsQL クイックリファレンス
LogsQL はスペース区切りで、デフォルトでは AND 条件です。パイプには | を使います。
# Stream filter (fast, use for namespace/pod selection)
{namespace="myapp"}
# Word filter (matches full words in _msg)
{namespace="myapp"} error
# Multiple words (AND)
{namespace="myapp"} error timeout
# OR filter
{namespace="myapp"} (error OR warning)
# Regex filter on _msg
{namespace="myapp"} ~"err|warn"
# Case-insensitive regex
{namespace="myapp"} ~"(?i)error"
# Field-specific filter
{namespace="myapp"} level:error
# Time filter (alternative to API start/end params)
{namespace="myapp"} _time:1h error
# Negation
{namespace="myapp"} error -"expected error"
# Stats pipe
{namespace="myapp"} _time:1h | stats by (level) count() as total
# Sort pipe
{namespace="myapp"} error | sort by (_time)
# Top pipe
{namespace="myapp"} _time:1h | top 10 (level)
よくある間違い:
| grepは存在しません。単語フィルターまたは~"regex"を使用してください。| filterは有効なパイプですが、集計結果をフィルタリングする場合に限り、| statsの後で使用できます。- 時間範囲は API の
start/endパラメーターまたは_time:フィルターのどちらかに指定し、両方には指定しないでください。 - ストリームフィールド名は取り込み設定によって異なります。必ず最初に検出してください。
vmselectをフィルタリングせずに「error」を検索すると、vmselect のログに「error」を含む PromQL テキストがあるため、-"vm_slow_query_stats"を追加して除外してください。
タイムスタンプ形式
時刻はすべて RFC3339 形式(2026-03-07T09:00:00Z)を使用します。VictoriaLogs は Unix タイムスタンプをサポートしていません。
レスポンスの解析(jq)
# Collect JSON Lines into array
... | jq -s .
# Extract message and timestamp from query results
... | jq -s '.[] | {time: ._time, msg: ._msg}'
# Count results from JSON Lines
... | jq -s 'length'
# Extract specific fields
... | jq -s '.[] | {time: ._time, level: .level, msg: ._msg}'
# Stats query — extract metric values
... | jq '.data.result[] | {metric: .metric, value: .value[1]}'
# Stats range query — extract time series
... | jq '.data.result[] | {metric: .metric, values: .values}'
# Facets — list fields and top values
... | jq '.[] | {field: .name, values: [.values[] | .value]}'
よく使うパターン
# Quick error check for a namespace (last hour)
curl -q --config "${VM_CURL_CONFIG:-/dev/null}" -s \
--data-urlencode 'query={namespace="myapp"} error' \
"$VM_LOGS_URL/select/logsql/query?start=$(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%SZ)&limit=20"
# Error rate over time
curl -q --config "${VM_CURL_CONFIG:-/dev/null}" -s \
--data-urlencode 'query={namespace="myapp"} error | stats count() as errors' \
"$VM_LOGS_URL/select/logsql/stats_query_range?start=2026-03-07T00:00:00Z&step=1h" | jq .
# Discover all namespaces with logs
curl -q --config "${VM_CURL_CONFIG:-/dev/null}" -s \
--data-urlencode 'query=*' \
"$VM_LOGS_URL/select/logsql/stream_field_values?start=2026-03-07T00:00:00Z&field=namespace" | jq .
# Search by trace ID in logs
curl -q --config "${VM_CURL_CONFIG:-/dev/null}" -s \
--data-urlencode 'query=trace_id:"abc123def456"' \
"$VM_LOGS_URL/select/logsql/query?start=2026-03-07T00:00:00Z&limit=50"
環境の切り替え
# Check current environment
echo "VM_LOGS_URL: $VM_LOGS_URL"
echo "VM_CURL_CONFIG: ${VM_CURL_CONFIG:-(unset - no auth)}"
重要な注意事項
- 特殊文字を含むクエリには POST が推奨されます。URL エンコードの問題を避けるため、
--data-urlencodeを使用してください。 - すべてのエンドポイントは、
application/x-www-form-urlencodedを使った GET と POST の両方を受け付けます。 field_valuesとstream_field_valuesエンドポイントでは、fieldパラメーターが必須です。facetsは単一呼び出しでの検出に最適なツールで、すべてのフィールドの分布を一度に返します。stats_query(インスタント、timeを使用)とstats_query_range(範囲、start/end/stepを使用)を混同しないでください。- エンドポイントの詳細、パラメーター、レスポンス形式については、
references/api-reference.mdを参照してください。