メインコンテンツまでスキップ
Sumo Logic Japanese

fillmissing

標準 group-by クエリを実行すると、結果に空白ではないグループのみが返されます。たとえば、クエリで timeslice を使用してグループ化する場合、データが存在するタイムスライスのみが返されます。

次のような理由で、これは問題になる場合があります。

  • データがないことは注目すべきイベントの場合もありますが、この情報を簡単に検出することができません。たとえば、outlier operator は、存在しているタイムスライスのみを異常としてマークできるので、データないことによる異常は検出できません。
  • データがないとグラフ化によって誤解が発生する場合があります。たとえば、データのないタイムスライスで線グラフを作成すると、欠落しているタイムスライス間が補完されるため、誤って空白ではないように表示されます。

グループにデータがなくても出力に追加する必要があるグループを指定することにより、fillmissing operator ではこの欠点を解決しています。

使用方法

fillmissing operator で出力内のフィールドのジェネレータを定義できます。各ジェネレータは 1 つのフィールドに適用され、値の一部についてはデータに存在しなくても、そのフィールドに対応して出力に表示する値をすべて列挙します。

複数のジェネレータを定義できます。これにより、各ジェネレータが列挙した値のすべての組み合わせについてタプルを列挙します (つまりデカルト積)。たとえば、次のクエリを使用するとします。

| fillmissing values("a1", "a2") in A,
              values("b1") in B,
              values("c1", "c2", "c3") in C

3 つのフィールド (ABC) のジェネレータは次のタプルを列挙します。

A B C
a1 b1 c1
a1 b1 c2
a1 b1 c3
a2 b1 c1
a2 b1 c2
a2 b1 c3

ジェネレータが定義されたフィールドをキーフィールドと呼びます。それ以外のフィールドは非キー フィールドと呼びます。

ジェネレータのリストを指定すると、fillmissing はジェネレータが列挙したすべてのタプルを出力に追加します。列挙されたタプルのいずれかがない特別な場合には、fillmissing はキー フィールドに欠落した値、非キー フィールドにデフォルトの一定値を設定してレコードを出力に追加します。

ジェネレータ

fillmissing operator は現在次のタイプのジェネレータをサポートしています。

  • タイムスライス。クエリ時間範囲で指定期間のすべてのタイムスライスを列挙します。たとえば、timeslice(15m) はクエリ時間範囲のすべての 15 分間のタイムスライスを列挙します。
  • 。引数で指定された値の固定セットを列挙します。たとえば、values("a", "b", "c") は値 "a", "b"、および "c" を列挙します。現在は、文字列リテラルのみが引数に使用できます。

非キー フィールドのデフォルト値

fillmissing によってレコードが出力に追加されると、レコードのキー フィールドには欠落した値が入力されますが、それ以外のフィールドには一定値が入力されます。これらのフィールドに一定値を設定できます。設定しない場合は、デフォルト値が割り当てられます。この値はフィールドのタイプによります。

フィールド タイプ デフォルト値
整数 0
double 0.0
ブール false
文字列型 (またはその他の型) null

 

構文

このセクションでは、fillmissing operator の構文について説明します。

  • fillmissing <keyFieldGenerator> [ with <nonKeyFieldSpecs> ]

keyFieldGenerator は、operator が指定されたすべての値の組み合わせが存在することを確認するために参照するキー フィールドを生成します。欠落している値は、各キー フィールドごとに 1 つずつ指定される nonKeyFieldSpecs に基づいて入力されます。2 つのジェネレータがサポートされています。

ジェネレータ 構文
タイムスライス順 timeslice(<integer><time_period>) [in <field>]
values("<value1>", "<value2>", ...) in <field>

nonKeyFieldSpecs は省略可能です。このオプションで 1 つ以上の非キー フィールドのデフォルトの一定値を設定できます。各指定の構文は次のようになります。

非キー フィールド 構文
定数値  <constantValue> <double> | <int> | <stringLiteral> | null
定数非キー <constantValue> for <field>

ルール

  • ライブ ダッシュボードでは、aggregate operator の後に fillmissing operator を使用する必要があります。
  • タイムスライス ジェネレータからのバケットは、期間に基づいている必要があります。サポートされている <time_period> 値は、週 (w)、日 (d)、時 (h)、分 (m)、および秒 (s) です。

タイムスライス ジェネレータ

このクエリの例では、15 分タイムスライスのログ イベントの数をカウントします。fillmissing を使用するクエリでは、カウントがゼロのタイムスライスは出力に表示されます。

タイムスライス ジェネレータの場合、キー フィールド名は省略可能です。(デフォルトは _timeslice. です。)

Fillmissing なし Fillmissing あり
login
| timeslice 15m
| count by _timeslice
| sort by _timeslice
login
| timeslice 15m
| count by _timeslice
| fillmissing timeslice(15m)
| sort by _timeslice
fillmissing-example-1-without.png fillmissing-example1-with.png

値ジェネレータ

このクエリの例では、フィールド (type) 別にカウントします。ここでは、value() ジェネレータを使用して、出力に追加する必要がある 3 つのタイプ (web、api、internal) を列挙します。

_count のデフォルト値を 0 から -1 に変更する方法にも注意してください。

Fillmissing なし Fillmissing あり
login
| count by type
login
| count by type
| fillmissing values("web", "api", "internal") in type
  with -1 for type
fillmissing-example2-without.png fillmissing-example2-with.png

複数のジェネレータと transpose

このクエリの例では、複数のジェネレータを使用して、2 つのキー フィールド (type_timeslice) での必須値の組み合わせをすべて列挙する方法を示します。transpose で欠落した値の一部は表示できますが、どのタイプにもデータがない場合は表示できません。

Fillmissing なし Fillmissing あり
login
| parse "Completed in * ms." as latency
| timeslice 15m
| pct(latency, 99) by type, _timeslice
| transpose row _timeslice column type
login
| parse "Completed in * ms." as latency
| timeslice 15m
| pct(latency, 99) by type, _timeslice
| fillmissing timeslice(15m),
  values("rework", "view", "mix") in type

| transpose row _timeslice column type
fillmissing-example3-none.png fillmissing-example3-before.png

次のシンプルな例のように、fillmissing operator を transpose の後に適用すると、type フィールドのすべての期待値を指定しなくても同様の結果を得られます。

login
| parse "Completed in * ms." as latency
| timeslice 15m
| pct(latency, 99) by type, _timeslice
| transpose row _timeslice column type
| fillmissing timeslice(15m)

ただし、埋められるフィールドの値は (前の例のような 0 ではなく) 常に Null です。現在のところ、デフォルトの Null 値を変更する方法はありません。

  • この記事は役に立ちましたか?