Zabbix Timeout 設定不當導致的問題

2023-06-25 18:00:36

哈嘍大家好,我是鹹魚

今天跟大家分享一個關於 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.