zabbix自定义监控、钉钉、邮箱报警

目录

一、实验准备

二、安装

三、添加监控对象

四、添加自定义监控项

五、监控mariadb

1、添加模版查看要求

2、安装mariadb、创建用户

3、创建用户文件

4、修改监控模版

5、在上述文件中配置路径

6、重启zabbix-agent验证

六、监控NGINX

1、安装NGINX,开启status模块

2、编写脚本、设置key并验证

3、添加自定义监控项

七、钉钉报警设置

1、创建群组、添加机器人

[2、配置zabbix server](#2、配置zabbix server)

3、web端设置

4、测试报警效果

八、邮件报警

[1、在zabbix-server 上配置邮件服务器](#1、在zabbix-server 上配置邮件服务器)

[2、编辑 zabbix_server.conf 引用邮件脚本](#2、编辑 zabbix_server.conf 引用邮件脚本)

[3、配置 zabbix web 监控项邮件报警](#3、配置 zabbix web 监控项邮件报警)

4、测试


一、实验准备

192.168.115.148 zabbix-server

192.168.115.151 zabbix-angent

复制代码
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
yum install zabbix-server-mysql zabbix-agent
yum install centos-release-scl
vim /etc/yum.repos.d/zabbix.repo
####改这里
[zabbix-frontend]
...
enabled=1
...

yum install zabbix-web-mysql-scl zabbix-apache-conf-scl

yum -y install mariadb mariadb-server
systemctl start mariadb.service 
##进入MYSQL
mysql
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user "zabbix"@"localhost" identified by '123456';
mysql> grant all privileges on zabbix.* to "zabbix"@"localhost";
mysql> quit;

zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

yum install zabbix-get


vim /etc/zabbix/zabbix_server.conf
##修改密码
DBPassword=123456
DBHost=192.168.115.118


vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
php_value[date.timezone] = Asia/Shanghai



systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm

rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
yum install zabbix-agent

##117行 
Server=192.168.115.148
##163行 
ServerActive=192.168.115.148
##174行 
Hostname=192.168.115.151

systemctl start zabbix-agent
systemctl enable zabbix-agent

二、安装

访问192.168.115.148/zabbix

三、添加监控对象

同理添加192.168.115.151

四、添加自定义监控项

在192.168.115.151上添加自定义的监控项:监控当前登录用户的个数

复制代码
vim /etc/zabbix/zabbix_agentd.d/user-login.conf
########定义键
########格式:UserParameter=key,shell命令(脚本也可)
UserParameter=user_login,who|wc -l


vim /etc/zabbix/zabbix_agentd.conf
###解开注释,启用
UnsafeUserParameters=1

systemctl restart zabbix-agent

在web端添加自定义监控项

验证,使用ssh登录192.168.115.151,让登录用户大于3

五、监控mariadb

1、添加模版查看要求

在192.168.115.151上先

查看说明

复制代码
Requirements for template operation:
1.Install Zabbix agent and MySQL client.
2.Copy template_db_mysql.conf into folder with Zabbix agent configuration (/etc/zabbix/zabbix_agentd.d/ by default). Don't forget to restart zabbix-agent. 
3.Create MySQL user for monitoring. For example:
CREATE USER 'zbx_monitor'@'%' IDENTIFIED BY '<password>';
GRANT REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zbx_monitor'@'%';
For more information read the MySQL documentation https://dev.mysql.com/doc/refman/8.0/en/grant.html , please. 
4.Create .my.cnf in home directory of Zabbix agent for Linux (/var/lib/zabbix by default) or my.cnf in c:\ for Windows. For example:
[client]
user='zbx_monitor'
password='<password>'


You can discuss this template or leave feedback on our forum https://www.zabbix.com/forum/zabbix-suggestions-and-feedback/384189-discussion-thread-for-official-zabbix-template-db-mysql

Template tooling version used: 0.39


#########################################################################################
模板操作的要求如下:

根据提供的信息,模板操作的要求包括:

安装Zabbix agent和MySQL客户端。

将template_db_mysql.conf复制到Zabbix agent配置文件夹中(默认为/etc/zabbix/zabbix_agentd.d/)。不要忘记重新启动zabbix-agent。

为监控创建MySQL用户。例如:
CREATE USER 'zbx_monitor'@'%' IDENTIFIED BY '';
GRANT REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON . TO 'zbx_monitor'@'%';
更多信息请阅读MySQL文档 https://dev.mysql.com/doc/refman/8.0/en/grant.html。

在Linux的Zabbix agent主目录(默认为/var/lib/zabbix)中创建.my.cnf文件,或在Windows的c:\目录中创建my.cnf文件。例如:
[client]
user='zbx_monitor'
password=''

您可以在我们的论坛上讨论此模板或提供反馈意见 https://www.zabbix.com/forum/zabbix-suggestions-and-feedback/384189-discussion-thread-for-official-zabbix-template-db-mysql

使用的模板工具版本为0.39
2、安装mariadb、创建用户
复制代码
###安装、启动
yum -y install mariadb-server
systemctl start mariadb
#######创建用户
CREATE USER 'zabbix'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON . TO 'zabbix'@'%';
3、创建用户文件
复制代码
vim /etc/zabbix/.my.cnf


[client]
user='zabbix'
password='123456'
 # #####################
4、修改监控模版
复制代码
 cd /etc/zabbix/zabbix_agentd.d
 cp /usr/share/doc/zabbix-agent-5.0.37/userparameter_mysql.conf .

就是这家伙

5、在上述文件中配置路径
复制代码
#替换
:%s/,/,HOME=\/etc\/zabbix\//g
6、重启zabbix-agent验证

systemctl restart zabbix-agent

六、监控NGINX

1、安装NGINX,开启status模块
复制代码
yum -y install epel-release
yum -y install nginx
systemctl start nginx
nginx -V #查看模块
复制代码
vim /etc/nginx/nginx.conf
###server或者location下插入
location / {
}
location /status {                   #定义运行状态页面名称,页面为status
        stub_status on;              #开启模块
        access_log off;              #不开启访问日志记录
        allow 192.168.115.0/24;      #允许此网段的主机访问此网页
        deny all;                    #其余网段主机不允许访问
 }



##重启
systemctl restart nginx

验证此模块

复制代码
curl 192.168.115.151/status

复制代码
Active connections: 1 
- 这表示当前服务器上有1个活跃连接。

Server accepts handled requests: 2 2 2
- 这个部分显示了服务器已经接受和处理的请求数目。具体来说,服务器已经接受了2个请求,并成功处理了这2个请求。

Reading: 0 Writing: 1 Waiting: 0
- 这个部分显示了服务器当前的连接状态。其中,Reading表示正在读取的连接数目为0,Writing表示正在写入的连接数目为1,Waiting表示等待的连接数目为0。
2、编写脚本、设置key并验证

参考大佬Zabbix5.0之监控Nginx_zabbix监控nginx失败请求_傻笑zz的博客-CSDN博客

复制代码
vim /etc/zabbix/script/ngx_status.sh
#!/bin/bash
#定义Nginx status页面
ngx_status="192.168.115.151/status"

#判断status页面是否存活
ngx_status_code() {
        http_code=`curl -o /dev/null -s -w %{http_code} ${ngx_status}`
        if [ ${http_code} == "200" ];then
                return 1
        else
                echo "Nginx status is not running."
        fi
}

#获取当前活动的客户端连接数
active() {
        ngx_status_code || curl -s ${ngx_status} | grep "Active" | awk '{print $NF}'
}

#获取接收客户端连接的总数量
accepts() {
        ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $1}'
}

#获取已处理的连接总数量
handled() {
        ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $2}'
}

#获取客户端请求总数量
requests() {
        ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $3}'
}

#获取正在读取请求标头的当前连接数量
reading() {
        ngx_status_code || curl -s ${ngx_status} | grep "Reading" | awk '{print $2}'
}

#获取正在将响应写回到客户端的当前连接数量
writing() {
        ngx_status_code || curl -s ${ngx_status} | grep "Writing" | awk '{print $2}'
}

#获取当前正在等待响应的客户端连接数量
waiting() {
        ngx_status_code || curl -s ${ngx_status} | grep "Waiting" | awk '{print $2}'
}

#使用位置变量控制脚本输出
case $1 in
        active)
                active;;
        accepts)
                accepts;;
        handled)
                handled;;
        requests)
                requests;;
        reading)
                reading;;
        writing)
                writing;;
        waiting)
                waiting;;
        *)
                echo "Unknown options"
