3.rootユーザでUserparameterの実行
vfs.dir.sizeのように、Linuxのファイルの情報を取得しようとすると、Zabbixエージェントにそのファイルへのアクセス権がなく、値が取得できない場合あります。そのような場合、Zabbixエージェントをroot権限で実行する方法もありますが、実際の運用環境では、セキュリティの観点からZabbixエージェントのroot権限での実行が許可されないケースあると思います。
Zabbixでは、Userparameterで情報を取得するコマンドを個別に作成することもできるので、そのコマンドをsudoのリストに登録しておくことで、root権限がないとアクセスできないコマンドやファイルの実行するやりかもあります。
Userparameterの登録
vfs.dir.sizeと同等の結果が得られるように、duと*awk**を組み合わせてディレクトリのサイズを取得するコマンドを登録します。
UserParameter=test.dir.size[*],sudo /usr/bin/du -s $1 | awk '{print $$1}'
ディレクトリのサイズをカウントするduをsudoコマンドで起動しています。 awkの処理記述でprint $$1と$が2つあるのは、Userparameterで正しくawk変数が認識されるためのエスケープのための記述です。
zabbixユーザにduコマンドをルート権限で実行する許可をsudoのリストに追加します。
$ sudo visudo #以下の2行を追記します。 Defaults:zabbix !requiretty zabbix ALL= NOPASSWD: /bin/ls, /usr/bin/du
動作確認
通常のユーザは参照mysqlのデータ用ディレクトリのサイズを確認します。
# ユーザ”appliance”ではアクセスできません。 appliance@zabbix:~$ du -sb /var/lib/mysql du: cannot read directory '/var/lib/mysql': Permission denied 4096 /var/lib/mysql # sudo登録したコマンドを使ってZabbixエージェントから情報を取得 appliance@zabbix:~$ zabbix_get -s 127.0.0.1 -k test.dir.size[/var/lib/mysql] 1410013999
このように、zabbixユーザで動作しているZabbixエージェントでも、Userparameterを使用すると、sudoコマンドを使ってroot権限での実行が可能になります。とはいえ、登録するコマンドによってはセキュリティ上の脅威になることには変わりないので、sudoリストに登録するのはデータを取得するだけのコマンドにとどめておいたほうが安全です。