ログを検索するには、次の形式を使用します。
logtype='logtype_name' and conditions
各要素は次のとおりです。
logtype:検索するログの種類を指定します。
logtype_name:access、execute、application、scheduleなど、ログの種類の表示名です。
conditions:一致するログを絞り込むために使用する追加条件です。
例。
logtype='access' and request_uri contains '/api'
このクエリーは、要求URIに/apiを含むアクセスログを返します。
クエリー言語では、ログを絞り込むための論理演算子、数値演算子、文字列演算子、nullチェック演算子を使用できます。
|
演算子 |
説明 |
|
and |
一致する必要がある別の条件を追加します。 |
|
or |
代替条件を追加します。 |
|
isEmpty |
選択した項目に値がないログを検索します。 |
|
isNotEmpty |
選択した項目に値があるログを検索します。 |
|
演算子 |
説明 |
|
> |
より大きい |
|
< |
より小さい |
|
= |
等しい |
|
>= |
以上 |
|
<= |
以下 |
例。
logtype='access' and time_taken > 5000
要求の処理時間が5,000ミリ秒を超えるログを返します。
|
演算子 |
説明 |
|
= |
完全一致 |
|
!= |
一致しない |
|
contains |
指定したテキストを含みます。 |
例:
logtype='application' and message contains 'timeout'
単語「timeout」を含むアプリケーションログを返します。
集計演算子は、ログデータの集計と分析に使用します。
例として、次のものがあります。
count
count_distinct
sum
avg
groupby
histo
timeslice
詳細については、集計クエリーを参照してください。
クエリー言語では、主に次の2種類のクエリーがサポートされています。
ログ取得クエリー
集計クエリー
ログ取得クエリーは、特定の条件に一致するログの取得に使用します。
構文:
クエリーで時間に基づく値を指定する場合は、次の表記を使用します。
|
時間単位 |
表記 |
|
1秒 |
1s |
|
1分 |
1m |
|
1時間 |
1h |
|
1日 |
1d |
例:
要求の処理時間が10秒未満のアクセスログを検索します。
logtype='access' and time_taken < 10s
特定のテキストを含むログを取得します。
logtype='application' and message contains 'validation failed'
集計クエリーは、個々のログレコードを表示するのではなく、ログデータの集計と分析に使用します。
これらのクエリーは、たとえば次のような質問への回答に役立ちます。
条件に一致するログはいくつありますか。
どのモジュールで最も多くの失敗が発生しましたか。
どの要求URIに最も頻繁にアクセスされていますか。
平均実行時間はどれくらいですか。
特定の時間間隔(例:毎分、毎時、毎日)に発生した要求、実行、またはスケジュール済み活動はいくつありますか。
形式:
logtype='logtype_name' and condition groupby field_name timeslice interval
詳細については、集計クエリーを参照してください。
必ずlogtypeから始めます。
andを使用して結果を絞り込みます。
orを使用して結果を広げます。
部分一致のテキスト検索にはcontainsを使用します。
特定の値を検索する場合は完全一致(=)を使用します。
自動候補を使用して、利用可能な項目と対応している値を確認します。
すべてのアクセスログを取得します。
logtype='access'
特定のユーザーのアクセス詳細を取得します。
logtype='access' and zuid='5873965'
成功した要求を取得します。
logtype='access' and status>=200 and status<300
サーバーエラーの要求を取得します。
logtype='access' and status>=400
たとえば、集計クエリーは次のような質問に回答するのに役立ちます。
失敗した実行はいくつ発生しましたか。
どのモジュールで最も多くの失敗が発生しましたか。
平均実行時間はどれくらいですか。
サービスにアクセスした一意のユーザーは何人ですか。
時間の経過とともに活動はどのように変化しましたか。
集計クエリーでは、集計演算子を使用して、一致するログを要約またはグループ化します。
例:
一致するログをカウントします。
logtype='access' count
項目別にログをグループ化します。
logtype='access' groupby status
時間の経過に伴う活動を分析します。
logtype='access' timeslice 1h
ログクエリー言語では、次の2種類の集計に対応しています。
メトリック集計
バケット集計
メトリック集計では、一致するログから値を計算し、要約結果を返します。
対応している演算子
|
演算子 |
説明 |
|
count |
一致するログレコードの件数を返します。 |
|
count_distinct |
項目内の一意の値の件数を返します。 |
|
sum |
項目の合計値を返します。 |
|
min |
項目の最小値を返します。 |
|
max |
項目の最大値を返します。 |
|
avg |
項目の平均値を返します。 |
|
sd |
項目の標準偏差を返します。 |
|
stats |
最小値、最大値、平均値、合計値、分散、標準偏差を返します。 |
|
percentile |
項目のパーセンタイル範囲を返します。 |
|
top |
項目からサンプル値または出現頻度の高い値を返します。 |
バケット集計は、ログをカテゴリーまたは区間ごとにグループ化します。
サポートされている演算子
|
演算子 |
説明 |
|
groupby |
項目内の一意の値ごとにログをグループ化します。 |
|
distinct |
項目から一意の値を返します。 |
|
histo |
数値を区間または範囲にグループ化します。 |
|
timeslice |
ログを時間間隔ごとにグループ化します。 |
|
オプション |
説明 |
|
sort |
集計結果を並べ替えます。 |
|
limit |
返される結果の数を制限します。 |
|
having |
グループ化後に集計結果を絞り込みます。 |
having演算子は、histo演算子ではサポートされていません。
groupby演算子は、選択した項目に基づいてログをグループ化します。
構文。
logtype='logtype_name' groupby field_name
複数のgroupby項目
logtype='logtype_name' groupby field1, field2
1つのクエリーで最大4項目を使用して結果をグループ化できます。
項目値での並べ替え。
logtype='access' groupby zuid sort _field desc
件数での並べ替え。
logtype='access' groupby zuid sort _count asc
結果数の制限。
logtype='access' groupby zuid limit 100
集計結果の絞り込み。
logtype='access' groupby request_url having _count > 1000
groupbyは、対応している項目でのみ使用できます。
_countで並べ替えられた結果はページ分割できません。
100文字を超える文字列値は切り捨てられる場合があります。
非常に大きなデータセットでは、件数と上位の値が概算になる場合があります。
大規模なデータセットでは、ログのインデックス化と集計が分散処理されるため、グループ化された件数と上位の値が概算になる場合があります。
histo演算子は、数値を間隔ごとにグループ化します。
構文。
logtype='logtype_name' histo field_name interval
例。
logtype='access' histo time_taken 1000
logtype='access' histo time_taken range(10,10 to 100,100 to 1000,1000)
これにより、値は次のようにグループ化されます。
10ミリ秒未満
10ミリ秒から100ミリ秒
100ミリ秒から1,000ミリ秒
1,000ミリ秒超
timeslice演算子は、ログを時間間隔ごとにグループ化します。
サポートされている単位
|
時間単位 |
表記 |
|
1秒 |
1s |
|
1分 |
1m |
|
1時間 |
1h |
|
1日 |
1d |
構文。
logtype='logtype_name' timeslice interval
例。
logtype='access' timeslice 1h
countによる並べ替え。
logtype='access' timeslice 5m sort _count
intervalによる並べ替え。
logtype='access' timeslice 5m sort _field desc
集計結果は、計算値を使用して並べ替えできます。
例。
logtype='access' groupby request_url sort avg(time_taken) desc
logtype='access' groupby request_url having _count > 1000sort avg(time_taken) desc
count演算子は、クエリーの末尾でのみ使用できます。
有効な例。
logtype='execute' and status='failed' count
無効な例。
logtype='execute' count and status='failed'
count演算子の後に、追加の条件や集計演算子を追加することはできません。
同じクエリー内でcount演算子とcount_distinct演算子を一緒に使用することはできません。
要求の処理にかかった最大時間を確認します
logtype='access' max(time_taken)
カード作成要求の最大処理時間と最小処理時間を取得します
logtype='access' and request_urlcontains '/job' and methodcontains 'post' max(time_taken) min(time_taken)
一意のURLのうち、処理に10秒を超える時間がかかったものを取得します
logtype='access' and time_taken > 10s groupby request_url
よくアクセスされる要求URLを件数付きで取得します
logtype='access' count(request_url) groupby request_url
各モジュールでアクセス頻度の高いリモートIPを取得します
logtype='access' distinct(zuid) groupby _zl_host
時間経過に伴うログ分布を取得します
logtype='access' and request_urlcontains '/job' timeslice 1h