本次实验主要监控mysql状态,如果在线,就正常运行;不在线就进行报警。
主机名 | IP地址 |
功能 |
n1 |
192.168.231.20 |
zabbix-server |
n4 |
192.168.231.23 |
zabbix-agent,mysql |
zabbix-agent配置文件修改
[root@n4 ~]# egrep -v "^$|#" /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=192.168.231.20 #zabbix-server端IP
ServerActive=127.0.0.1
Hostname=192.168.231.23
Include=/etc/zabbix/zabbix_agentd.d/*.conf
快速安装mysql5.7
[root@n4 ~]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
[root@n4 ~]# yum -y install mysql57-community-release-el7-10.noarch.rpm
[root@n4 ~]# yum -y install mysql-community-server
[root@n4 ~]# systemctl start mysqld.service
查看密码
[root@n4 ~]# grep "password" /var/log/mysqld.log
2019-04-24T12:57:17.655875Z 1 [Note] A temporary password is generated for root@localhost: ;e4ZYdJlaDko
[root@n4 ~]# mysql -uroot -p
关闭有效密码政策,并设置密码长度最小为1
mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=1;
设置密码
mysql> alter user 'root'@'localhost' identified by '123456';
mysql> update mysql.user set host='%' where user='root';
自定义key
[root@n4 ~]# vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
UserParameter=mysql.ping,mysqladmin -uroot -p123456 -h'127.0.0.1' ping 2> /dev/null | grep -c alive
UserParameter后跟key名称,mysql.ping后跟执行的命令
重启服务
[root@n4 ~]# systemctl restart zabbix-agent.service
zabbix-server端测试
查看mysql是否在线,返回1则在线,0则不在线
[root@n1 ~]# zabbix_get -s 192.168.231.23 -p 10050 -k mysql.ping
1
创建被监控主机
创建应用集
创建监控项(监控mysql是否在线)
创建触发器(值不等于1则触发)
创建图形
查看mysql状态
下载钉钉后创建群组(linux运维)
添加机器人实现报警
添加
添加完成
电脑端网页登录钉钉,查看告警机器人的webhook(web登录:https://im.dingtalk.com/)
创建告警脚本
这个目录是zabbix告警脚本存放目录
[root@n1 ~]# vim /usr/lib/zabbix/alertscripts/ding.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import json
import sys
import os
headers = {'Content-Type': 'application/json;charset=utf-8'}
#api_url后跟告警机器人的webhook
api_url = "https://oapi.dingtalk.com/robot/send?access_token=xxx"
def msg(text):
json_text= {
"msgtype": "text",
"text": {
"content": text
},
"at": {
"atMobiles": [
"real" #@群里的real
],
"isAtAll": True #@所有人
}
}
print(requests.post(api_url,json.dumps(json_text),headers=headers).content)
if __name__ == '__main__':
text = sys.argv[1]
msg(text)
[root@n1 ~]# cd /usr/lib/zabbix/alertscripts/
赋予执行权限
[root@n1 alertscripts]# chmod +x ding.py
2019.5.29------------------------
[root@n1 alertscripts]# yum install python-pip -y
[root@n1 alertscripts]# pip install requests
-------------------------------------
测试
[root@n1 alertscripts]# ./ding.py test #test是参数
{"errmsg":"ok","errcode":0}
创建媒介类型
管理-》报警媒介-》创建媒体类型
创建动作
配置动作
配置恢复操作
配置更新操作
如果想知道消息内容中宏,可参考官网宏的使用场景
服务器:{HOST.NAME}发生: {TRIGGER.NAME}故障!
{
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}
}
服务器:{HOST.NAME}: {TRIGGER.NAME}已恢复!
{
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
持续时间:{EVENT.AGE}
事件ID:{EVENT.ID}
}
服务器:{HOST.NAME}: 报警确认
{
确认人:{USER.FULLNAME}
时间:{ACK.DATE} {ACK.TIME}
确认信息如下:
"{ACK.MESSAGE}"
问题服务器IP:{HOSTNAME1}
问题ID:{EVENT.ID}
当前的问题是: {TRIGGER.NAME}
}
测试
在n4上停止mysql服务
[root@n4 ~]# systemctl restart mysqld.service