干货丨Zabbix 应用常见问题和故障解决

本文转自@TWT社区

1、Zabbix 是怎么实施监控的?

一个监控系统运行的大概的流程是这样的:

agent需要安装到被监控的主机上,它负责定期收集各项数据,并发送到zabbix server端,zabbix server将数据存储到数据库中,zabbix web根据数据在前端进行展现和绘图。这里agentd收集数据分为主动和被动两种模式:

主动:agent请求server获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxy

被动:server向agent请求获取监控项的数据,agent返回数据。

主动监测通信过程如下:

zabbix首先向ServerActive配置的IP请求获取active items,获取并提交active tiems数据值server或者proxy。很多人会提出疑问:zabbix多久获取一次active items?它会根据配置文件中的RefreshActiveChecks的频率进行,如果获取失败,那么将会在60秒之后重试。分两个部分:

获取ACTIVE ITEMS列表

Agent打开TCP连接(主动检测变成Agent打开)

Agent请求items检测列表

Server返回items列表

Agent 处理响应

关闭TCP连接

Agent开始收集数据

主动检测提交数据过程如下:

Agent建立TCP连接

Agent提交items列表收集的数据

Server处理数据,并返回响应状态

关闭TCP连接

被动监测通信过程如下:

Server打开一个TCP连接

Server发送请求agent.pingn

Agent接收到请求并且响应

Server处理接收到的数据

关闭TCP连接

1、新建监控项目时,选择的是zabbix代理还是zabbix端点代理程式(主动式),前者是被动模式,后者是主动模式。

2、agentd配置文件中StartAgents参数的设置,如果为0,表示禁止被动模式,否则开启。一般建议不要设置为0,因为监控项目很多时,可以部分使用主动,部分使用被动模式。

2、Zabbix 自动发现是怎么做的?

zabbix发现有3种类型:

1、自动网络发现 ( Network discovery)

2、主动客户端自动注册 ( Active agent auto-registration )

3、低级别发现 ( low-level discovery )

自动发现的做法:

1、首先需要在模板当中创建一个自动发现的规则,这个地方只需要一个名称和一个键值。

2、过滤器中间要添加你需要的用到的值宏。

3、然后要创建一个监控项原型,也是一个名称和一个键值。

4、然后需要去写一个这样的键值的收集。

自动发现实际上就是需要首先去获得需要监控的值,然后将这个值作为一个新的参数传递到另外一个收集数据的item里面去。

3、Zabbix监控的客户端是怎么进行批量安装的?

推荐使用Ansible等自动化软件来进行批量安装。将安装过程编写执行脚本,然后再使用Ansible来进行批量安装。

1、使用命令生成密钥。

2、将公钥发送到所有安装zabbix客户端的主机。

3、安装 ansible 软件,(修改配置文件,将zabbix 客户机添加进组)。

4、创建一个安装zabbix客户端的脚本。

5、执行该脚本。

6、验证。

4、Zabbix4.0 中有些报警不会立即触发报警邮件,这种问题该如何排查?

【问题描述】手动关闭问题时却会立即发送报警邮件,比如更改hostname,监控项中信息类型为字符或文本会出现这种情况。

@chpps2000:

建议按照触发器描述查下triggers表,按照triggerid查function表,确认表达式和监控项有没有问题,如果确定没问题的话查下event表,看看触发器是否生成事件,看事件后面的actionid和mediaid确定是否发出了报警并通知。

5、Zabbix可以监控端口带宽速度限制吗?

@skey_deng:

根据实际操作经验是不能获取到带宽速度限制的参数的,如果使用qos的话,监控是没有办法获取到数据的,而且qos是动态的,更难监控,目前我们常用的方法是有固定带宽,比如总行和各支行及网点的数据传输,带宽是固定的,我们设置一个准确值给他,然后用实时带宽对比这个设置值,确定当前带宽占用的比率。

上面的方法可以让你看到带宽的占用情况,如果你是为了解决带宽占用告警的问题,那么就需要采用动态基线,动态阈值的方式来实现监控,避免告警风暴的出现,但是这涉及到页面的开发,和算法的研究,然后呈现出动态的告警,目前zabbix应该没有办法实现。

