简介
官网:https://www.zabbix.com/
Zabbix 是一个开源的网络监控和警报解决方案。它允许管理员监控网络中的各种设备、服务器和应用程序,并收集有关它们性能和状态的数据。Zabbix 提供了一个集中化的管理界面,通过各种监控方式(如PING、SNMP、JMX 和自定义脚本)来监视系统的资源利用率、网络流量、服务可用性等。此外,Zabbix 还提供了灵活的警报功能,当某些指标超出设定的阈值时可以发送通知或执行特定操作。总的来说,Zabbix 是一个强大的工具,帮助管理员实时监控和管理复杂的 IT 环境。
常见的监控软件:zabbix、promehteus、nagios、cacti、open-falcon等
监控的意义:
1.需要保障业务时时刻刻正常的运转,一旦出现问题,需要马上知道,赶紧修复
2.解放人力,提升效率,获得更加多的幸福感和安全感
监控软件:
1.开源的软件 zabbix,prometheus,cacti,nagios、open-falcon 等
2.自研的,自己研发 falcon
zabbix能监控什么?
架构
参考:https://www.cnblogs.com/mysql-dba/p/5010902.html
重要组件说明:
1)zabbix server:负责接收agent发送的报告信息的核心组件,所有配置、统计数据及操作数据都由它组织进行;
2)database storage:专用于存储所有配置信息,以及由zabbix收集的数据;
3)web interface:zabbix的GUI接口;
4)proxy:可选组件,常用于监控节点很多的分布式环境中,代理server收集部分数据转发到server,可以减轻server的压力;
5)agent:部署在被监控的主机上,负责收集主机本地数据如cpu、内存、数据库等数据发往server端或proxy端;
另外,zabbix server、proxy、agent都有自己的配置文件以及log文件,重要的参数需要在这里配置,后面会详细说明。
一个监控系统运行的大概的流程是这样的:
agentd需要安装到被监控的主机上,它负责定期收集各项数据,并发送到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.ping\n
- Agent接收到请求并且响应<HEADER><DATALEN>1
- Server处理接收到的数据1
- 关闭TCP连接
这里,有人可以看出来,被动模式每次都需要打开一个tcp连接,这样当监控项越来越多时,就会出现server端性能问题了。
还有人会问,那实际监控中是用主动的还是被动的呢?这里主要涉及两个地方:
1、新建监控项目时,选择的是zabbix代理还是zabbix端点代理程式(主动式),前者是被动模式,后者是主动模式。
2、agentd配置文件中StartAgents参数的设置,如果为0,表示禁止被动模式,否则开启。一般建议不要设置为0,因为监控项目很多时,可以部分使用主动,部分使用被动模式。
安装和使用
1. 安装zabbix环境
官网
根据Centos的版本进入官网www.zabbix.com选择要下载的zabbix版本
安装zabbix服务器的源
[root@zabbix ~]# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
安装zabbix相关软件
[root@zabbix ~]# yum install zabbix-server-mysql zabbix-agent
安装前端相关的软件并修改配置
[root@zabbix ~]# yum install centos-release-scl
修改仓库文件,启用前端的源
[root@zabbix ~]# vim /etc/yum.repos.d/zabbix.repo
安装web相关的软件
[root@zabbix ~]# yum install zabbix-web-mysql-scl zabbix-nginx-conf-scl
安装数据库
如果已经存在mysql的centos系统,则不需要重新安装数据库
如果系统中没有数据库,需要进行安装
[root@zabbix ~]# yum install mariadb mariadb-server -y
mariadb-server 服务器端的软件包
mariadb 提供客户端命令的软件包启动数据库
[root@zabbix ~]# service mariadb start
Redirecting to /bin/systemctl start mariadb.service
设置mariadb数据库开机启动
[root@zabbix ~]# systemctl enable mariadb
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
查看mysql的进程是否运行
[root@zabbix ~]# ps aux|grep mysqld
mysql 2574 0.0 0.1 113412 1596 ? Ss 11:22 0:00 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
mysql 2739 0.1 8.2 968920 81684 ? Sl 11:22 0:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock
root 2794 0.0 0.0 112824 980 pts/0 R+ 11:26 0:00 grep --color=auto mysql
查看端口号
[root@zabbix ~]# yum install net-tools -y
[root@zabbix ~]# netstat -antplu|grep mysqld
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2739/mysqld
登录mysql
[root@zabbix ~]# mysql -uroot -p
Enter password: #没有密码,直接回车
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 367
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
创建初始数据库
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin; #创建zabbix数据库
MariaDB [(none)]> create user zabbix@localhost identified by 'sc123456'; #创建用户
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost; #对用户进行授权
MariaDB [(none)]> set global log_bin_trust_function_creators = 1;
MariaDB [(none)]> quit;
导入初始架构和数据,系统将提示您输入新创建的密码
[root@zabbix ~]# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
为Zabbix server配置数据库
[root@zabbix ~]# vim /etc/zabbix/zabbix_server.conf
为Zabbix前端配置PHP
[root@zabbix ~]# vim /etc/opt/rh/rh-nginx116/nginx/conf.d/zabbix.conf
[root@zabbix ~]# vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
将zabbix的nginx更换为默认80端口
修改默认nginx中的配置,防止与zabbix中的nginx抢占端口
修改默认的nginx为8080端口
[root@zabbix ~]# vim /etc/opt/rh/rh-nginx116/nginx/nginx.conf
重新启动zabbix
[root@zabbix ~]# systemctl restart zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm
[root@zabbix ~]# systemctl enable zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm
2. 测试访问
访问http://192.168.107.16
需要做初始化操作才能出现下面画面
首次登陆的账号密码:
账号:Admin
密码:zabbix
至此zabbix环境就搭建成功了!
3. 在要监控的服务器上安装zabbix-agent服务
这里以一台机器为例,其他机器操作一致
安装zabbix服务器的源
[root@ansible ~]# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
安装zabbix-agent服务
[root@ansible ~]# yum install zabbix-agent -y
修改zabbix_agentd.conf 配置文件,让zabbix-server服务器能来拿数据
[root@ansible ~]# cd /etc/zabbix
[root@ansible zabbix]# ls
zabbix_agentd.conf zabbix_agentd.d
[root@ansible zabbix]# vim zabbix_agentd.conf
重启zabbix-agnt服务
[root@ansible zabbix]# service zabbix-agent restart
Redirecting to /bin/systemctl restart zabbix-agent.service
4. 在zabbix-server服务器上安装zabbix-get服务
[root@zabbix fonts]# yum install zabbix-get
5. 获取数据
[root@zabbix zabbix]# zabbix_get -s 192.168.31.67 -p 10050 -k "system.cpu.load[all,avg1]"
0.000000
[root@zabbix zabbix]# zabbix_get -s 192.168.107.14 -p 10050 -k "system.cpu.load[all,avg1]"
0.000000
[root@zabbix zabbix]# zabbix_get -s 192.168.107.15 -p 10050 -k "system.cpu.load[all,avg1]"
0.000000
[root@zabbix zabbix]# zabbix_get -s 192.168.107.17 -p 10050 -k "system.cpu.load[all,avg1]"
0.290000
[root@zabbix zabbix]# zabbix_get -s 192.168.107.18 -p 10050 -k "system.cpu.load[all,avg1]"
0.000000
[root@zabbix zabbix]# zabbix_get -s 192.168.107.19 -p 10050 -k "system.cpu.load[all,avg1]"
0.000000
[root@zabbix zabbix]# zabbix_get -s 192.168.107.20 -p 10050 -k "system.cpu.load[all,avg1]"
0.000000
至此,zabbix-server就可以获取到要监控的服务器的数据了
6. 在web页添加监控主机
添加每一台主机都是一样的操作,这里只展示其中一台
把文字换成中文
添加监控主机
选择模板
也可以不使用模板,自己添加各种应用集和监控项
查看数据图像
可以看到已经有数据
注意:图像下面的文字方框是语言问题,把语言换成英文再看就可以了
至此,zabbix监控web集群外的服务器就完成了!
除了使用模板,还可以自己设置应用集、监控项、触发器、图形、告警等!
自定义监控项
当zabbix自带的模板不能满足公司的需求的时候,就需要设置自定义监控项。
这里以监控ssh服务为例
前提是已经执行了上面的安装配置
1. 在agent上编写监控脚本,监控sshd进程是否启动
[root@ansible ~]# cd /etc/zabbix
[root@ansible zabbix]# ls
zabbix_agentd.conf zabbix_agentd.d
[root@ansible zabbix]#cd zabbix_agentd.d
[root@ansible zabbix_agentd.d]# vim monitor_sshd.sh
#!/bin/bash
#统计sshd进程的数量
num=$( ps aux|grep /usr/sbin/sshd|wc -l)
echo $num
给予脚本可执行权限
[root@ansible zabbix_agentd.d]# chmod +x monitor_sshd.sh
编写自定义监控的配置文件
[root@ansible zabbix_agentd.d]# vim userparameter_ssh.conf
UserParameter=sc.ssh.status,/etc/zabbix/zabbix_agentd.d/monitor_sshd.sh
2. 在server上测试获取数据
[root@zabbix ~]# zabbix_get -s 192.168.107.20 -p 10050 -k sc.ssh.status
1
3. 在web页面上添加应用集和监控项出图
添加触发器报警
{ssh:sc.ssh.status.last(#2)}=1 这个表达式表示,当输出结果为1时,就报警
Zabbix设置微信报警
参考:https://blog.csdn.net/whell_scl/article/details/106722721