目录
2)zabbix-agent:用于获取被监控端的性能检测数据
1)在安装前进行配置,指向zabbix-server服务端的IP
3)在客户端通过zabbix_agentd -t检测获取监控项
前言
本文主要是对zabbix监控日志进行配置,内容里面含有较为详细的配置监控平台步骤(Linux服务端和客户端、windows客户端、cisco虚拟路由器、监控MySQL、监控NGINX)。以及各种类型的监控报警配置(163邮箱报警、钉钉报警)。篇幅略长,前文主要为zabbixzabbix的基础知识,后面为具体实际操作部分。
一、zabbix
(一)概述
Zabbix是一个开源的网络监控、应用程序监控以及网络事件和告警管理系统。它可以收集、分析和监控服务器、虚拟机、网络设备以及应用程序的性能和可用性,并及时发出告警。
(二)zabbix的优点
1、强大的功能和灵活的扩展性
Zabbix提供了广泛的监控功能,可以监控各种硬件设备、操作系统、应用程序等。同时,Zabbix还提供了灵活的插件和扩展性,可以根据需要自定义监控项和告警条件。
2、高可靠性和可扩展性
Zabbix采用分布式架构,支持多个Zabbix服务器和代理节点,并提供了冗余、负载均衡和故障转移的能力。这使得Zabbix可以在大规模的环境中应对高负载和高可靠性要求。
3、全面的监控和告警功能
Zabbix支持多种监控方式,包括主动模式、被动模式和主动被动混合模式,可以全面地监控设备的性能和可用性。同时,Zabbix提供了灵活的告警规则和通知方式,可以及时地发出告警,并通过邮件、短信、Web页面等方式通知管理员。
4、免费开源和活跃的社区支持
Zabbix作为开源软件,可以免费使用和定制。同时,Zabbix具有活跃的社区支持,提供了丰富的文档、教程和插件,方便用户使用和扩展。
(三)zabbix的应用场景
1、IT基础设施监控
Zabbix可以监控服务器、虚拟机、网络设备、存储设备等各种IT基础设施的性能和可用性。可以实时监控CPU、内存、磁盘、网络流量等指标,并发现和解决问题。
2、应用程序性能监控
Zabbix可以监控Web服务器、数据库服务器、应用服务器等应用程序的性能和可用性。可以监测应用程序的响应时间、请求量、错误率等指标,并发现和解决性能问题。
3、网络流量分析
Zabbix可以监控网络设备的带宽使用情况、端口状态和链路状态等。可以实时监测网络流量、分析网络瓶颈,并进行容量规划和优化。
4、日志分析和事件管理
Zabbix可以通过监控日志文件,实时监测其中的关键字或特定事件。可以用于监控安全事件、故障事件、异常行为等,并及时发出告警。
二、zabbix的构成
zabbix主要由以下5个组件构成:
1、Server端
zabbix server是zabbix的核心组件,server内部存储了所有的配置信息、统计信息和操作信息。zabbix agent会向zabbix server报告可用性、完整性及其他统计信息。
2、web页面
web页面也是zabbix的一部分,通常和zabbix server位于一台物理设备上,但是在特殊情况下也可以分开配置。web页面主要提供了直观的监控信息,以方便运维人员监控管理。
3、MySQL数据库
zabbix数据库内存储了配置信息、统计信息等zabbix的相关内容。
4、proxy
zabbix proxy可以根据具体生产环境进行采用或者放弃。如果使用了zabbix proxy,则其会替代zabbix server采集数据信息,可以很好的分担zabbix server的负载。zabbix proxy通常运用与架构过大、zabbix server负载过重,或者是企业设备跨机房、跨网段、zabbix server无法与zabbix agent直接通信的场景。
5、Agent
zabbix agent通常部署在被监控目标上,用于主动监控本地资源和应用程序,并将监控的数据发送给zabbix server。
三、zabbix的监控对象
zabbix支持监控各种系统平台,包括Linux和Windows等主流操作系统,也可以借助SNMP或者是SSH协议监控路由交换设备。zabbix如果部署在服务器上,可以监控其CPU、内存、网络性能等硬件参数,也可以监控具体的服务或者应用程序、服务运行情况及性能。
1、硬件监控
Zabbix IPMI Interface ,通过IPMI接口进行监控,我们可以通过标准的IPMI硬件接口,监控被监控对象的物理特征,比如电压、温度、风扇状态、电源状态等。
2、系统监控
Zabbix Agent Interface ,通过专用的代理程序进行监控,与常见的master/agent模型类似,如果被监控对象支持对应的agent,推荐首选这种方式。
3、Java监控
Zabbix JMX Interface ,通过JMX进行监控,JMX(java management extensions,即java管理扩展),监控JVM虚拟机时,使用这种方法是非常不错的选择。
4、网络设备监控
Zabbix SNMP Interface ,通过SNMP协议与被监控对象进行通信,SNMP协议的全称为simple network management protocol,被译为简单网络管理协议,通常来说,我们无法在路由器、交换机这种硬件上安装agent,但是这些硬件都支持SNMP协议。
5、应用服务监控
Zabbix Agent UserParameter
6、MySQL数据库监控
percona-monitoring-plulgins
7、URL监控
Zabbix Web 监控
四、zabbix的常用术语
zabbix的学习需要掌握一些zabbix的常用术语,zabbix常用术语列举如下:
1、主机(host)
要监控的设备,可以由IP或者是主机名(必须可解析)指定。
2、主机组(host group)
主机的逻辑容器,包含主机和模板,主机组通常在给用户或者是用户组指派监控权限时使用。
3、监控项(item)
一个特定监控指标的相关数据,比如内存的大小、CPU的使用率,甚至是服务的运行状态等等。监控项数据来源于被监控对象,并且每个监控项都由一个key来标识。
4、触发器(trigger)
一个表达式,用于评估监控项的值是否在合理的范围内。当接收的值超出触发器的规定时,就被认为是故障,如果超出后再次符合,就被认为是正常。
5、事件(event)
触发器触发的一个特定事件,或者是zabbix定义的一个自动上线注册主机的事件。
6、动作(action)
指根据配置,zabbix对于触发器触发的特定事件进行处理的具体措施,如执行某个脚本,或者是向管理员邮箱发送邮件等等。
7、报警升级(escalation)
发送警报或者是执行远程命令的自定义方案。
8、媒介(media)
发送通知(告警)的手段,如微信、邮件、钉钉等等。
9、通知(notification)
通过指定的媒介,向用户发送的有关事件的信息。
10、远程命令(remote command)
指运维人员提前写好的命令,可以让被监控主机在触发事件后执行。
11、模板(template)
用于快速定义被监控主机的预设条目集合,通常包括了监控项、触发器、应用等,模板可以直接链接至某个主机。
12、应用(application)
一组监控项的集合。
13、web场景(web scennario)
用于检测web站点可用性的一个或多个HTTP请求。
14、前端(frontend)
zabbix的web接口。
这些术语,我们都会在后文中直接使用而不过多赘述,在企业技术交流中也会经常使用。
五、zabbix的工作流程
Zabbix在进行监控时,zabbix客户端要安装在被监控设备上,负责定期收集数据,并将其发送给zabbix服务端;zabbix服务端要安装在监控设备上,其将zabbix客户端发送的数据存储的数据库中,zabbix web根据数据在前端进行展示和绘图。
zabbix的数据收集分为两种模式:
1、在主动模式下的工作流程如下:
1. Zabbix Server在预定的时间间隔内向Zabbix Agent发送获取监控数据的请求。
2. Zabbix Agent接收到请求后,将数据收集并发送给Zabbix Server。
3. Zabbix Server接收到数据后进行处理,包括数据存储、分析和绘制图表等。
4. 当达到触发条件时,Zabbix Server会发出告警,通知管理员。
2、在被动模式下的工作流程如下:
1. Zabbix Agent在预定的时间间隔内将监控数据主动发送给Zabbix Server。
2. Zabbix Server接收到数据后进行处理,包括数据存储、分析和绘制图表等。
3. 当达到触发条件时,Zabbix Server会发出告警,通知管理员。
需要注意的是,Zabbix Agent可以通过多个方式发送数据给Zabbix Server,包括主动模式、被动模式和主动被动混合模式。根据实际需求,可以选择适合的模式进行监控。同时,Zabbix Server和Zabbix Agent之间的通信可以通过加密来确保安全。
六、zabbix进程详解
1、Zabbix_agentd
Zabbix-agentd为zabbix客户端守护进程 ,主要负责收集客户端监控项数据。
2、Zabbix_get
Zabbix_get作为zabbix工具,通常运行在zabbix_server或者zabbix_proxy上,用于远程获取客户端信息,通常用于排错。
3、Zabbix Server进程
Zabbix_Server为zabbix服务端守护进程,这是Zabbix的核心进程,负责接收和处理来自Agent的监控数据,执行报警动作并生成报表等功能。(端口为10051)
4、Zabbix_Agent进程
运行在被监控主机上,定期采集主机的各种监控数据,并将数据发送给Zabbix_Server进行处理。
5、zabbix_agentd
为zabbix客户端守护进程 ,主要负责收集客户端监控项数据。
6、Zabbix_Proxy进程
作为中间代理,可以将数据收集和处理的任务分散到多台代理主机上,以减轻Zabbix_Server的负载。
7、Zabbix_Web进程
负责提供Zabbix的Web界面,并与Zabbix Server进行通信,接收和显示监控数据以及配置和管理Zabbix系统。
8、Zabbix_Java_Gateway进程
是zabbix2.0以后引入的新功能,如果用户需要监控Java应用程序,可以使用Zabbix_Java_Gateway进程将Java应用程序的监控数据发送给Zabbix_Server。但是只能主动获取数据,而不能被动获取数据。
9、Zabbix_Sender进程
通常运行在zabbix的客户端,用于将预定义的数据或自定义的数据发送给Zabbix_Server进行处理和存储。
10、Zabbix_Receiver进程
负责接收来自Zabbix_Sender的数据,并将数据传递给Zabbix_Server进行处理。
11、Zabbix_Alert进程
用于处理报警相关的任务,监测触发条件并发送报警信息给预设的用户。
12、Zabbix_Housekeeper进程
负责清理过期的历史数据和事件数据,以保证数据库的性能和存储空间的有效利用。
13、Zabbix_Proxy_Housekeeper进程
类似于Zabbix_Housekeeper进程,但专门用于代理主机上的数据清理和处理。
七、Zabbix的监控框架
1、Zabbix Server
作为核心组件,负责接收、存储和处理来自被监控主机的数据。它还负责配置管理、监控计划、报警处理等功能。
2、Zabbix Agent
运行在被监控主机上的代理客户端,定期采集主机的各种监控数据,并将数据发送给Zabbix Server。Agent可以监控系统资源、服务状态、应用性能等。
3、Zabbix Proxy
可选组件,作为中间代理,可以分散Zabbix Server的负载。Proxy负责收集和处理来自被监控主机的数据,并将处理后的数据发送给Zabbix Server。
4、Zabbix Web
提供基于Web的用户界面,用户可以通过Web界面来管理和配置Zabbix系统,查看监控数据,设置触发器和报警等。
5、数据库
Zabbix使用数据库来存储监控数据、配置信息和历史记录。支持的数据库类型包括MySQL、PostgreSQL、Oracle等。
6、监控项(Items)
定义要监控的主机资源或服务的指标,比如CPU使用率、内存利用率、网络流量等。
7、触发器(Triggers)
定义触发报警的条件,当监控项的值满足触发器设置的条件时,会触发相应的报警动作。
8、报警动作(Actions)
定义报警触发后的响应方式,可以发送通知、执行脚本、调用API等。
9、图形和报表
Zabbix可以生成各种图形和报表,用于展示监控数据的趋势和性能指标。
以上组件共同构成了Zabbix监控框架,通过可扩展的架构和灵活的配置,可以满足不同规模和需求的监控环境。
八、Zabbix配置搭建
(一)环境搭建
1、zabbix程序结构
1)zabbix-server:用于数据处理及写入到数据库
2)zabbix-agent:用于获取被监控端的性能检测数据
3)zabbix-web:用于数据的展示及远程操控
4)数据库:用于存储监控数据
5)zabbix-proxy:实现zabbix分布式监控
2、zabbix-agent支持的协议
1)ssh
2)snmp:用于交换机路由器流量监控(OID)
3)IPMI:硬件监控
4)JMX: 专用于java服务监控
5)结合procona:实现针对数据库监控
3、zabbix监控环境搭建
安装方式
1)yum自动化安装
2)源码编译安装
3)二进制包
官网地址:Download and install Zabbix
注:其下是根据想要安装的版本,对其进行整理出来的安装步骤 (官网也有部署安装方式)
3.1 配置zabbix官方yum源
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
3.2 查看可用的zabbix列表
yum list | grep zabbix
3.2 安装服务端与客户端(单机部署)
yum install -y zabbix-server-mysql zabbix-agent
查看安装路径
rpm -ql zabbix-server-mysql
服务参数解析:
zabbix server服务名: zabbix-server 端口:10051
zabbix agent 服务名: zabbix-agent 端口: 10050
zabbix server主配置文件: /etc/zabbix/zabbix server.conf
zabbix agent主配置文件: /etc/zabbix/zabbix agentd.conf
zabbix企业微信报警脚本路径:/usr/lib/zabbix/alertscripts
zabbix自定义监控项路径: /etc/zabbix/zabbix agentd.d
zabbix日志文件路径:/var/log/zabbix
3.3 安装zabbix-web
1)编辑epel源
cd /etc/yum.repos.d/
vim zabbix.repo
更改内容
2) 安装后续使用的缺失依赖源
yum install -y epel-release centos-release-scl
3)安装Zabbix前端软件包
yum install -y zabbix-web-mysql-scl zabbix-apache-conf-scl
4)安装存储数据库
yum install -y mariadb-server mariadb
数据库配置
systemctl start mariadb
mysql
a、创建数据库
create database zabbix character set utf8 collate utf8_bin;
b、创建数据库户
create user 'zabbix'@'localhost' identified by '123123';
c、数据库库授权
grant all privileges on zabbix.* to 'zabbix'@'localhost';
d、查看所有库
show databases;
e、进入数据库并查看内容
use zabbix;
show tables;
f、导入数据库
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p123123 zabbix
命令解析:
这里用*来表示版本,因为不同版本的安装,目录后缀会有不同
这个命令是将
/usr/share/doc/zabbix-server-mysql*/create.sql.gz
文件的内容解压,并通过管道将解压后SQL命令导入到名为zabbix
的MySQL数据库中,该SQL命令通常用于创建和初始化Zabbix监控系统所需的数据库结构和表。具体解析如下:
zcat
命令用于解压缩.gz格式的文件,它会将/usr/share/doc/zabbix-server-mysql*/create.sql.gz
文件解压缩成文本形式。|
符号是管道操作符,用于将一个命令的输出作为另一个命令的输入。mysql -uzabbix -p123123 zabbix
是MySQL命令,用于连接到MySQL数据库,并执行后续的操作。
-uzabbix
表示使用zabbix
用户进行连接。-p123123
表示使用123123
作为密码进行连接(需要根据实际情况进行修改)。zabbix
是要连接的数据库名称。
g、Zabbix服务端配置数据库
vim /etc/zabbix/zabbix_server.conf
h、Zabbix服务端配置时区
vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
3.4 启动服务并查看
systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm
netstat -anptu | grep zabbix
3.5 web进行访问查看
192.168.111.254/zabbix
1)web界面登陆
zabbix前端已经安装完成!超级用户名是Admin,密码是zabbix。为了防止暴力破解和词典攻击,如果发生连续五次尝试登陆失败,Zabbix接口将暂停30秒。在下次成功登陆后,将会在界面上显示登录尝试失败的IP地址。
2)进入监控页面
这里已经可以看见访问成功了,以下内容为扩展项
3)创建用户
注:*号为必填项
默认情况下,没有为新增的用户定义媒介(media,即通 知发送方式) 。如需要创建,可以到 媒介(Media)标签 下,然后点击 增加(Add)。
在这个对话框中,为用户输入一个Email地址。你可以为媒介指定一个时间活动周期,(访问时间周期说明页面,查看该字段格式的描述)。默认情况下,媒介一直 是活动的。你也可以通过自定义触发器严重等级来激活媒介,默认所有的等级都保持开启。选择用户身份(如果需要该用户接收告警通知,需要超级管理员类型)
4)添加权限
此用户是要有只读访问Linux Server组的权限, 设置权限级别,然后添加到权限列表中。 在“用户组属性”表单中, 单击“更新。
注:在Zabbix中,主机的访问权限被分配给用户组, 而不是单独的用户。权限设置完成了!您可以尝试使用新用户的凭据登录。
5)更改超级管理员用户密码
4. 配置客户端添加监控主机
4.1、下载源
rpm -ivh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-agent-5.0.24-1.el7.x86_64.rpm
4.2、客户端安装zabbix-agent
yum install -y zabbix-agent
查看安装路径
rpm -ql zabbix-agent
4.3、更改配置文件
cp /etc/zabbix/zabbix_agentd.conf{,.bak}
4.4、添加监控主机(客户端)
vim /etc/zabbix/zabbix_agentd.conf
systemctl start zabbix-agent
systemctl enable zabbix-agent
4.5、服务端在网页内进行如下更改
在更改完毕后进行查看
5. 添加监控主机(windows客户端)
5.1、下载安装包
Download Zabbix agents官网下载即可
5.2、安装、配置
1)在安装前进行配置,指向zabbix-server服务端的IP
2)而后将配置文件拷贝至 C盘下
3)而后使用cmd运行。
注:这里必须使用管理员运行,不然普通用户权限不够。
4)进入目录
cd ..\..\zabbix-agent\bin
5)安装软件
zabbix_agentd.exe -c zabbix_agentd.conf -i
注:这里报错是因为我已经安装过zabbix-agent客户端了。
6)启动zabbix-agent
zabbix_agentd.exe -c zabbix_agentd.conf -s
7)查看监听
netstat -ano | findstr 10050
注:进程启动了很多10050端口,这里只截取一部分内容
8)web添加进行查看
http://192.168.111.254/zabbix/zabbix.php?action=dashboard.view
此时windows端已经监测完成,可以使用图形进行查看
注:在图形界面中因为Linux系统编码的区别,显示可能为方块“ □ ”,意思为不识别。可以进行如下操作。
9)拓展内容:
cd /usr/share/fonts/dejavu/
ls
vim DejaVuSans.ttf
查看发现根本看不懂。 。。我们还是直接拷贝做好备份吧!避免后续如果使用找不到。
cp DejaVuSans.ttf DejaVuSans.ttf.bak
下载可以使用的字符编码
注:这里除了下载还有第二条方式可以实现。在windows主机下的fonts字体库中选取一个中文字体替换文件 [ /usr/share/fonts/dejavu/DejaVuSans.ttf ] 即可实现正常显示。
yum install -y wqy-microhei-fonts
cd /usr/share/fonts/wqy-microhei/
ls
将其拷贝到原有字符页面下,覆盖原有内容
cp wqy-microhei.ttc /usr/share/fonts/dejavu/DejaVuSans.ttf
这时web刷新页面即可正常运行查看
6. 配置zabbix监控路由器(虚拟)
下载官网:Getting Started with GNS3 | GNS3 Documentation
emm,不过还是建议下载破解版...毕竟懂的都懂... 安装、配置流程如下:
6.1、windows端安装GNS3:
进入全局配置模式,允许对路由器或交换机进行全局级别的配置。
conf t
关闭路由功能(当主机使用的话不需要配置路由,当路由器使用必须配置路由)
no ip routing
进入f0/0接口配置地址( f0/0为外面连接什么接口,这边配置什么接口 )
int f0/0
ip address 192.168.11.200 255.255.255.0
开启接口
no shutdown
回到end模式测试通联性(显示!为通信;显示...为不通信 [ 这里测试2个查看结果 ] )
end
ping 192.168.11.111
ping 192.168.11.88
进入配置模式创建共同体
conf t
snmp-server community cisco
开启traps功能(路由器主动向服务器端发送相关信息)
snmp-server enable traps
一键式操作如下:(只需更改IP地址即可)
conf t
no ip routing
int f0/0
ip address 192.168.11.200 255.255.255.0
no shutdown
end
ping 192.168.11.111
ping 192.168.11.88
conf t
snmp-server community cisco
snmp-server enable traps
至此,虚拟路由功能已经配置完毕。
6.2、web端进行配置:
查看SNMP支持版本:
end
show snmp group
7. zabbix中核心的资源介绍
监控项→触发器→动作→ 模板
8. 监控项配置
首先规划风险值,通过设计取值命令
8.1、自定义监控项(检测内存)
客户端配置监控项
cp /etc/zabbix/zabbix_agentd.conf{,.bak}
vim /etc/zabbix/zabbix_agentd.conf
注:不在主配置文化里进行修改,为了方便后续使用以及更改,直接在目录下创建文件即可
vim /etc/zabbix/zabbix_agentd.d/memory.conf
注:在使用命令前先进行测试,测试命令是否正确,是否为自己所需内容,如内容不对及时进行更改。
free -m free -m | grep Mem free -m | grep Mem | awk '{print $3}'
UserParameter=memory_used,free -m | grep Mem | awk '{print $3}'
命令语法:
UserParameter=key,shell command
监控 key 值: memory_userd,key 值可以随意编写,但是一会需要在 web 页面创建监控项时指定 key 值;
注:在 zabbix_server 端可以使用 zabbix_get -s agent 端 ip 地址 p 10050 -k key 名通过此命令可以查看 agent 端 key 的监控值;
重启服务
systemctl restart zabbix-agent
yum install -y zabbix-get
客户端:
cat /etc/zabbix/zabbix_agentd.d/memory.conf
注:此处的名字需要在服务端进行测试,是否可以正常使用。
服务端:
zabbix_get -s 192.168.11.112 -k memory_used
zabbix_get 用于服务端测试获取客户端中自定义的监控项
zabbix_get -s 指定客户端IP -k 监控项名
web端添加监控项
1)选择需要添加监控项的主机
2)根据客户端所自定义的监控项添加即可3)注意:添加监控项页面中的值要和监控项的key名一致
8.2、zabbix监控nginx
客户端:
yum install -y nginx
nginx -v
编辑配置文件
vim /etc/nginx/nginx.conf
location /status {
stub_status on;
access_log off;
allow 192.168.11.0/24;
deny all;
在server字段下添加如下内容:
内容解析:
location /status:定义了一个 URL 路径,即/status。Nginx 将在这个路径下应用接下来的指令。
stub_status on;:开启一个内置的stub_status模块,用于提供服务器的当前状态信息,如连接数、请求数等。这通常用于服务器状态监控。
access_log off;:关闭访问日志记录,意味着 Nginx 将不会记录这个路径下的访问请求。
allow 192.168.11.0/24;:允许 IP 地址范围为 192.168.11.0/24(即 192.168.11.0 至 192.168.11.255)的访问这个路径。
deny all;:拒绝其他所有 IP 地址的访问请求。
重启服务
systemctl restart nginx
web进行访问测试
192.168.11.112/status
此时可以看见从web进行访问已经没有任何问题。编写检查脚本
vim /etc/zabbix/chk_nginx.sh
#!/bin/bash
#zabbix 5.0监控nginx
#定义Nginx status页面
ngx_status="http://192.168.11.112/status"
#判断status页面是否存活
ngx_status_code() {
http_code=`curl -o /dev/null -s -w %{http_code} ${ngx_status}`
if [ ${http_code} == "200" ];then
return 1
else
echo "服务没有启动,请使用systemctl start nginx 启动服务!"
fi
}
#获取当前活动的客户端连接数
active() {
ngx_status_code || curl -s ${ngx_status} | grep "Active" | awk '{print $NF}'
}
#获取接收客户端连接的总数量
accepts() {
ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $1}'
}
#获取已处理的连接总数量
handled() {
ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $2}'
}
#获取客户端请求总数量
requests() {
ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $3}'
}
#获取正在读取请求标头的当前连接数量
reading() {
ngx_status_code || curl -s ${ngx_status} | grep "Reading" | awk '{print $2}'
}
#获取正在将响应写回到客户端的当前连接数量
writing() {
ngx_status_code || curl -s ${ngx_status} | grep "Writing" | awk '{print $2}'
}
#获取当前正在等待响应的客户端连接数量
waiting() {
ngx_status_code || curl -s ${ngx_status} | grep "Waiting" | awk '{print $2}'
}
#使用位置变量控制脚本输出
case $1 in
active)
active;;
accepts)
accepts;;
handled)
handled;;
requests)
requests;;
reading)
reading;;
writing)
writing;;
waiting)
waiting;;
*)
echo "未知选项,请输入正确的选项!"
esac
赋予执行权限 ,执行脚本进行检测
chmod +x /etc/zabbix/chk_nginx.sh
/etc/zabbix/chk_nginx.sh active
cp /etc/zabbix/zabbix_agentd.conf{,.bak}
cd /etc/zabbix/zabbix_agentd.d/
创建自定义监控项,监控nginx
vim /etc/zabbix/zabbix_agentd.d/userparameter_nginx.conf
#当前活动的客户端连接数
UserParameter=nginx.active,bash /etc/zabbix/chk_nginx.sh active
#接收客户端连接的总数量
UserParameter=nginx.accepts,bash /etc/zabbix/chk_nginx.sh accepts
#已处理的连接总数量
UserParameter=nginx.handled,bash /etc/zabbix/chk_nginx.sh handled
#客户端请求总数量
UserParameter=nginx.requests,bash /etc/zabbix/chk_nginx.sh requests
#正在读取请求标头的当前连接数量
UserParameter=nginx.reading,bash /etc/zabbix/chk_nginx.sh reading
#正在将响应写回到客户端的当前连接数量
UserParameter=nginx.writing,bash /etc/zabbix/chk_nginx.sh writing
#当前正在等待响应的客户端连接数量
UserParameter=nginx.waiting,bash /etc/zabbix/chk_nginx.sh waiting
注:这里脚本名称需和刚刚定义的脚本目录、名称一致。
重启服务
systemctl restart zabbix-agent
拓展命令:
%s#script/##g
这是一种在正则表达式中使用的替换操作。在这个例子中,%s 是一个占位符,它表示要替换的字符串,#script/ 是要查找的字符串,##g 表示全局替换。所以,这个正则表达式的意思是:在文本中查找所有的 #script/,并将它们替换为 %s。
%s/script\//g
这也是一种在正则表达式中使用的替换操作。在这个例子中,%s 是一个占位符,它表示要替换的字符串,/script\/ 是要查找的字符串,g 表示全局替换。这里的反斜杠 \ 起到了转义的作用,它告诉正则表达式引擎,接下来的字符应当被解释为一个普通字符,而不是特殊字符。所以,这个正则表达式的意思是:在文本中查找所有的 /script/,并将它们替换为 %s。注意这里的斜杠 / 前面有一个反斜杠 \,这是为了防止斜杠被正则表达式识别为特殊字符。
服务端访问测试
zabbix_get -s 192.168.11.112 -k nginx.active
web添加监控项进行访问测试
之前已经创建过主机,所以再次不需要进行创建,只需添加模版即可
注:这里只测试一个内容,通了即可,如果继续测试的话只需把内容添加进去即可,这里就不做添加流程了,与上述一样。
8.3、zabbix监控mysql
客户端:
安装mysql
yum install -y mariadb-server mariadb
创建用户并赋予权限
systemctl start mariadb
mysql
create user 'zabbix'@'%' identified by '123123';
grant all privileges on *.* to 'zabbix'@'%';
flush privileges;
select user,host from mysql.user;
exit
drop user 'root'@'master';
select user,host from mysql.user;
exit
注:需要删除这个root@master的用户,不然后面web进行访问时会出问题,显示不出来图形。
mysql
use mysql;
select * from user \G;
drop user '\ '@'master';
select * from user \G;
flush privileges;
exit
添加监控账户
vim /etc/zabbix/.my.cnf
[client]
user='zabbix'
password='123123'
ll -a /etc/zabbix/
备份原有的模版
cp /usr/share/doc/zabbix-agent-5.0.37/userparameter_mysql.conf{,.bak}
ls /usr/share/doc/zabbix-agent-5.0.37/
将模版拷贝至目录下
cd /etc/zabbix/zabbix_agentd.d/
cp /usr/share/doc/zabbix-agent-5.0.37/userparameter_mysql.conf ./
ls
修改配置文件,在命令行新增默认路径 HOME=/etc/zabbix/
vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
重启服务
systemctl restart zabbix-agent
执行其中一条命令进行测试 (服务端进行测试通联)
mysqladmin -uzabbix -p123123 -P3306 -h192.168.11.112 ping
zabbix_get -s 192.168.11.112 -k mysql.ping[192.168.11.112,3306]
如果后期再使用过程中报类似这种的错误,解决方式如下:
这种问题不是密码的问题,是用户出现了问题。
编辑web端
(二)触发器报警
1、监控项获取失败排查(面试)
1)web添加监控项页面测试获取监控项值
2)服务端安装zabbix_get
3)在客户端通过zabbix_agentd -t检测获取监控项
如果成功获取到值则配置没有问题,如果获取不到,则自定义监控项定义有问题
2、触发器
作用:定义监控项的阈值,当超过阈值则触发警告
阈值:指某一个监控指标的定义值
定义触发器:
主机→ 触发器→ 创建→ 构建表达式
设置阈值类型:
last: 最新一次的数据
avg:单位时间内的平均值
count:单位时间内的总数
max: 最大值
注:详细步骤在前面7.1、自定义监控项中。
3、配置动作实现zabbix自动化报警
通过动作实现
企业级常用的报警方式:
1)邮件报警
2)微信报警
3)钉钉报警
4)短信报警
3.1、配置邮件告警
注册163邮箱用于后续使用
zabbix服务端配置邮件服务器
yum install -y mailx dos2unix
查看版本
mailx -V
编辑配置文件
vim /etc/mail.rc
//此文件末尾添加,指定接收邮件邮箱地址,指定邮箱服务器地址,指定接收邮件邮箱地址的授权码,并非 163 邮箱的密码,而是授权码,登陆 163 网易邮箱地址后,--设置--开启smtp 和 pop3--点击客户端生成授权码-使用此授权码进行指定到此配置文件;
set from=163账号 smtp=smtp.163.com
set smtp-auth-user=163账号 smtp-auth-password=之前保存的授权密码
set smtp-auth=login
echo "测试通信是否正常!" | mail -s "测试通联" 163账号
web端查看邮件
编辑配置文件引用邮件脚本
vim /etc/zabbix/zabbix_server.conf
#在文件最下方插入内容
AlertScriptsPath=/etc/zabbix/alertscripts
内容解析:
AlertScriptsPath=/etc/zabbix/alertscripts 是一个配置项,通常用于 Zabbix 监控系统中。Zabbix 是一个开源的监控和警报系统,可以监视 IT 基础架构(如服务器、网络设备等)的性能和可用性,并在发现异常时发送警报。这个配置项的作用是指定 Zabbix 报警脚本所在的目录。AlertScriptsPath 变量的值(在本例中为 /etc/zabbix/alertscripts)是 Zabbix 查找报警脚本的默认路径。当 Zabbix 需要执行报警操作时,它会在这个路径下查找并执行相应的报警脚本。
mkdir /etc/zabbix/alertscripts
vim /etc/zabbix/alertscripts/mail.sh
#!/bin/bash
#邮件报警
#定义收件人、标题信息
addressee=$1
title=$2
#定义文件路径
FILE=/tmp/mailtmp.txt
echo "$3" > $FILE
#文字转码
#使用 dos2unix 命令转换字符,避免收到邮件不显示正常邮件内容而出现 ATTO0001.bin 的错误
/usr/bin/dos2unix -k $FILE
#发送前文转码后的结果
/bin/mail -s "$2" "$1" < $FILE
赋予权限并创建所需的文件
chmod 777 mail.sh
chown zabbix.zabbix mail.sh
touch /tmp/mailtmp.txt
chmod 777 /tmp/mailtmp.txt
chown zabbix.zabbix /tmp/mailtmp.txt
注:文件以及报警脚本的归属以及权限(必须要有执行权限),脚本文件和存放邮件消息文件归属必须是zabbix;
传参测试web是否可以正常使用
./mail.sh xxx@163.com "测试" "可以正常通信!"
配置web端
配置思路:
监控 ---> 创建报警媒型 ---> 更新用户使用的报警媒介类型 ---> 创建动作(根据触发器触发) ---> 验证
创建发送邮件的动作
输入动作名,动作名最好为英文,可以选择触发这个动作的条件(可以选择触发器=触发器的名称或者选择触发器似触发器名称),作为条件,如若如图不选择触发器的条件,那么任何消息都会提示到邮箱;
停掉客户端的MySQL进行测试
systemctl stop mariadb
启动MySQL服务查看
systemctl start mariadb
配置发送消息模板
故障:{TRIGGER.STATUS},服务器:{HOSTNAME1},发生:{TRIGGER.NAME}故障!
告警主机:{HOSTNAME1} 告警时间:{EVENT.DATE}{EVENT.TIME} 告警等级:{TRIGGER.SEVERITY} 告警信息:{TRIGGER.NAME} 告警项目:{TRIGGER.KEY1} 问题详情:{ITEM.NAME}:{ITEM.VALUE} 当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1} 事件 ID:{EVENT.ID}
问题模板:
Problem started at {EVENT.TIME} on {EVENT.DATE} Problem name: {EVENT.NAME} Host: {HOST.NAME} Severity: {EVENT.SEVERITY} Operational data: {EVENT.OPDATA} Original problem ID: {EVENT.ID} {TRIGGER.URL}
"Problem started at {EVENT.TIME} on {EVENT.DATE}" 表示问题开始的时间和日期。
"Problem name: {EVENT.NAME}" 表示问题的名称。
"Host: {HOST.NAME}" 表示问题所在的主机名。
"Severity: {EVENT.SEVERITY}" 表示问题的严重性。
"Operational data: {EVENT.OPDATA}" 表示操作数据。
"Original problem ID: {EVENT.ID}" 表示原始问题 ID。
"{TRIGGER.URL}" 表示触发器的 URL。恢复模板:
Problem has been resolved at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE} Problem name: {EVENT.NAME} Problem duration: {EVENT.DURATION} Host: {HOST.NAME} Severity: {EVENT.SEVERITY} Original problem ID: {EVENT.ID} {TRIGGER.URL}
这段信息表示问题的解决时间、日期、持续时间、主机名、严重性、原始问题 ID 以及触发器的 URL。
{EVENT.RECOVERY.TIME}表示问题被解决的时间,{EVENT.RECOVERY.DATE}表示问题被解决的日期。
{EVENT.DURATION}表示问题存在的持续时间。
{HOST.NAME}表示问题所在的主机名。
{EVENT.SEVERITY}表示问题的严重性。
{EVENT.ID}表示原始问题的 ID。
{TRIGGER.URL}表示触发器(Trigger)的 URL 地址,它可能是导致问题发生的原因。
3.2、配置钉钉报警
注册下载钉钉用于后续使用
【复制webhook,这个链接很重要,后面钉钉脚本需要用到此链接】
zabbix-server端配置
编辑配置文件在文件最后面加入内容
vim /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/etc/zabbix/alertscripts
注:因为我们是使用py脚本,在Linux操作系统自带的python版本较低以及所需内容不全,所以需要提前进行安装
yum -y install python-requests python
创建对应目录,编辑报警所需脚本
mkdir /etc/zabbix/alertscripts
vim /etc/zabbix/alertscripts/dingding.py
内容如下:
#!/usr/bin/env python
#coding:utf-8
#zabbix钉钉报警
import requests,json,sys,os,datetime
#(修改为自己的webhook),就是刚刚保存的链接
webhook="https://oapi.dingtalk.com/robot/send?access_token=f6d54300ca74f0e898f0e3ba51f723444fa1bbe0a396af7bcfadc1e3bbe0abfdzn"
user=sys.argv[1]
text=sys.argv[3]
data={
"msgtype": "text",
"text": {
"content": text
},
"at": {
"atMobiles": [
user
],
"isAtAll": False
}
}
headers = {'Content-Type': 'application/json'}
x=requests.post(url=webhook,data=json.dumps(data),headers=headers)
if os.path.exists("/var/log/zabbix/dingding.log"):
f=open("/var/log/zabbix/dingding.log","a+")
else:
f=open("/var/log/zabbix/dingding.log","w+")
f.write("\n"+"--"*30)
if x.json()["errcode"] == 0:
f.write("\n"+str(datetime.datetime.now())+" "+str(user)+" "+"发送成功"+"\n"+str(text))
f.close()
else:
f.write("\n"+str(datetime.datetime.now()) + " " + str(user) + " " + "发送失败" + "\n" + str(text))
f.close()
systemctl restart zabbix-server
赋予权限并创建所需内容
手动测试脚本是否可以正常报警
./dingding.py xiejin test "这是一条告警测试信息,请忽略"
web端进行配置
报警媒介类型:(三个脚本参数)
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
故障报警模版:
标题:
告警:{EVENT.NAME}
正文:
-=【告警啦】=- 告警组:{TRIGGER.HOSTGROUP.NAME} 告警主机:{HOSTNAME1} 告警主机别名:{HOST.NAME} 主机IP:{HOST.IP} 主机描述:{HOST.DESCRIPTION} 告警时间:{EVENT.DATE} {EVENT.TIME} 告警等级:{TRIGGER.SEVERITY} 警报类别:{TRIGGER.NAME} 当前状态:{ITEM.LASTVALUE} 告警平台:http://192.168.11.112/zabbix
故障恢复模版:
标题:
故障恢复:{EVENT.NAME}
正文:
恢复主机:{HOSTNAME1} 恢复时间:{EVENT.DATE} {EVENT.TIME} 主机IP:{HOST.IP} 告警项目:{TRIGGER.KEY1} 问题详情:{ITEM.NAME}:{ITEM.VALUE} 当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1} 事件ID:{EVENT.ID}
此时web端已经配置完毕,关闭MySQL进行测试
3.3、配置微信报警
1)申请企业微信
https://work.weixin.qq.com/
2)创建自定义应用
3)准备微信报警脚本
上传脚本
cd /usr/lib/zabbix/alertscripts
配置脚本
corpid=企业ID
appsecret=自建项目secret
agentid=自建项目ID
4)安装pip
yum install python-pip
pip install requests
测试脚本发送消息命令
python weixin.py 当前在项目中的账号 “标题” “消息”
chmod +x weixin.py
rm -rf /tmp/weixin.log
5)web端添加报警媒介
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
6)报警升级
以步骤为单位进行分步骤报警
间隔时间是按照上一个步骤持续时间定义的
7)web检测
作用:通过抓取某URL页面中的关键字或状态码,探测业务异常情况
8)zabbix解决web页面乱码问题
zabbix存放字符集的路径:/usr/share/zabbix/assets/fonts
通过软连接上传自定义的字符集文件即可
3. 4、zabbix自动化监控
方法一:自动发现
自动扫描某范围内的ip
客户端:安装zabbix-agent 配置服务端是谁
动作:自动发现操作
自动发现扫描:指定IP范围扫描地址段
实现原理:
服务端通过配置自动发现规则,进行ip地址段的扫描,触发动作添加主机
问题:对服务端压力过大
方法二:主动注册
所有客户端主动找服务端
ServerActive=服务端IP
Metadata=主机名
Hostname=主机名
web配置自动注册
总结
Zabbix 是一款优秀的开源监控和报警软件,支持监控多种类型的设备,如 Linux 服务器、Windows 客户端、MySQL 数据库、NGINX 等。通过实时数据收集、分析和可视化,Zabbix 能够为管理员提供全面、及时的监控信息,确保 IT 系统的稳定运行。在配置 Zabbix 时,首先需要安装 Zabbix 代理程序,以便收集监控数据。接下来,在 Zabbix 服务器(web)上创建主机,并将其与代理程序关联。通过创建触发器,可以在检测到异常情况时自动发送报警。除了支持钉钉报警、邮件报警等常见报警方式外,Zabbix 还提供了丰富的图形界面,方便管理员查看监控数据和报警历史记录。同时,Zabbix 的 API 接口允许管理员自动化地获取监控数据,并实现与其他工具的集成。