溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Zabbix agent掛掉后Zabbix Web監(jiān)控依然能夠收到數(shù)據(jù)是怎么回事

發(fā)布時間:2021-11-25 10:51:00 來源:億速云 閱讀:310 作者:小新 欄目:數(shù)據(jù)庫

這篇文章主要為大家展示了“Zabbix agent掛掉后Zabbix Web監(jiān)控依然能夠收到數(shù)據(jù)是怎么回事”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Zabbix agent掛掉后Zabbix Web監(jiān)控依然能夠收到數(shù)據(jù)是怎么回事”這篇文章吧。

一 問題描述:

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

二 問題分析

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

  我們從Zabbix server的源代碼入手一步一步的去了解Zabbix是如何去執(zhí)行Web監(jiān)控的

   調(diào)用src/zabbix_server/server.c 代碼中的main()函數(shù)執(zhí)行Zabbix server進程的入口程序

   調(diào)用zbx_load_config() 函數(shù)加載配置文件

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

   調(diào)用src/zabbix_server/server.c 代碼中的MAIN_ZABBIX_ENTRY()函數(shù)

   調(diào)用zbx_free_config() 釋放配置內(nèi)存

   調(diào)用libs/zbxdbcache/dbcache.c 代碼中的init_database_cache()函數(shù)為數(shù)據(jù)庫緩存分配共享內(nèi)存

   調(diào)用libs/zbxdbcache/dbconfig.c 中的init_configuration_cache()函數(shù)為配置緩存分配共享內(nèi)存

   調(diào)用libs/zbxself/selfmon.c 代碼中的init_selfmon_collector()函數(shù) 初始化zabbix 自身監(jiān)控

   調(diào)用libs/zbxdbhigh/db.c  代碼中的zbx_db_get_database_type()函數(shù) 判斷當(dāng)前數(shù)據(jù)庫是server還是proxy數(shù)據(jù)庫

    判斷的標(biāo)準(zhǔn)就是 select userid from users  如果至少有一條數(shù)據(jù)在users表中,那么就返回ZBX_DB_SERVER,如果沒有就返回ZBX_DB_PROXY

   調(diào)用libs/zbxdbhigh/db.c  代碼中的

   調(diào)用libs/zbxdbcache/dbconfig.c 代碼中的DBconnect()函數(shù)連接Zabbix數(shù)據(jù)庫

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

   調(diào)用 DCsync_configuration()函數(shù)從數(shù)據(jù)庫中同步配置數(shù)據(jù)

   Zabbix server啟動的線程總數(shù)如下

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;

    

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

   循環(huán)調(diào)用get_process_info_by_thread()函數(shù)根據(jù)線程信息獲取進程信息

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

   然后調(diào)用zabbix_server/httppoller/httppoller.c 代碼中的ZBX_THREAD_ENTRY(httppoller_thread, args) 函數(shù)循環(huán)處理httptests

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

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

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

   curl_easy_perform() 執(zhí)行訪問url操作

   curl_slist_free_all(headers_slist);  curl_easy_perform()執(zhí)行完后必須要調(diào)用這個函數(shù)

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

   調(diào)用process_step_data()  處理httpstep

   調(diào)用process_httptests()  處理httptests

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

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

三 問題總結(jié)        

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

以上是“Zabbix agent掛掉后Zabbix Web監(jiān)控依然能夠收到數(shù)據(jù)是怎么回事”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI