【Zabbix】Linuxのメモリ使用率監視は依存アイテムを利用する

zabbix-linux-memory-utilテクノロジー

前回に引き続き、今回もリソース監視です。
ZabbixではCPUと同様に標準的に監視するメモリ使用率についてご紹介します。
WindowsLinuxではメモリの使用率、具体的にはメモリの使用領域と空き領域の考え方が違いますので、Linuxメモリ使用率を中心に紹介していきます。

メモリ使用率監視

メモリ使用率の監視には「vm.memory.sizeアイテムキーを使用しますが、オプションによって取得できる値が異なります。

キー詳細
vm.memory.size[total]使用可能な物理メモリの合計値
vm.memory.size[buffers]バッファの値
vm.memory.size[cached]キャッシュの値
vm.memory.size[free]空きメモリの値
vm.memory.size[used]現在使用されているメモリの値
vm.memory.size[pused]total に対する used の割合
vm.memory.size[available]利用可能な物理メモリの合計値
vm.memory.size[pavailable]total に対する available の割合
引用:vm.memory.size パラメータについての解説|BLOG|サイバートラスト

Windowsであれば単純にpusedを使えばメモリ使用率は監視できますが、Linuxの場合は少し違った意味になります。
冒頭でも言った通り、メモリの使用容量と空き容量の考え方が少し違います。

Linuxにおけるメモリの空き容量

まずはこちらの図をご覧ください。
今回使用する「vm.memory.sizeアイテムキーパラメーターと、メモリの領域の関係について示しています。

出典:vm.memory.size パラメータについての解説|BLOG|サイバートラスト

注目すべきは、bufferscached使用済みの領域と考えるか、空き領域と考えるかの話です。
メモリバッファとキャッシュは、処理を最適化するために予め確保している領域になりますので、使用済みと言えば使用済みになるのですが、常に使用しているわけではないので、Linuxの場合は空き領域として考えます。

監視項目説明
メモリのバッファブロックI/Oを最適化するために、ディスクブロックをキャッシュする容量
メモリのキャッシュファイルI/Oを最適化するために、ファイルのページをキャッシュする容量
引用:CentOSでメモリ使用率を監視してみた

つまり、Windowsのようにメモリの使用率監視pusedを使ってしまうと、buffersとcachedまで含んでしまうし、空き容量を監視しようとfreeを使ってしまうと、buffersとcachedを含まない値になってしまいます。
Linuxでは 「buffers + cached + free = available」が空き容量となり、「total – available」は使用量となります。

メモリの空き容量は「available」
  • usedはメモリの使用量ではない
  • freeはメモリの空き容量ではない
  • availableがメモリの空き容量
  • total – available = メモリの使用量

このメモリの空き容量の考え方は、Zabbixの公式サイトにも掲載されています。
厳密には、同じLinuxでもOSの種類によって合計が異なりますので、しっかり確認してから監視設定を行いましょう。

依存アイテムを利用する

もうおわかりいただけたと思うが、普通にpusedではメモリの使用率は監視できないので、依存アイテムを使用して計算を行います。
依存アイテムでは、メモリの空き率マスターアイテムとして、その値から保存前処理メモリ使用率を計算します。

  • [設定] → [テンプレート(またはホスト)]に移動します
  • テンプレートの行のアイテムをクリックします
  • 画面の右上隅にある[アイテムの作成]をクリックします
  • フォームにアイテムのパラメータを入力します

メモリ空き率を取得するアイテム

メモリ使用率を出すために、まずはマスターアイテムとなるメモリの空き率を取得します。
vm.memory.size」アイテムキーには、既に「pavailableオプションが用意されているので、これを使うだけです。

設定項目設定値説明・注意点
名前<使用可能なメモリ(%)>(任意の名前)
タイプZabbixエージェントZabbixエージェント(アクティブ)も可
キーvm.memory.size[pavailable]「pavailable」オプションを使用する
データ型数値(浮動小数)○○率の場合は浮動小数
単位%○○率なので%(監視データを参照する際に付く)
監視間隔<1m>(任意の間隔。トリガーも考慮する)
メモリ空き率

これで準備はできました!
後は、次の依存アイテム保存前処理メモリ使用率を計算するだけです。

依存アイテムでメモリ使用率計算

まず「アイテム」タブで依存アイテムの箱を作りましょう。
実際にメモリ使用率を計算するのは、次の「保存前処理」のタブで行います。

設定項目設定値説明・注意点
名前<メモリ使用率(%)>(任意の名前)
タイプ依存アイテム上記の依存アイテムを作成
キー<vm.memory.util>(任意のキー)
データ型数値(浮動小数)○○率の場合は浮動小数
マスターアイテム使用可能なメモリ(%)上記のメモリ空き率のアイテムを選択する
単位%○○率なので%(監視データを参照する際に付く)
メモリ使用率

保存前処理

次に「保存前処理」タブに移動して、メモリ空き率から使用率を計算する設定をします。
こちらも簡単です。
totalを100%とするので、普通に100からメモリ空き率(pavailable)を引くだけです。

設定項目設定値説明・注意点
名前JavaScriptJavaScriptを利用して計算する
パラメータreturn (100-value);単純に100からマスターアイテムの値を引いて返す
データ型数値(浮動小数)○○率の場合は浮動小数
保存前処理

これでメモリ使用率の取得が完了しました。
以前は計算アイテムを良く利用していた気がしますので、最後に計算アイテムでのメモリ使用率を計算する方法もご紹介して終わりたいとお思います。

計算アイテムでも可能

依存アイテムでも計算アイテムでも同じ結果になるはずなので、どちらを利用しても構いません。
自分に合った方法で監視してください。

設定項目設定値説明・注意点
名前<メモリ使用率(%)>(任意の名前)
タイプ計算メモリ空き率を使った「式」による計算
キー<vm.memory.util>(任意のキー)
データ型数値(浮動小数)○○率の場合は浮動小数
100 – last(//vm.memory.size[pavailable])上記のメモリ空き率のアイテムを選択する
単位%○○率なので%(監視データを参照する際に付く)
監視間隔<1m>(任意の間隔。メモリ空き率とトリガーも考慮する)
メモリ使用率

昔はバイト単位で取得して、このような書き方をしてた気もしますが。。

(last(//vm.memory.size[total]) - last(//vm.memory.size[available])) / last(//vm.memory.size[total]) * 100

こちらも結果は同じになるので、昔ながらの方法でも良いと思います。
ただ、個人的にはZabbixに標準で入っている最新のテンプレートを真似する方が良いと思ってます。

東京生まれ福岡育ちの文系プログラマー。
テクノロジーの恩恵を感じながら日々精進しています。
広く浅くをモットーに、最近ではプログラミングだけでなく、仮想サーバーからセキュリティ、監視システムなども勉強中です。

管理者をフォローする

コメント

タイトルとURLをコピーしました