哈嘍大家好,我是鹹魚
今天跟大家分享一個關於 zabbix Timeout 值設定不當導致的問題,這個問題不知道大家有沒有碰到過
事情經過是這樣的:
把某一臺 zabbix agent 的模板由原來的 Template OS Windows by Zabbix agent
換成了 Template OS Windows by Zabbix agent active
Template OS Windows by Zabbix agent active
使用 主動模式 主動獲取資料
Template OS Windows by Zabbix agent
使用 被動模式 等待 Server 請求資料
也就是說在主動模式下,Zabbix Agent 主動連線到 Zabbix Server 並行送監控資料,Zabbix Server 只需監聽指定的埠,接收 Agent 傳送過來的資料
結果發現 zabbix server 接收不到資料
檢視 agent 紀錄檔(/var/log/zabbix/zabbix_agentd.log
),發現 ZBX_TCP_READ() timed out
8452:20230620:134942.947 active check configuration update from [192.168.149.129:10051] started to fail (ZBX_TCP_READ() timed out)
8452:20230620:135044.072 active check configuration update from [192.168.149.129:10051] is working again
8452:20230620:140049.959 active check configuration update from [192.168.149.129:10051] started to fail (ZBX_TCP_READ() timed out)
8452:20230620:140149.093 active check configuration update from [192.168.149.129:10051] is working again
而且經過進一步排查,發現:
綜合上面的現象,懷疑是網路原因導致 TCP 建立連線時間超時,agent 向 server 傳送資料失敗
既然是網路原因,那為什麼我在修改模板(即被動模式)之前,server 是能夠向 agent 獲取資料的
怎麼被動模式就沒超時,主動模式就超時了呢?
在 Zabbix 中,timeout(超時)是指在進行監控資料獲取或傳輸時,等待響應的時間限制
在組態檔中如下所示,預設值是 3 s
### Option: Timeout
# Spend no more than Timeout seconds on processing
# Timeout=3
我們分別來看下 server 和 agent 關於超時時間的設定
#server 端
Timeout=30
#agent 端
Timeout=3
可以看到,sever 端設定的超時時間是 30 s,agent 端設定的超時時間是 3s,這兩個時間相差太大了吧
如果 agent 的 timeout 設定得太短,可能會導致一些請求無法完成;而如果 server 的 timeout 設定得太短,可能會導致 agent 的請求被錯誤地判定為超時
結合上面的情況,可以得知:
我們把 agent 端的超時時間改一下,跟 server 端一致
#agent 端
Timeout=30
重啟 agent 後發現紀錄檔沒有報 started to fail (ZBX_TCP_READ() timed out)
錯,zabbix server 端也能夠獲取資料了
總結一下:
If used with the passive agent, Timeout value in server configuration may need to be higher than Timeout in the agent configuration file. Otherwise the item may not get any value because the server request to agent timed out first.