Zabbix使用教程

 

正文

Zabbix使用教程

Zabbix名词解释

名称 解释
host(主机) 要监控的网络设备,可由IP或DNS名称指定。
host group(主机组) 主机的逻辑容器,可以包含主机和模板,但同一个组内的主机和模板不能互相链接;主机组通常在给用户或用户组指派监控权限时使用。
item(监控项) 一个特定监控指标的相关数据,这些数据来自于被监控对象;item是zabbix进行数据收集的核心,没有item,将没有数据;相对某监控对象来说,每个item都有“key”进行标识。
trigger(触发器) 一个表达式,用于评估某监控对象的某特定item内所接收到的数据是否在合理范围内,即阀值;接收到的数据大于阀值时,触发器状态将从OK转变为Problem,当数据量再次回归到合理范围时,其状态将从Problem转换回OK。
event(事件) 即发生的一个值得关注的事件,例如触发器的状态转变,新的agent或重新上线的agent的自动注册等。
action(动作) 指对于特定事件事先定义的处理方法,通过包含操作(如发送通知)和条件(何时执行操作)。
escalation(报警升级) 发送警报或执行远程命令的自定义方案,如每隔5min发送一次警报,共发送5次等。
media(媒介) 发送通知的手段和通道,如Email、Jabber或SMS。
notification(通知) 通过选定的媒介向用户发送的有关某事件的信息 (可灵活定制mail发送程序)。
remote command(远程命令) 预定义的命令,可在被监控主机处于某个特定条件下时自动执行。
template(模板) 用于快速定义被监控主机的预设条目集合,通常包含了item、trigger、graph、screen、application以及low-level discovery rule;模板可以直接链接至单个主机。
application(应用) 一组item的集合。
web scennaro(web场景) 用于检测web站点可用性的一个或多个http请求。
frontend(前端) zabbix的web接口。

Zabbix创建群组

点击创建,输入名称即可,如:Linux Group

1603682135963

Zabbix创建模板

点击创建模板,设置如下内容:

模板名称:Linux Template
可见名称:随意
群组:Linux Group
描述:监控CPU使用率、磁盘使用率、内存使用率、网络丢包率

1603954228875

设置模板宏,可用于触发器的计算

名称:{$HARDUSEVALUE}
值:28
描述:磁盘超过28%

1603954356233

Zabbix创建主机

点击创建主机,配置如下内容:

