# -\#7 計算アイテム

#### - 概要

計算アイテムで他のアイテムに基づく計算を作成することができます。

計算アイテムでは、仮想データソースを作成する方法です。アイテムの値は算術式に基づいて定期的に計算されます。

他のどのアイテムに関しても、結果のデータはZabbix
データベースに保存されます -
これによって、ヒストリとトレンドの値の両方を保存して、グラフの高速な生成を可能にしています。

計算アイテムを使用するには、アイテムタイプ**計算**を選択します。

#### - 設定可能なフィールド

**キー**は、ホスト毎に一意なアイテムの識別子です。サポートされている記号を使用してキー名を作成できます。

**式**フィールド（1.8.1と1.8.2では「条件式」という名前でした）に計算定義を入力します。式とキーには、仮想的には何の接続もありません。どのような場合でもキーのパラメータは式の中では使用されません。

非常に単純な条件式は、次のような形式で指定します：

    func(<key>|<hostname:key>,<parameter1>,<parameter2>,...)

以下の関数がサポートされています：

|引数               定|<|
|------------------------|-|
|**func**|[トリガー条件式でサポートされている関数](/jp/manual/appendix/triggers/functions) ：last、min、max、avg、count、などのいずれかを指定します。|
|**key**|参照したいデータを持つ他のアイテムのキーです。**key**または**hostname:key**で定義します。<br>注意：キー内のスペースやカンマが原因で間違ってパースしてしまうのを避けるために、キー全体を二重引用符（”…”）で囲むことを強くお奨めします。<br>キー内に引用符で囲まれているパラメータもある場合は、それらの二重引用符はバックスラッシュ （\\）（吉田注・バックスラッシュです）を使用してエスケープする必要があります。 下記の**例5**を参照してください。|
|**parameter(s)**|省略可能なパラメータ|

<note
tip>計算アイテムの式から参照されているすべてのアイテムは、存在していなければならず、データを収集していなければなりません。また、参照アイテムのアイテムキーを変更する場合、古いキーを使用していた全ての式を手動で更新する必要があります。
:::

<note
important>式の中の[ユーザーマクロ](/jp/manual/config/macros/usermacros)は、パラメータまたは定数の参照に使用された場合は、拡張されます。関数、ホスト名、アイテムキー、演算子の参照に使用された場合は、ユーザーマクロは拡張されません。
:::

複雑な式は、関数、演算子、カッコを組み合わせて使用できます。トリガー条件式では、サポートされているすべての関数と演算子を使用できます。構文はわずかに異なりますが、ロジックと演算子の優先順位はほぼ同じです。

関数でサポートされている文字：

    a..zA..Z0..9_

ホスト名でサポートされている文字：

    a..zA..Z0..9 ._-

キーでサポートされている文字：

    a..zA..Z0..9.,_

トリガー条件式とは異なり、Zabbixは、新しい値の受け入れ時ではなく、アイテムの更新間隔に従って計算アイテムを処理します。

計算アイテムは、以下の状況では取得不可になる場合があります。

1.  参照アイテムが見つからない
2.  関数で計算するデータがない
3.  ゼロ除算
4.  構文エラー

::: noteclassic
計算アイテムのサポートは、Zabbix
1.8.1からで導入されました。
:::

#### - 使用例

##### 例1

「/」の空きディスク容量のパーセント値を計算します。

**last**関数を使用します：

    100*last("vfs.fs.size[/,free]")/last("vfs.fs.size[/,total]")

Zabbixは、空きディスク容量と合計ディスク容量の最新の値を取得して、指定の式に従いパーセント値を計算します。

##### 例2

Zabbixで処理される値の10分間の平均を計算します。

**avg**関数を使用します：

    avg(“Zabbix Server:zabbix[wcache,values]”,600)

計算アイテムを長期間広範囲に使用すると、Zabbixサーバのパフォーマンスが影響を受ける場合があります。

##### 例3

eth0の合計帯域幅を計算します。

2つの関数を合計します：

    last("net.if.in[eth0,bytes]")+last("net.if.out[eth0,bytes]")

##### 例4

受信トラフィックのパーセント値を計算します。

より複雑な式:：

    100*last("net.if.in[eth0,bytes]")/(last("net.if.in[eth0,bytes]")+last("net.if.out[eth0,bytes]"))

##### 例5

計算アイテム内で正しく集められたアイテムを使用します。

引用符で囲まれたキー内で二重引用符がどのようにエスケープされるか、注意してください：

    last("grpsum[\"video\",\"net.if.out[eth0,bytes]\",\"last\",\"0\"]") / last("grpsum[\"video\",\"nginx_stat.sh[active]\",\"last\",\"0\"]"))

------------------------------------------------------------------------

*本ページは2013/05/01時点の原文を基にしておりますので、内容は必ずしも最新のものとは限りません。\
最新の情報は右上の「Translations of this
page」から英語版を参照してください。*
