1 Foreach 関数
概要
foreach関数は、使用されるアイテムフィルターによって選択された各アイテムに対して1つの集計値を返すために、集計計算で使用されます。値の配列が返されます。
foreach関数は、集計計算式の一部として、計算アイテム内でのみサポートされています。 このコンテキスト外では、通常のアイテムキーやトリガー式で呼び出すことはできません。
たとえば、avg_foreach 関数は値の配列を返します。各値は、指定された時間間隔における、選択されたアイテムの履歴値の平均です。
item filter は、foreach関数で使用される構文の一部です。 アイテムフィルターではワイルドカードの使用がサポートされているため、必要なアイテムを非常に柔軟に選択できます。
サポートされている関数
| Function | Description |
|---|---|
| avg_foreach | 各アイテムの平均値を返します。 |
| bucket_rate_foreach | histogram_quantile() 関数での使用に適した (バケットの上限値、レート値) のペアを返します。ここで「バケットの上限値」は、<parameter number> parameter で定義されたアイテムキーのパラメータの値です。 |
| count_foreach | 各アイテムの値の数を返します。 |
| exists_foreach | 有効な各アイテムに対して '1' を返します。 |
| last_foreach | 各アイテムの最新の値を返します。 |
| max_foreach | 各アイテムの最大値を返します。 |
| min_foreach | 各アイテムの最小値を返します。 |
| sum_foreach | 各アイテムの値の合計を返します。 |
関数の構文
foreach関数は、2つの共通パラメータ item filter(詳細は以下を参照)と time period をサポートします。
foreach_function(item filter,time period)
例:
avg_foreach(/*/mysql.qps?[group="MySQL Servers"],5m)
は、MySQLサーバーグループ内の各 'mysql.qps' アイテムの5分間の平均値を返します。
一部の関数は追加のパラメータもサポートすることに注意してください。
アイテムフィルター構文
アイテムフィルター:
/host/key[parameters]?[conditions]
は4つの部分で構成されます。
- host - ホスト名
- key - アイテムキー(パラメータを除く)
- parameters - アイテムキーのパラメータ
- conditions - ホストグループおよび/またはアイテムタグに基づく条件(式として指定)
スペースを使用できるのは、conditions 式の内部のみです。
ワイルドカードの使用
- ワイルドカードは、ホスト名、アイテムキー、または個々のアイテムキーパラメータの置き換えに使用できます。
- host または item key のいずれか一方は、ワイルドカードなしで指定する必要があります。したがって、
/host/*と/*/keyは有効なフィルターですが、/*/*は無効です。 - ワイルドカードは、ホスト名、アイテムキー、アイテムキーパラメータの一部に対して使用することはできません。
- ワイルドカードは、複数のアイテムキーパラメータには一致しません。したがって、各パラメータごとに個別にワイルドカードを指定する必要があります(例:
key[abc,*,*])。
条件式
条件式では、以下をサポートしています。
- オペランド:
- group - ホストグループ
- tag - アイテムタグ
"<text>"- 文字列定数。"および\をエスケープするためのエスケープ文字\を使用します
- 大文字と小文字を区別する文字列比較演算子:
=,<> - 論理演算子:
and,or,not - 括弧によるグループ化:
()
文字列定数の引用符は必須です。サポートされるのは、大文字と小文字を区別する完全一致の文字列比較のみです。
フィルターでタグを指定する場合(例: tag="tagname:value")、コロン ":" は区切り文字として使用されます。
その後ろのすべてがタグ値と見なされます。そのため、現時点では ":" を含むタグ名を指定することはサポートされていません。
例
以下の例のように、アイテムキー、ホストグループ、タグを参照する複雑なフィルターを使用できます。
| Syntax example | Description |
|---|---|
/host/key[abc,*] |
このホスト上の類似アイテムに一致します。 |
/*/key |
任意のホストの同じアイテムに一致します。 |
/*/key?[group="ABC" and tag="tagname:value"] |
ABC グループに属し、'tagname:value' タグを持つ任意のホストの同じアイテムに一致します。 |
/*/key[a,*,c]?[(group="ABC" and tag="Tag1") or (group="DEF" and (tag="Tag2" or tag="Tag3:value"))] |
ABC または DEF グループに属し、それぞれのタグを持つ任意のホストの類似アイテムに一致します。 |
参照されるすべてのアイテムは、存在し、データを収集している必要があります。
計算に含まれるのは、有効なホスト上の有効なアイテムのみです。
未サポート状態のアイテムは含まれません。
参照されるアイテムのアイテムキーが変更された場合は、フィルターを手動で更新する必要があります。
親ホストグループを指定すると、その親グループと、配下にネストされたすべてのホストグループおよびそれらのアイテムが含まれます。
期間
2番目のパラメータでは、集計の期間を指定できます。 期間は時間としてのみ指定でき、値の数(# を接頭辞として付ける形式)はサポートされていません。
利便性のため、このパラメータではサポートされている単位記号を使用できます。 例えば、'300s'(300秒)の代わりに '5m'(5分)、または '86400'(86400秒)の代わりに '1d'(1日)を使用できます。
last_foreach 関数では、期間は省略可能なパラメータです(Zabbix 7.0 以降でサポート)。
last_foreach(/*/key?[group="host group"])
exists_foreach 関数では期間はサポートされていません。
追加パラメータ
bucket_rate_foreach
bucket_rate_foreach 関数では、3つ目のオプションパラメータがサポートされています。
bucket_rate_foreach(item filter,time period,<parameter number>)
ここで、<parameter number> はアイテムキー内の "bucket" 値の位置です。 例えば、myItem[aaa,0.2] の "bucket" 値が '0.2' の場合、その位置は 2 です。
<parameter number> のデフォルト値は '1' です。
count_foreach
count_foreach 関数では、3つ目および4つ目のオプションパラメータがサポートされています。
count_foreach(item filter,time period,<operator>,<pattern>)
ここで:
- operator はアイテム値に対する条件演算子です(必ずダブルクォートで囲む必要があります)。サポートされる
operators:
eq - 等しい
ne - 等しくない
gt - より大きい
ge - 以上
lt - より小さい
le - 以下
like - パターンを含む場合に一致(大文字・小文字を区別)
bitand - ビット単位AND
regexp -patternで指定された正規表現との大文字・小文字を区別する一致
iregexp -patternで指定された正規表現との大文字・小文字を区別しない一致 - pattern は必要なパターンです(文字列引数はダブルクォートで囲む必要があります)。3つ目のパラメータで operator が指定されている場合にサポートされます。
コメント:
- オプションパラメータ operator または pattern は、カンマの後に空のまま残すことはできず、省略する場合は完全に省略する必要があります。
- 3つ目のパラメータとして bitand を使用する場合、4つ目の
patternパラメータは '/' で区切られた2つの数値、number_to_compare_with/mask として指定できます。count_foreach() は値と mask の「ビット単位AND」を計算し、その結果を number_to_compare_with と比較します。「ビット単位AND」の結果が number_to_compare_with と等しい場合、その値がカウントされます。
number_to_compare_with と mask が等しい場合は、mask のみを指定すればよく('/' は不要です)。 - 3つ目のパラメータとして regexp または iregexp を使用する場合、4つ目の
patternパラメータには通常の正規表現または グローバル('@' で始まる)正規表現を指定できます。グローバル正規表現の場合、大文字・小文字の区別はグローバル正規表現の設定を継承します。regexp マッチングのために、浮動小数点値は常に '.' の後に小数点以下4桁で表現されます。また、大きな数値では10進表現(データベースに保存される値)と2進表現(Zabbix server で使用される値)の違いが、小数点以下4桁目に影響する可能性がある点にも注意してください。
foreach 関数の使用方法に関する詳細および例については、集計計算 を参照してください。
空き状況に応じた動作
次の表は、ホスト/アイテムおよびヒストリデータの可用性が制限されている場合に各関数がどのように動作するかを示しています。
| 関数 | 無効なホスト | データのある利用不可能なホスト | データのない利用不可能なホスト | 無効な項目 | 取得不可のアイテム | データ取得エラー(SQL) |
|---|---|---|---|---|---|---|
| avg_foreach | 無視 | 平均値 | 無視 | 無視 | 無視 | 無視 |
| bucket_rate_foreach | 無視 | バケット率 | 無視 | 無視 | 無視 | 無視 |
| count_foreach | 無視 | カウント数 | 0 | 無視 | 無視 | 無視 |
| exists_foreach | 無視 | 1 | 1 | 無視 | 1 | n/a |
| last_foreach | 無視 | 最新値 | 無視 | 無視 | 無視 | 無視 |
| max_foreach | 無視 | 最大値 | 無視 | 無視 | 無視 | 無視 |
| min_foreach | 無視 | 最小値 | 無視 | 無視 | 無視 | 無視 |
| sum_foreach | 無視 | 合計値 | 無視 | 無視 | 無視 | 無視 |
アイテムが無視された場合、集計には何も追加されません。