Day02-zabbix自定义监控详解

十、弥补监控死角-自定义监控

10.1 概述

  • 我们通过zbx客户端+各种模板实现监控。

  • linux zabbix agent模板

    • cpu
    • 磁盘
    • 内存,swap
    • 网络,网卡
    • 系统负载
    • 进程数量
    • 用户登录数量
    • 系统运行时长
  • 自定义监控应用场景:

    • 模板中没有我们所要的监控项
    • 默认的模板中监控项过多。
  • web01 监控80端口是否存在? 自定义监控

10.2 自定义监控全流程

  • 客户端:书写命令或脚本,修改配置文件。

  • 服务端:测试,web页面操作。

步骤流程
客户端linux:通过命令、脚本取出对应的值
linux:根据zbx要求按照格式,书写配置文件,创建键值键值key用于获取客户端数据
linux:重启客户端客户端测试键值是否可用zabbix_agent2 -t
服务端linux:服务端测试键值是否可用zabbix_get
web页面:键值与监控项关联
web页面:测试
web页面:图形
web页面:触发器(报警)是否发出警告
需要根据情况决定是否设置

1)客户端

a)通过命令、脚本取出对应的值
  • 监控80端口是否存在? 自定义监控

在这里插入图片描述

b)创建键值与重启
[root@lb01 ~]# grep -i include /etc/zabbix/zabbix_agent2.conf 
### Option: Include
#	You may include individual files or all files in a directory in the configuration file.
#	Installing Zabbix will create include directory in /usr/local/etc, unless modified during the compile time.
# Include=
Include=/etc/zabbix/zabbix_agent2.d/*.conf
# Include=/usr/local/etc/zabbix_agent2.userparams.conf
# Include=/usr/local/etc/zabbix_agent2.conf.d/
# Include=/usr/local/etc/zabbix_agent2.conf.d/*.conf
# Include configuration files for plugins
Include=./zabbix_agent2.d/plugins.d/*.conf

# 1. 写入自定义key(键值)
[root@lb01 ~]# cat /etc/zabbix/zabbix_agent2.d/web.conf
#自定义监控的格式
#UserParameter=起个名字,命令或脚本
#命名最好就是 单词+"." (点)
UserParameter=ngx.port,ss -lntup |grep -w 80|wc -l
# 2. 重启客户端
[root@lb01 ~]# systemctl restart zabbix-agent2.service
# 3. 客户端本地测试键值
[root@lb01 ~]# zabbix_agent2 -t ngx.port
ngx.port                                      [s|1]
# s表示类型 文字
# 1表示结果 键值的结果

温馨提示:zabbix_agent2.conf里面有

Include=/etc/zabbix/zabbix_agent2.d/*.conf

修改后记得重启zbx客户端

2)服务端

a)服务端手动测试
[root@m02-zbx-server ~]# yum install zabbix-get -y
# zabbix_get 向客户端要指定键值的数据。
zabbix_get命令
-s客户端ip地址
-p客户端端口号(默认是10050)
-k指定键值
[root@m02-zbx-server ~]# zabbix_get -s 172.16.1.5 -k ngx.port
1
[root@m02-zbx-server ~]# zabbix_get -s 172.16.1.5 -k ngx.port
0
b) web页面:创建监控项
  • 把客户端创建的键值与zbx服务端监控项关联起来。
  • 创建监控项

在这里插入图片描述

  • 配置监控项名字,填写:键值
    • 信息类型:这里键值结果都是数字,选择数字(无正负即可),如果有小数选择浮点类型,如果是字符,选择字符串。
    • 更新间隔:这里调整为5s秒,生产环境非必须尽量增长间隔比如1m,10m,1h等等

在这里插入图片描述

  • 历史数据与趋势数据
历史数据与趋势数据说明推荐配置
历史数据(history)保留时长:每个更新间隔获取到的数据推荐空间不乐观 可以设置为30d
趋势数据(trend)保留时长:记录数据变化的趋势,占用空间较少推荐保留更长时间 3650d
  • 监控项配置信息汇总

在这里插入图片描述

  • 进行监控项测试
  • 温馨提示:处处有测试,保证数据可用。
  • 测试结果

在这里插入图片描述

  • 添加监控项完成,查看添加的监控项

  • 这里的图形是zbx替我们根据数据自动创建的。

在这里插入图片描述
在这里插入图片描述

c)web页面:触发器
  • 根据监控项获取的数值(内容),决定是否要告警、是否要提示异常。

  • trigger扳机

  • 创建触发器

在这里插入图片描述

  • 配置触发器名字,严重程度和表达式

在这里插入图片描述

  • 表达式配置详情

在这里插入图片描述

  • 添加完成后的触发器配置

在这里插入图片描述

  • 出现故障后的提示

在这里插入图片描述

d)web页面:添加图形
  • 添加图形

在这里插入图片描述

  • 配置图形名字与添加监控项

在这里插入图片描述

  • 查看图形的预览(监控项要已经获取到数据才行)

在这里插入图片描述

  • 检查图形

在这里插入图片描述

3)自定义监控小结

  • 用一句话形容自定义监控:只要能通过命令、脚本取出来的东西就可以自定义监控。

  • 自定义监控流程:

    • 客户端 通过命令/脚本取出想要内容,UserParameter创建键值key,写入配置文件,客户端检测(zabbix_agent)
    • 服务端 命令测试键值(zabbix_get) ,web页面: 添加监控项 ,添加触发器,添加图形
    • web调试

10.3 常用键值与触发器函数

1)键值

  • 在监控项中使用,键值用于获取数据
常用键值说明
agent.hostname主机名 获取的是客户端配置文件中指定的主机名
system.hostname主机名 系统的主机名 类似于hostname
agent.ping服务端与客户端是否通畅 通1 不通非1
net.if.in[if,<mode>]网络接口上传(进入)流量统计。返回 整数 if表示网卡名字 可以忽略。
net.if.out[if,<mode>]流出流量统计。返回整数
proc.num[<name>,<user>,<state>,<cmdline>,<zone>]进程数。返回整数
name进程名字
user用户
state进程状态
cmdline进程对应的命令
net.tcp.port[,port]检查是否能建立 TCP 连接到指定端口。
返回 0 - 不能连接;1 - 可以连接
  • 案例过滤僵尸进程数量
state 写为 zomb 
zabbix_get -s 172.16.1.7 -p 10050 -k proc.num[,,zomb]
zabbix_get -s 172.16.1.7 -k net.if.in[eth0,]
zabbix_get -s 172.16.1.7 -k proc.num[nginx]
zabbix_get -s 172.16.1.7 -k net.tcp.port[,80]

zbx客户端键值
链接: https://www.zabbix.com/documentation/6.0/zh/manual/config/items/itemtypes/zabbix_agent

2)触发器函数

  • 写在触发器表达式中.用于设置报警条件.
  • 触发器函数要结合键值(监控项).
功能(函数)说明
对比与比较
last()最近值 (最新的值),取出最近一些值
nodata()是否有数据
diff()是否发生变化 一般配合md5check()
进行计算
avg()平均值
min()最小值
max()最大值
  • 分析案例: 目的是用来检查/etc/passwd的变化情况,间接检查是否有用户增加或删除
#倒数第1个 /etc/passwd 的md5值
last(/lb01/vfs.file.cksum[/etc/passwd,sha256],#1)
<>
#倒数第2个 /etc/passwd 的md5值
last(/lb01/vfs.file.cksum[/etc/passwd,sha256],#2)

# 倒数第1个md5的值和倒数第2个md5的是 如果不相等了,则报警.
# 目的是用来检查/etc/passwd的变化情况,间接检查是否有用户增加或删除.
  • 书写触发器案例 swap
    • 条件1:swap总大小大于0(系统有swap)
    • #条件2:swap当前使用的大小大于0(没有直接可以使用的监控项,这里调整为当前swap空闲率小于100)
#1. 找出满足要求的键值
system.swap.size[,total]) #取出swap总数
last(/web01/system.swap.size[,used])  #swap使用大小

#条件swap总大小大于0
last(/web01/system.swap.size[,total])>0

#条件swap当前使用的大小大于0(没有直接可以使用的监控项,这里调整为当前swap空闲率小于100)
last(/web01/system.swap.size[,pfree])<100

#表示并且
-a   ==> and 
-o   ==> or

#2.完整的表达式
last(/web01/system.swap.size[,total])>0 and last(/web01/system.swap.size[,used])>0

在这里插入图片描述

max(/Zabbix server/vm.memory.size[available],5m)<{$MEMORY.AVAILABLE.MIN} and last(/Zabbix server/vm.memory.size[total])>0 

# 最近5分钟可用内存小于 指定的值
max(/Zabbix server/vm.memory.size[available],5m) < {$MEMORY.AVAILABLE.MIN} 
# and 并且
# 内存大小大于0 
last(/Zabbix server/vm.memory.size[total])>0

3)触发器依赖

  • 内存不足

  • 开始占用swap

  • 网络断开

  • ping

  • port

https://www.zabbix.com/documentation/6.0/zh/manual/config/triggers/dependencies

10.4 自定义监控-参数案例

  • 目标:检查指定用户是否存在异地登录。

  • 最简单想法:检查指定用户登录的ip地址。进行对比

在这里插入图片描述

  • 选择命令:

  • w who只能显示当前此时此刻,登录情况。

  • lastlog 实现

  • 键值:实现取出指定用户的登录的ip地址。

  • 服务端:web页面触发器做对比。

1)客户端

  • 使用命令
lastlog |grep root |awk '{print $3}'  
# root未来可能是其他用户.
  • 书写键值key
[root@lb01 ~]# cat /etc/zabbix/zabbix_agent2.d/web.conf 
#自定义监控的格式
#UserParameter=起个名字,命令或脚本
UserParameter=ngx.port,ss -lntup |grep -w 80|wc -l
UserParameter=user.login[*],lastlog -u "$1"|awk 'NR==2{print $3}'

[root@lb01 ~]# systemctl restart zabbix-agent2.service 
[root@m02-zbx-server ~]# zabbix_get -s 172.16.1.5 -k user.login[root]
root             pts/1    10.0.0.1         一 56 12:30:07 +0800 2024

[root@lb01 ~]# cat /etc/zabbix/zabbix_agent2.d/web.conf 
#自定义监控的格式
#UserParameter=起个名字,命令或脚本
UserParameter=ngx.port,ss -lntup |grep -w 80|wc -l
UserParameter=user.login[*],lastlog -u "$1"|awk 'NR==2{print $$3}'  # 两个$$符号
  • 如果使用自定义键值传参,awk取列的时候要使用$$列。

  • 如果没有传参,awk正常使用即可。

  • 理解自定义键值的传参

在这里插入图片描述

2)服务端

[root@m02-zbx-server ~]# zabbix_get -s 172.16.1.5 -k user.login[root]
10.0.0.1
  • web 添加监控项

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • web 触发器
最近1个值和上一个值是否一致(不一致)
last(/lb01/user.login[root],#1) <> last(/lb01/user.login[root],#2)

在这里插入图片描述

  • 查看

在这里插入图片描述

在这里插入图片描述

3)小结

  • 自定义监控,带参数。
  • 带参数+awk取列。($$取列)
  • 优先使用zbx内置key和模板中监控项。
  • 多看看模板中的监控项和触发器规则。{$XXXX}

10.5 使用模板

  • 通过创建自定义模板实现,监控项,触发器,图形批量使用。
  • 步骤
    • 创建模板
    • 添加自定义监控项᲼
    • 添加触发器
    • 添加图形
    • 模板关联主机
    • 客户端配置自定义键值

1)创建模板

在这里插入图片描述

  • 创建模板(模板名字要是英文的)

在这里插入图片描述

  • 检查模板信息

在这里插入图片描述

2)添加自定义监控项

  • 进入主机中复制即可

  • 选择要复制的监控项,选择复制即可(可批量多选)

在这里插入图片描述

  • 选择复制到模板中

在这里插入图片描述

  • 检查模板中监控项部分:多了2个监控项

在这里插入图片描述

在这里插入图片描述

3)复制触发器与图形

  • 主机–>触发器

在这里插入图片描述

  • 复制

在这里插入图片描述

  • 检查模板

在这里插入图片描述

  • 复制图形与复制触发器与监控项一致

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4)模板关联主机

  • 进入主机中,批量选择要添加模板的主机,批量更新

在这里插入图片描述

  • 添加模板关联主机成功

在这里插入图片描述

  • 错误提示:

  • unkown metric xxxx 未知的键值(监控项)

  • 原因:客户端没有对应的自定义的键值.

  • 解决:复制过去对应的键值即可.

在这里插入图片描述

5)配置linux客户端键值

  • 分发键值配置文件到db01和nfs01
  • 重启zbx客户端

6)调试

  • 给监控项设置标记,方便分类
  • 温馨提示: zbx 5.x 及之前 应用集,zbx 6.x 叫标记。都是用于分类

7)小结

  • 找到1台主机进行测试标记,监控项,触发器,图形。。。
  • 然后创建模板,把对应的内容复制到模板中。
  • 模板关联主机
  • 键值的配置文件发过去

11、监控告警那点事

11.1 告警分类

报警方式企业应用场景
发邮件个人邮箱企业邮箱,免费使用
企业微信-告警应用(机器人)需要使用企业微信,免费
OA系统( 钉钉,飞鸽,…)与阿里云,免费
短信0.045元/条左右 (阿里云短信服务) 收费
电话收费
第三方报警工具/平台: onealert (省事)只需要配置onealert的平台信息,免费使用(限制),收费

11.2 邮件报警

1)全流程

  • 个人邮箱/企业邮箱
  • 开启个人邮箱 smtp功能 获取授权码
  • 发件人:配置zabbix 报警媒介类型
  • 收件人:配置 用户 接收报警
  • 发件条件:配置动作

2)个人邮箱准备(略)

  • 配置个人邮箱

在这里插入图片描述

3)配置发件人

  • a:配置发件人-报警媒介

在这里插入图片描述

在这里插入图片描述

  • 告警邮件内容: Messages template

  • 故障告警信息
    在这里插入图片描述

  • 故障恢复告警信息

在这里插入图片描述

  • 添加完成

在这里插入图片描述

#信息类型是: 问题( 发生故障 ) 
主题:   故障名称: {EVENT.NAME}
消息: 
故障始于 时间: {EVENT.TIME} 日期: {EVENT.DATE}
故障名称: {EVENT.NAME}
故障主机: {HOST.NAME}
严重程度: {EVENT.SEVERITY}
额外信息: {EVENT.OPDATA}
故障ID: {EVENT.ID}
触发器地址: {TRIGGER.URL}

#信息类型是: Problem recov 故障解决的时候

主题: 故障解决 in {EVENT.DURATION}: {EVENT.NAME}

消息:
故障已经解决 时间: {EVENT.RECOVERY.TIME} 日期: {EVENT.RECOVERY.DATE}
故障名称: {EVENT.NAME}
故障持续时间: {EVENT.DURATION}
故障主机: {HOST.NAME}
故障级别: {EVENT.SEVERITY}
故障ID: {EVENT.ID}
{TRIGGER.URL}
  • 进行测试

在这里插入图片描述

  • 提示发送成功
    在这里插入图片描述

  • 检查邮箱内容
    在这里插入图片描述

4)配置收件人

  • 本质:zbx的用户、用户组。

  • 对所有人员进行分组

    • 运维组 : lidao@qq.com
    • 开发组: lidaokaifa@qq.com
    • 老大组: lidaoboss@qq.com
  • b:收件人

  • 添加收件人信息

在这里插入图片描述

  • 配置收件人

在这里插入图片描述

  • 配置完成

在这里插入图片描述

5)什么条件下给用户发送邮件?(条件/动作)

  • c:动作–启用
    • 触发器动作

在这里插入图片描述

  • 启动即可

在这里插入图片描述

  • 已启用

在这里插入图片描述

  • 制造故障检查仪表盘

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 检查邮件

在这里插入图片描述

在这里插入图片描述

6)邮箱告警小结

  • 分组,用户
  • 配置发件人: 报警媒介类型
  • 配置收件人: 个人用户配置中添加报警媒介
  • 配置动作:(触发器动作)
    • 发送故障的提示
    • 发送故障恢复的提示

11.3 微信报警

1) 全流程

  • 微信报警,短信,电话,钉钉 自定义脚本报警

  • 通过脚本(py,shell),调用对方api接口(输入接口需要的信息,访问与使用api接口)

  • 企业微信

  • 企业微信id和告警机器人id和secret

  • 使用脚本(shell/python)调用企业微信api接口: python 输入收件人 信息

  • 发件人: 报警媒介(告警机器人)

  • 收件人: 个人 媒体类型

  • 动作: 已经完成

2)准备环境 1-3

#1.企业微信 id号
企业ID
ww6ac68d5d41044330

#2.创建1个报警机器人(应用)
##机器人的id(应用id)  
AgentId
1000005

##应用密码  
Ss7VFx8Mkzm8XABMNqVRp31zxNnxhbJ_rJzz8sPDgk4
#修改微信报警的脚本
vim /usr/local/share/zabbix/alertscripts/wechat.py

#!/usr/bin/env python
#-*- coding: utf-8 -*-
#author: oldboy-linux
#date: 2021
#description: Zabbix Wechat Alerts Scripts
import requests
import sys
import os
import json
import logging
logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s',
                datefmt = '%a, %d %b %Y %H:%M:%S',
                filename = os.path.join('/tmp','wechat.log'),
                filemode = 'a')
               
#id和secret需要修改
corpid='wxd074861951c67ba6'
appsecret='QtraZrI936DZ0jZ3aSWTZ-lFVheAMgLmq3toM4B9U1A'
agentid=1
#获取accesstoken
token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret
req=requests.get(token_url)
accesstoken=req.json()['access_token']
#发送消息
msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken

#脚本参数
#touser=sys.argv[1]
toparty=sys.argv[1]
subject=sys.argv[2]
#toparty='3|4|5|6'
message=sys.argv[2] + "\n\n" +sys.argv[3]
params={
#       "touser": touser,
       "toparty": toparty,
        "msgtype": "text",
        "agentid": agentid,
        "text": {
                "content": message
       },
        "safe":0
}
req=requests.post(msgsend_url, data=json.dumps(params))

# 书写日志/tmp/wechat.log
logging.info('sendto:' + toparty + ';;subject:' + subject + ';;message:' + message)

chmod +x /usr/lib/zabbix/alertscripts/wechat.py

#安装python环境
yum install -y python3 python3-pip
通过pip3 命令安装requests依赖.
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple requests

#测试
python3 wechat.py 用户的id或组id 标题 内容 '下雨了'  '打雷下雨收衣服'
Traceback (most recent call last):
File "/usr/lib/zabbix/alertscripts/wechat.py", line 7, in <module>
   import requests
ImportError: No module named requests
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
pip install requests

#web页面 发件人:报警媒介类型
{ALERT.SENDTO}  #发给谁
{ALERT.SUBJECT} #报警标题
{ALERT.MESSAGE} #报警内容

故障目前已经解决时间: {EVENT.RECOVERY.TIME} 日期
{EVENT.RECOVERY.DATE}
故障名称: {EVENT.NAME}
故障经历多久: {EVENT.DURATION}
故障主机: {HOST.NAME}
故障级别: {EVENT.SEVERITY}
故障ID: {EVENT.ID}
{TRIGGER.URL}
#web页面 收件人:接收用户
#Web页面 配置-->动作
  • 需要去企业微信后台,开通白名单

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 错误提示:
故障提示:
python3 wechat-v2-lidao996.py lidao996  "webisdown" "nginx is down"
Traceback (most recent call last):
 File "wechat-v2-lidao996.py", line 7, in <module>
   import requests
ModuleNotFoundError: No module named 'requests'
故障解决:
pip3 install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
新的安装方法:
python3 -m pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

3)配置发件人

{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
  • 添加报警媒介类型

在这里插入图片描述

  • 添加报警内容模板

在这里插入图片描述

  • 测试发件人

在这里插入图片描述

4)配置收件人

在这里插入图片描述

在这里插入图片描述

5)整体测试

  • 制造新的故障

在这里插入图片描述

在这里插入图片描述

6)小结

  • 企业微信

  • 企业微信id和告警机器人id和secret

  • 使用脚本(shell/python3)调用企业微信api接口: python 输入收件人 信息

  • 发件人: 报警媒介类型

  • 收件人: 个人 媒体类型

  • 动作: 已经完成

  • 补充:通过微信脚本,发送到指定用户。

今日总结

链接: https://www.processon.com/view/link/62a6fb42e401fd5a4d63d3bc

  • 16
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值