リモートコマンド実行エラーの結果取得
お世話になっています。
リモートコマンドを実行する場合、エージェント側に、以下のデータを送付してエージェント側で実行する仕組みと認識しています。
system.run["<実行コマンド>","nowait"]
ただし、実行コマンドサイズが長く、2048バイトを超える場合、後ろが切られた形でエージェントに送信され、コマンドは実行されないようです。
この場合、エージェントのログ上からは、以下のようにエラーがサーバに返されていますが、Zabbixの画面上では反映されないように見えます。
リモートコマンドの実行されなかったことを検知する方法はないでしょうか?
28745:20110330:125640.779 Sending back [ZBX_NOTSUPPORTED]
28745:20110330:125640.779 Got signal [signal:13(SIGPIPE),sender_pid:28745]. Ignoring ...
28745:20110330:125640.779 Process listener error: ZBX_TCP_WRITE() failed [Broken pipe]
kodai - 投稿数: 1341
リモートコマンドは実行できたかどうかを検知することは難しいですね。結果を監視するとすれば、上記エージェントのログを見るしかないと思います。
コマンドが長い場合はエージェント側にスクリプトを置いて、それを実行させる方が良いですね。
auru - 投稿数: 2
はじめまして。
検知する方法ではないですが・・・
zabbix-1.8.3/include/common.hのMAX_STRING_LENで上限を増やすことはできます。
ちなみにzabbix_getのkeyは1024バイトに制限されているのでこちらの上限を増やす場合は、zabbix-1.8.3/src/zabbix_get/zabbix_get.cのrequest[]です。
私は↓のパッチで4096バイトに増やしてます。
kodaiさんのおっしゃるとおりスクリプトにするという方法もありますが、なが〜い引数を渡したいような場合には上限を増やすしかないですね。
diff -Nru zabbix-1.8.3.org/include/common.h zabbix-1.8.3/include/common.h
--- zabbix-1.8.3.org/include/common.h 2010-08-16 17:20:10.000000000 +0900
+++ zabbix-1.8.3/include/common.h 2011-01-26 12:46:28.000000000 +0900
@@ -147,7 +147,7 @@
#define AGENT_ERROR (-5)
char *zbx_result_string(int result);
-#define MAX_STRING_LEN 2048
+#define MAX_STRING_LEN 4096
#define MAX_BUF_LEN 65536
#define ZBX_DM_DELIMITER '\255'
diff -Nru zabbix-1.8.3.org/src/zabbix_get/zabbix_get.c zabbix-1.8.3/src/zabbix_get/zabbix_get.c
--- zabbix-1.8.3.org/src/zabbix_get/zabbix_get.c 2010-08-16 17:19:32.000000000 +0900
+++ zabbix-1.8.3/src/zabbix_get/zabbix_get.c 2011-01-26 12:46:36.000000000 +0900
@@ -138,7 +138,7 @@
zbx_sock_t s;
int ret;
char *buf,
- request[1024];
+ request[4096];
assert(value);