Zabbix学习案例(8)-Zabbix故障自治愈

Zabbix学习(1)-监控服务与Zabbix介绍

Zabbix学习(2)-Zabbix安装和基础使用

Zabbix学习(3)-Zabbix监控入门

Zabbix学习(4)-Proxy主动被动部署

Zabbix学习案例(1)-TCP状态监控

Zabbix学习案例(2)-memcached状态监控

Zabbix学习案例(3)-redis状态监控

Zabbix学习案例(4)-nginx状态监控

Zabbix学习案例(5)-SNMP监控和WEB监控

Zabbix学习案例(6)-MySQL监控

Zabbix学习案例(7)-grafana图形展示

环境:

hostnameIP
zabbix-server172.20.32.101
zabbix-agent172.20.32.105

一. 故障自治愈介绍

故障自治愈功能实际上是多种功能的集合,是 zabbix 内的多个模块之间交互提供的功能,当 zabbix 监控到指定的监控项异常的时候,通过指定的操作使故障自动恢复,通常是重启服务等一些简单的操作,也可以调用脚本执行比较复杂的操作。

具体的操作就是:

设置监控项和触发器 --> 新建动作 --> 在触发条件里面添加操作 --> 在远程 主机通过 zabbix 客户端执行命令或脚本

大概的步骤如下:

1.开启zabbix sudu权限
2.配置允许允许特殊字符
3.配置远程命令
4.验证和测试

二. 故障自治愈前提

zabbix agent 允许远程执行命令

