【001】Zabbix学习笔记-Zabbix安装与基本配置
1 Zabbix简介
zabbix中文社区
Zabbix中文版(4.0版)官方文档
1.1 监控系统介绍
监控系统在运维自动化中的角色
监控系统,是运维工程师和研发工程师的眼睛。它帮助工程师在第一时间发现网站的问题。
服务器的整个生命周期,都要和监控系统打交道:
服务器上架,需要加入入基础监控,比如CPU负载、内存等;
当服务器上开始跑应用时,需要加入对应的应用监控,比如Resin、MySQL等;
当服务器维护时,又要暂停这些报警,否则你明明在维护MySQL,监控系统还给你报警说MySQL挂了。
…
这些操作,手动去做非常麻烦,需要跟运维的其他系统共同协作,比如CMDB中一台机器上架了,那么监控系统自动加入监控。
监控系统是运维人员的眼睛,没有它,就没法知道系统运行状况,总不见得,我打开几十几百个终端,然后while true 来显示 CPU负载。
撇开能不能看清楚的问题,得要多少显示器才能显示所有服务器的这些信息?
当发生问题时,监控系统要第一时间发出报警,报警中除了出问题的点,还可以有一些数据和简单的分析,
比如当时一段时间的CPU负载等,以帮助接到报警的人员快速定位问题。
在出现故障以后进行问题分析时,还要靠监控系统。因为监控系统真实地记录了故障发生现场这台服务器的状况。
运维工程师可以通过不同纬度的分析,找出问题的原因。
监控系统在运维自动化里的角色,可以用下面三点来概括。
(1)监控数据收集及可视化。
(2)异常数据报警。
(3)和其他的系统协同工作。
监控系统的理想化模样
根据控监控系统在运维中的角色,理想的监控系统应该具有如下特点:
- 监控数据收集及可视化
(1)监控系统能够自定义监控的内容,可以自己写脚本来收集需要的数据。
(2)数据要保存在数据库中,这样以后需要的时候可以对这些数据进行分析计算。
(3)能够方便、快速地将监控加人到服务器上,不需要烦琐的操作。
(4)数据可视化不要很花哨,但要直观好用。 - 异常数据报警。
(1)可以定义复杂的报警逻辑,可以做到 Item之间的关联报警,而不是只能针对一个。
(2)报警需要被确认,让运维人员知道多少报警已经有人认领并开始处理了。
(3)报警方式要能够自定义,可以发邮件和短信,如果能够在 IM上通知别人就更好了。
(4)报警内容要可以自行设置,在报警邮件中加入一些简单的分析,而不是让运维人员上服务器敲命令来获取基本的信息。
(5)报警后可以自动跑一些命令。这些命令可以是获取需要的信息,也可以是自动修复,比如重启服务等。 - 和其他系统协同工作。
(1)有强大的API可以使用,可以让其他系统调用完成工作。
(2)监控数据是开放的,数据库中的数据结构不要太复杂,让人无从下手。
(3)监控可视化的图可以方便地引用,而不是要用一大串JavaScript。
1.2 Zabbix
Zabbix简介
Zabbix是一个非常强大的监控系统。其官方的说明是:Zabbix是企业级的软件,被设计用来监控IT基础设施的可用性和性能。
而我的看法是:它是一个能够快速搭建起来的、开源的监控系统。
对于想快速可用的小型公司,Zabbix 自带的 Item 足够满足需求,通过简单的配置,可以在很短的时间内搭建起一套功能完善的报警系统;
而对于中大型公司,Zabbix 也能很好地支撑,可以设定自定义的 ltem,自动生成报表,有API和其他系统集成,数据库中有开放的数据可供分析。
为什么暴雪的游戏(星际争霸、暗黑破坏神、魔兽争霸等)都这么经典?因为它们“易于上手,难于精通”。
而Zabbix也一样,你可以非常容易地搭建起可用的Zabbix,但要用好它,把它的潜能挖掘出来,需要花很大的力气。
使用Zabbix时,一般需要在被监控的服务器上安装Zabbix Agent。
Zabbix Server 会和 Zabbix Agent进行通信,获取监控数据,这是Zabbix监控的一般模式。
选择Zabbix的理由
对应前文,看看Zabbix是否能满足理想中的监控系统的要求:
- 监控系统能够自定义监控的内容,可以自己写脚本来收集需要的数据:Zabbix 支持任何自定义的监控脚本,只要输出需要的值就可以。
- 数据要保存在数据库中,这样以后需要的时候可以对这些数据进行分析计算:Zabbix在数据库中的表结构虽然有些复杂,但逻辑很清晰。
- 能够方便、快速地将监控加入到服务器上,不需要烦琐的操作:Zabbix有模板这一概念,可以方便地将一组 Item 进行统一操作。
- 数据可视化不要很花哨,但要好用:Zabbix 每一个 Item 都可以看到其历史,Web 界面可拖动,界面友好。
- 可以定义复杂的报警逻辑,做到Item之间的关联报警,而不是只能针对一个:Zabbix强大的 Trigger 定义,几乎可以满足所有规则组合。
- 报警需要被确认,让运维人员知道多少报警已经有人认领并开始处理了:Zabbix 对于报警,有 ACK 机制。
- 报警方式要能够自定义,可以发邮件、发短信,如果能够在IM上通知别人就更好了:Zabbix 支持邮件、Jabber。
- 报警内容要自己可设置,在报警邮件中加入一些简单的分析:Zabbix自定义了一套宏可以在报警邮件中引用。
- 报警后可以自动跑一些命令:在触发报警后,Zabbix可以远程执行命令。可以是获取信息,也可以是自动修复。
- 有强大的 API 可以使用,可以让其他系统来调用完成工作:Zabbix支持RestAPI,几乎所有的操作都可以通过API实现。
- 监控数据是开放的,数据库中的数据结构不要太复杂,让人无从下手:监控数据就在Zabbix数据库中,可以方便地进行分析
- 监控可视化的图可以方便的引用:Zabbix 使用PHP原生的绘图模块,如果要引用Zabbix的图表,只需要引用图表的URL即可,非常方便。
1.3 Zabbix监控原理
想要用好zabbix进行监控,那么我们首要需要了解下zabbix这个软件的实现原理及它的架构。
建议多阅读官方文档。
zabbix架构图
zabbix组件
zabbix由以下几个组件部分构成:
1、Zabbix Server:负责接收agent发送的报告信息的核心组件,所有配置,统计数据及操作数据均由其组织进行;
2、Database Storage:专用于存储所有配置信息,以及由zabbix收集的数据;
3、Web interface:zabbix的GUI接口,通常与Server运行在同一台主机上;
4、Proxy:可选组件,常用于监控节点很多的分布式环境中,代理server收集部分数据转发到server,可以减轻server的压力;
5、Agent:部署在被监控主机上,负责收集本地数据并发往Server端或Proxy端;
相关术语
主机(host):要监控的网络设备,可由IP或DNS名称指定;
主机组(host group):主机的逻辑容器,可以包含主机和模板,但同一个组织内的主机和模板不能互相链接;主机组通常在给用户或用户组指派监控权限时使用;
监控项(item):一个特定监控指标的相关的数据;这些数据来自于被监控对象;item是zabbix进行数据收集的核心,相对某个监控对象,每个item都由"key"标识;
触发器(trigger):一个表达式,用于评估某监控对象的特定item内接收到的数据是否在合理范围内,也就是阈值;接收的数据量大于阈值时,触发器状态将从"OK"转变为"Problem",当数据再次恢复到合理范围,又转变为"OK";
事件(event):触发一个值得关注的事情,比如触发器状态转变,新的agent或重新上线的agent的自动注册等;
动作(action):指对于特定事件事先定义的处理方法,如发送通知,执行脚本等;
报警媒介类型(media):发送通知的手段或者通道,如Email、Jabber或者SMS等;
用户(user)
模板(template):用于快速定义被监控主机的预设条目集合,通常包含了item、trigger、graph、screen、application以及low-level discovery rule;模板可以直接链接至某个主机;
前端(frontend):Zabbix的web接口
应用集 (application) : 一组监控项组成的逻辑分组
监控流程
一个监控系统运行的大概的流程是这样的:
agentd需要安装到被监控的主机上,它负责定期收集各项数据,并发送到zabbix server端,zabbix server将数据存储到数据库中,zabbix web根据数据在前端进行展现和绘图。
这里agentd收集数据分为主动和被动两种模式:
主动:agent请求server获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxy
被动:server向agent请求获取监控项的数据,agent返回数据。
【主动监测】通信过程
zabbix首先向ServerActive配置的IP请求获取active items,获取并提交active items数据值server或者proxy。很多人会提出疑问:zabbix多久获取一次active items?它会根据配置文件中的RefreshActiveChecks的频率进行,如果获取失败,那么将会在60秒之后重试。分两个部分:
获取ACTIVE ITEMS列表
• Agent打开TCP连接
• Agent请求items检测列表
• Server返回items列表
• Agent 处理响应
• 关闭TCP连接
• Agent开始收集数据
主动检测提交数据过程如下:
• Agent建立TCP连接
• Agent提交items列表收集的数据
• Server处理数据,并返回响应状态
• 关闭TCP连接
【被动监测】通信过程
• Server打开一个TCP连接
• Server发送请求agent.ping\n
• Agent接收到请求并且响应
• Server处理接收到的数据1
• 关闭TCP连接
从以上过程我们可以看出来,被动模式每次都需要打开一个tcp连接,这样当监控项越来越多时,就会出现server端性能问题了。
还有人会问,那实际监控中是用主动的还是被动的呢?这里主要涉及两个地方:
1、新建监控项目时,选择的是zabbix代理还是zabbix端点代理程式(主动式),前者是被动模式,后者是主动模式。
2、agentd配置文件中StartAgents参数的设置,如果为0,表示禁止被动模式,否则开启。一般建议不要设置为0,因为监控项目很多时,可以部分使用主动,部分使用被动模式。
2 Zabbix部署
这里我们布署zabbix版本为5.0
环境准备
系统版本: CentOS7.6
zabbix-server版本: 5.0
zabbix-server: 192.168.10.11
zabbix-agent: 192.168.10.12
关闭所有机器的防火墙 , selinux
2.1 zabbix-server
参考官方文档选择如下:
# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
# yum clean all
# yum install zabbix-server-mysql zabbix-agent mariadb-server -y
# yum install centos-release-scl -y
# yum install zabbix-web-mysql-scl zabbix-apache-conf-scl -y
打开zabbix-frontend enabled
# vim /etc/yum.repos.d/zabbix.repo
启动数据库
[root@zabbix ~]# systemctl start mariadb
[root@zabbix ~]# mysql
创建数据库与用户
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
Query OK, 0 rows affected (0.00 sec)
zcat导入数据库
[root@zabbix ~]# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
此时进入zabbix库里会发现tables已经导入
备份然后更改配置文件
[root@zabbix ~]# cp /etc/zabbix/zabbix_server.conf{,.bak}
[root@zabbix ~]# vim /etc/zabbix/zabbix_server.conf
将密码更改
更改时区
[root@zabbix ~]# vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
启动服务
[root@zabbix ~]# systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
[root@zabbix ~]# systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm
查看是否成功
[root@zabbix ~]# netstat -tlnp |grep "zabbix"
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 2047/zabbix_agentd
tcp6 0 0 :::10050 :::* LISTEN 2047/zabbix_agentd
用浏览器访问的对应ip发现连接不上,同时netstat发现zabbix-server无法启动
通过日志分析发现是防火墙未关闭
关闭防火墙selinux然后重启
[root@zabbix ~]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@zabbix ~]# systemctl stop firewalld.service
[root@zabbix ~]# vim /etc/selinux/config
问题解决浏览器访问成功
next step 发现所有都ok,很好
设置好密码后出现报错Cannot connect to the database. 没有找到对应文件
错误原因是mariadb未启动
解决方案:
[root@zabbix conf]# systemctl start mariadb
继续下一步
初始登陆名Admin 密码zabbix
草 终于成功了
2.2 zabbix-agent与UserParameter实现自定义监控
开一台新机器(记得关闭防火墙)取名为zabbix-agent然后安装zabbix-agent
[root@zabbix-agent ~]# yum -y install zabbix-agent
更改配置文件
vim /etc/zabbix_agentd.conf
更改server ip 和 active server ip
更改hostname(更改为主机名)此处为zabbix-agent
启动服务
[root@zabbix-agent ~]# systemctl enable zabbix-agent.service
[root@zabbix-agent ~]# systemctl start zabbix-agent.service
netstat查看发现启动成功
实现zabbix agent 与 zabbix server联通
我们做如下操作
[root@zabbix-agent ~]# mkdir /test
[root@zabbix-agent ~]# touch /test/{a..f}
[root@zabbix-agent ~]# ls /test/
a b c d e f
更改配置文件
vim /etc/zabbix_agentd.conf
更改UserParameter
重启服务
[root@zabbix-agent ~]# ls /test/ |wc -l
6
[root@zabbix-agent ~]# systemctl restart zabbix-agent.service
在zabbix-server端安装zabbix-get
[root@zabbix conf]# yum -y install zabbix-get
在zabbix-server端测试zabbix_get发现成功,这表明我们zabbix server与agent连通
[root@zabbix conf]# zabbix_get -s 192.168.23.211 -k test.file.no
6
监控agent端/boot
[root@zabbix-agent test]# df -h |awk '/boot/{print $5}'| tr -d '%'
14
在配置文件中添加UserParameter
[root@zabbix-agent test]# vim /etc/zabbix_agentd.conf
重启
[root@zabbix-agent test]# systemctl restart zabbix-agent.service
在zabbix-server端使用zabbix_get查看发现成功
[root@zabbix conf]# zabbix_get -s 192.168.23.211 -k boot.used
14
在zabbix-agent 端创建新文件试试
[root@zabbix-agent test]# dd if=/dev/zero of=/boot/test bs=10M count=10
记录了10+0 的读入
记录了10+0 的写出
104857600字节(105 MB)已复制,0.175105 秒,599 MB/秒
[root@zabbix-agent test]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/mapper/centos-root 17G 1.5G 16G 9% /
/dev/sda1 1014M 237M 778M 24% /boot
tmpfs 98M 0 98M 0% /run/user/0
在zabbix-server端使用zabbix_get查看发现变成了24,试验成功
[root@zabbix conf]# zabbix_get -s 192.168.23.211 -k boot.used
24
检测CS连通性
创建主机群组
在zabbix页面点击配置项的主机群组界面 右上角创建
设置组名
在zabbix页面点击配置项的主机界面
右上角创建并配置主机
添加成功
查看监控项并在右上角创建监控项
配置监控项
点击测试发现正确获得16个文件的数量
点击下方添加监控项
我们看到添加成功
创建图形
回到主机界面看看图形
右上角创建图形,做如下配置
查看图像,发现中文是乱码
中文乱码解决方法
在 windows上传中文字体
将字体传到zabbix上的相应文件夹
[root@zabbix fonts]# mv /root/simsun.ttc /usr/share/fonts/dejavu/
做个软连接
[root@zabbix fonts]# ln -sf /usr/share/fonts/dejavu/simsun.ttc /etc/alternatives/zabbix-web-font
刷新一下发现乱码消失
创建触发器
编辑触发器(触发器表达式在右边添加中设置)
设置成功
出发警告试一试
[root@zabbix-agent test]# touch {1..100}
图形界面查看发现触发警告
[root@zabbix-agent test]# rm -rf {1..100}
警告消失
收zabbix邮件
设置媒介类型
在接收的邮件开启IMAP/SMTP服务
(设置时注意保存弹出来的授权码)
在zabbix中email做如下配置
密码是之前保存的授权码
点击email在message template 编辑发布的邮件
更改一下
接下来设定用户
添加收件人
添加一个动作
动作里添加操作
测试触发器
在agent端触发
[root@zabbix-agent test]# touch {A..Z}
问题触发
我们去看看邮件,收到告警
Reference
課堂筆記