メモリがどのくらい使われているのか、そのうちページキャッシュにどのくらいのメモリが使われているかを監視するためのテンプレートを作成します。メモリが不足しているとデータがあまりページキャッシュされないためディスクI/O待ちが発生したり、スワップが発生しサーバの処理能力が著しく低下してしまいます。
Linuxのページキャッシュは、一度ハードディスクなどから読み出したデータは、メモリに空きがある限りキャッシュし続けるため、メモリより10万〜100万倍遅いと言われているハードディスクのI/O負荷を減らすことができます。
メモリの使用率などは sar コマンドの「-r」オプションなどで確認することができます。
$ sar -r 05時50分01秒 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit 06時00分01秒 178824 841464 82.47 159148 371460 890796 48.00 06時10分01秒 181732 838556 82.19 159252 371524 883740 47.62 06時20分01秒 179352 840936 82.42 159284 371568 889776 47.94
sar -r コマンド出力の見方
kbmemfree キロバイト単位での空きメモリ容量 kbmemused キロバイト単位での使用中メモリ容量。カーネル自身によって使用されるメモリについては対象外 %memused メモリの使用率 kbbuffers カーネルによってバッファとして使用されたメモリ容量(キロバイト) kbcached カーネルによってデータをキャッシュするために使用されたメモリ容量(キロバイト) kbcommit 現在のワークロードに必要なメモリ容量(キロバイト)。メモリ不足が発生しない事を保証するために必要なRAM/スワップの量の見積である %commit 総メモリ容量(RAM+スワップ)に対する、現在のワークロードに必要なメモリ容量(キロバイト)。通常カーネルはメモリをオーバーコミットするため、この数値は100%を超える場合がある
※「sarコマンドのマニュアル | 自作データベース環境で各種実験」より引用
諸説ありますが、「kbbuffers」と「kbcached」がページキャッシュに使われているメモリ容量(単位はKB)です。上の sar -r コマンドの出力では、6時00分の使用中メモリ容量「kbmemused」が「841464(KB)」となっていますが、実際の使用中メモリ容量はページキャッシュを除いた。841464-159148-371460 = 310MB程度になります。
運用中のサーバではメモリ使用率「%memused」が 100%近くになることがありますが、ディスクI/O待ちが無くスワップが発生していなければ、データがうまくページキャッシュされている良い状態であると考えられます。
▽ Linuxのバッファキャッシュとページキャッシュの違いは? | b.l0g.jp
http://b.l0g.jp/linux/buffercache-and-page-cache/
アプリケーションの作成
もし「A_Template_OS_Linux」テンプレートを作成していない場合は、こちらを参考にして作成しておきましょう。
[設定]→[テンプレート] 「A_Template_OS_Linux」行の「アプリケーション」をクリックします。
名前に「memory」を入力し「追加」をクリックすればアプリケーションが作成されます。
アイテムの作成
メモリの監視項目は、メモリの空き容量(free)、ページキャッシュに使われている容量(バッファとキャッシュ)、実質的なメモリの空容量(空き容量+バッファ+キャッシュ)とサーバに搭載されているメモリ総容量を取得します。
[設定]→[テンプレート] 「A_Template_OS_Linux」行の「アイテム」をクリックします。
下記を設定し「追加」をクリックすればアイテムが作成されます。
---(設定箇所)---------------------------
名前:1032_メモリ(free)
キー:vm.memory.size[free]
単位:B
更新間隔(秒):60
アプリケーション:memory
------------------------------
単位の「B」はバイトです。
同様に他のメモリ監視アイテムを作成します。
同じようなアイテムを作成する場合は、先に作成したアイテムを複製して異なる部分のみ設定するのが便利ですよ(^^)
---(設定箇所)---------------------------
名前:1033_メモリ(buffers)
キー:vm.memory.size[buffers]
単位:B
更新間隔(秒):60
アプリケーション:memory
------------------------------
---(設定箇所)---------------------------
名前:1034_メモリ(cached)
キー:vm.memory.size[cached]
単位:B
更新間隔(秒):60
アプリケーション:memory
------------------------------
---(設定箇所)---------------------------
名前:1035_メモリ空容量(free+buffers+cached)
キー:vm.memory.size[available]
単位:B
更新間隔(秒):60
アプリケーション:memory
------------------------------
---(設定箇所)---------------------------
名前:1039_メモリ総容量
キー:vm.memory.size[total]
単位:B
更新間隔(秒):60
アプリケーション:memory
------------------------------
アイテムキー vm.memory.size のパラメータ
vm.memory.size[<mode>]
total - 使用可能な物理メモリの合計
free - メモリを必要とするどんな項目に対しても使用できるメモリ
active - 現在使用されている、または最近使用されたメモリで、RAMにあるもの
inactive - 使用されていないメモリ
wired - 常にRAMにあると示されているメモリ。このメモリはディスクには移動されません。
pinned - 「wired」と同じです。
anon - ファイルと関係ないメモリ(ファイルから再読み込みできないメモリ)
exec - 実行コード。通常、(プログラム)ファイルから実行されます。
file - 最近アクセスされたファイルのコンテンツのキャッシュ
buffers - ファイルシステムのメタデータのようなもののキャッシュ
cached - さまざまなもののキャッシュ
shared - 複数のプロセスによって同時にアクセスできるメモリ
used - active + wired のメモリ
pused - 「total」に対するactive + wired のメモリ
available - inactive + cached + free のメモリ
pavailable - 「total」に対するinactive + cached + free のメモリプラットフォーム特有の注意事項
Linuxのavailableはfree + buffers + cachedです
詳細は公式マニュアル 2 vm.memory.sizeパラメータ | Zabbix Documentaion 2.2 を参照してください。
メモリ使用率の計算アイテムの作成
実質的なメモリの使用率を取得するパラメータが無いため計算アイテムによって取得します。計算式は「(メモリ総容量ー実質的なメモリ空容量)÷ メモリ総容量 × 100」になります。
---(設定箇所)---------------------------
名前:1030_メモリ使用率
タイプ:計算
キー:vm.memory.size[(total-available)/total]
式:(last("vm.memory.size[total]")-last("vm.memory.size[available]"))/last("vm.memory.size[total]")*100
単位:%
更新間隔(秒):60
アプリケーション:memory
------------------------------
計算アイテムの詳細は公式マニュアル 7 計算アイテム | Zabbix Documentaion 2.2 を参照してください。
トリガーの作成
[設定]→[テンプレート] 「A_Template_OS_Linux」行の「トリガー」をクリックします。
下記を設定し「追加」をクリックすればトリガーが作成されます。
---(設定箇所)---------------------------
名前:{HOST.NAME} memory
条件式:{A_Template_OS_Linux:vm.memory.size[(total-available)/total].last()}>90
深刻度:警告
------------------------------
トリガーの名前にはマクロが使用できます。上の設定 {HOST.NAME} はホストの表示名がトリガー名に表示されます。
条件式は、{<テンプレート名>:<アイテムキー>.<トリガー関数>}=<値> の形式です。手入力してもかまいませんが、なかなか複雑な書式ですので、条件式の「追加」ボタンをクリックして対象のアイテムを選択し、関数を選択して「挿入」ボタンをクリックすれば条件式を生成してくれます。
今回設定したトリガー条件式は、実質的なメモリ使用率が90%を超えたらトリガーが発生します。
▽ サポートされているトリガー関数 | Zabbix Documentaion 2.2
https://www.zabbix.com/documentation/2.2/jp/manual/appendix/triggers/functions
グラフの作成
[設定]→[テンプレート] 「A_Template_OS_Linux」行の「グラフ」をクリックします。
「グラフ」タブを選択し、アイテムの「追加」をクリックします。
グラフに表示したいアイテムを選択し「選択」をクリックします。
下記を設定してアイテムが追加されていることを確認し「追加」をクリックすればグラフが作成されます。
---(設定箇所)---------------------------
名前:memory
------------------------------
最後に作成した監視テンプレートの動作確認をして作業完了です。
コメント
zabbixの勉強をAWS上でしています。
すごく理解しやすくて非常に助かっています。
ありがとうございます。
細いのですが、下記間違いだと思いますのでお知らせいたします。
計算アイテムの作成
—(設定箇所)—————————
名前:1030_メモリ使用率
タイプ:計算
キー:vm.memory.size[(total-available)/tota]<—/total
同様にトリガーの作成のtota90
いろいろ期待しちゃいます(笑)
これからもよろしくお願いします。
>kimzさん
こちらこそ、コメントありがとうございます!
間違えのご指摘、とてもありがたいです。
早速記事を修正しました。