6、自动化运维系统建设中,监控经常会用到 Zabbix ,那么使用它监控常用关系型数据库 DB2、Oracle、MySQL、SQLServer 时,有什么比较全面的监控模板?

@李承轩:

Oracle可以使用orabbix插件监控,动手能力强的可以通过ODBC去监控。

MySQL可以使用Percona提供的一个模板监控,动手能力强的可以用shell、Python自行监控。

@TonyWang:

补充下:

目前我们基于Zabbix对Oracle、mysql和SQLServer都监控了:

Oracle 可以用Orabbix,不过Orabbix软件很久没更新,对于新的Oracle版本可能支持不好,对RAC环境也没有现成的配置文件。不好Orabbix好处是可以自己定义监控项(通过定义获取监控的SQL语句),譬如可以根据需要增加阻塞监控、表空间使用率等监控

SQLServer 一般是通过读取windows性能计数器来获取监控数据,需要解决同一台服务器多实例问题

MySQL目前是通过Zabbix的自定义监控项实现,执行shell脚本

7、Zabbix配置了IPV6的地址,怎么样可以监控到网外的某一个IPV6地址的网络质量?

@小民工:

1.如仅是到探测给地址网络质量,可使用ping探测,设定探测周期及阈值,如:设定探测间隔为1s,当延时连续3次大于50ms则触发报警;

2.如涉及到该地址的具体服务,可以使用具体协议,如tcp/udp,telnet/http请求来作为具体探测方式;

注:此类探测工具,zabbix官方可以下载到相应模板,导入现有系统做自定义修改后即可使用。

8、Zabbix监控虚拟主机告警 Lack of free swap space on Zabbix server 解决办法

@minseo:

Zabbix监控虚拟机的时候有时候会报一下告警

是因为Zabbix监控没有考虑虚拟主机的交换空间情况

解决办法修改配置

干货丨Zabbix 应用常见问题和故障解决_第1张图片

干货丨Zabbix 应用常见问题和故障解决_第2张图片

干货丨Zabbix 应用常见问题和故障解决_第3张图片

干货丨Zabbix 应用常见问题和故障解决_第4张图片

干货丨Zabbix 应用常见问题和故障解决_第5张图片

9、Zabbix4.4 启动失败的分析与解决

@泊涯:

问题:

在安装配置好zabbix后无法正常启动,原因是SELINUX设置问题导致启动失败。

故障分析:

[root@localhost zabbix]# systemctl start zabbix-server.service

Job for zabbix-server.service failed because a configured resource limit was exceeded. See "systemctl status zabbix-server.service" and "journalctl -xe" for details.

[root@localhost zabbix]# journalctl -xe

-- Defined-By: systemd

-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel

-- Unit zabbix-server.service has begun starting up.

1月 07 15:21:17 localhost.localdomain systemd[1]: PID file /run/zabbix/zabbix_server.pid not readable (yet?) after start.

1月 07 15:21:17 localhost.localdomain systemd[1]: zabbix-server.service never wrote its PID file. Failing.

1月 07 15:21:17 localhost.localdomain systemd[1]: Failed to start Zabbix Server.

-- Subject: Unit zabbix-server.service has failed

-- Defined-By: systemd

-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel

-- Unit zabbix-server.service has failed.

-- The result is failed.

1月 07 15:21:17 localhost.localdomain systemd[1]: Unit zabbix-server.service entered failed state.

1月 07 15:21:17 localhost.localdomain systemd[1]: zabbix-server.service failed.

