「system.run」アイテムで、外部コマンドを実行する場合、パーミッションエラーになる場合があります。
外部コマンドを実現する
外部コマンドの結果を表示させたい
Zabbix Agentの5.0より前は、「EnableRemoteCommands」で、外部コマンドを実行できるようにしていましたが、
Zabbix Agentの5以上では、
AllowKey=system.run[*]
を有効(追加)にします。
vi /usr/local/etc/zabbix_agentd.conf ### Option: EnableRemoteCommands - Deprecated, use AllowKey=system.run[*] or DenyKey=system.run[*] instead # Internal alias for AllowKey/DenyKey parameters depending on value: # 0 - DenyKey=system.run[*] # 1 - AllowKey=system.run[*] # # Mandatory: no AllowKey=system.run[*]
↑これで、zabbix-agent を再起動します。
パーミッションのエラー
今回、例として
du -s -b /tmp/zabbix | awk '{print $1}'
というコマンドで、「/tmp/zabbix」というディレクトリの容量を出してみます。
xxx:YYYYMMDD:HHMMSS.SSS item "xxxx:system.run[du -s -b /tmp/zabbix | awk '{print $1}',wait]" became not supported: Value of type "string" is not suitable for value type "Numeric (unsigned)". Value "du: cannot read directory ‘/tmp/zabbix/2’: Permission denied
↑ログをみると「/tmp/zabbix/2」がパーミッションの関係で、読むことができない。と出ています。
Zabbix-Agentのプロセスが、zabbixというユーザ(rootではないユーザ)で動いているので、読めないディレクトリ(ファイル)が存在する場合がある。ということです。
パーミッション、解決方法。
解決方法その1、sudoで行う
xxx:YYYYMMDD:HHMMSS.SSS item "xxxx:system.run[sudo du -s -b /tmp/zabbix | awk '{print $1}',wait]" became not supported: Unsupported item key. xxx:YYYYMMDD:HHMMSS.SSS error reason for "xxxx:system.run[sudo du -s -b /tmp/zabbix | awk '{print $1}',wait]" changed: Value of type "string" is not suitable for value type "Numeric (unsigned)". Value " We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. sudo: no tty present and no askpass program specified"
↑「sudo du -s -b /tmp/zabbix | awk ‘{print $1}’」とsudoコマンドで実行しましたが、エラーとなりました。
# sudo visudo zabbix ALL=NOPASSWD: ALL
↑sudo visudoにて、zabbixに権限を与えます。
これで、zabbixユーザは、パスワードなしで実行できるようになります。
xxx:YYYYMMDD:HHMMSS.SSS item "xxxx:system.run[sudo du -s -b /tmp/zabbix | awk '{print $1}',wait]" became supported
↑エラーが解消しました
解決方法その2、Zabbix-Agent側で設定(2021/4/2 追加)
vi /usr/local/etc/zabbix_agentd.conf ### Option: EnableRemoteCommands - Deprecated, use AllowKey=system.run[*] or DenyKey=system.run[*] instead # Internal alias for AllowKey/DenyKey parameters depending on value: # 0 - DenyKey=system.run[*] # 1 - AllowKey=system.run[*] # # Mandatory: no AllowKey=system.run[*]
↑最後の行を追加して、「system.run」を実行可能にします。
# systemctl restart zabbix-agent
↑ と、再起動をします。これで、「sudo」を使わなくても、
↑ と、キーの設定をすれば、違うサーバーでコマンドが実行されます。
解決方法その3、Zabbix-Agentをrootで起動
# vi /usr/local/etc/zabbix_agentd.conf # Default: # AllowRoot=0 AllowRoot=1
↑AllowRootを有効にします。
vi /usr/lib/systemd/system/zabbix-agent.service User=zabbix Group=zabbix ↓ User=root Group=root # systemctl daemon-reload # systemctl restart zabbix-agent
↑起動ファイルにて、起動ユーザ/グループを、rootにします。
system.run確認方法(2021/4/2 追加)
# zabbix_get -s xxx.xxx.xxx.xxx -k 'system.run[ls -al /home|wc -l]' 13
↑「xxx.xxx.xxx.xxx」は、Zabbix-agent側のIPアドレス。
Zabbix-Server側で、「zabbix_get」コマンドを実行します。
上記のように数字が返ってくればOKです。
# zabbix_get -s xxx.xxx.xxx.xxx -k 'system.run[ls -al /home|wc -l]' ZBX_NOTSUPPORTED: Unsupported item key.
↑ と、「ZBX_NOTSUPPORTED: Unsupported item key.」と出てきたら、何らかの設定が必要です。
du コマンドまとめ
root ユーザで、Zabbix-Agentを起動すると、セキュリティ的に心配なので、「sudo」経由で実行できるようにするのがいいでしょう。