Zabbix

為什麼我的主機在 zabbix 伺服器上顯示為不可訪問?

  • October 1, 2018

我在兩台不同的電腦上有一個 zabbix 伺服器和一個代理。代理在活動模式下執行,例如我在配置文件中有這個:

StartAgents=0
ServerActive=my.zabbix.server.com
Hostname=my.zabbix.agent.com

zabbix server 可以從帶有代理的機器上訪問,例如:

telnet my.zabbix.server.com 10051
Trying 111.111.111.111...
Connected to my.zabbix.server.com.
Escape character is '^]'.
Connection closed by foreign host.

而且伺服器開啟了主機自動註冊,我剛啟動的時候代理已經成功註冊了主機。所以連接必須是活動的。這是我在啟動它時在代理日誌中看到的內容:

83074:20171128:082440.324 Starting Zabbix Agent [my.zabbix.agent.com]. Zabbix 3.4.1 (revision 71734).
83074:20171128:082440.324 **** Enabled features ****
83074:20171128:082440.324 IPv6 support:          YES
83074:20171128:082440.324 TLS support:           YES
83074:20171128:082440.324 **************************
83074:20171128:082440.324 using configuration file: /usr/local/etc/zabbix34/zabbix_agentd.conf
83074:20171128:082440.324 agent #0 started [main process]
83076:20171128:082440.325 agent #1 started [collector]
83077:20171128:082440.326 agent #2 started [active checks #1]

換句話說,代理可以連接到伺服器,它甚至可以辨識它的版本。代理日誌中沒有其他任何事情發生。

在伺服器上,它仍然說主機不可達!

可能是什麼問題呢?

更新:在前端,我看到這條消息:

ZBX紅色錯誤提示

我不確定它為什麼要連接到 10050?它用於被動代理。我的代理應該是活躍的。

UPDATE2:如果我從 zabbix 伺服器中刪除主機,然後重新啟動代理,則會發生以下情況:

主機再次在伺服器上自動註冊。代理日誌:

14551:20171128:193954.483 Starting Zabbix Agent [my.zabbix.server.com]. Zabbix 3.4.1 (revision 71734).
14551:20171128:193954.484 **** Enabled features ****
14551:20171128:193954.484 IPv6 support:          YES
14551:20171128:193954.484 TLS support:           YES
14551:20171128:193954.484 **************************
14551:20171128:193954.484 using configuration file: /usr/local/etc/zabbix34/zabbix_agentd.conf
14551:20171128:193954.484 agent #0 started [main process]
14553:20171128:193954.485 agent #1 started [collector]
14554:20171128:193954.485 agent #2 started [active checks #1]
14554:20171128:193954.614 no active checks on server [my.zabbix.server.com:10051]: host [my.zabbix.agent.com] not found

在哪裡:

  • my.zabbix.server.com 是伺服器的 FQDN
  • my.zabbix.agent.com 是代理的 FQDN,也是代理配置中的 HostName 參數。

看起來,代理成功註冊了主機,但由於某種原因,伺服器試圖以被動模式從代理獲取資訊。儘管事實上,代理被配置為活動模式。

更新 3:雖然代​​理正在發送數據,但主機列表仍然顯示一個問題:

在此處輸入圖像描述

可用性/ZBX 有一個危險信號,並顯示一條消息“從代理獲取值失敗:無法連接到

$$ [ip_address_here $$:1050]:$$ 4 $$中斷的系統呼叫”。我檢查了這些主機的每一個項目和每一個發現,它們都有 type=“Zabbix Agent Active”。所以我不明白為什麼伺服器試圖以被動模式連接它們? ?? 這不會導致真正的“問題”(​​例如,生成動作並從 zabbix 伺服器發送通知的東西),但是在螢幕上看到紅旗是非常令人不安的。 在這個問題完全解決之前,我什至不會接受我自己的答案。

更新4:在更改所有連接到我的主機的所有模板的所有項目類型、發現類型和項目原型的類型,以及所有連結到那裡的模板之後,ZBX 危險信號終於消失了. 我相信我是一個經驗豐富的軟體使用者,但很難理解發生了什麼,並更改所有參數以使其工作。

