zabbix
zabbix监控方式
一、zabbix自定义监控
zabbix-agent '收集'数据,然后'定义key',交给'zabbix-server端'
1.要监控的内容
#监控服务器登录用户的数量
[root@web01 ~]# w | awk 'NR==1 {print $(NF-6)}'
1
2.客户端配置监控项
1)客户端配置文件
[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.conf
...
Include=/etc/zabbix/zabbix_agentd.d/*.conf
2)定义监控项语法
#官方示例
[root@web01 ~]# egrep -v '^#|^$' /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}'
#语法:
UserParameter=<key>,<shell command>
UserParameter=<key>[*],<shell command>
3)设置自定义监控项
[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.d/login_user.conf
UserParameter=login_usernumber,w | awk 'NR==1 {print $(NF-6)}'
4)重启客户端
[root@web01 ~]# systemctl restart zabbix-agent.service
3.客户端验证
[root@web01 ~]# zabbix_agentd -t login_usernumber
login_usernumber [t|4]
[root@web01 ~]# zabbix_agentd -p | grep login_usernumber
login_usernumber [t|4]
[root@zabbix ~]# man zabbix_agentd
#得到的结果,前面的字母含义
d #带小数部分的数字
m #不支持,只有在这种模式下,查询日志才可能是活动的(如日志监视项或需要多个收集值的项)引起的。权限问题或不正确的用户参数可能
s #文本。最大长度不受限制。
t #文本。最大长度不受限制。
u #无符号整数
4.服务端获取值
#需要安装zabbix-get,才能在命令行获取agent端的数据
[root@zabbix ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-get-4.0.1-1.el7.x86_64.rpm
#zabbix_get语法
zabbix_get -s host-name-or-IP [-p port-number] [-I IP-address] -k item-key
-s :agent 端的主机名或者IP地址
-p :agent 监听的端口 默认是10050
-I :如果server 端有多个网卡 可以指定通过哪个网卡进行数据获取
-k :指定agent 端定义的key
[root@zabbix ~]# zabbix_get -s 172.16.1.7 -p 10050 -k login_usernumber
4
5.web页面添加监控项
- 你想要接收的主机的特定数据,一个度量数据。
找到指定主机的监控项
[
创建监控项
[
二、zabbix自定义阈值(触发器)
- 一个被用于定义问题阈值和“评估”监控项接收到的数据的逻辑表达式
当接收到的数据高于阈值时,触发器从“OK”变成“Problem”状态。当接收到的数据低于阈值时,触发器保留/返回一个“OK”的状态。
找到指定主机监控项
创建监控项
注意:表达式结果为True,触发器才会被触发
三、自定义告警
开启触发器报警动作
1.QQ邮件方式示例
1.配置---动作---启用里面的动作
2.点击动作---操作
#默认标题:
故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
#消息内容:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
3.点击动作---恢复操作
#默认标题:
恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
#消息内容:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
4.点击更新
5.管理---报警媒介类型---mail
smtp.qq.com
465
qq.com
1240206455@qq.com
SSL/TLS:
SSL验证对端 -- 勾选
SSL验证主机 -- 勾选
用户名和密码:
1240206455@qq.com
QQ邮箱授权码
6.更新
7.配置收件人
头像---报警媒介---添加
填写收件人
根据职位设置接收告警的级别
操作截图
恢复操作截图
选择报警类型
编辑表单,选择使用哪个邮箱发送email
验证 ‘用户数登录过多,zabbix自动报警’,选择报警信息的指向
2.微信方式,叮叮方式 ...
1)注册企业微信
2)配置脚本
#1.查看zabbix_server默认脚本存放位置
[root@zabbix ~]# grep 'script' /etc/zabbix/zabbix_server.conf
# AlertScriptsPath=${datadir}/zabbix/alertscripts
AlertScriptsPath=/usr/lib/zabbix/alertscripts
#2.上传或编辑脚本,zabbix_server自动读取该脚本
[root@zabbix ~]# cd /usr/lib/zabbix/alertscripts
[root@zabbix alertscripts]# vim weixin.sh
#!/bin/bash
CropID='wwad27164a9cd4730a' #企业ID
Secret='CiI-CKdNkNRgbr8eIoTo3E2Rje9FZxVz-MoRI8jfII4' #企业号中的应用Secret
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F" '{print $10}')
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"
function body() {
local int AppID=1000002 #企业号中的应用id
local UserID=$1 #部门成员id,zabbix中定义的微信接收者
local PartyID=2 #部门id,定义了范围,组内成员都可接收到消息
local Msg=$(echo "$@" | cut -d" " -f3-) #过滤出zabbix中传递的第三个参数
printf '{
'
printf ' "touser": "'"$User""",
"
printf ' "toparty": "'"$PartyID""",
"
printf ' "msgtype": "text",
'
printf ' "agentid": "'" $AppID """,
"
printf ' "text": {
'
printf ' "content": "'"$Msg"""
"
printf ' },
'
printf ' "safe":"0"
'
printf '}
'
}
/usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL
#3.授权
[root@zabbix alertscripts]# chmod +x weixin.sh
#企业ID
corpid='ww69b7626c5e711bdf'
#应用的secret
appsecret='TchtAn_azm8DGT5gpVgPNffzOn8BeuVhT1jHQlbRHzs'
#应用的agentid
agentid=1000002
#5.手动测试脚本
[root@zabbix alertscripts]# ./weixin.sh SongYangYang[部门成员] 2[部门id] hello[发送内容]
3)添加报警媒介
{ALERT.SENDTO} #发送的⽤户
{ALERT.SUBJECT} #发送的主题
{ALERT.MESSAGE} #发送的内容
四、zabbix深入自定义监控项
1.自定义监控项-ssh端口
命令行配置
1.客户端关闭ssh端口
[root@web01 ~]# systemctl stop sshd
[root@web01 ~]# netstat -lntup|grep 22
2.zabbix服务端查看数据
[root@zabbix alertscripts]# zabbix_get -s 172.16.1.7 -k net.tcp.listen[22]
1
[root@zabbix alertscripts]# zabbix_get -s 172.16.1.7 -k net.tcp.listen[22]
0
图形化设置监控项
图形化设置触发器
自定义映射值
[
2.自定义监控项-TCP11种状态
1)了解11种状态
LISTEN - 侦听来自远方TCP端口的连接请求;
SYN_SENT -在发送连接请求后等待匹配的连接请求;
SYN_RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认;
ESTABLISHED- 代表一个打开的连接,数据可以传送给用户;
FIN_WAIT_1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;
FIN_WAIT_2 - 从远程TCP等待连接中断请求;
CLOSE_WAIT - 等待从本地用户发来的连接中断请求;
CLOSING -等待远程TCP对连接中断的确认;
LAST_ACK - 等待原来发向远程TCP的连接中断请求的确认;
TIME_WAIT -等待足够的时间以确保远程TCP接收到连接中断请求的确认;
CLOSED - 没有任何连接状态;
客户端独有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 (4)CLOSING (5)TIME_WAIT
服务端独有的:(1)LISTEN (2)SYN_RCVD (3)CLOSE_WAIT (4)LAST_ACK
共有的:(1)CLOSED (2)ESTABLISHED
2)配置监控项
[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.d/tcp_state.conf
UserParameter=tcp_state[*],netstat -ant | grep -c $1
[root@web01 ~]# systemctl restart zabbix-agent.service
3)客户端验证
[root@web01 ~]# zabbix_agentd -t tcp_state[TIME_WAIT]
tcp_state[TIME_WAIT] [t|47]
[root@web01 ~]# netstat -ant | grep -c TIME_WAIT
47
4)服务端验证
#需要安装zabbix-get,才能在命令行获取agent端的数据
[root@zabbix ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-get-4.0.1-1.el7.x86_64.rpm
[root@zabbix alertscripts]# zabbix_get -s 172.16.1.7 -k tcp_state[LISTEN]
15
5)添加监控项
自定义映射值