Zabbix Server 是 Zabbix 的核心组件,其功能为将 Agent 采集到的数据持久化 存储到数据库里。
存储所有由 Agent 采集到的数据,Zabbix 支持多种数据存储,例如
,Oracle,PostgreSQL,Elasticsearch 等。Zabbix 提供了友好的 Web 界面方便我们操作,Web 界面的运行环境可以是 Nginx+PHP或者Apache+PHP服务组成。Web界面也是ZabbixServer的一部分。
对于分布式环境,Zabbix 也提供了代理的方案,可以代替 Zabbie Server 收集 多个 Agent 的数据,然后在将收集到的数据汇总到 Zabbix Server,Proxy 可以 起到分担 Zabbix Server 负载的作用。
Zabbix Agent 被部署在需要监控主机上,用于采集监控数据并发送到 Zabbix Server 端。
主机 ( HOST ) : 就是具体的一个监控对象,某一个被监控的实例,可以是一个数据库,也可以是一个操作系统。
模板 ( Template ):定义了具体一类监控对象的抽象,比如 Windows 模板,就是用来专门在监控Windows的时候,直接选择这个模板就可以实现开箱即用的数据采集。
监控项 ( ITEM ):监控项定义了具体的某一项采集指标,比如 CPU使用率,设备温度等,采集方式可以是多种支持的采集协议。
触发器 ( Trigger ):触发器是基于监控项存在的,通过WEB页面定义触发器表达式创建。比如 CPU温度大于90度,可以定义为:last(/zabbix_server/cpu_temp) > 90
动作 ( Action ):动作是基于触发器存在的,创建动作时可以选择具体的某个触发器,当触发器表达式满足要求时,会触发对应的Action执行,具体的动作定义可以执行 JavaScript,Shell脚本 等。
展开代码systemctl disable --now firewalld setenforce 0 hostnamectl set-hostname zbx-server

展开代码rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm

展开代码cd /etc/yum.repos.d sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' zabbix.repo yum clean all && yum makecache

展开代码yum install -y zabbix-server-mysql zabbix-agent yum install -y centos-release-scl


进入zabbix.repo,修改【zabbix-frontend】下的enable=1

同时在这里我们需要修改两个源地址
编辑CentOS-SCLo-scl.repo文件,将[centos-sclo-sclo]的baseurl修改为国内镜像源的地址
展开代码[centos-sclo-sclo] name=CentOS-7 - SCLo sclo baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/sclo/ gpgcheck=0 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

编辑CentOS-SCLo-scl-rh.repo文件,将[centos-sclo-sclo]的baseurl修改为国内镜像源的地址
展开代码[centos-sclo-rh] name=CentOS-7 - SCLo rh baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/ gpgcheck=0 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

安装连接数据库和连接apache前端页面的连接工具
展开代码yum install -y zabbix-web-mysql-scl zabbix-apache-conf-scl
展开代码yum install -y mariadb-server mariadb systemctl enable --now mariadb

展开代码mysql_secure_installation


展开代码mysql -uroot -p123456 CREATE DATABASE zabbix character set utf8 collate utf8_bin; GRANT all ON zabbix.* TO 'zabbix'@'%' IDENTIFIED BY 'zabbix'; flush privileges;

查询sql文件的位置
展开代码rpm -ql zabbix-server-mysql

展开代码zcat /usr/share/doc/zabbix-server-mysql-5.0.47/create.sql.gz | mysql -uroot -p123456 zabbix
展开代码vim /etc/zabbix/zabbix_server.conf

展开代码vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf

展开代码systemctl restart zabbix-server zabbix-agent.service httpd rh-php72-php-fpm.service systemctl enable zabbix-server zabbix-agent.service httpd rh-php72-php-fpm.service

进入配置页面

点击Nest step进入下一步检查zabbix的配置,需要所有状态都为OK,若有问题则需要去服务器检查配置(看下前面几步有没有错)

没有错误,则下一步使用zabbix账号登录数据库

连接数据库后下一步配置zabbix信息

配置完成zabbix后,检查配置项,没有问题后直接下一步保存安装

信息检查完后,结束安装

登录验证,默认账号密码:Admin/zabbix

修改zabbix语言为中文


14.解决zabbix中文乱码问题


展开代码yum install -y wqy-microhei-fonts \cp -f /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/fonts/dejavu/DejaVuSans.ttf


上面安装部署zabbix server端的时候,让它自己本身也被监控了,相当于192.168.88.100即为服务端,也为客户端。现在来添加监控主机,添加的方法有三种,分别为主动添加,自动发现、自动注册。我们按步骤一步一步来。
这里我重新拿一台虚拟机来用,IP地址为192.168.88.101
这里设置主机名,因为有三种添加监控主机方式,所以分为三个主机名,手动添加:zbx-agent-1,自动发现:zbx-agent-2,自动注册:zbx-agent-3。当时就只有主机名的变化,主机IP地址还是192.168.88.101。
展开代码systemctl disable --now firewalld setenforce 0 hostnamectl set-hostname zbx-agent-1

展开代码rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm

展开代码cd /etc/yum.repos.d sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' zabbix.repo yum clean all && yum makecache

