zabbix邮件报警、分级报警以及nginx的故障自愈

一、环境搭建(nginx监控)

1、客户端配置
(1)安装nginx

yum install nginx -y

(2)配置nginx

vim /etc/nginx/nginx.conf

location /nginx_status {
                stub_status;
                allow 127.0.0.1;
                deny all ;
        }

(3)启动nginx

systemctl start nginx.service

(4)编辑nginx监控脚本

vim /etc/zabbix/zabbix_agentd.d/nginx_status.sh

#!/bin/bash 

nginx_status_fun(){ #函数内容
    NGINX_PORT=$1 #端口,函数的第一个参数是脚本的第二个参数,即脚本的第二个参数是段端口号
    NGINX_COMMAND=$2 #命令,函数的第二个参数是脚本的第三个参数,即脚本的第三个参数是命令
    nginx_active(){ #获取nginx_active数量,以下相同,这是开启了nginx状态但是只能从本机看到
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
        }
    nginx_reading(){ #获取nginx_reading状态的数量
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
       }
    nginx_writing(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
       }
    nginx_waiting(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
       }
    nginx_accepts(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
       }
    nginx_handled(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
       }
    nginx_requests(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
       }
    case $NGINX_COMMAND in
        active)
            nginx_active;
            ;;
        reading)
            nginx_reading;
            ;;
        writing)
            nginx_writing;
            ;;
        waiting)
            nginx_waiting;
            ;;
        accepts)
            nginx_accepts;
            ;;
        handled)
            nginx_handled;
            ;;
        requests)
            nginx_requests;
        esac 
}

main(){ #主函数内容
    case $1 in #分支结构,用于判断用户的输入而进行响应的操作
        nginx_status) #当输入nginx_status就调用nginx_status_fun,并传递第二和第三个参数
            nginx_status_fun $2 $3;
            ;;
        *) #其他的输入打印帮助信息
            echo $"Usage: $0 {nginx_status key}"
    esac #分支结束符
}

main $1 $2 $3

(5)修改脚本权限

chmod +x /etc/zabbix/zabbix_agentd.d/nginx_status.sh

(6)编辑zabbix-agent配置文件

vim /etc/zabbix/zabbix_agentd.conf

UserParameter=nginx.status[*],/etc/zabbix/zabbix_agentd.d/nginx_status.sh $1 $2 $3

(7)重启zabbix-agent

systemctl restart zabbix-agent.service

(8)server端测试

zabbix_get -s 192.168.43.101 -p 10050 -k "nginx.status[nginx_status,80,active]"

2、新建模板以及链接主机
(1)新建模板或者导入已有的模板

创建模板

(2)链接主机
链接主机

(面)3、设置报警
(1)新建报警媒介
新建报警媒介

参数填写

上面的配置相当于是配置邮件的发件人,由于使用的是163邮箱,服务使用的pop3服务,所以可以在163邮箱设置中查找pop3,可以获取服务器地址和端口,服务要确保开启
pop3

smtp电邮填写要发送的163邮箱,生产中ssl要勾选,认证选择用户名和密码,用户名是发送邮件的163箱,密码填写授权码
授权码

(2)给用户绑定报警方式
用户或者用户组

添加报警方式

(3)添加动作
添加动作

该图展示的功能为当zabbix触发下面的这六项都会进行发邮件处理,也可以选择指定的报警程度,点击添加就可,计算方式就选择默认的或者或,否则邮件不会进行发送
添加操作

默认的标题和消息内容可以进行修改,操作点击新的,步骤是用来做分级告警的,持续时间选择60,如果写0,调用的时间就是最上面默认操作步骤持续时间,

分级报警

分级报警

(面)4、nginx的故障自愈
在使用zabbix监控nginx时,nginx故障之后,zabbix只是发告警给我们,但是zabbix也可以执行远程命令,运行脚本或者命令,实现nginx的重启。
(1)server端web界面创建新的动作
新动作

新操作

(2)开启zabbix的sudo权限(将下面的一项加到root下面一行,使用wq!强制保存)

vim /etc/sudoers

zabbix  ALL =(ALL)      NOPASSWD: ALL

(3)修改zabbix-agent配置文件

vim /etc/zabbix/zabbix_agentd.conf

EnableRemoteCommands=1·#允许远程执行命令
UnsafeUserParameters=1  #允许使用一些特殊符号

(4)重启程序

systemctl restart zabbix-agent.service

你可能感兴趣的:(zabbix邮件报警、分级报警以及nginx的故障自愈)