Help us understand the problem. What is going on with this article?

/proc/meminfoの情報をzabbixで収集してみる

More than 5 years have passed since last update.

meminfoファイルの中身をzabbix_senderでまとめて送信してみた

はじめに

zabbixのメモリ関係のアイテムは、取得できるのがtotal、shared、free、buffers、cachedだけでちょっと大雑把(?)
そこでmeminfoに記載の情報をzabbixで取得してみようかな、と思った。
で、ユーザパラメータ辺りを使って項目別のアイテムを設定すると、アイテムの取得タイミングが個々で微妙にズレるのが気になるのでzabbix_senderでやってみました。
というお話。

スクリプト

#!/bin/sh

if [ $# -ne 2 ] ; then
  echo "This script needs two argments." 1>&2
  exit 1
fi

zbxHOSTNAME="$1"
zbxSERVER="$2"
TIMESTAMP=`date +%s`

TEMPFILE="/tmp/zbxTMP$$"
ITEMPREFIX="system.meminfo."

cat /proc/meminfo |while read LINE
  do ARTICLE=`echo $LINE |cut -d":" -f1 | tr "()" "_"`
  ITEMNUM=`echo $LINE|cut -d":" -f2|sed -e "s/ kB/ * 1024/" |bc`
  echo "$zbxHOSTNAME $ITEMPREFIX$ARTICLE $TIMESTAMP $ITEMNUM"
done >$TEMPFILE

zabbix_sender -z $zbxSERVER -p 10051 -T -i $TEMPFILE >&2
echo $?

rm -f $TEMPFILE

スクリプトの解説

/proc/meminfoの情報を、引数で受け取ったzabbixサーバのIPアドレス、アイテムを取得するマシンのホスト名(とスクリプト実行時の時刻)と併せてzabbix_sender機能でサーバに登録する。
ポイントは下記の2点ぐらい

  • アイテムのキーに”()”`が含まれるとアイテムが上手く登録できなかったので"_"に置換している。
  • キロバイト単位をバイト単位に変換している。単位の換算はzabbix側で宜しくやってくれる。

ファイルに記録した複数の値を一括してzabbix_senderで送信する方法については
Zabbix Senderで複数の値を一括登録 - ike-daiの日記
こちらを参考にさせて頂いた。

アイテムの登録

アイテムのキーはsystem.meminfo.”meminfoファイル内の項目名”で整数型なトラッパーアイテムを登録しておく
zabbix_meminfo-item-setting.png
こんな設定をmeminfoファイルに含まれる項目の分だけ手動でやるとちょっとした苦行なのでうまい感じで省力化したいところ。

スクリプトの起動

こんなアイテムを登録して設置したスクリプトを起動。
このアイテムの実行間隔で、上で設定したトラッパーなアイテムにスクリプトから値が登録されていく。
zabbix_meminfo_script-kick.png
見切れているキーの欄はこんな感じ

system.run[/etc/zabbix/externalscripts/zbxmeminfo.sh "{HOSTNAME}" "192.168.xxx.xxx"]
”192.168.xxx.xxx”はzabbixサーバのIPアドレス。
上述の各項目のアイテムと合わせてテンプレートにして{HOSTNAME}マクロを使っているので、スクリプト設置だけしてやれば複数サーバでの値の収集も比較的楽だと思う。
エージェントでEnableRemoteCommands=1を設定しないと動かない、はず。
ユーザパラメータに登録、crontabに登録でもいいかも。

グラフにしてみた

zabbix_meminfo-items.png
グラフ本体よりも凡例の方が場所を取ってる、、、

mutz0623
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away