• 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

    Zabbix创建模板

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

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

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

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

    Zabbix创建主机

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

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

    提供了4种连接方式:

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

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

    JMX:java虚拟机监控

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

    设置模板

    配置连接成功

    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个计算时用到的监控项,不然内存使用率无法计算

    创建触发器

    名称:内存占用率超过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:表示响应时间

    方案二:自定义监控项

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

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

    创建触发器

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

    Zabbix创建图形

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

    Zabbix自定义脚本告警

    1)创建报警媒介

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

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

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

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

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

    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}

    3)配置用户媒介

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

    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

    修改文件权限

    -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 %,值和单位中间有一个空格,后台会无法解析,解决方法将所有监控项的单位去除,然后通过后台接收之后处理。

     

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

    后台接收实例:

    告警

    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"
  • 相关阅读:
    How to Install Tomcat
    使用Application_Error捕获站点错误并写日志
    安装 SQL Server2008 安装程序规则支持提示“重新启动计算机”失败
    历史执行Sql语句性能分析 CPU资源占用时间分析
    返回List的分页方法
    @@IDENTITY与SCOPE_IDENTITY()
    Debugging Failed Because Integrated Windows Authentication Is Not Enabled
    一般经验总结
    dom中实现全选复选框的实例。
    dom中表格的修改 增加行例
  • 原文地址:https://www.cnblogs.com/xdzy/p/9460025.html
Copyright © 2020-2023  润新知