クエリーは必ずログの種類から始まり、1つ以上の条件を含めて結果を絞り込むことができます。
クエリー形式
ログを検索するには、次の形式を使用します。
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
Logsクエリー言語は、次の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)
これにより、値は次のようにグループ化されます。
10ms未満
10ms~100ms
100ms~1,000ms
1,000ms超
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 > 1000 sort 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 method contains 'post' max(time_taken)
min(time_taken)
処理に10秒を超える時間がかかった一意のURLを取得する
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