目錄
- 問題
- 排查
- 解決
今天跟大家分享一個關于 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
而且經過進一步排查,發現:
- server 節點運行正常,agent 節點正常運行
- server 節點和 agent 節點之間可以 ping 通,而且 Telnet 端口可用
綜合上面的現象,懷疑是網絡原因導致 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 端設置的超時時間是 3s,有可能會出現網絡原因導致 TCP 建立連接時間超時,server 端獲取不到數據,就會出現上面的問題
- 被動模式下,server 向 agent 獲取數據,但是 server 端設置的超時時間是 30s,這個超時時間可以說是非常大了
我們把 agent 端的超時時間改一下,跟 server 端一致
#agent 端
Timeout=30
重啟 agent 后發現日志沒有報 started to fail (ZBX_TCP_READ() timed out)
錯,zabbix server 端也能夠獲取數據了
總結一下:
- 在 Zabbix 中,timeout 是指在進行監控數據獲取或傳輸時,等待響應時間的限制
- Agent 和 Server 之間的超時時間設置應該相互協調,并根據實際網絡狀況和環境來進行調整。如果 Agent 的 timeout 設置得太短,可能會導致一些請求無法完成;而如果 Server 的 timeout 設置得太短,可能會導致 Agent 的請求被錯誤地判定為超時
- 主動模式下 agent 的 timeout 值最好高于 server 配的 timeout 值,被動模式下 server 配的 timeout 值最好高于 agent 的 timeout
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.