展开代码yum install -y zabbix-agent

到了这一步之后,后面就可以像我之前说的那样,有三种配置方式,主要是在客户端的**/etc/zabbix/zabbix_agentd.con**配置文件和服务端的配置项中实现
配置文件zabbix_agentd.conf里面有很多的注释,都是一些配置zabbix_agent进程的进程编号文件路径,存储日志方式,日志文件位置,日志滚动阈值等常用设定。但是这些参数大多数都和zabbix-server的常用参数意义相同,所以我们这里选择默认,不去修改配置
展开代码(1)Server:用于指定允许哪台服务器拉取当前服务器的数据, 当agent端工作于被动模式,则代表server端会主动拉取agent端数据, 那么server端的IP必须与此参数的IP对应,此参数用于实现基于IP的访问控制, 如果有多个IP ,可以使用逗号隔开。 (2)ListenPort:用于指定当agent端工作于被动模式时所监听的端口号, 默认端口为10050,也就是说,server端默认访问10050端口,从而拉取数据。 (3)ListenIP:用于指定agent端工作于被动模式时所监听的IP地址, 默认值为0.0.0.0,表示监听本机的所有IP地址。 (4)StartAgents:用于指定预生成的agent进程数量。
展开代码(1)ServerActive:此参数用于指定当agent端工作于主动模式时, 将信息主动推送到哪台server上,当有多个IP时,可以用逗号隔开。 (2)Hostname:此参数用于指定当前主机的主机名, server端通过此参数对应的主机名识别当前主机。 (3)RefreshActiveChecks: 此参数用于指明agent端每多少秒主动将采集到的数据发往server端。
yum install -y zabbix-agent 命令进行安装。/etc/zabbix/zabbix_agentd.conf 配置文件,设置 Server、ServerActive 和 Hostname 等参数。其中,Server 指定 Zabbix Server 的 IP 地址,ServerActive 指定主动模式下 Zabbix Server 或 Proxy 的地址,Hostname 设置被监控主机的名称。systemctl start zabbix-agent 命令启动服务,并通过 systemctl enable zabbix-agent 设置开机自启。在服务端192.168.88.100的web界面上新建主机

(注意,如果没有主机群组的话,要新建一个主机群组先)

现在可以注意到该主机并没有监控任何东西,我们可以为他添加一个监控模板


手动添加成功
接下来,在客户端192.168.88.101修改该参数如下:
展开代码vim /etc/zabbix/zabbix_agentd.conf Server=192.168.88.100 ServerActive=192.168.88.100 Hostname=zbx-agent-1
该配置文件修改完之后,就可以启动agent端进程并设置开机自启
展开代码systemctl start zabbix-agent systemctl enable zabbix-agent netstat -antlp|grep zabbix

手动添加就到这里,之后在网页端刷新网页,就会出现可用了

提示:如果图中绿色的ZBX,你的是红色的话,可以查看监测主机中的问题选项,是不是提示Zabbix agent is not available (for 3m),这是监控主机新开机,服务端没有获取到连接之前3分钟的信息,等待3分钟之后,再次刷新,不出意外就会变绿,提示已解决该问题
在服务端上配置自动发现动作


配置自动发现规则



这里为了更快的找到并添加监控主机,就设置的更新时间为30s,实际工作的时候是有标准的
至于客户端的配置是一样的
接下来,在客户端192.168.88.101修改该参数如下:
展开代码vim /etc/zabbix/zabbix_agentd.conf Server=192.168.88.100 ServerActive=192.168.88.100 Hostname=zbx-agent-2
该配置文件修改完之后,就可以启动agent端进程并设置开机自启
展开代码systemctl start zabbix-agent systemctl enable zabbix-agent netstat -antlp|grep zabbix

刷新网页之后,可以看到有新的主机自动添加进去,但是有没有发现一个问题,之前我们设置了主机名是zbx-agent-2,但是这里添加的主机是192.168.88.101。

为了解决这个问题,我们可以删除刚刚自动获取的监控主机,然后在服务端的**/etc/hosts**文件上添加客户端主机名和IP地址。

再次刷新网页端,我们就可以看到出现了我们想要的主机名

定义:自动注册是一种机制,Zabbix Agent 会主动向 Zabbix Server 注册,请求将其添加为监控对象。
工作原理:
Hostname 参数。适用场景:
自动注册:Zabbix Agent 主动向 Zabbix Server 注册,请求添加为监控对象。
因为上面配置了自动发现的规则,所以配置自动注册的时候,需要先删除自动发现的规则,或者停用,请自行完成
接下来是配置自动注册的规则




至于客户端的配置是一样的
接下来,在客户端192.168.88.101修改该参数如下:
展开代码vim /etc/zabbix/zabbix_agentd.conf Server=192.168.88.100 ServerActive=192.168.88.100 Hostname=zbx-agent-3 HostMetadata=node
该配置文件修改完之后,就可以启动agent端进程并设置开机自启
展开代码systemctl start zabbix-agent systemctl enable zabbix-agent netstat -antlp|grep zabbix

最后再刷新下网页端

