UserParameterの関数で常に0が返却される

はじめまして

このたびzabbixを用いてRAIDの監視を行うことになりました。
そこで寺島さんが以前に紹介されている以下の記事を参考に設定を行いました。
http://thinkit.co.jp/cert/article/0611/19/6/3.htm

本番環境に設定を行う前に仮想環境にてテストをを行っているのですが、期待した値が返却されません。
具体的には、RAIDサーバーで
【cat /proc/mdstat |grep -A 1 'md0' |tail -1 |cut -f1 -d"]" |cut -f2 -d"/"】
のコマンドを入力すると、RAIDを構成するハードウェア数である"2"が正しく返却されますが、
zabbixのwebコンソールまたはzabbix_getで値を取得すると"0"が返却されてしまいます。

これは仮想環境にてテストを行ったために起こる現象なのか、または当方の設定が何かまずいのか、
ご教授お願いします。

※【ifconfig|grep '1'|wc -l】(ifconfigの出力結果中に'1'を含む行がいくつあるか)のコマンドで試した場合も、
RAIDサーバーのコンソールからは正しく'"9"の値が返却されますが、webコンソールまたはzabbix_getでは"0"となってしまいます。
そのためUserParameterの関数やRAIDの設定誤りなどではないと考えております。

なお環境は以下のとおりです。
■zabbixサーバー
CentOS6.5
zabbix2.2.3-1.el6(x86_64)

■RAIDサーバー
CentOS6.5
zabbix2.2.3-1.el6(i386)

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー KAZ の写真

naomatsuさん

シェルの確認ですが、Zabbixエージェントの起動アカウントで行いましたか?
それともrootアカウントで行いましたか?

rootアカウトで確認した場合、権限の可能性があります。
zabbix_agentd.confのAllowRootはデフォルト「0:do not allow」なので「1:allow」にしてみてください。

ユーザー TNK の写真

KAZさんからすでに回答を頂いていますが、監視されているシステ
ムの構成を確認させてください。

Zabbixのエージェントを導入されたサーバは、仮想環境上に複数の
仮想ディスクを利用したRAIDサーバを構築されたものということで
よろしいですか?
そして、その状況をmdstatなどを利用して取得しようとされている
ということでよろしいですか?

コンソールやターミナルで実行したときと異なる結果となるという
ことであれば、KAZさんが書かれている通り、直接実行された際の
アカウントの権限や環境変数と、Zabbixエージェントを起動してい
ると思われるzabbixユーザとの権限や環境変数とを比較してみてく
ださい。

ZabbixエージェントのDebugLevelを一時的にあげて、Zabbixエージ
ェントを再起動して、ログを確認してみると、障害が発生している
場合は、その障害の原因を特定するような情報が出力されると思い
ますので試してみてください。

ユーザー naomatsu の写真

KAZさん

ご回答いただきありがとうございます。

zabbix_agentd.confのAllowRootは"0"となっておりました。
"1"に設定してzabbix-agentを再起動してみましたが、やはり0が返却されるようです。
なおzabbixユーザー、rootユーザーそれぞれでzabbix-agentの再起動を行いましたが、結果は変わりませんでした。

またps -Fでプロセスの実行ユーザーを確認しましたが、zabbixユーザーとなっていました。

引き続き、何か思い当たる原因などあればご教授おねがいします。

ユーザー KAZ の写真

naomatsu さん

Zabbix1.8.20ではうまくいきますね…

/etc/zabbix/zabbix_agentd.conf
…略…
# Mandatory: no
# Default:
# UserParameter=
UserParameter=hoge,ifconfig|grep '1'|wc -l

]# zabbix_get -s 127.0.0.1 -k "hoge"
10

Zabbix2.2.3の環境つくりますので少々お時間いただけますか?

ユーザー TNK の写真

ifconfigならこちらでもすぐに用意できたので2.2.3で確認してみました。

# zabbix_get -s 127.0.0.1 -k hoge
12
#

とターミナルの直接実行と同じ値が正常に取得できています。

ユーザー naomatsu の写真

KAZさん、TNKさん

ZabbixエージェントのDebugLevelを4にして実行してみたところ、以下のログが出力されておりました。

cat: /proc/mdstat: 許可がありません

しかしcatの実行権限およびmdstatの読み込み権限には問題ないようにみえます。

[root@raid1 raid]# ls -l /bin/cat
-rwxr-xr-x. 1 root root 47976 3月 12 20:06 2014 /bin/cat
[root@raid1 raid]# ls -l /proc/mdstat
-r--r--r--. 1 root root 0 4月 21 11:50 2014 /proc/mdstat

また上でも記載しましたが、RAIDサーバのコンソールからrootおよびzabbixユーザーでコマンドを実行することはできるようです。
cat /proc/mdstat |grep -A 1 'md0' |tail -1 |cut -f1 -d"]" |cut -f2 -d"/"

KAZさん
>Zabbix2.2.3の環境つくりますので少々お時間いただけますか?
はい。よろしくお願いします。

ユーザー TNK の写真

もしかしたら、SELinuxが有効になっていませんか?

そうであるならば、該当するファイルへのアクセス許可を別途行う
必要があるかもしれません。
SELinuxを利用されているのであれば、Permissiveモードに切り替
えてみてください。

ユーザー naomatsu の写真

TNKさん

ご指摘のとおり、SELINUXの設定を変更してサーバーを再起動すると、正常に値が取得できるようになりました。
zabbixとは直接関係のない箇所での問題によりお手数をおかけしてしまい、申し訳ございませんでした。

ここで1つ質問なのですが、コマンドが失敗しているにもかかわらず"0"が返却されるのは何故でしょうか?
できれば教えていただけないでしょうか?

ユーザー fripper の写真

cat 等前段のコマンドがエラーを起こした場合、その返す文字列は「」 いわゆる空文字列です
#エラー文字列は 標準出力でなく、標準エラー出力に出ているので、今回の後段コマンドの処理対象にはなっていないようです

その中を grep し、行数 wc -l をカウントした結果が0件であるため、wc コマンドが「0」という文字列を
出力している、という流れになるかと思います

ユーザー naomatsu の写真

fripperさん

なるほど理解しました。ご教授いただきありがとうございます。

>KAZさん、TNKさん
このたびは問題解決に力を貸して頂きありがとうございます。
また何か問題があれば再びお知恵をお借りすることがあるかもしれませんが、その際はよろしくお願いします。