主机名称:192.168.20.223
可见名称:随意
群组:Linux Group
客户端:安装agent的服务器IP地址+端口(10050

提供了4种连接方式:

ZBX:安装了agent客户端软件的服务器

SNMP:支持该协议的设备,可能需要手动开启,如摄像头等设备

JMX:java虚拟机监控

IPMI:一般用于连接传感器等设备

1603954594136

设置模板

1603954659817

配置连接成功

1603954703899

Zabbix监控Agent连接情况

选择创建的模板,新增一个监控项,配置如下:

名称:代理连接检查
类型:Zabbix客户端
键值:agent.ping
信息类型:数字(无正负)
单位:无
更新间隔:1m

创建触发器

名称:代理连接检查触发器
严重性:严重
问题表现形式,当60秒获取不到数据,即等于1时触发严重告警,注意这里设置的频率最好和监控项保持一致,即1分钟请求一次,等于0时恢复告警:
{Linux Template:agent.ping.nodata(60)}=1
恢复表达式:
{Linux Template:agent.ping.nodata(60)}=0

Zabbix监控磁盘剩余空间

选择创建的模板,新增一个监控项,配置如下:

名称:磁盘剩余空间
类型:Zabbix客户端
键值:vfs.fs.size[/,free]
(键值模式有:total默认全部,free空闲,used使用,pfree空闲百分比,pused使用百分比)
(例子:C盘总容量:vfs.fs.size[c:,total])
信息类型:数字(无正负)
单位:B

创建触发器

名称:磁盘剩余空间触发器
严重性:严重
问题表现形式,当内存小于40G触发严重告警,大于40G恢复告警:
{Template Disk Free Size:vfs.fs.size[/,free].last()}<40000000000
恢复表达式:
{Template Disk Free Size:vfs.fs.size[/,free].last()}>=40000000000
问题事件生成模式:多重

Zabbix监控磁盘使用率

选择创建的模板,新增一个监控项,配置如下:

名称:磁盘使用率
类型:Zabbix客户端
键值:vfs.fs.size[/,pused]
信息类型:浮点数
单位:%

创建触发器

名称:磁盘使用率超过28%
严重性:严重
问题表现形式,当磁盘使用率大于28%触发严重告警,小于28%恢复告警:
{Linux Template:vfs.fs.size[/,pused].last()}>=28
恢复表达式:
{Linux Template:vfs.fs.size[/,pused].last()}<28

Zabbix监控CPU空闲率

在添加主机时,由于已经链接了Template OS Linux by Zabbix agent模板(该模板还链接了Template Module Linux CPU by Zabbix agent等若干个其他模板),Template Module Linux CPU by Zabbix agent模板自带了许多监控项,其中包括CPU idle time 监控项,因此可以直接使用该监控项监控主机CPU空闲率数值,无需自定义监控项,只需要添加一个触发器(Trigger)来读取监控项触发告警即可。注: zabbix自带模板中,有许多监控项可以直接利用起来,无需再单独创建监控项,使用时可先在已有模板中查找下可用的监控项。找到模板Template Module Linux CPU by Zabbix agent,然后添加一个触发器:

名称:CPU空闲率触发器
严重性:严重
问题表现形式,在5分钟内CPU平均空闲率如果高于80%,那么将触发问题:
{Template Module Linux CPU by Zabbix agent:system.cpu.util[,idle].avg(5m)}>=80
恢复表达式:
{Template Module Linux CPU by Zabbix agent:system.cpu.util[,idle].avg(5m)}<80

注:这里修改了zabbix自带的模板(Template Module Linux CPU by Zabbix agent),为其添加了一个新的触发器,在实际使用中,要谨慎操作,因为链接了该模板的主机触发器都会被修改,因此实际使用中需要对这种操作进行评估。

Zabbix监控CPU使用率

选择创建的模板,新增一个监控项,配置如下:

名称:CPU使用率
类型:Zabbix客户端
键值:system.cpu.util[,,]
信息类型:浮点数
单位:%

创建触发器

名称:CPU使用率超过1%
严重性:严重
问题表现形式,当CPU使用率大于1%触发严重告警,小于1%恢复告警:
{Linux Template:system.cpu.util[,,].last()}>=1
恢复表达式:
{Linux Template:system.cpu.util[,,].last()}<1

Zabbix监控内存占用率

在上面的步骤中添加了磁盘剩余空间、CPU空闲率等监控,可以直接使用了Zabbix客户端类型的监控项的键值,但是有些监控项可能不能直接获取,需要通过计算的方式来获取,例如监控内存占用率,虽然可以使用vm.memory.size这个键值,但是得到值并不是我们所期望的,虽然mode中有pused (used, percentage),但是"used"="total - free"而 "available"="free + buffers + cached"(内核版本Linux<3.14),实际想要的值:(available - total) / total,因此需要使用可计算的键值类型来设置监控项。选择创建的模板,新增一个监控项,配置如下:

名称:内存占用率
类型:可计算的
键值:memory.utilization
公式:
100*(last("vm.memory.size[total]")-last("vm.memory.size[available]"))/last("vm.memory.size[total]")
信息类型:浮点数
单位:%

注意:如果新创建的模板,需要先添加2个计算时用到的监控项,不然内存使用率无法计算

1602818706991

监控项设置

1603165959078

监控项设置

1603165987950创建触发器

名称:内存占用率超过80%
严重性:严重
问题表现形式,当内存占用率超过80%触发严重告警,小于80%恢复告警:
{Linux Template:memory.utilization.last()}>=80
恢复表达式:
{Linux Template:memory.utilization.last()}<80

Zabbix监控丢包率

方案一:使用自带模板(Template Module ICMP Ping)

监控项含义:

ICMP loss:表示丢包率

ICMP ping:表示是否可PING通

ICMP response time:表示响应时间

1601280485041

方案二:自定义监控项

选择创建的模板,新增一个监控项,配置如下:

名称:网络丢包率
类型:简单检查
键值:icmppingloss
信息类型:浮点数
单位:%

创建触发器

名称:网络丢包率
严重性:严重
问题表现形式,当网络丢包率等于1时触发严重告警,等于0时恢复告警:
{Linux Template:icmppingloss.last()}=1
恢复表达式:
{Linux Template:icmppingloss.last()}=0

Zabbix创建图形

在首页仪表盘里创建图形,实时查看监控项的数据值:

1603957311256

Zabbix自定义脚本告警

1)创建报警媒介

名称:告警全局脚本
类型:脚本
脚本名称:和自定义的脚本文件名称一致(alert.sh)