问题:[Zabbix server has been restarted (uptime < 10m)]
当Zabbix Server显示“已重启(运行时间 < 10分钟)”时,这通常意味着Zabbix Server服务最近被重新启动了。这种情况可能是由多种原因引起的,包括计划的维护、意外的崩溃或系统更新等。
服务日志是诊断问题的第一步。查看Zabbix Server的日志文件,了解重启的具体原因。日志文件通常位于/var/log/zabbix/目录下。
展开代码cat /var/log/zabbix/zabbix_server.log
在日志中,查找与重启相关的条目,例如“Starting Zabbix Server”或“Zabbix Server stopped”。确定服务是正常重启还是因为错误而崩溃。
如果系统资源不足(如内存或CPU),可能会导致Zabbix Server崩溃。使用以下命令检查系统资源使用情况
展开代码top 或 htop
如果发现资源使用过高,可能需要优化Zabbix配置或升级硬件。
如果Zabbix Server无法连接到数据库,它可能会崩溃或自动重启。检查数据库连接设置,并确保数据库服务正常运行。
展开代码systemctl status mysql 或者 systemctl status postgresql
检查Zabbix Server的配置文件(通常是/etc/zabbix/zabbix_server.conf),确保配置正确,特别是DBHost、DBName、DBUser和DBPassword等参数。
确保Zabbix Server服务正在运行。可以使用以下命令检查服务状态:
展开代码systemctl status zabbix-server
如果服务未运行,尝试重新启动它:
展开代码systemctl restart zabbix-server
检查是否有计划任务(如cron作业)可能导致Zabbix Server重启。查看/etc/cron.d/和/etc/crontab文件。
展开代码cat /etc/crontab
如果系统最近进行了更新,可能会导致Zabbix Server重启。检查系统更新日志:
展开代码cat /var/log/yum.log 或者 cat /var/log/apt/history.log
检查Zabbix Server的启动脚本(通常是/etc/init.d/zabbix-server或/usr/lib/systemd/system/zabbix-server.service),确保没有错误或异常配置。
问题:[Zabbix server: Utilization of discoverer processes over 75%]
在Zabbix监控系统中,如果发现进程(discoverer processes)的利用率超过75%,这通常意味着发现任务(discovery tasks)的数量超过了服务器配置的处理能力。这可能导致性能问题或者监控数据的延迟。为了解决这个问题,可以通过调整Zabbix服务器的配置来增加发现进程的数量,从而提高处理能力。
首先,需要编辑Zabbix服务器的配置文件zabbix_server.conf*,这个文件通常位于**/etc/zabbix/***目录下。可以使用文本编辑器打开并修改配置文件,例如使用vim:
展开代码vim /etc/zabbix/zabbix_server.conf
在配置文件中,找到*StartDiscoverers*参数,这个参数控制着启动的发现进程数量。如果这个值被注释或设置得太低,就可能导致发现进程的利用率过高。建议将此值设置为3或5,这样可以根据监控任务的数量适当增加处理能力。例如:
展开代码StartDiscoverers=5
另外,*UnavailableDelay*参数控制着在发现任务失败后,服务器等待重新尝试的时间。如果这个时间设置得太短,可能会导致发现进程频繁重试,增加系统负担。可以适当增加这个值,例如设置为360秒:
展开代码UnavailableDelay=360
修改完配置文件后,需要重启Zabbix服务器使配置生效:
展开代码systemctl restart zabbix-server
观察效果
重启服务器后,观察一段时间,检查Zabbix的web界面或者相关的监控指标,确保发现进程的利用率已经降低,并且监控任务能够正常运行。如果问题解决,发现进程的利用率应该会降到75%以下,这意味着服务器现在有足够的处理能力来处理所有的发现任务。
总结
通过调整StartDiscoverers*和UnavailableDelay*参数,可以有效地解决Zabbix服务器发现进程利用率过高的问题。这样不仅可以避免性能问题,还能确保监控数据的准确性和及时性。
线上部署的zabbix监控环境运行一段时间后,突然出现了报警“Zabbix poller processes more than 75% busy“ 。其实,Zabbix的监控警报有很多种,比较常见的几个莫过于内存耗尽,网络不通,IO太慢还有这个“Zabbix poller processes more than 75% busy”了。一开始的时候因为这个即不影响使用也持续一会儿就自行解决就没有多在意。然后随着数据库的增大,Zabbix消耗的内存可是越来越多,Poller processes(轮询)开始天天Busy了.
最后,发现解决这个问题很简单。可以增加Zabbix Server启动时初始化的进程数量,但这样做直接增加了轮询的负载量,内存配置充足的情况下完全可以这么做。
具体编辑Zabbix Server的配置文件**/etc/zabbix/zabbix_server.conf**,找到配置StartPollers的段落
展开代码StartPollers=5
取消StartPollers前的#号注释,修改5为10或者更大【由于线上机器内存64G的,我此处修改成60或80】
修改后,重启zabbix_server
展开代码pkill -9 zabbix_server /usr/local/zabbix/sbin/zabbix-server
过一会儿就发现触发器里已经没有类似的警告了。
本文作者:zzz
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!