esac

配置Zabbix Agent

vim /etc/zabbix/zabbix_agentd.conf

PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
DenyKey=system.run[*]
EnableRemoteCommands=1
Server=10.1.1.1
ServerActive=10.1.1.1
Hostname=nginx
Timeout=10
Include=/etc/zabbix/zabbix_agentd.d/*.conf
UnsafeUserParameters=1

创建自定义监控项
 vim /etc/zabbix/zabbix_agentd.d/userparameter_nginx.conf

UserParameter=nginx.active,bash /etc/zabbix/script/ngx_status.sh active
UserParameter=nginx.accepts,bash /etc/zabbix/script/ngx_status.sh accepts
UserParameter=nginx.handled,bash /etc/zabbix/script/ngx_status.sh handled
UserParameter=nginx.requests,bash /etc/zabbix/script/ngx_status.sh requests
UserParameter=nginx.reading,bash /etc/zabbix/script/ngx_status.sh reading
UserParameter=nginx.writing,bash /etc/zabbix/script/ngx_status.sh writing
UserParameter=nginx.waiting,bash /etc/zabbix/script/ngx_status.sh waiting

重启zabbix-agent

复制代码
systemctl start zabbix-agent

数值获取测试

复制代码
 zabbix_get -s 192.168.115.151 -k nginx.active

 zabbix_get -s 192.168.115.151 -k nginx.reading

####取到数值说明正确
3、添加自定义监控项

创建图形化

七、钉钉报警设置

下载钉钉

参考Zabbix 5.0实现钉钉报警_zabbix5.0设置钉钉告警_杭州吉网运维日记的博客-CSDN博客

1、创建群组、添加机器人

2、配置zabbix server
复制代码
vim /etc/zabbix/zabbix_server.conf 
###523行解开注释
AlertScriptsPath=/usr/lib/zabbix/alertscripts


###进入到/usr/lib/zabbix/alertscripts路径下创建脚本
cd /usr/lib/zabbix/alertscripts
vim dingding.py

#!/usr/bin/env python
#coding:utf-8
#zabbix钉钉报警
import requests,json,sys,os,datetime
webhook="https://oapi.dingtalk.com/robot/send?access_token=3a7191b12c8e8f5580b9bedc9e48938421845e7629c8ff0fe2833f1ede9e8b30" (修改为自己的webhook)
user=sys.argv[1]
text=sys.argv[3]
data={
    "msgtype": "text",
    "text": {
        "content": text
    },
    "at": {
        "atMobiles": [
            user
        ],
        "isAtAll": False
    }
}
headers = {'Content-Type': 'application/json'}
x=requests.post(url=webhook,data=json.dumps(data),headers=headers)
if os.path.exists("/var/log/zabbix/dingding.log"):
    f=open("/var/log/zabbix/dingding.log","a+")
else:
    f=open("/var/log/zabbix/dingding.log","w+")
f.write("\n"+"--"*30)
if x.json()["errcode"] == 0:
    f.write("\n"+str(datetime.datetime.now())+"    "+str(user)+"    "+"发送成功"+"\n"+str(text))
    f.close()
else:
    f.write("\n"+str(datetime.datetime.now()) + "    " + str(user) + "    " + "发送失败" + "\n" + str(text))
    f.close()

##赋予执行权限
chmod +x dingding.py
##创建日志文件:
touch /var/log/zabbix/dingding.log
chown zabbix.zabbix /var/log/zabbix/dingding.log

#####安装python与请求模块
yum -y install python-requests python 

#####报警测试,要写三个参数并且带关键字"告警"
./dingding.py this is  "告警测试,请注意"
3、web端设置

创建媒介

添加动作

复制代码
Problem: {EVENT.NAME}



-=【告警】=-
告警组:{TRIGGER.HOSTGROUP.NAME}
告警主机:{HOSTNAME1} 
告警主机别名:{HOST.NAME}
主机IP:{HOST.IP}
主机描述:{HOST.DESCRIPTION}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
警报类别:{TRIGGER.NAME}
当前状态:{ITEM.LASTVALUE}
告警平台:http://192.168.115.151/zabbix

告警恢复

复制代码
Resolved:{EVENT.NAME}


-=【告警取消啦】=-
恢复主机:{HOSTNAME1}

恢复时间:{EVENT.DATE} {EVENT.TIME}

主机IP:{HOST.IP}

告警项目:{TRIGGER.KEY1}

问题详情:{ITEM.NAME}:{ITEM.VALUE}

当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}

事件ID:{EVENT.ID}

配置报警媒介

4、测试报警效果

停掉192.168.115.151的NGINX

启动NGINX

八、邮件报警

登录163邮箱

授权码要好好保存

1、在zabbix-server 上配置邮件服务器
复制代码
##安装邮件服务器,转义
yum install -y mailx dos2unix
##查看版本
[root@localhost alertscripts]# mail -V
12.5 7/5/10



#####修改配置文件
vim /etc/mail.rc
//在此文件末尾添加,指定接收邮件邮箱地址,指定邮箱服务器地址,指定接收邮件邮箱地址的授权码,并非 163 邮箱的密码,而是授权码,登陆 163 网易邮箱地址后,--设置--开启smtp 和 pop3--点击客户端生成授权码--使用此授权码进行指定到此配置文件

set [email protected] smtp=smtp.163.com
set [email protected] smtp-auth-password=上面生成的授权码
set smtp-auth=login


####发送测试邮件
echo "test mail from zabbix.server.com"| mail -s "test mail" [email protected]

来到邮箱查看

2、编辑 zabbix_server.conf 引用邮件脚本
复制代码
vim /etc/zabbix/zabbix_server.conf
查看得到路径 AlertScriptsPath=/usr/lib/zabbix/alertscripts


###写脚本
cd /usr/lib/zabbix/alertscripts
vim mail.sh


##编写报警邮件脚本,调整 mail 命令语法位置,使用 dos2unix 命令转换字符,避免收到邮件不显示正常邮件内容而出现 ATTO0001.bin 的错误;
#!/bin/bash
#export.UTF-8
bt=$2
sjr=$1
FILE=/tmp/mailtmp.txt
echo "$3" >$FILE
/usr/bin/dos2unix -k $FILE
/bin/mail -s "$bt" "$sjr" <$FILE
#########################################
bt=$2 sjr=S1  定义发件标题和收件人信息
FILE=/tmp/mailtmp.txt  定义文件路径
使用 dos2unix 命令转换字符,避免收到邮件不显示正常邮件内
/usr/bin/dos2unix -k SFILE  容而出现 ATTO0001.bin 的错误
/bin/mail -s "Sbt""Ssjr" <SFILE   执行邮件发送命令

##############################
 chmod 777 mail.sh
chown zabbix:zabbix mail.sh
touch /tmp/mailtmp.txt
chmod 777 /tmp/mailtmp.txt
chown zabbix:zabbix /tmp/mailtmp.txt
####测试脚本
./mail.sh [email protected] "test mail2" "test mail from server.zabbix.com test2"
3、配置 zabbix web 监控项邮件报警

监控--创建报警媒介类型--更新用户使用的报警媒介类型-创建动作(根据发器触发)--验证;

创建动作

复制代码
邮件主题:

故障:{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、测试

停掉NGINX服务

启动NGINX服务

相关推荐
Leo.yuan13 分钟前
数据隐私是什么?如何做好数据隐私规范?
大数据·网络·数据库·人工智能·信息可视化
企业智能研究23 分钟前
企业如何高效构建BI团队,解锁数据价值新高地?
大数据·数据库·人工智能
Sayai1 小时前
dbeaver 查询clickhouse,数据库时间差了8小时
数据库·clickhouse·oracle
dayceng1 小时前
一则复杂 SQL 改写后有感
java·数据库·mysql
LuLaLuLaLeLLLLLL2 小时前
MySQL 基础笔记
数据库·笔记·mysql
掘根2 小时前
【MySQL进阶】MySQL程序
数据库·mysql
Nick同学2 小时前
原生 PHP 操作数据库的方式
数据库·后端·php
hqxstudying2 小时前
JAVA面试题
java·jvm·数据库·redis·mysql·oracle
AllWe$2 小时前
十一、MySQL 事务底层与高可用原理
数据库·mysql
珹洺2 小时前
MyBatis实战指南(七)MyBatis缓存机制
java·数据库·sql·安全·缓存·oracle·mybatis