Zabbix企业级应用

公司刚刚搭建完Zabbix,现在需要对后续的服务器添加监控,由于公司有几百台服务器,因此使用自动发现或者自动注册来批量添加服务器,并且配置好邮件报警用于及时发现服务器问题。但是由于Zabbix-Server性能有限,所以需要更换Agent工作模式为主动,减轻Zabbix-Server的压力。

一. 案例涉及相关知识点

1.1 获取远程key值

Zabbix_get 是zabbix服务端的命令,用于检测Agent端的配置是否正确,并从 Zabbix agent那里获取所需的信息。

1.2 自动发现;

自动发现是由Zabbix
Server开启发现进程,定时扫描局域网中指定IP服务、设备;

1.3 主被动模式

  • 主动模式是Zabbix客户端主动向服务端发送数据;
  • 被动模式是被动等待服务端来客户端取数据;
  • Zabbix默认使用被动模式;

1.4 邮件报警

  • 邮件报警在Zabbix中是非常重要的组件,可以在服务器出现问题是及时邮件发送给管理员;
  • 使用sendmail组件来添加发送邮件的支持;

1.5 自动注册

  • 自动注册内容与自动发现相反,Active agent主动联系Zabbix Server,最后由Zabbix Server将Agent添加到host;
  • 所有服务器批量安装Zabbix Agent,server配置好trigger,就可以迅速添加服务器监控;

二. 案例实施

案例环境:每个应用均由Zabbix-server配合Agent完成

主机 操作系统 主机名/IP地址 主要软件及版本
服务器 Centos7.7 192.168.154.101 Zabbix-server Zabbix-agent
服务器 Centos7.7 192.168.154.106 Zabbix-agent

2.1 获取远程KEY(监控项)

安装zabbix_get

Zabbix没有自带此命令,需要安装;

  1. [root@zabbix-server zabbix]# wget -c https://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-get-4.4.5-2.el7.x86_64.rpm
  2. [root@zabbix-server zabbix]# rpm -ivh zabbix-get-4.4.5-2.el7.x86_64.rpm

zabbix_get常用参数

  1. -s --host <host name or IP> 指定目标主机名或IP地址
  2. -p --port <port number> 指定主机上运行 Zabbix agent 的端口号。默认端口10050
  3. -I --source-address <IP address> 指定源 IP 地址
  4. -k --key <item key> 指定要从监控项键值检索的值
  5. -h --help 获得帮助
  6. -V --version 显示版本号

Zabbix_get获取Agent数据举例

  1. # 获取192.168.154.106服务器的CPU个数
  2. [root@zabbix-server zabbix]# zabbix_get -s 192.168.154.106 -p 10050 -k system.cpu.num
  3. 4
  4. # 获取192.168.54.106服务器的CPU 15分钟内平均负载:processor load
  5. [root@zabbix-server zabbix]# zabbix_get -s 192.168.154.106 -p 10050 -k system.cpu.load[all,avg15]
  6. 0.050000

Zabbix常用key值

  • 监控端口的key值: net.tcp.port[,port_number]
  • 监控进程key值:proc.num[process_name]
  • 查看磁盘容量的key值:vfs.fs.size[/,pfree]
  • 查看系统当前网卡的进出流量的key值:
    • net.if.out[if,] 例如:net.if.out[ens32,bytes]
    • net.if.in[if,]
    • net.if.total[if,]
  • 查看系统内存大小的key值:vm.memory.size[total]

2.2 Zabbix监控系统自动发现

安装zabbix agent程序

要在所有的服务器上进行安装,可以写脚本批量安装

  1. [root@slave01 ~]# rpm -ivh zabbix-agent-4.4.5-2.el7.x86_64.rpm
  2. [root@slave01 ~]# vim /etc/zabbix/zabbix_agentd.conf
  3. Server=192.168.154.101
  4. ServerActive=192.168.154.101
  5. Hostname=slave01
  6. [root@slave01 ~]# firewall-cmd --add-service=zabbix-agent --permanent
  7. [root@slave01 ~]# firewall-cmd --reload

配置自动发现规则

“配置”->“自动发现”->“创建自动发现规则”

Zabbix企业级应用 - 图1

配置动作

“配置”->“动作”->“创建动作”:事件源一定要选择“自动发现”

Zabbix企业级应用 - 图2

再配置操作

Zabbix企业级应用 - 图3

查看结果

Zabbix企业级应用 - 图4

还可以定义移除主机动作

这里就不展示了,由学生自行完成。

案例需求:

  • 发现那些正在运行Zabbix代理的主机
  • 每10分钟运行一次发现
  • 添加主机以监视主机正常运行时间是否超过1小时
  • 如果主机停机时间超过24小时,则删除主机
  • 将Linux主机添加到“ Linux服务器”组
  • 将Windows主机添加到“ Windows服务器”组
  • 针对Linux主机使用Template OS Linux
  • 针对Windows主机使用Template OS Windows

