久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Zabbix agent掛掉后Zabbix Web監控依然能夠收到數據是怎么回事

178次閱讀
沒有評論

共計 3210 個字符,預計需要花費 9 分鐘才能閱讀完成。

行業資訊    
數據庫    
Zabbix agent 掛掉后 Zabbix Web 監控依然能夠收到數據是怎么回事

這篇文章主要為大家展示了“Zabbix agent 掛掉后 Zabbix Web 監控依然能夠收到數據是怎么回事”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓丸趣 TV 小編帶領大家一起研究并學習一下“Zabbix agent 掛掉后 Zabbix Web 監控依然能夠收到數據是怎么回事”這篇文章吧。

一 問題描述:

    在一臺主機上添加了 Web 監控,當這臺主機下架后沒有在 Zabbix 頁面中刪除,在 Zabbix 頁面上仍然能夠接收到這臺主機上的 Web 監控數據。按理來說,主機不可達后 Zabbix 頁面不應該再看到這臺主機上的任何監控數據,但是唯獨自帶的 Web 監控可以看到數據。這是個問題。

二 問題分析

    之前一直以為 Zabbix 自帶的 Web 監控是在 Agent 端執行的,所以為每個主機添加相應的 Web 監控,那么在 Zabbix 前端看到的監控數據應該是反映相應的 url 在這臺主機上訪問情況。但是當這臺主機不可達時, 這臺主機上的 Web 監控依賴有數據更新。由此猜想,Zabbix 自帶的 Web 監控并不是在 Agent 端執行的,而是在 Server 端或者 Proxy 端執行的。

  我們從 Zabbix server 的源代碼入手一步一步的去了解 Zabbix 是如何去執行 Web 監控的

    調用 src/zabbix_server/server.c 代碼中的 main() 函數執行 Zabbix server 進程的入口程序

    調用 zbx_load_config() 函數加載配置文件

    調用 libs/zbxnix/daemon.c 代碼中的 daemon_start() 函數允許進程從后臺運行

    調用 src/zabbix_server/server.c 代碼中的 MAIN_ZABBIX_ENTRY() 函數

    調用 zbx_free_config() 釋放配置內存

    調用 libs/zbxdbcache/dbcache.c 代碼中的 init_database_cache() 函數為數據庫緩存分配共享內存

    調用 libs/zbxdbcache/dbconfig.c 中的 init_configuration_cache() 函數為配置緩存分配共享內存

    調用 libs/zbxself/selfmon.c 代碼中的 init_selfmon_collector() 函數 初始化 zabbix 自身監控

    調用 libs/zbxdbhigh/db.c   代碼中的 zbx_db_get_database_type() 函數 判斷當前數據庫是 server 還是 proxy 數據庫

    判斷的標準就是  select userid from users   如果至少有一條數據在 users 表中,那么就返回 ZBX_DB_SERVER,如果沒有就返回 ZBX_DB_PROXY

    調用 libs/zbxdbhigh/db.c   代碼中的

    調用 libs/zbxdbcache/dbconfig.c 代碼中的 DBconnect() 函數連接 Zabbix 數據庫

    調用 libs/zbxdbcache/dbconfig.c 代碼中的 DCload_config() 函數加載 config 表到緩存中

    調用  DCsync_configuration() 函數從數據庫中同步配置數據

   Zabbix server 啟動的線程總數如下

threads_num = CONFIG_CONFSYNCER_FORKS + CONFIG_WATCHDOG_FORKS + CONFIG_POLLER_FORKS
 + CONFIG_UNREACHABLE_POLLER_FORKS + CONFIG_TRAPPER_FORKS + CONFIG_PINGER_FORKS
 + CONFIG_ALERTER_FORKS + CONFIG_HOUSEKEEPER_FORKS + CONFIG_TIMER_FORKS
 + CONFIG_HTTPPOLLER_FORKS + CONFIG_DISCOVERER_FORKS + CONFIG_HISTSYNCER_FORKS
 + CONFIG_ESCALATOR_FORKS + CONFIG_IPMIPOLLER_FORKS + CONFIG_JAVAPOLLER_FORKS
 + CONFIG_SNMPTRAPPER_FORKS + CONFIG_PROXYPOLLER_FORKS + CONFIG_SELFMON_FORKS
 + CONFIG_VMWARE_FORKS;

   

    然后對每個線程進行初始化操作

    循環調用 get_process_info_by_thread() 函數根據線程信息獲取進程信息

    如果 thread_args.process_type 為 ZBX_PROCESS_TYPE_HTTPPOLLER,每個 http poller 線程調用 libs/zbxsys/threads.c 代碼中的  zbx_thread_start(httppoller_thread, thread_args) 函數啟動線程

    然后調用 zabbix_server/httppoller/httppoller.c 代碼中的 ZBX_THREAD_ENTRY(httppoller_thread, args) 函數循環處理 httptests

    然后調用 zabbix_server/httppoller/httptest.c 代碼中的 process_httptest() 函數處理每個 httptest

   process_httptest() 函數會調用幾個 libcurl 提供的函數來完成每個 httptest 中定義的 url 的訪問

   curl_easy_setopt() 設置 libcurl 訪問 url 時的各種參數

   curl_easy_perform() 執行訪問 url 操作

   curl_slist_free_all(headers_slist);  curl_easy_perform() 執行完后必須要調用這個函數

   curl_easy_getinfo() 獲取訪問 url 的結果信息

    調用 process_step_data()   處理 httpstep

    調用 process_httptests()   處理 httptests

    從整個 Zabbix server 處理 Web 監控的過程來看,Zabbix server 是通過 httppoller 線程去循環執行各個 httptest 中的 httpstep 定義的 url 訪問的,每次執行的時候都要從相應的表中查找信息然后過濾處理再將執行的結果寫入的相應的表中,和 Zabbix agent 沒有任何關系,在一些主機上添加 Web 監控只是當 httppoller 執行 curl 操作的時會去讀出這臺主機上的 Web 監控步驟再在 server 端執行。

  需要了解一下一臺主機如果是通過 Zabbix proxy 來管理的,那么在這臺主機上添加的 Web 監控就會在它所在的 proxy 上由 httppoller 線程去執行

三 問題總結        

  通過以上分析,可以知道 Zabbix server 或者 proxy 在執行 Web 監控時只是從數據庫中讀取這臺主機相關的 Web 監控項目獲取 url,然后通過 libcurl 訪問這個 url,再將結果寫入到數據庫中。所以,如果是想通過 Zabbix 自帶的 Web 監控來檢測各個 agent 所在的區域的訪問 url 的質量是行不通的,因為所有的 url 都是在 proxy 或者 server 端訪問,把 server 或者 proxy 端的外網訪問權限去掉,那么所有的 web 監控都會失效。

以上是“Zabbix agent 掛掉后 Zabbix Web 監控依然能夠收到數據是怎么回事”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-19發表,共計3210字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 兴山县| 乌兰县| 云梦县| 镇巴县| 深水埗区| 郸城县| 丰顺县| 南雄市| 句容市| 台东县| 西吉县| 彰武县| 东至县| 麻栗坡县| 濮阳县| 定日县| 彭州市| 休宁县| 通化市| 莱州市| 重庆市| 大丰市| 沙洋县| 凤山县| 融水| 德昌县| 乌鲁木齐县| 郴州市| 宁国市| 祁连县| 荃湾区| 定远县| 秦皇岛市| 扎赉特旗| 垦利县| 定结县| 呼伦贝尔市| 长丰县| 山东省| 青海省| 凤凰县|