監視対象のサーバにZabbix-Agentをインストールして、設定ファイルのホスト名やらZabbixサーバのIPやらを変更して、さぁZabbix-Agentを起動しようとしてみてもなぜか起動しない。。。
SELinuxが有効になっている場合に Zabbix-Agent が起動しないコトがありますが、その場合の対処法を紹介します。
状態の確認
監視サーバ(Zabbix Server)から確認
zabbix_get コマンドを実行してみると、以下のレスポンスとなり、接続できない。これは、Zabbix-agent が起動していないので当然といえば当然。
1 2 |
# zabbix_get -s 192.168.10.51 -k agent.hostname zabbix_get [20778]: Get value error: cannot connect to [[192.168.10.51]:10050]: [111] Connection refused |
※firewalld で10050 は開けています。
監視対象のサーバで確認
Zabbix-Agent プロセスの起動状態を確認しますが、failed の表示となり起動していない様子。
1 2 3 4 5 6 7 8 9 10 11 |
]# systemctl status zabbix-agent ● zabbix-agent.service - Zabbix Agent Loaded: loaded (/usr/lib/systemd/system/zabbix-agent.service; enabled; vendor preset: disabled) Active: activating (auto-restart) (Result: exit-code) since 水 2019-05-15 16:14:05 JST; 5s ago Process: 7428 ExecStop=/bin/kill -SIGTERM $MAINPID (code=exited, status=1/FAILURE) Process: 7424 ExecStart=/usr/sbin/zabbix_agentd -c $CONFFILE (code=exited, status=0/SUCCESS) Main PID: 7426 (code=exited, status=1/FAILURE)★ 5月 15 16:14:05 HOSTNAME systemd[1]: zabbix-agent.service: control process exited, code=exited status=1 5月 15 16:14:05 HOSTNAME systemd[1]: Unit zabbix-agent.service entered failed state. 5月 15 16:14:05 HOSTNAME systemd[1]: zabbix-agent.service failed.★ |
次に、Zabbix-Agent のログを確認すると、Permission denied と記録されています。
1 2 3 4 5 6 7 8 9 |
]# tail zabbix_agentd.log 8177:20190515:163240.171 Starting Zabbix Agent [HOSTNAME]. Zabbix 3.0.22 (revision 84876). 8177:20190515:163240.171 **** Enabled features **** 8177:20190515:163240.171 IPv6 support: YES 8177:20190515:163240.171 TLS support: YES 8177:20190515:163240.171 ************************** 8177:20190515:163240.171 using configuration file: /etc/zabbix/zabbix_agentd.conf 8177:20190515:163240.171 cannot set resource limit: [13] Permission denied ★ 8177:20190515:163240.171 cannot disable core dump, exiting... |
続いて、audit.log(/var/log/audit/audit.log)を確認します。
何かしらでgrepしないと対象のログを特定しずらいので、以下ではPIDでgrepしています。指定しているPIDは "systemctl status zabbix-agent"で表示されたものです。キーワードは"zabbix"などでもよいと思います。
1 2 3 4 5 |
audit]# grep 7426 audit.log type=SYSCALL msg=audit(1557883011.919:1223387): arch=c000003e syscall=160 success=no exit=-13 a0=4 a1=7ffca1574260 a2=0 a3=8 items=0 ppid=1 pid=28497 auid=4294967295 uid=996 gid=994 euid=996 suid=996 fsuid=996 egid=994 sgid=994 fsgid=994 tty=(none) ses=4294967295 comm="zabbix_agentd" exe="/usr/sbin/zabbix_agentd" subj=system_u:system_r:zabbix_agent_t:s0 key=(null) type=SERVICE_START msg=audit(1557891785.920:1227426): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='unit=zabbix-agent comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=failed' type=AVC msg=audit(1557904445.169:1233361): avc: denied { setrlimit } for pid=7426 comm="zabbix_agentd" scontext=system_u:system_r:zabbix_agent_t:s0 tcontext=system_u:system_r:zabbix_agent_t:s0 tclass=process type=SYSCALL msg=audit(1557904445.169:1233361): arch=c000003e syscall=160 success=no exit=-13 a0=4 a1=7ffc5fffa860 a2=0 a3=8 items=0 ppid=1 pid=7426 auid=4294967295 uid=996 gid=994 euid=996 suid=996 fsuid=996 egid=994 sgid=994 fsgid=994 tty=(none) ses=4294967295 comm="zabbix_agentd" exe="/usr/sbin/zabbix_agentd" subj=system_u:system_r:zabbix_agent_t:s0 key=(null) |
これだけではわかりませんので、SELinuxの管理や操作ができるツールをインストールします。以下をインストールすることで、semanage、audit2allow、audit2why、chcat、semodule といったコマンドが利用できるようになります。
1 |
# yum install policycoreutils-python |
インストールしたツールを利用してログから確認します。
1 2 3 4 |
# grep zabbix_agentd /var/log/audit/audit.log | audit2allow #============= zabbix_agent_t ============== allow zabbix_agent_t self:process setrlimit; |
ということで、原因は SELinux なので、Zabbix-Agent を許可するポリシーを作成してよれば良いようです。
SELinuxのポリシーを生成してインストール
まずは、ポリシーを生成します。
※『Allow-Zabbix_Agent』は任意の名前を指定すれば良い
1 2 3 4 5 |
# grep zabbix_agentd /var/log/audit/audit.log | audit2allow -M Allow-Zabbix_Agent ******************** IMPORTANT *********************** To make this policy package active, execute: semodule -i Allow-Zabbix_Agent.pp |
表示された、『semodule -i Allow-Zabbix_Agent.pp』を実行することで生成したポリシーをインストールできます。が、順を追ってみていきたいと思います。
カレントディレクトリにポリシーファイルが生成されています。
1 2 3 |
# ls -l -rw-r--r--. 1 root root 887 5月 15 16:31 Allow-Zabbix_Agent.pp -rw-r--r--. 1 root root 184 5月 15 16:31 Allow-Zabbix_Agent.te |
拡張子が『.te』のほうは、テキストファイルなので、中身を見てみると以下のようになっていました。
1 2 3 4 5 6 7 8 9 10 11 |
# cat Allow-Zabbix_Agent.te module Allow-Zabbix_Agent 1.0; require { type zabbix_agent_t; class process setrlimit; } #============= zabbix_agent_t ============== allow zabbix_agent_t self:process setrlimit; |
では、ポリシーをインストールします。
1 |
# semodule -i Allow-Zabbix_Agent.pp |
うまくいった場合は、プロンプトには何も返ってきません。
Zabbix-Agent を起動してプロセスを確認してみます。ちゃんと起動していますね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# systemctl restart zabbix-agent # systemctl status zabbix-agent ● zabbix-agent.service - Zabbix Agent Loaded: loaded (/usr/lib/systemd/system/zabbix-agent.service; enabled; vendor preset: disabled) Active: active (running) since 水 2019-05-15 16:37:09 JST; 8s ago Process: 8235 ExecStop=/bin/kill -SIGTERM $MAINPID (code=exited, status=0/SUCCESS) Process: 8238 ExecStart=/usr/sbin/zabbix_agentd -c $CONFFILE (code=exited, status=0/SUCCESS) Main PID: 8240 (zabbix_agentd) CGroup: /system.slice/zabbix-agent.service ├─8240 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf ├─8241 /usr/sbin/zabbix_agentd: collector [idle 1 sec] ├─8242 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection] ├─8243 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection] ├─8244 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection] └─8245 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec] 5月 15 16:37:09 HOSTNAME systemd[1]: Starting Zabbix Agent... 5月 15 16:37:09 HOSTNAME systemd[1]: PID file /run/zabbix/zabbix_agentd.pid not readable (yet?) after start. 5月 15 16:37:09 HOSTNAME systemd[1]: Started Zabbix Agent. |
Zabbixサーバからも確認してみます。
1 2 |
@Zabbix-SV ]# zabbix_get -s 192.168.10.51 -k agent.hostname HOSTNAME |
以上です。
↓↓↓ 持っていると便利な一冊 ↓↓↓