2.3 Zabbix主被动模式

主动和被动是相对客户端来讲的。

  • 被动模式:服务器会主动连接客户端获取监控项目数据,客户端被动地接收连接,并把监控信息传递给服务端;
  • 主动模式:客户端会主动把监控数据汇报给服务端,这样可以降低服务端的压力。

当客户端数量非常多时,建议使用主动模式,可以降低服务端的压力;

服务端有公网IP,客户端只有内网IP,但能连外网,这种场景适合主动模式。

zabbix agent端主动模式配置

修改配置文件

  1. [root@active-agent ~]# grep -v '^#' /etc/zabbix/zabbix_agentd.conf | grep -v '^$'
  2. PidFile=/var/run/zabbix/zabbix_agentd.pid
  3. LogFile=/var/log/zabbix/zabbix_agentd.log
  4. LogFileSize=0
  5. #被动模式接收的服务器地址
  6. Server=192.168.154.101
  7. #关闭被动模式,0为关闭,不打开后台守护进程
  8. StartAgents=0
  9. #主动模式接收的服务器地址
  10. ServerActive=192.168.154.101
  11. #主机名,要在server添加主机列表中一致
  12. Hostname=active-agent
  13. Include=/etc/zabbix/zabbix_agentd.d/*.conf

重启agent并查看已经没有agent进程

  1. [root@active-agent ~]# systemctl restart zabbix-agent.service
  2. [root@active-agent ~]# netstat -antp | grep agent
  3. [root@active-agent ~]# netstat -antp | grep 10050

添加主动模式主机

Zabbix企业级应用 - 图5

选择主动模式模板

Zabbix企业级应用 - 图6

在主机中,”ZBX”可用性没有显示(不会变绿),但是可以监控到数据

Zabbix企业级应用 - 图7

2.4 Zabbix实战邮件报警

在Zabbix服务端设置邮件报警,当被监控主机宕机或者达到触发器预设值时,会自动发送报警邮件到指定邮箱。

注册一个可用邮箱

我的是163邮箱,要开启客户端授权码

Zabbix企业级应用 - 图8

安装发送邮件工具

  1. [root@zabbix-server ~]# yum install mailx
  2. #更改/etc/mail.rc文件
  3. set from=test@163.com 你的发送邮箱地址
  4. set smtp=smtp.163.com 发送邮件服务器
  5. set smtp-auth-user=test@163.com 发送邮件认证用户名,即你的邮箱地址
  6. set smtp-auth-password=xxxxxxx 客户端授权密码
  7. set smtp-auth=login
  8. # 停止本地邮件服务
  9. [root@zabbix-server ~]# systemctl stop sendmail.service
  10. [root@zabbix-server ~]# systemctl disable sendmail.service
  11. [root@zabbix-server ~]# systemctl disable postfix.service
  12. [root@zabbix-server ~]# systemctl stop postfix.service

发送测试邮件

  1. [root@zabbix-server ~]# echo 'zabbix test mail' | mail -s 'zabbix' test@qq.com

编写发送邮件脚本

  1. #查看默认告警脚本路径
  2. [root@zabbix-server ~]# cat /etc/zabbix/zabbix_server.conf
  3. AlertScriptsPath=/usr/lib/zabbix/alertscripts
  4. #编写脚本如下:
  5. [root@zabbix-server ~]# vim /usr/lib/zabbix/alertscripts/mail.sh
  6. #!/bin/bash
  7. #mail content
  8. messagees=`echo $3 | tr '\r\n' '\n'`
  9. #mail subject
  10. subject=`echo $2 | tr '\r\n' '\n'`
  11. echo "start" >> /tmp/zabbix.log
  12. echo "${messagees}" | mail -s "${subject}" $1
  13. echo "${messagees}" >> /tmp/zabbix.log
  14. echo "end" >> /tmp/zabbix.log
  15. date >> /tmp/zabbix.log
  16. echo '--------------' >> /tmp/zabbix.log
  17. [root@zabbix-server ~]# chmod 755 /usr/lib/zabbix/alertscripts/mail.sh
  18. [root@zabbix-server ~]# chown zabbix:zabbix /usr/lib/zabbix/alertscripts/mail.sh
  19. #测试脚本是否可以成功发送
  20. [root@zabbix-server ~]# /usr/lib/zabbix/alertscripts/mail.sh 147717473@qq.com "zabbix" "zabbix test 2"

Web管理界面添加报警媒介类型

Zabbix企业级应用 - 图9

用户关联报警媒介

创建好报警媒介后,就需要将报警媒介关联到我们的用户。点击管理,用户,然后选择用户admin,也可新建一个用户,点击用户名就进入到用户配置界面。点击报警媒介,然后点添加,选择我们上一步创建的邮件报警脚本,输入收件人,选择报警时间和类型,然后点击添加,就将创建好的报警媒介关联到我们的用户上面了。

Zabbix企业级应用 - 图10

添加报警动作

“配置”->“动作”->“创建动作”。事件源选择”触发器”

根据主机触发Template OS Linux by Zabbix agent中的Zabbix agent is not available (for {$AGENT.TIMEOUT})设置,主要监测zabbix_agentd客户端连接情况。

Zabbix企业级应用 - 图11

定义操作

Zabbix企业级应用 - 图12

恢复操作

Zabbix企业级应用 - 图13

测试邮件告警效果

  1. [root@zabbix-server ~]# systemctl stop zabbix-agent.service

可以看到动作日志

Zabbix企业级应用 - 图14

去邮箱,可以看到邮件已收到。

2.5 Zabbix监控系统自动注册

Zabbix Active agent可以实现自动注册,进而服务器对其进行监控。通过这种方式,无需在服务器上进行手动配置便可直接启动对新host的监控。

这样功能可以非常方便的自动监控新的Cloud节点。一旦在Cloud中有一个新节点,Zabbix将自动启动host的性能和可用性数据的收集。云中的主机一般都是随机分配IP地址的,自动发现需要指定IP网段,所以使用自动注册功能很适合。

客户端安装Agent并配置

和自动发现配置相同

  1. [root@auto-register ~]# grep -v '^#' /etc/zabbix/zabbix_agentd.conf | grep -v '^$'
  2. PidFile=/var/run/zabbix/zabbix_agentd.pid
  3. LogFile=/var/log/zabbix/zabbix_agentd.log
  4. LogFileSize=0
  5. Server=192.168.154.101
  6. ServerActive=192.168.154.101
  7. Hostname=auto-register
  8. HostMetadataItem=system.uname 最好加上这个配置,确保自动注册信息正确
  9. Include=/etc/zabbix/zabbix_agentd.d/*.conf

Web管理创建自动注册动作

创建事件源为:自动注册的动作

Zabbix企业级应用 - 图15

在操作中链接模板,添加主机动作可以省略

Zabbix企业级应用 - 图16

查看结果,自动会加入到”Discovered hosts”主机群组中。

Zabbix企业级应用 - 图17

2.6 zabbix自定义监控项

abbix自带的默认模版里包括了很多监控项,有时候为了满足业务需求,需要根据自己的监控项目自定义监控项,下面介绍一种自定义监控项的方式。

2.6.1 首先编写自定义监控脚本,以监控httpd进程是否存在为例。

  • 脚本名字:check-http.sh
  • 脚本目录(这个目录可以自定义):/etc/zabbix/zabbix_scripts ,需要自己创建;
  • 脚本内容:
    ``` [root@auto-register zabbix_scripts]# vim check-http.sh

    !/usr/bin/bash

    result=ps -ef | grep httpd | grep -v grep

if [ -n “$result” ]; then echo 1 else echo 0 fi

脚本内容:通过ps检查httpd进程是否存在,如果存在则脚本反馈1,如果不存在则返回0。

  1. <a name="7c88a018"></a>
  2. ### 2.6.2 修改zabbix_agentd.conf配置文件。

[root@auto-register ~]# vim /etc/zabbix/zabbix_agentd.conf

Option: UnsafeUserParameters

\ ‘ “ ` * ? [ ] { } ~ $ ! & ; ( ) < > | # @

Additionally, newline characters are not allowed.

0 - do not allow

1 - allow

#

Mandatory: no

Range: 0-1

Default:

UnsafeUserParameters=1

默认为0,改为1后可以让用户自定义的脚本中可以包含特殊字符。

  1. <a name="21125963"></a>
  2. ### 2.6.3 自定义监控项
  3. 格式为:`UserParameter=<键值>,<命令>`

[root@auto-register ~]# cd /etc/zabbix/zabbix_agentd.d/

创建userparameter_httpd.conf文件

[root@auto-register zabbix_agentd.d]#vim userparameter_httpd.conf UserParameter=check_httpd,sh /etc/zabbix/zabbix_scripts/check-http.sh

自定义键值为:check_httpd,要执行的命令为执行check-http.sh这个脚本

[root@auto-register zabbix_agentd.d]# systemctl restart zabbix-agent.service ```

2.6.4 创建监控项

选择要增加监控项的主机,点击“监控项”,然后“创建监控项”;

Zabbix企业级应用 - 图18

添加成功后,在最新数据中查看是否获取到数据;

Zabbix企业级应用 - 图19