userparameterの取得

始めまして、お世話になります。

現在proxyを通して監視を行っています。
通常のアイテム・キーによる監視は正常に取得できているのですが、UserParameterに設定した値が取得できません。

監視の為に行った設定は、エージェント側の zabbix_agentd.conf に 
UserParameter=postfix.queue,/usr/bin/sudo /usr/bin/find /var/spool/postfix/active -type f|wc -l
を設定し、再起動をかけ

サーバー側から /usr/bin/zabbix_get -s ホスト名 -k postfix.queue で取得テストしようと思っているのですが
zabbix_get [18699]: Get value error: cannot resolve [ホスト名] と表示されてしまい、取得出来ません。

proxyを通している場合、proxy側にも何か設定が必要なのでしょうか?

ログを見ても何も出ていないので、原因が分からず、アドバイスを頂きたく書き込みさせて頂いた次第です。

コメント表示オプション

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

zabbix_getコマンドは、どこで実行されましたか?

zabbix_getコマンドは、ZabbixサーバやZabbixプロキシとは全く連
携せずに、Zabbixエージェントに直接リクエストを投げて値を取得
します。

ですので、Proxyを利用されているのであれば、Zabbixエージェン
トの設定で、Zabbixプロキシからのリクエストを受け付けられるよ
うに設定されていると思いますので、Zabbixプロキシを稼働させて
いるサーバ上にてzabbix_getコマンドを実行する必要があります。

Zabbixプロキシを稼働させているサーバ上で、

zabbix_get -s ホスト名 -k postfix.queue

を実行してください。
DNSやhostsファイルで名前解決ができないのであれば、ホスト名で
はなく、IPアドレスを指定して実行してみてください。

ユーザー arapon の写真

早速のご回答ありがとうございます!

エラーで返ってきていた原因は、仰るとおりhostsに登録されておらず、名前解決出来ていなかったからでした。
(監視サーバーのホストに登録していたので繋がるのかと勘違いしていました)
一応監視サーバー側でIP指定してやってみましたが、繋がりませんでした。
応答が無く、暫く経つと Timeout while executing operation でエラーがでていました。

その後にプロキシが立っているサーバーでコマンド実行しました。
(プロキシサーバーは、監視対象のサーバーと同じ所に存在していました)

zabbix_get -s 192.168.xx.xx -k postfix.queue

上記コマンドを実行したのですが、空白?と言うべきなのかわかりませんが、何も返ってきませんでした。
しかし、 zabbix_get -s localhost -k postfix.queue でコマンドを実行すると 0 が返ってきました。
0は正しい値です。

これは外部からのコマンドが実行出来ておらず、内部(localhost)では上手く実行できた という事なのでしょうか?

ユーザー TNK の写真

192.168.xx.xxで値が正常に返却されず、localhostで返却されるの
であれば、zabbix_agentd.conf内のServerの値が127.0.0.1になっ
ていませんか?

このServerの値に指定したIPアドレスからの要求がきた時のみエー
ジェントが値を返却するようになっています。
恐らく192.168.xx.xxは指定されていないので、空が返却されたの
だと思われます。

Proxyを利用される場合は、ServerにProxyのIPアドレスを指定して
ください。

ユーザー arapon の写真

お返事ありがとうございます。 そして遅くなって申し訳ありません。

>Proxyを利用される場合は、ServerにProxyのIPアドレスを指定して
ください。

との事ですので、同じサーバー内にproxyと監視対象のagentがある場合は、127.0.0.1でいいのですよね?
それとも 監視サーバー(サーバーxxx)→proxy(サーバーyyy)→agent(サーバーyyy) と言った形でuserparameterを取得したい場合は
このままでは取得出来ませんかね?

ユーザー arapon の写真

無事取得出来ました!
ありがとうございます。

そこでなのですが、userparameterでもう1つ質問がございます。
値を取得する際の値渡しと指定フィールドの値取得を同時に行いたいのですが、ZBX_NOTSUPPORTED のエラーになってしまいます。

上記行いたい内容の例としてコマンドを挙げますと
df |grep /dev/cccc/xxxx |awk '{printf($5"n")}'   

①あるデバイスの使用率だけ取得したい。
②デバイスはパラメーターで受け取って、キーによって変更出来るようにしたい。

これをzabbixのagent側で
df.geter[*],df |grep $1 |awk '{printf($5"n")}' 
と記述し、web管理画面のアイテムのキー登録では 
①df.geter[/dev/cccc/xxxx]  ②df.geter[/dev/cccc/yyyy] 
とセットしました。

こうすることにより、コマンド例のように実行され、且つデバイスはキーのパラメーターに合わせて自由に変更できるかと思ったのですが
ZBX_NOTSUPPORTED で取得出来ませんでした。
df.geter[*],df |grep $1 まででしたら取得出来ます。(使用率以外のフィールドも全部取得されてしまうので駄目ですが)

多分$5が、パラメーターがセットされた場合、dfコマンドのフィールド5番目ではなく、パラメーターの5番目を探しに行ってしまい
エラーになっていると思われるのですが
パラメーターのセットと、特定フィールドの取得は共存出来ないものなのでしょうか?

質問の連続になってしまい申しわけありませんが、何卒ご教授下さい。

ユーザー TNK の写真


UserParameter=df.geter[*],df |grep $1 |awk '{print $$5}'

と指定してみてください。

printfではなくprintを利用し、$5を$$5とします。
改行はしなくても大丈夫です。

ユーザー KAZ の写真

araponさん

awkの記述をシェルスクリプト化してしまう手は使えませんか?

例えば、n.shと言う以下のファイルを作ります。
---------------------------------
#!/bin/sh
df |grep $1 |awk '{printf($5"n")}'
---------------------------------

userparameterには下記の様に書きます。
df.geter[*],n.sh $1

ユーザー arapon の写真

なるほど、スクリプト化すれば良いのですね!
ありがとうございました。

その辺りも考えながら設定してみます、皆様いくつもの質問にご回答ありがとうございました。

また何かあった際にはよろしくお願い致します。