Zabbix 使用教程
1. Zabbix 架构图以及特点
- Server服务端
Zabbix Server是Zabbix的核心组件,其功能是将Agent采集到的数据持久化存储到数据库里。
- 数据库存储(MySQL,Oracle,PostgreSQL等)
存储所有由Agent采集到的数据
- Web界面
Zabbix提供了UI界面,Web界面的运行环境可以是Nginx+PHP / Apache+PHP服务组成
Web界面也是ZabbixServer 组成的一部分
- Proxy 代理端
对于分布式环境,它可以代替Zabbix Server收集多个Agent的数据,然后将收集到的数据汇总到
ZabbixServer里,它起到一个分担Server负载的作用
- Agent客户端
Zabbix Agent被部署在需要被监控的主机上,用于采集监控数据并发送到Zabbix Server端
附上一张图
注明: 本教程暂时不涉及部署分布式的服务,所以我们接下来的agent 是和 server 直接通信的,不经过proxy。
2. Zabbix 核心知识理念
-
主机(Host) : 就是具体的监控对象,广义称网络设备,可以是网站、数据库、操作系统。
-
模板(Template):定义了具体的一类监控对象的抽象集成,就类似写作文一样,套模板写。
-
监控项(Item): 就是具体的一项采集指标,比如CPU使用率,设备温度等
-
触发器(Trigger):触发器是基于监控项存在的,通过定义【触发器表达式】创建。
-
动作(Action): 动作是基于触发器存在的,创建动作的时候选择某个具体的触发器,当满足【触发器表达式】的条件后,
就会触发相应的动作,例如当CPU温度大于70度,发邮件告警,发微信告警,或者执行某个Shell脚本等。
3. Zabbix快速添加 agent 以及关联模板和查看数据
3.1 实现自己监控自己,也就是监控server本身
# 上一节我们以及部署好了一台server,就用上一台的来操作 192.168.1.192
# 1.给目标机器安装zabbix-agent
$ rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.11-1.el7.x86_64.rpm
# 同步时间
$ ntpdate -u ntp.aliyun.com
# 2.修改zabbix-agent的配置文件
# https://www.zabbix.com/documentation/4.0/manual/appendix/config/zabbix_agentd # 官网配置文件解释
$ vim /etc/zabbix/zabbix_agentd.conf
# 第一行:得到一个pid数字
# 第二行: 监测agentd的日志文件
# 第三行: 日志是否切割,0 不切割,1 切割
# 第四行: 服务端IP地址
# 第五行: 导入配置文件
------------------------------------------------
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=192.168.1.192
Include=/etc/zabbix/zabbix_agentd.d/*.conf
------------------------------------------------
# 3.启动 zabbix-agent
$ systemctl start zabbix-agent
# 4.查看是否启动 ,agent 的端口号是10050 server的端口号是10051
$ netstat -tunlp
3.2 查看web页面的监控
- 这就是对server 的监控内容
- 作一逐一说明
- 名称: 正在监控的主机设备名称
- 监控项:采集的指标
- 触发器:基于监控项的触发器
- 图形:将采集到的数据以图形展示的数量
- 接口:agent的IP地址加端口
- 模板:上述的监控项、触发器、图形,都是因为应用了这两个模板自动创建的
- 状态:查看此时监控设备的状态
- 可用性:分四个(绿色代表正常 红色代表异常)
- ZBX:只要是装的zabbix-agent ,它的协议就是 [ZBX]
- SNMP:采集如果是网络设备,这里就是SNMP
- JMX:采集的如果是Java程序,这里就是JMX
- IPMI:采集的如果是服务器的硬件信息,就是IPMI
3.3 练习监控另外一台机器,起名为agent-01
# 因为安装agent都是和上面一样的操作,所以为了方便,我们将它写成脚本放进agent-01
# 1. 脚本如下 起一个文件名叫 install_agent.sh
---------------------------------------------------------------------------------------------------
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.11-1.el7.x86_64.rpm
ntpdate -u ntp.aliyun.com
cat > /etc/zabbix/zabbix_agentd.conf << 'EOF'
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=192.168.1.192
Include=/etc/zabbix/zabbix_agentd.d/*.conf
EOF
systemctl start zabbix-agent && systemctl enable zabbix-agent
netstat -tunlp | grep zabbix
---------------------------------------------------------------------------------------------------
# 完了你要记得添加10050的端口号,允许防火墙放行
然后去zabbix-UI界面去添加主机
- 我们先来创建一个主机群组,比如叫Test群组
- 然后去添加主机
4. Zabbix-get 检查
上一步你做完之后,你的ZBX肯定没亮小绿灯,所以 我们用两种方式排除这个问题
来检查Server和Agent是否通信
- 方式一,看日志
# 在agent-01 上查看日志
$ tail -f /var/log/zabbix/*
- 方式二 ,安装zabbix-get 查看
# 在server机器上安装zabbix-get
$ yum install -y zabbix-get
进行检查
# 在Server机器上执行命令
$ zabbix_get -s 192.168.1.193 -k agent.ping # 得到1
# 得到 1 那么Server和Agent是通的
最后一步,给你的主机绑定模板,就可以使用这个key 就可以亮灯
好,我们来总结一下上述添加一个主机的所有操作步骤
- 安装agent于被监控的客户端,检查配置文件,启动agent。
- 在Server中安装zabbix_get组件,利用zabbix_get主动检测是否和agent通信。
- 最后 , 去图形化界面添加这台主机。
5. Zabbix添加Web组以及关联模板和图形查看
5.1 如何查看zabbix默认提供的模板
这些模板你可以去用,可以点进去查看都有啥,也可以不选择模板,可以自定义模板
默认的模板支持自定义更改
- 查看agent-01主机的CPU load
- 查看agent-01系统登陆的用户是几个
我们还可以利用命令行来实现这一操作
- 在server里,zabbix_get -s 192.168.1.193 -k system.users.num # 这个key可以在监控项里找到
6. 自定义监控项以及报警动作
- 示例:测试一个网站是否存活
模板里没有相应的模板,我们自己创建一个监控项。
具体步骤
- 写命令和脚本
- 编写zabbix的自定义监控的配置文件
- 重启zabbix-agent
- 测试zabbix-_get能否拿到数据
- 去zabbix-ui添加监控项
- 采集TCP状态
# 1.知道web服务器的状态,就要去采集TCP的状态
$ netstat -ant | grep -c 'TCP状态' # 具体有 listen(监听) ESTABLISHED(建立了链接) TIME_WAIT(等待)等等
# 2.图解zabbix_agent自定义key的配置文件
#如图,在agent机器里进入到 /etc/zabbix/zabbix-agentd.d目录下,有一个 userparameter_mysql.conf文件
# 3. 写入我们自定义的key的值 ,配置文件起名为 tcp_status.conf
cat > /etc/zabbix/zabbix_agentd.d/tcp_status.conf << 'EOF'
UserParameter=LISTEN,netstat -ant | grep -c LISTEN
UserParameter=TIME_WAIT,netstat -ant | grep -c TIME_WAIT
UserParameter=ESTABLISHED,netstat -ant | grep -c ESTABLISHED
EOF
# 改了配置文件,务必要重启
$ systemctl restart zabbix-agent.service
# 4.本地验证(在Sever里来写命令行验证)
$ zabbix_get -s 192.168.1.193 -k LISTEN # 出现了结果 我这边是 11 个
# 这里小小的扩展一下,如果让你监控11个tcp状态,那么岂不是要写11行,太挫了,zabbix提供传参的方式
----------------------------------------------------
cat > /etc/zabbix/zabbix_agentd.d/tcp_status.conf << 'EOF'
UserParameter=tcp_status[*],netstat -ant | grep -c $1
EOF
----------------------------------------------------
# 这里的tcp_status是我们自定义的key哦 $1是第一个参数哦,就是第几个*
# 那该怎么用呢?
# 这样用!
$ zabbix_get -s 192.168.1.193 -k tcp_status[LISTEN/TIME_WAIT...]
# 5.去zabbix-ui里配置监控项
# 我这里给agent-01添加监控项(3种)
# 点击agent-01那一行的【监控项】-->右上角的【创建监控项】
# 然后如下图
然后依次创建其他两个,我们可以采用简便方式【克隆】
我三个都加了
上面不是添加完监控项了嘛,然后我们来添加一下这三个的图形,只示例一个
点击【主机】—>点击agent-01的【图形】—>右上角【添加图形】
然后选择监控项三个即可。
紧接着我们来给这三个创建触发器
跟上面一样,找到并点击【创建触发器】
我们做那个tcp状态的触发器呢,我们就以time_wait为例吧,我们假使当它的数量大于等于500个的时候,就触发我们这个触发器。
????如何让它数量大于500,我们可以手动模拟给agent-01发http链接
如: ab -c 10 -n 1000 http://192.168.1.193/ 这个意思自己查吧,好吧…
但是,这个是给web服务器要发的,我们还要下载一个web服务器来作为测试工具,就拿nginx举例吧,在agent-01里下载nginx
nginx的默认端口就是80,nginx就是一个web服务器,我们呢就是给web服务器发连接请求的,所以要下载一个web服务器。
$ rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
$ yum install -y nginx
#输入如下命令,没有报错,则启动成功
$ nginx
# 记得放行80端口,也就是http服务
点击添加
一下子就报警了,当我们执行完ab -c 10 -n 1000 http://192.168.1.193/ 后
7.定义报警媒介
报警的触发器已经弄好了,但是人不打开这个网站就不会看到这个报警信息,所以我们希望,给我们发邮件、
或者短信、或者微信,来提示我们这个告警信息
称之为:报警媒介
7.1 邮件报警的配置
设定一个报警的条件
- 监测tcp 的状态,
- 监测当前机器的登陆用户数量,当用户的数量超过3个就发邮件告警(演示这个)
7.1.1 配置监控用户的自定义key
# 1.判断当前机器用户的数量
$ who | wc -l
#【拓展】 送你一个知识点,如何判断某个网页是否可访问,也就是判断 是否相应结果是 200
$ curl -s -I https://www.yucongming.com/ | awk '/^HTTP/{print $2}' # 得到的值为200
# -s参数:静默参数,不会显示进度表或者错误信息
# -I参数:只获得请求的头部信息
# 2.新增配置文件,加入key值
$ cd /etc/zabbix/zabbix_agentd.d/
$ vim userparameter_login_user.conf # 写入下面这一行
-------------------------------------
UserParameter=login.user,who | wc -l
-------------------------------------
# 3.重启agent
$ systemctl restart zabbix-agent.service
# 4.创建模板,添加监控项
添加监控项
# 5.给agent-01主机添加创建的模板,然后在最新数据里查看一下是否取到了
# 6. 给模板添加触发器
测试触发器的结果正确即可
【拓展】更正Linux新机器的时间
$ crontab -e
-------------------------------------
* * * * * ntpdate -u ntp1.aliyun.com
-------------------------------------
$ ntpdate -u ntp1.aliyun.com
报警媒介邮件
# 1.对zabbix-server设置发邮件的账户
# 2.要给谁发,发什么格式的。
这个是配置发件人的信息
我们这里使用qq邮箱来作为zabbix的发件人
去自己的qq邮箱里开启pop3服务(重新开启生成授权码),记下授权码,待会填入zabbix
这个是配置收件人的信息
然后点击添加,填入收件人的地址即可
可以发现,报警信息并不合理,并不完善,不清楚
我们可以自定义报警信息(粘贴进去)
这些自定义的信息,是zabbix的宏语法,可以去查看官方文档
https://www.zabbix.com/documentation/4.0/zh/manual/appendix/macros/supported_by_location
# 这个是告警信息
默认标题:
故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生:{TRIGGER.NAME}故障!
消息内容:
告警主机:{HOSTNAME1} {HOST.IP}
告警时间:{EVENT.DATE}{EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
# 这个是恢复信息
恢复标题:
恢复{TRIGGER.STATUS},服务器:{HOSTNAME1}:{TRIGGER.NAME}已恢复!
恢复的内容:
告警主机:{HOSTNAME1} {HOST.IP}
告警时间:{EVENT.DATE}{EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}