为什么Zabbix Agent挂掉后Zabbix Web监控还能收到数据?

分类:编程技术 时间:2024-02-20 16:06 浏览:0 评论:0
0
本文主要向您展示“Zabbix Web监控如何在Zabbix Agent挂掉后仍然可以接收数据”。内容简单、易懂、清晰。希望可以帮助您解答疑惑。让小编带领你学习学习这篇文章《为什么Zabbix Agent挂掉后Zabbix Web监控还能收到数据?》

第一个问题描述:

主机添加Web监控。当主机下架时,它并没有从 Zabbix 页面中删除。 Zabbix页面仍然可以收到该主机上的Web监控数据。按理说,主机变得不可达后,Zabbix页面应该不再看到该主机上的任何监控数据,而只有内置的Web监控才能看到数据。这是个问题。

第二个问题分析

我一直以为Zabbix自带的web监控是在Agent端进行的,所以我添加了对应的Web monit那么Zabbix前端看到的监控数据应该反映该主机上对应URL的访问情况。但当该主机不可达时,该主机上的Web监控依赖于数据更新。推测Zabbix自带的web监控并不是在Agent端执行的,而是在Server端或者Proxy端执行的。

我们从Zabbix server的源码开始一步步了解Zabbix是如何进行Web监控的

调用src/zabbix_server/server.c代码中的main()函数执行Zabbix服务器进程的入口程序

调用zbx_load_config()函数加载配置文件

调用libs/zbxnix/daemon.c代码中的daemon_start()函数允许进程在后台运行

在src/zabbix_server/server.c代码中调用MAIN_Zabbix_ENTRY()函数

调用zbx_free_config()释放配置内存

代码中调用libs/zbxdbcache/dbcache.c的it_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()函数判断当前数据库是服务器还是服务器代理数据库

判断标准是从用户中select userid。如果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()函数进行同步从数据库ronize配置数据

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_FOR KS + CONFIG_JAVAPOLLER_FORKSp; + 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 cod中的zbx_thread_start(httppoller_thread, &thread_args)函数e启动线程

然后调用zabbix_server/httppoller/httppoller.c代码中的ZBX_THREAD_ENTRY(httppoller_thread, args)函数循环处理httptests

然后调用process_httptest( zabbix_server/httppoller/httptest.c代码中的函数来处理每个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服务器处理Web监控流程来看,Zabbix 服务器使用 httppoller 线程对每个 httptest 中的 httpstep 定义的 url 访问进行循环执行。每次执行时,都要从对应的表中查找信息,过滤,然后将执行结果写入对应的表中。与Zabbix代理无关。在某些主机上添加Web监控时,httppoller执行curl操作时,会读取该主机上的Web监控步骤,然后在服务器端执行。

你需要明白,如果一个主机是通过Zabbix proxy管理的,那么添加到这个主机上的Web监控将会由它所在的proxy上的httppoller线程来执行

三个问题总结

通过上面的分析我们可以知道,Zabbix server或者proxy在进行Web监控时,只从数据库中读取与本主机相关的Web监控项目来进行监控。获取网址。 ,然后通过libcurl访问这个url,并且然后将结果写入数据库。因此,如果想用Zabbix自带的Web监控来检测每个agent所在区域的访问URL的质量是行不通的,因为所有的URL都是在代理或者服务器端访问的,而外网则在代理或者服务器端访问。访问服务器或代理端。如果去掉权限,所有的网页监控都将失效。

以上是《为什么Zabbix Agent挂掉后Zabbix Web监控还能收到数据?》文章的全部内容,感谢您的阅读!相信大家都有一定的了解,希望分享的内容对大家有所帮助。如果您想了解更多知识,请关注行业资讯频道!

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 为什么Zabbix Agent挂掉后Zabbix Web监控还能收到数据?

用户评论