root@Mysql-slave:~# grep "^[a-Z]" /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
EnableRemoteCommands=1
LogRemoteCommands=1
Server=172.20.32.102,172.20.32.101
ListenPort=10050
ListenIP=0.0.0.0
StartAgents=5
ServerActive=172.20.32.102
Hostname=172.20.32.105
AllowRoot=1
User=root
Include=/etc/zabbix/zabbix_agentd.d/*.conf
UnsafeUserParameters=1

root@Mysql-slave:~# systemctl restart zabbix-agent.service

给 zabbix 用户 sudo 权限

root@Mysql-slave:~# vim /etc/sudoers

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL
zabbix  ALL = NOPASSWD: ALL   #增加zabbix用户sudu权限
#zabbix  ALL = NOPASSWD: ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

修改启动文件用户

root@Mysql-slave:~# vim /lib/systemd/system/zabbix-agent.service 
[Unit]
Description=Zabbix Agent
After=syslog.target
After=network.target

[Service]
Environment="CONFFILE=/etc/zabbix/zabbix_agentd.conf"
EnvironmentFile=-/etc/default/zabbix-agent
Type=forking
Restart=on-failure
PIDFile=/run/zabbix/zabbix_agentd.pid
KillMode=control-group
ExecStart=/usr/sbin/zabbix_agentd -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
User=root
Group=root

[Install]
WantedBy=multi-user.target

root@Mysql-slave:~# systemctl daemon-reload
root@Mysql-slave:~# systemctl restart zabbix-agent.service

自定配置和脚本

脚本一

root@Mysql-slave:/etc/zabbix/zabbix_agentd.d# pwd
/etc/zabbix/zabbix_agentd.d
root@Mysql-slave:/etc/zabbix/zabbix_agentd.d# vim nginx_status.sh 

                /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 + PORT + key}" 
        esac #分支结束符 
}

main $1 $2 $3
root@Mysql-slave:/etc/zabbix/zabbix_agentd.d# chown a+x nginx_status.sh
root@Mysql-slave:/etc/zabbix/zabbix_agentd.d# bash nginx_status.sh nginx_status 80 active
1
root@Mysql-slave:/etc/zabbix/zabbix_agentd.d# bash nginx_status.sh nginx_status 80 reading
0
root@Mysql-slave:/etc/zabbix/zabbix_agentd.d# bash nginx_status.sh nginx_status 80 requests
29952

脚本二


root@Mysql-slave:/etc/zabbix/zabbix_agentd.d# vim nginx_status1.sh
#!/bin/bash
# 
# Edited on 20200501 by likai.tech

if [[ $# -eq 0 ]]; then
    echo "Usage: `basename $0` get_nginx_status.sh STATS"
fi

save_status(){
   /usr/bin/curl http://172.20.32.105/nginx_status 2> /dev/null > /tmp/nginx_status.log
}

get_status(){
case $1 in
    active)
        active_conns=`/bin/cat /tmp/nginx_status.log | grep -i "active" | awk '{print $3}'`;
        echo $active_conns;
;;
    accepts)
        accepts_conns=`/bin/cat /tmp/nginx_status.log | grep  "^ [0-9]" | awk '{print $1}'`;
        echo $accepts_conns;
;;
    handled)
        handled_conns=`/bin/cat /tmp/nginx_status.log | grep  "^ [0-9]" | awk '{print $2}'`;
        echo $handled_conns;
;;
    requests)
        requests_conns=`/bin/cat /tmp/nginx_status.log | grep  "^ [0-9]" | awk '{print $3}'`;
        echo $requests_conns;
;;
    reading)
        reading_conns=`/bin/cat /tmp/nginx_status.log | tail -n1 | awk '{print $2}'`;
        echo $reading_conns;
;;
    writing)
        writing_conns=`/bin/cat /tmp/nginx_status.log | tail -n1 | awk '{print $4}'`;
        echo $writing_conns;
;;
    waiting)
        waiting_conns=`/bin/cat /tmp/nginx_status.log | tail -n1 | awk '{print $6}'`;
        echo $waiting_conns;
esac
}

main(){
    save_status
    get_status $1
}

main $1
root@Mysql-slave:/etc/zabbix/zabbix_agentd.d# chown a+x nginx_status1.sh

root@Mysql-slave:/etc/zabbix/zabbix_agentd.d# bash nginx_status1.sh active
1
root@Mysql-slave:/etc/zabbix/zabbix_agentd.d# bash nginx_status1.sh reading
0
root@Mysql-slave:/etc/zabbix/zabbix_agentd.d# bash nginx_status1.sh requests
30168

添加自定义监控项再配置文件中。

### Option: UserParameter
#       User-defined parameter to monitor. There can be several user-defined parameters.
#       Format: UserParameter=<key>,<shell command>
#       See 'zabbix_agentd' directory for examples.
#
# Mandatory: no
# Default:
# UserParameter=
UserParameter=nginx_status[*],bin/bash /etc/zabbix/zabbix_agentd.d/nginx_status1.sh "$1"
UserParameter=nginx.status[*],bin/bash /etc/zabbix/zabbix_agentd.d/nginx_status.sh "$1" "$2" "$3"

root@Mysql-slave:~# systemctl restart zabbix-agent.service

三. 创建动作

导入以及准备好的nginx-temlapte-nginx模板
在这里插入图片描述

添加port监控项

键值: net.tcp.listen[80]

root@Zabbix-server:~# /apps/zabbix_server/bin/zabbix_get -s 172.20.32.105 -p10050 -k "net.tcp.listen[80]"
1

在这里插入图片描述

创建触发器

在这里插入图片描述

在这里插入图片描述

创建动作

创建报警邮箱通知

在这里插入图片描述
操作:
在这里插入图片描述
恢复操作:
在这里插入图片描述

指定远程操作(自治愈)

在这里插入图片描述

在这里插入图片描述

验证

将被测试的服务手动停止运行,验证能否自动启动或重启,更多操作可以远程执行脚本。
如下:手动将 Nginx、Tomcat 等 web 服务停止后,验证 zabbix agent 能否自动启动或重启。

root@Mysql-slave:~# /apps/nginx/sbin/nginx -s stop

在 zabbix server主机上测试:

root@Zabbix-server:~# /apps/zabbix_server/bin/zabbix_get -s 172.20.32.105 -p10050 -k "net.tcp.listen[80]"
0
root@Zabbix-server:~# /apps/zabbix_server/bin/zabbix_get -s 172.20.32.105 -p10050 -k "net.tcp.listen[80]"
0
root@Zabbix-server:~# /apps/zabbix_server/bin/zabbix_get -s 172.20.32.105 -p10050 -k "net.tcp.listen[80]"
1
root@Zabbix-server:~# /apps/zabbix_server/bin/zabbix_get -s 172.20.32.105 -p10050 -k "net.tcp.listen[80]"
1
#可以看到当nginx停止之后获取到的数值为0 ,过了一段时间之后变成了1 成功自己启动nginx服务

查看 zabbix dashboard

在这里插入图片描述

查看邮件通知

在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值