💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老
导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监控工具、脚本编程、云服务等。
常用运维工具系列:常用的运维开发工具, zabbix、nagios、docker、k8s、puppet、ansible等
数据库系列:详细总结了常用数据库 mysql、Redis、MongoDB、oracle 技术点,以及工作中遇到的 mysql 问题等
懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
案例:Zabbix 企业级应用
技能目标:
-掌握 Zabbix 监控系统自动发现
-掌握 Zabbix 获取远程 KEY(监控项)
-掌握 Zabbix 监控实战邮件报警
-掌握 Zabbix 监控自动注册实战
-掌握 Zabbix 主被动模式详解
2.1 案例分析
2.1.1 案例概述
Kgc 公司刚刚搭建部署完 Zabbix 监控服务系统,现在需要对后续的服务器添加监控项目。
由于公司有几百台服务器,不可能手动的去添加,因此需要使用自动发现或者自动注册的方式
来批量添加服务器,并且配置好邮件报警,以便于及时发现服务器问题,及时解决,不影响正
常工作。但是由于 Zabbix Server 性能有限,所以需要将 Agent 被动工作模式修改为主动模式,
也就是将监控到的数据主动发到 Zabbix Server,以此减轻 Zabbix Server 的压力。
2.1.2 案例前置知识点
本案例将主要针对 Zabbix 在企业中所使用到的功能进行讲解。
1. 自动发现
在大型企业中,可能有成千上万台服务,手动添加每台设备非常不现实,因此就需要利用
Zabbix 自带的自动发现功能来实现批量监控设备。自动发现是由 Zabbix Server 开启发现进
程,定时扫描局域网中指定 IP 服务、设备。自动发现添加监听服务器,前提需要在 Agent 客
户机上安装 Zabbix Agent 软件,并指定 Server 地址,开启自动发现服务。
2. 获取远程 key 值
zabbix_get 是 Zabbix 服务端的命令,用于检测 Agent 端的配置是否正确,可以很方便地
知道 key 是否能正常获取到 Agent 的数据,并且可以测试 key 值是否可用。
3. 邮件报警
邮件报警在 Zabbix 中是非常重要的组件,可以在服务器出现问题是及时邮件发送给管理
员处理。邮件报警使用 SendMail 组件来添加发送邮件的支持。
4. 自动注册
自动发现功能是 Zabbix Server 去扫描一个网段,把在线的主机添加到 Host 列表中。自
动注册内容与自动发现相反,这次是 Agent 主动联系 Zabbix Server,最后由 Zabbix Server
将这些 Agent 加到 host 里。前提是所有服务器批量装好 Zabbix Agent,并且 Zabbix Server
需要配置好 trigger,就可以迅速添加服务器监控。
5. 主、被动模式
Zabbix 客户端发送数据给 Zabbix 服务端分为主动和被动两种模式。主动模式是 Zabbix
客户端主动向服务端发送数据,被动模式则是被动等待服务端来客户端取数据,Zabbix 默认
使用被动模式。
主动模式的流程:客户端每隔一段时间主动向服务端发起连接请求;服务端收到请求后,
查询客户端需要取的 item 信息,发送给客户端;由客户端收集数据发送服务端。
被动模式的流程:客户端开一个端口,默认 10050,等待服务端来取数据;客户端收集
数据发送到服务端。
主动模式主要解决,当服务端监控的主机达到一定数量之后,由 Server 端去收集数据,
Zabbix 会出现严重的性能问题,主要表现如下:
(1)当被监控端到达一个量级的时候,Web 操作会很卡,容易出现 502 等问题。
(2)图层断裂,导致输出结果不准确。
(3)开启的进程(Pollar)太多,即使减少 item 数量,以后加入一定量的机器也会有问题。
2.1.3 案例环境
1. 本案例环境
本案例环境如表 2-1 所示。
表 2-1 Zabbix 案例环境
主机 | 操作系统 | 主机名/IP 地址 | 主要软件及版本 |
服务器 | CentOS 7.3 | zabbix-server/192.168.9.168 | Zabbix-Server |
服务器 | CentOS 7.3 | agent-discover/192.168.9.247 | Zabbix-Agent |
服务器 | CentOS 7.3 | agent-register/192.168.9.251 | Zabbix-Agent |
2. 案例拓扑
本案例的拓扑图如图 2.1 所示。
图 2.1 拓扑图
3. 案例需求
下面是本案例的需求:
(1)Zabbix 设置监控系统自动发现。
(2)获取远程 key。
(3)设置 Zabbix 邮件报警。
(4)实现监控系统自动注册。
(5)设置 Zabbix 监控主被动模式。
4. 案例实现思路
下面是本案例实现思路:
(1)设置自动发现监控主机。
(2)Zabbix 获取远程 key。
(3)部署邮件报警。
(4)部署 Zabbix 自动注册。
(5)更改 Zabbix 主被动模式。
2.2 案例实施
2.2.1 Zabbix 监控系统自动发现
1. 客户机安装 Zabbix Agent
前面章节已经介绍了 Agent 安装方法,此处不在赘述。注意关闭防火墙及 selinux。
[root@agent-register ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.9.168
//zabbix 服务器地址
ServerActive=192.168.9.168
Hostname=Zabbix zidong //Agent 本地的名称,此名称需要与将来在 server 端的 WEB 页面上的主机
名称一致,名称自定义
[root@agent-register ~]# systemctl start zabbix-agent
2. 创建自动发现规则
登录 Zabbix 服务器 Web 页面,选择配置→自动发现,点击创建发现规则后,填写自动
发现规则,如图 3.2 和图 3.3 所示。
注:因为有二次窗口操作图 2.2 与图 2.3 为同一个页面。
图 2.2 添加自动发现规则
2.3 最终状态
3. 创建自动发现动作
选择配置→动作→事件源选择“自动发现”,点击“创建动作”按钮,如图 2.4 所示。
图 2.4 创建动作
在图 2.5 界面,添加动作名称,然后在“新的触发条件”一项,参照图中所示选择“自动发现
状态”。
图 2.5 添加条件
然后选择操作。在操作模块选择“新的”,选择具体的操作类型:添加主机、添加到主机群
组、与模板关联,最后选择添加,如图 2.6 所示。
图 2.6 添加操作
4. 验证
点击“监测中”选项,再点击“自动发现”界面,可以看到已经发现的设备,如图 2.7 所示。
图 2.7 自动发现
点击“配置”选项,再点击“主机”界面。可以看到 Zabbix 已经按照模板对发现的主机执行监
控,如图 2.8 所示。
图 2.8 主机配置界面
在图 2.8 中,主机名称显示为“192.168.9.247”,可以点击“192.168.9.247”后在弹出的界
面中,修改为“Zabbix zidong”,如图 2.9 所示。
图 2.9 修改主机名
5. 监控
在生产环境中,可以根据服务器所需监控类型添加模板,如 MySQL 服务,可自动添加监
控。
2.2.2 获取远程 KEY(监控项)
1. 安装 Zabbix_get
Zabbix 没有自带此命令,需要在 Zabbix Server 上自行安装。首先下载,再执行安装,执
行命令如下所示。
[root@zabbix-server bin]# wget
http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-get-3.2.1-1.el7.x86_64.rpm
[root@zabbix-server bin]#rpm -ivh zabbix-get-3.2.1-1.el7.x86_64.rpm
准备中...
################################# [100%]
正在升级/安装...
1:zabbix-get-3.2.1-1.el7
################################# [100%]
2. Zabbix_get 参数说明
输入 zabbix_get -h 命令可以查阅它的参数说明。
[root@zabbix-server bin]# zabbix_get -h
...略...
General options:
-s --host host-name-or-IP 指定客户端主机名或 IP
-p --port port-number
客户端端口,默认 10050
(default: 10050)
-I --source-address IP-address
指定源 IP,写上 zabbix server 的 ip 地址即可,一般留空,服务
器如果有多 ip 的时候需指定。
-k --key item-key
需要获取的 key 值
...略...
3. Zabbix_get 获取 Agent 数据
(1)Zabbix_get 主要根据 key 值来获取客户端信息。例如:获取 CPU 核数。
[root@zabbix-server bin]# zabbix_get -s 192.168.9.247 -k system.cpu.num
2
//获取结果为 2 核
获取 Agent 系统信息,如下所示。
[root@zabbix-server bin]# zabbix_get -s 192.168.9.247 -k system.uname
Linux apache 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64
2)Zabbix 常用 key 值
监控端口的 key 值: net.tcp.port[,port_number]
例如:监控 22 端口 zabbix_get -s 192.168.9.247 -k net.tcp.port[,22],如 22 存在,返
回 1;不存在返回 0。
监控进程 key 值:proc.num[process_name]
例如:监控 sshd 进程 zabbix_get -s 192.168.9.247 -k proc.num[sshd] ,如果进程存在,
则返回所有 sshd 进程数量;不存在则返回 0。
查看磁盘容量的 key 值:以下四种语法格式:
vfs.fs.size[/,pfree]:获取/领域的剩余空间率。
vfs.fs.size[/,free]:获取/领域的剩余空间。对应的单位就是 B(这里的意思是 Byte)。
vfs.fs.size[/,pused]:获取/领域的使用空间率。
vfs.fs.size[/,used]:获取/领域的使用空间。
例如:获取 agent 剩余空间 zabbix_get -s 192.168.9.247 -p 10050 -k vfs.fs.size[/,pfree]。
查看系统当前网卡的进出流量的 key 值:net.if.out[if,<mode>]、net.if.in[if,<mode>]、
net.if.total[if,<mode>] 。
例如:查看 eth0 出口流量,zabbix_get -s 192.168.9.247 -k net.if.out[eth0,bytes]返回的
值为出流量,此值为计数值,单位为 bytes,减去上次取得值,除以时间间隔为此段时间内的
平均流量。
查看系统内存大小的 key 值:vm.memory.size[total],返回值单位 bytes。
例如:zabbix_get -s 192.168.9.247 -p 10050 -k vm.memory.size[total],返回值即为内存
大小。
2.2.3 Zabbix 实战邮件报警系统
执行步骤和相关命令如下:
(1)安装 SendEmail 邮箱组件
[root@zabbix-server ~]# wget
http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
[root@zabbix-server ~]#tar -zxvf sendEmail-v1.56.tar.gz -C /root/
[root@zabbix-server ~]#cp /root/sendEmail-v1.56/sendEmail /usr/local/bin/
[root@zabbix-server ~]#chmod 755 /usr/local/bin/sendEmail
(2)编写邮件脚本
执行 vim 命令编写脚本,复制下面脚本内容,进行变量值的相应修改。
root@zabbix-server ~]# vim /usr/lib/zabbix/alertscripts/SendEmail.sh
#!/bin/bash
LOGFILE="/tmp/Email.log"
:>"$LOGFILE"
exec 1>"$LOGFILE"
exec 2>&1
SMTP_server='smtp.qq.com'
#SMTP 服务器,变量值需要自行修改
username='176944992@qq.com'
#用户名,变量值需要自行修改
password='uubhivovyazodwda'
#密码,变量值需要自行修改
from_email_address='176944992@qq.com'
#发件人 Email 地址,变量值需要自行修改
to_email_address="$1"
#收件人 Email 地址,zabbix 传入的第一个参数
message_subject_utf8="$2"
#邮件标题,zabbix 传入的第二个参数
message_body_utf8="$3"
#邮件内容,zabbix 传入的第三个参数# 转换邮件标题为 GB2312,解决邮件标题含有中文,收到邮件
显示乱码的问题。
message_subject_gb2312=`iconv -t GB2312 -f UTF-8 << EOF
$message_subject_utf8
EOF`
[
$?
-eq
0
]
&&
message_subject="$message_subject_gb2312"
||
message_subject="$message_subject_utf8"
# 转换邮件内容为 GB2312,解决收到邮件内容乱码
message_body_gb2312=`iconv -t GB2312 -f UTF-8 << EOF
$message_body_utf8
EOF`
[ $? -eq 0 ] && message_body="$message_body_gb2312" || message_body="$message_body_utf8"
# 发送邮件
sendEmail='/usr/local/bin/sendEmail'
set -x
$sendEmail -s "$SMTP_server" -xu "$username" -xp "$password" -f "$from_email_address" -t
"$to_email_address"
-u
"$message_subject"
-m
"$message_body"
-o
message-content-type=text -o message-charset=gb2312 -o tls=no
注意:脚本中如果使用的是互联网邮箱,有的互联网邮箱需要开启 SMTP 相关服务,才
能执行发送。以 QQ 邮箱为例,在“设置”中“账户”设置中找到 SMTP 服务设置项,如图 2.10
所示。按提示信息进行短信验证。
图 2.10 开启 SMTP 服务
认证成功后,会弹出图 2.11 界面,返回一个授权码信息。
图 2.11 邮箱授权码界面
这个授权码是邮箱客户端进行收发邮件需要使用的密码,在脚本中账户密码部分输入的就
是此授权码,而不能是邮箱账户密码。建议:提前用 foxmail 测试收发无误后,再写入脚本。
(3)修改文件属主及执行权限
[root@zabbix-server ~]# chown zabbix:zabbix /usr/lib/zabbix/alertscripts/SendEmail.sh
[root@zabbix-server ~]# chmod +x /usr/lib/zabbix
[root@zabbix-server ~]# chmod +x /usr/lib/zabbix/alertscripts/SendEmail.sh
[root@zabbix-server ~]# touch /tmp/Email.log
//创建 Email 日志文件
[root@zabbix-server ~]# chown zabbix.zabbix /tmp/Email.log
(4)测试邮件发送
进入/usr/lib/zabbix/alertscripts/目录下执行如下命令:
[root@zabbix-server ~]# ./SendEmail.sh 176944992@qq.com "测试邮件标题" "测试邮件内容"邮箱收到邮件“测试邮件标题”主题邮件说明邮件发送成功。如有异常查看/tmp/Email.log
日志。
(4)Web 管理界面添加报警媒介类型
登录 Zabbix Web 管理界面,选择“管理”→“报警媒介类型”点击已有的媒体类型“Email”,
如图 2.12 所示。
图 2.12 点击修改 Email 媒体类型
在图 2.13 界面中,类型更改为“脚本”,添加刚才创建的脚本名称 SendEmail.sh,并添加
三个脚本参数:{ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE}。然后点击“更
新”按钮。
图 2.13 添加脚本
(5)用户关联报警媒介
点击“管理”标签页,点击“用户”按钮,再点击“Admin”用户,在弹出的图 2.14 界面中,点
击“报警媒介”,添加“报警媒介”,并设置收件人邮箱地址。
图 2.14 添加报警媒介
完成以上设置后,点击“更新”按钮,更新报警媒介。如图 2.15 所示。
图 2.15 更新报警媒介
(6)添加报警动作
点击“配置”标签页,再点击“动作”导航按钮,事件源选择“触发器”,然后点击“创建动作”按
钮。“名称”一栏自定义即可,本例中为“mail”。新的触发条件选择“触发器示警度=未分类”,然
后,点击红框中的“添加”按钮。如图 2.16 所示。
图 2.16 添加触发条件
选择操作修改默认接收人信息,如下:
接收人:{TRIGGER.STATUS}: {TRIGGER.NAME}
填写默认信息,如下:
告警主机:{HOST.NAME}
主机地址:{HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
事件代码:{EVENT.ID}
然后,在下方的操作区域,点击“新的”按钮,准备添加操作步骤,如图 2.17 所示。
图 2.17 填写默认信息
在操作细节区域,按红框中所示添加群组和用户,“仅发送到”选择“Email”,如图 2.18 所
示,再点击小红框中的“添加”按钮。
图 2.18 设置操作细节信息
恢复操作修改默认接收人信息,如下:
接收人:{TRIGGER.STATUS}: {TRIGGER.NAME}
默认信息填写,如下:
恢复主机:{HOST.NAME}
主机地址:{HOST.IP}
恢复时间:{EVENT.DATE} {EVENT.TIME}
恢复等级:{TRIGGER.SEVERITY}
恢复信息:{TRIGGER.NAME}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
事件代码:{EVENT.ID}
操作细节部分与上一步相同,“默认接收人”、“默认信息”以及“操作”配置,如图 2.19 所示。
图 2.19 设置恢复操作
最后,点击蓝色“添加”按钮,完成配置。
(7)模拟宕机验证邮件
关闭 9.247 服务器 Agent 进程。查看仪表盘,发现已出现警告信息,如图 2.20 所示。
图 2.20 仪表盘警告信息
等待几分钟查看是否收到故障邮件,如图 2.21 所示。
图 2.21 故障告警邮件
注意:Zabbix Server 端和 Agent 端时间需要一致。
如果邮箱一直未收到警告邮件,需要编辑 zabbix_server.conf 配置文件,按黑体字部分修
改。
### Option: AllowRoot
#
Allow the server to run as 'root'. If disabled and the server is started by 'root', the server
#
will try to switch to the user specified by the User configuration option instead.
#
Has no effect if started under a regular user.
#
0 - do not allow
#
1 - allow
#
# Mandatory: no
# Default:
# AllowRoot=0
AllowRoot=1
### Option: User
#
Drop privileges to a specific, existing user on the system.
#
Only has effect if run as 'root' and AllowRoot is disabled.
#
# Mandatory: no
# Default:
# User=zabbix
User=root
2.2.4 Zabbix 监控系统自动注册
(1)客户端安装 Agent
安装方法与自动发现客户端安装相同,此处不在赘述。
(2)Web 管理创建自动注册动作
登录 Web 管理界面,选择配置→动作,事件源选择自动注册,然后点击创建动作,填写
名称及触发条件,如图 2.22 所示。
图 2.22 配置动作
选择操作,添加操作细节,如图 2.23 所示。
图 2.23 配置操作细节
(3)验证
选择配置→主机,可以看到 9.229 主机已经自动添加,如图 2.24 所示。
图 2.24 自动添加主机
2.2.5 Zabbix 主被动模式讲解
调整 Agent 为主动模式,在 Zabbix-Server 机器执行。
(1)修改配置文件
[root@zabbix-server ~]# vim /etc/zabbix/zabbix_agentd.conf
StartAgents=0
#客户端的 agent 的模式,0 表示关闭被动模式,zabbix-agentd 不监控
本地端口,所以看不到 zabbix_agentd 进程。
#Server=192.168.9.168
#主动模式需要注释掉此行
ServerActive=192.168.9.168
#主动模式的 serverip 地址
Hostname=192.168.9.251
#客户端的 hostname,不配置则使用主机名
RefreshActiveChecks=120
#被监控端到服务器获取监控项的周期,默认 120S
BufferSize=200
#被监控端存储监控信息的空间大小
Timeout=3
#超时时间
(2)检查 Agent 进程
重启 Agent,并查看、确认已经没有 Agent 进程。
[root@zabbix-server ~]#systemctl restart zabbix-agent
[root@zabbix-server ~]#netstat -anpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address
Foreign Address
State
PID/Program name
tcp
0
0 0.0.0.0:111
0.0.0.0:*
LISTEN
1/systemd
tcp
0
0 192.168.122.1:53
0.0.0.0:*
LISTEN
1663/dnsmasq
tcp
0
0 0.0.0.0:22
0.0.0.0:*
LISTEN
1064/sshd
tcp
0
0 127.0.0.1:631
0.0.0.0:*
LISTEN
1039/cupsd
tcp
0
0 127.0.0.1:25
0.0.0.0:*
LISTEN
1642/master
tcp
0
52 192.168.9.251:22
192.168.9.189:51002
ESTABLISHED
2692/sshd: root@pts
tcp
0
0 192.168.9.251:22
192.168.9.250:58312
ESTABLISHED
7992/sshd: root@pts
tcp6
0
0 :::111
:::*
LISTEN
1/systemd
tcp6
0
0 :::22
:::*
LISTEN
1064/sshd
tcp6
0
0 ::1:631
:::*
LISTEN
1039/cupsd
tcp6
0
0 ::1:25
:::*
LISTEN
1642/master
(3)Web 管理添加主动模式模板
选择配置→模板找到 Template OS Linux 模板,点击“全克隆”按钮,如图 2.25 所示。
图 2.25 添加主动模式模板
完成克隆之后,修改模板名称,点击“添加”按钮,如图 2.26 所示。
图 2.26 修改模板名称并添加
进入模板列表找到刚刚添加的模板,并点击“监控项”按钮,如图 2.27 所示。
图 2.27 准备配置监控项
全选所有监控项,点击最下方“批量更新”按钮,如图 2.28 所示。
图 2.28 批量更新
在类型处打钩,选择 Zabbix 客户端(主动式),点击“更新”按钮,如图 2.29 所示。
图 2.29 选择 Zabbix 客户端(主动式)并更新
添加主机,如图 2.30 所示。
图 2.30 添加主机
添加模板,点击“更新”按钮,如图 2.31 所示。
图 2.31 添加模板并更新
添加完成后,ZBX 灯不会亮,因为服务器处于被动模式,客户机处于主动模式。
可以在监控中看到监控数据,选择监测中→图形,选择主动客户机,选择图形为 CPU
jumps,可以看到相关数据图,如图 2.32 所示。
注意:刚添加的数据可能看的不明显,等几分钟就可以看到。
图 2.32 CPU Jumps 监控界面
至此,Zabbix 主被动模式讲解并配置完成。