簡短的回答:問題是所有項目都有 Type=“Zabbix Agent” 而不是 Type=“Zabbix Agent Active”。

長答案:主機要麼是主動代理,要麼是被動代理。(好吧,也許如果您嘗試在同一台機器上啟動兩個代理,那麼您可以在一台主機上同時執行這兩個代理,但這似乎毫無意義。)合乎邏輯,對嗎?

所以實際上,主動或被動是宿主的屬性,而不是物品。儘管如此,數據收集的模式(例如被動或主動)是綁定到項目,而不是主機。我認為這是 zabbix 的設計缺陷。這是非常反直覺的。他們唯一能克服這個問題的方法是:

  • 為您要使用的所有模板創建一個完整複製。****製作完整的複製而不是簡單的複製非常重要。例如,創建“Linux OS”的完整複製和“FreeBSD OS”模板的完整複製,並將其所有項目類型從“Zabbix Agent”批量更新為“Zabbix Agent (Active)”。還需要將所有發現規則類型從“Zabbix Agent”更新為“Zabbix Agent (active)”。您還需要檢查發現規則項目,點擊它們的“項目原型”,並將所有項目原型的類型從“Zabbix Agent”更改為“Zabbix Agent (Active)”
  • 還需要確保沒有連結(父)模板。如果有,您需要遞歸地創建它們的完整複製,然後取消連結 + 清除舊父級,並連結新父級。例如,如果您批量更新“Linux OS”中的所有項目類型,那麼它不會更新連結的“Zabbix Agent”模板中使用的所謂“模板項目”。所以你需要將“Zabbix Agents”完全複製到“Zabbix Agents Active”中,將所有項目類型更新為active,然後重新連結(例如從“Linux OS”取消連結+清除“Zabbix Agents”模板,然後連結新創建的“ Zabbix 代理活動")
  • 這是遞歸的:您需要重複所有這些步驟,直到所有項目和所有模板項目都包含“主動”模式而不是“被動模式”

您需要複製系統中幾乎所有的模板。對於獨立於項目類型的單個項目,您不能有一個觸發器,因為沒有這樣的事情。如果你想在被動和主動代理混合的環境中改變某些東西,那麼你必須做兩次。

最後,當您添加主機時,您需要分配主動或被動模板版本,具體取決於您要用於該特定主機的模式。

所有這一切都是因為主動/被動模式不能是主機的屬性。它必須是項目的屬性。更糟糕的是:它也是發現規則的屬性,是發現規則的原型(並且原型項目不能大規模更新,你必須一個一個,手工)。說真的,像“cpu.load”這樣的項目與數據的收集方式完全無關。我的意思是來吧,你可以改變主意,從主動模式切換到被動模式,或者返回。這不應該強迫您刪除所有舊項目,創建新項目。但是,如果您決定這樣做,您將失去所有歷史記錄,因為您不僅在更改項目,而且在替換它們。這真的很煩人!

我希望他們能在即將到來的 4.0 版本中解決這個問題。

要使主動檢查起作用,代理主機名必須與 Zabbix 伺服器中的主機名匹配。“代理主機名”不一定是系統主機名 - 它取決於配置參數“主機名”和“主機名項”。Zabbix 中的主機名不是 DNS 或 IP 地址 - 它是主機屬性中“主機”欄位的內容。

當代理啟動時,它會列印出它發送到伺服器的主機名。在您的範例中:Starting Zabbix Agent [my.zabbix.server.com]- 也就是說,代理將自己向伺服器標識為my.zabbix.server.com. 使該值與正確的主機名匹配(注意區分大小寫),主動檢查將開始工作。請注意,如果兩個或多個代理正在發送數據並辨識為它,則其他主機​​可能具有不正確的值。

請注意,代理日誌中列印的版本是代理版本,而不是伺服器版本 - 代理無法確定伺服器版本。

引用自:https://serverfault.com/questions/885459