1月 07 15:21:17 localhost.localdomain polkitd[804]: Unregistered Authentication Agent for unix-process:6787:8831344 (system bus name

1月 07 15:21:24 localhost.localdomain polkitd[804]: Registered Authentication Agent for unix-process:6797:8832061 (system bus name :

1月 07 15:21:27 localhost.localdomain systemd[1]: zabbix-server.service holdoff time over, scheduling restart.

1月 07 15:21:27 localhost.localdomain systemd[1]: Starting Zabbix Server...

-- Subject: Unit zabbix-server.service has begun start-up

-- Defined-By: systemd

-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel

-- Unit zabbix-server.service has begun starting up.

1月 07 15:21:27 localhost.localdomain systemd[1]: PID file /run/zabbix/zabbix_server.pid not readable (yet?) after start.

1月 07 15:21:27 localhost.localdomain systemd[1]: zabbix-server.service never wrote its PID file. Failing.

1月 07 15:21:27 localhost.localdomain systemd[1]: Failed to start Zabbix Server.

-- Subject: Unit zabbix-server.service has failed

-- Defined-By: systemd

-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel

-- Unit zabbix-server.service has failed.

-- The result is failed.

1月 07 15:21:27 localhost.localdomain systemd[1]: Unit zabbix-server.service entered failed state.

1月 07 15:21:27 localhost.localdomain systemd[1]: zabbix-server.service failed.

1月 07 15:21:27 localhost.localdomain polkitd[804]: Unregistered Authentication Agent for unix-process:6797:8832061 (system bus name

lines 1907-1944/1944 (END)

Last login: Tue Jan 7 23:24:43 2020 from 10.100.81.67

查看 zabbix 日志分析:

发现日志提示权限问题:

5966:20200107:145500.376 using configuration file: /etc/zabbix/zabbix_server.conf

5966:20200107:145500.376 cannot set resource limit: [13] Permission denied

5966:20200107:145500.376 cannot disable core dump, exiting...

5976:20200107:145506.314 Starting Zabbix Server. Zabbix 4.4.4 (revision 3131fdac04

故障处理:

优化修改SELINUX=disabled

[root@localhost selinux]# vi config

This file controls the state of SELinux on the system.

SELINUX= can take one of these three values:

enforcing - SELinux security policy is enforced.

permissive - SELinux prints warnings instead of enforcing.

disabled - No SELinux policy is loaded.

SELINUX=disabled

SELINUXTYPE= can take one of three two values:

targeted - Targeted processes are protected,

minimum - Modification of targeted policy. Only selected #processes are protected.

mls - Multi Level Security protection.

SELINUXTYPE=targeted

重新启动:

[root@localhost ~]# systemctl start zabbix-server.service

[root@localhost ~]# systemctl status zabbix-server.service

● zabbix-server.service - Zabbix Server

Loaded: loaded (/usr/lib/systemd/system/zabbix-server.service; disabled; vendor preset: disabled)

Active: active (running) since 二 2020-01-07 15:26:56 CST; 6s ago

Process: 1529 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS)

Main PID: 1531 (zabbix_server)

CGroup: /system.slice/zabbix-server.service

└─1531 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf

1月 07 15:26:56 localhost.localdomain systemd[1]: Starting Zabbix Server...

1月 07 15:26:56 localhost.localdomain systemd[1]: zabbix-server.service: Supervising process 1531 which is not our child. ...exits.

1月 07 15:26:56 localhost.localdomain systemd[1]: Started Zabbix Server.

Hint: Some lines were ellipsized, use -l to show in full.

[root@localhost ~]#

至此,问题已经得到解决。

总结:

最后要提醒各位同行,一般在安装一些开源软件,如MYSQL、POSTGRES、zabbix、openshift等,在安装前先检查下系统对应版本是否与需安装的软件兼容性、在检查下下,防火墙、安全等是否开启,如下:

1、iptables开启和关闭;

2、SELinux开启和关闭;

3、CentOS 6和CentOS 7 firewalld防火墙的开与关等。

10、Zabbix监控界出现“Zabbix poller processes more than 75% busy ”报警?

@小雄free:

线上部署的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的段落:

Option: StartPollers

Number of pre-forked instances of pollers.

Mandatory: no

Range: 0-1000

Default:

StartPollers=5

取消StartPollers前的#号注释,修改5为10或者更大【由于线上机器内存64G的,我此处修改成60或80】

修改后,重启zabbix_server

pkill -9 zabbix_server

/usr/local/zabbix/sbin/zabbix-server

过一会儿就发现触发器里已经没有类似的警告了。

当然,我们也可以额定时写个脚本来重启zabbix_server来降低负载

下面是脚本/root/zabbix-restart.sh

!/bin/bash

/usr/bin/pkill zabbix_server

/usr/local/zabbix/sbin/zabbix_server

然后crontab做计划任务

0 3 * /bin/bash -x /root/zabbix-restart.sh > /dev/null 2>&1

11、Zabbix监控图里获取不到数据?

@小雄free:

可以先在服务端的命令行里通过命令:

# /usr/local/zabbix/bin/zabbix_get -s 192.168.1.10 -p 10050 -k "mysql.status[Uptime]"

其中:-s后面跟的是被监控机的ip地址;-k后面跟的是监控项的键值,这个可以在zabbix页面里对应监控项里查到。如果在服务端通过以上命令能获取到数据,那么在zabbix监控页面的图形里显示获取不到数据,可能就是web页面里的配置问题了。

12、内存溢出导致zabbix_server服务关闭?

@相逢即是美丽心情:

14721:20170714:095330.028 [file:dbconfig.c,line:452] zbx_mem_malloc(): out of memory (requested 80 bytes)

14721:20170714:095330.028 [file:dbconfig.c,line:452] zbx_mem_malloc(): please increase CacheSize configuration parameter

14719:20170714:095330.331 One child process died (PID:14721,exitcode/signal:1). Exiting ...

14719:20170714:095332.332 syncing history data...

14719:20170714:095332.332 syncing history data done

14719:20170714:095332.332 syncing trends data...

14719:20170714:095332.694 syncing trends data done

14719:20170714:095332.695 Zabbix Server stopped. Zabbix 2.4.7 (revision 56694).

zabbix内存溢出。

/etc/zabbix/zabbix_server.conf 或者/etc/zabbix/zabbix_agent.conf

添加或修改CacheSize,或CacheSize=8M

改为CacheSize=1024M (这个值根据自己的需求)

重启服务zabbix_server

13、Zabbix给新机器添加监控,按正常操作完成后,发现主机那一栏最后的灯不亮

@小雄free:

如下截图:

干货丨Zabbix 应用常见问题和故障解决_第6张图片

来回检查了好几遍,没发现问题,删除后重新加了两遍,还是灯不亮,后来在网上找相关的解决方法,试了发现不是自己遇到的问题,等过了一段时间发现灯正常亮了。

解决办法:

验证zabbix_agent是否添加成功的方法,也适用其他问题。

1、检查防火墙和SELinux是否关闭。

2、添加完成后在zabbix_server上查看日志,如果不知道位置,请查看zabbix_server.conf配置文件

如果在日志中发现主机名或ip不能被发现,就检查/etc/hosts文件中ip和主机名,是否有写错的问题。

3、查看zabbix_agent.conf中配置的hostname=xxx,这里是否有些错的情况。

Server=zabbix_server的ip

ServerActive=zabbix_server的ip

hostname=zabbix_agent的主机名

4、检查zabbix_agent是否启动,一般都不会忘记,但不排除犯傻的情况。

5、如果以上检查都没有发现错误。

在zabbix_server的web页面-监测中-最新数据,选择新加的主机,查看是否有最新数据(记得链接一个系统模板,不然你啥也看不到),如果有正常数据刷新,则不用管灯是否亮了,已经能正常采集到数据了。如果等了一两分钟还没有数据(系统模板的监控项采集数据一般30秒一次,所以正常的话一两分钟已经有结果返回了),请返回第一条错误,自己仔细检查。

总结:以上是一些经验用来检查错误的,对于其他一些问题也是这个套路,经验分享给大家。

今天遇到这问题是因为zabbix_server端测试agent端数据延迟导致的。所以如果你也遇到了这个问题,不用在意,在zabbix_server能正常采集数据进行监控,就表明监控已经添加成功。

你可能感兴趣的:(开源框架运维Zabbix)