脚本参数,这里设置的顺序会对应脚本里的$1、$2、$3:

{ALERT.SENDTO}:发送给谁(对应操作里面的用户)

{ALERT.SUBJECT}:概要(对应操作里面的主题)

{ALERT.MESSAGE}:告警内容 (对应操作里面的消息)

1601187606524

2)创建动作

主题:服务器:{HOST.NAME}发生{TRIGGER.NAME}故障!

告警主机ID:{HOST.ID}

告警主机:{HOST.NAME}

告警地址:{HOST.IP}

监控项目:{ITEM.NAME}

监控取值:{ITEM.LASTVALUE}

告警等级:{TRIGGER.SEVERITY}

当前状态:{TRIGGER.STATUS}

告警信息:{TRIGGER.NAME}

告警时间:{EVENT.DATE} {EVENT.TIME}

事件ID:{EVENT.ID}

1601187764443

3)配置用户媒介

用于配置发送给某些人查看,名字要是系统里面有的,否则会提示No media defined for user.

1601187906966

4)编写脚本并且将脚本上传至服务器

alert.sh脚本内容如下:

#!/bin/bash
# $1 $2 $3分别代表第一步设置的3个参数。$3是一数组的形式,用for才可以遍历
for i in $3
do
echo $i>>/usr/lib/zabbix/alertscripts/1.txt #这里要写绝对路径,否则会提示没有权限
done
#这里就可以用脚本完成很多工作了,调用第三方api等

拷贝到容器

docker cp alert.sh zabbix-server-mysql:/usr/lib/zabbix/alertscripts/

进入容器查看脚本

[root@localhost ~]# docker exec -it zabbix-server-mysql /bin/bash
bash-5.0$ cat /usr/lib/zabbix/alertscripts/alert.sh
#!/bin/bash
# $1 $2 $3分别代表第一步设置的3个参数。$3是一数组的形式,用for才可以遍历
for i in $3
do
echo $i>>/usr/lib/zabbix/alertscripts/1.txt #这里要写绝对路径,否则会提示没有权限
done
# 这里就可以用脚本完成很多工作了,调用第三方api等

5)由于目前该文件只有读写权限,所以无法执行,Zabbix报错:

Cannot execute command "/usr/lib/zabbix/alertscripts/alert.sh": [13] Permission denied

解决方法:

-- 查看当前文件权限
bash-5.0$ ls -l /usr/lib/zabbix/alertscripts
total 4
-rw-r--r--    1 root     root           309 Sep 27 06:26 alert.sh

权限一览图

20180713100548270

修改文件权限:

-rw------- (600) //只有拥有者有读写权限。

-rw-r--r-- (644) //只有拥有者有读写权限;而组用户和其他用户只有读权限。

-rwx------ (700) //只有拥有者有读、写、执行权限

-rwxr-xr-x (755) //拥有者有读、写、执行权限;而组用户和其他用户只有读、执行权限

-rwx--x--x (711) //拥有者有读、写、执行权限;而组用户和其他用户只有执行权限

-rw-rw-rw- (666) //所有用户都有文件读、写权限

-rwxrwxrwx (777) //所有用户都有读、写、执行权限

// 只修改当前文件或文件夹
chmod 644 ./fire
// -R 递归修改(就是将嵌套在很多文件夹中的文件权限修改了,如果没有这个,只能到指定的文件夹下进行修改)
// 当前文件夹和文件夹下所有文件统一修改
chmod -R 644 ./fire

数字权限使用规则:

数字 4 、2 和 1表示读、写、执行权限
即r=4,w=2,x=1

组合如下

rwx = 4 + 2 + 1 = 7

rw = 4 + 2 = 6

rx = 4 +1 = 5

若要同时设置 rwx (可读写运行)
权限则将该权限位设置为 4 + 2 + 1 = 7

若要同时设置 rw-(可读写不可运行)
权限则将该权限位设置为 4 + 2 = 6

若要同时设置 r-x(可读可运行不可写)
权限则将该权限位设置为 4 +1 = 5

例子:

这里修改原始文件权限,然后重新拷贝到容器进行覆盖

chmod 777 ./alert.sh

Zabbix发送告警至后台接口

1)定义alert.sh脚本内容

$1:对应主题,设置url路径

$2:对应消息,设置传输参数

curl -H "Content-Type:application/json" -X POST -d "{$2}" $1 >> ./alert.log

2)配置动作

主题,后台接口地址:

http://192.168.20.24:8003/monitorAlert/add

消息,Json传输对象:

"hostId":"{HOST.ID}","hostName":"{HOST.NAME}","hostIp":"{HOST.IP}","itemName":"{ITEM.NAME}","itemValue":"{ITEM.LASTVALUE}","triggerLever":"{TRIGGER.SEVERITY}","triggerStatus":"{TRIGGER.STATUS}","triggerName":"{TRIGGER.NAME}","eventDate":"{EVENT.DATE} {EVENT.TIME}","eventId":"{EVENT.ID}"

注意:如itemValue=1.71 %,值和单位中间有一个空格,后台会无法解析,解决方法将所有监控项的单位去除,然后通过后台接收之后处理。

1603958387010

恢复操作也是一致,后台可以根据其中的参数判断是新增告警还是恢复告警:

1603958497893

后台接收实例:

告警

hostId=10372, hostName=192.168.20.223, hostIp=192.168.20.223, itemName=CPU使用率, itemValue=1.478697, triggerLever=Average, triggerStatus=PROBLEM, triggerName=CPU使用率超过1%, eventDate=2020.10.29 07:24:01, eventId=9385

恢复

hostId=10372, hostName=192.168.20.223, hostIp=192.168.20.223, itemName=CPU使用率, itemValue=0.780989, triggerLever=Average, triggerStatus=OK, triggerName=CPU使用率超过1%, eventDate=2020.10.29 07:24:01, eventId=9385

3)执行脚本报错

将脚本拷贝至容器

docker cp alert.sh zabbix-server-mysql:/usr/lib/zabbix/alertscripts/

如果报错,无法执行curl命令,则是docker容器没有该命令工具

首先查看docker容器服务器类型:

docker exec -it zabbix-server-mysql /bin/bash #进入容器
cat /etc/issue #查看容器服务器类型

发现是Alpine Linux 3.12服务器,很多镜像都是使用Alpine作为基础镜像,体积小,但Alpine精简了很多基础组件因此调试起来很麻烦。下方总结了常用的Alpine组件安装方法:

功能 命令 备注
镜像加速 sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories 将原装的Alpine库替换成国内的ustc库
apk库更新 apk update
安装ping apk add curl 安装curl
安装telnet apk add busybox-extras
偷懒N合1 sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories && apk update && apk add curl && apk add busybox-extras

在安装CURL过程中出现,没有操作权限

ERROR: Unable to lock database: Permission denied ERROR: Failed to open apk database:

解决方案,删除容器,在重新创建时加上用户-u="root",安装CURL成功

docker run -u="root" --privileged=true -v /usr/zabbix:/etc/zabbix --name zabbix-server-mysql -t \
  -e DB_SERVER_HOST="192.168.20.223" \
  -e DB_SERVER_PORT=3307 \
  -e MYSQL_DATABASE="zabbix" \
  -e MYSQL_USER="zabbix" \
  -e MYSQL_PASSWORD="zabbix_pwd" \
  -e MYSQL_ROOT_PASSWORD="admins" \
  -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
  --link mysql-server:mysql \
  --link zabbix-java-gateway:zabbix-java-gateway \
  -p 10051:10051 \
  -d zabbix/zabbix-server-mysql:latest

时间差8小时问题

在Docker Hub中的MySQL官方镜像中,时区是使用了世界标准时间(UTC)。因为在中国使用,所以需要把时区改成东八区的。不然数据保存到数据库时差8小时,后台获取也差8小时。

1)修改数据库时间

临时修改:进入数据库修改时区

show variables like '%time_zone%'; //查询当前时区
set global time_zone='+8:00'; //在标准时区上加+8小时,即东8区时间
flush privileges; # 立即生效

查看数据库当前时间

select now();

永久修改:生成容器时加上-e TZ=Asia/Shanghai,如:

docker run --name mysql-server -t \
      -p 3307:3306 \
      -e TZ=Asia/Shanghai \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="admins" \
      -d mysql:5.7 \
      --character-set-server=utf8 --collation-server=utf8_bin

2)修改容器时间

进入容器

docker exec -it mysql-server /bin/bash

查看时间

date

方式一:将服务器时间文件拷贝到容器,注意,如果服务器时间格式不正确,先修改服务器时间,再次查看会显示正确时间

docker cp /etc/localtime mysql-server:/etc/localtime

方式二:在创建容器时,挂载文件

-v /etc/localtime:/etc/localtime

方式三:设置容器时间格式

-e PHP_TZ="Asia/Shanghai"
posted @   肖德子裕  阅读(1873)  评论(0编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示