热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Zabbix(15)​ZabbixZabbix故障自治愈

Zabbix-(15)-​Zabbix-Z

续:

推荐阅读:

Zabbix-(1)-监控服务与Zabbix介绍
Zabbix-(2)-Zabbix安装-yum/apt方式安装
Zabbix-(3)-Zabbi-编译方式安装和汉化
Zabbix-(4)-Zabbix监控入门基础
Zabbix-(5)-Zabbix 被动监控方式
Zabbix-(6)-Proxy主动被动部署
Zabbix-(7)-Zabbix-TCP状态监控

Zabbix-(8)-Zabbix-Memcached状态监控

Zabbix-(9)-Zabbix-Redis状态监控

Zabbix-(10)-Zabbix-Nginx状态监控


Zabbix-(11)-Zabbix-SNMP监控和WEB监控


Zabbix-(12)-Zabbix-MySQL监控Ⅰ


Zabbix-(13)-Zabbix-MySQL监控Ⅱ

Zabbix-(14)-Zabbix-Grafana图形展示

环境:

一. 故障自治愈介绍

故障自治愈功能实际上是多种功能的集合,是 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=,
#       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

查看邮件通知





推荐阅读:

Zabbix-(1)-监控服务与Zabbix介绍
Zabbix-(2)-Zabbix安装-yum/apt方式安装
Zabbix-(3)-Zabbi-编译方式安装和汉化
Zabbix-(4)-Zabbix监控入门基础
Zabbix-(5)-Zabbix 被动监控方式
Zabbix-(6)-Proxy主动被动部署
Zabbix-(7)-Zabbix-TCP状态监控

Zabbix-(8)-Zabbix-Memcached状态监控

Zabbix-(9)-Zabbix-Redis状态监控

Zabbix-(10)-Zabbix-Nginx状态监控


Zabbix-(11)-Zabbix-SNMP监控和WEB监控


Zabbix-(12)-Zabbix-MySQL监控Ⅰ


Zabbix-(13)-Zabbix-MySQL监控Ⅱ

Zabbix-(14)-Zabbix-Grafana图形展示



推荐阅读
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了将mysql从5.6.15升级到5.7.15的详细步骤,包括关闭访问、备份旧库、备份权限、配置文件备份、关闭旧数据库、安装二进制、替换配置文件以及启动新数据库等操作。 ... [详细]
  • 面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
    最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ... [详细]
  • oracle安装时找不到启动,Oracle没有开机自启是怎么回事?这一步骤很重要
    重启Oracle数据库重启Oracle数据库包括启动Oracle数据库服务进程和启动Oracle数据库两步,大家继续往下看。按照《【Oracle】什么?作为DBA&# ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 本文介绍了MVP架构模式及其在国庆技术博客中的应用。MVP架构模式是一种演变自MVC架构的新模式,其中View和Model之间的通信通过Presenter进行。相比MVC架构,MVP架构将交互逻辑放在Presenter内部,而View直接从Model中读取数据而不是通过Controller。本文还探讨了MVP架构在国庆技术博客中的具体应用。 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • Redis API
    安装启动最简启动命令行输入验证动态参数启动配置文件启动常用配置通用命令keysbdsize计算key的总数exists判断是否存在delkeyvalue删除指定的keyvalue成 ... [详细]
  • Redis的默认端口、数据库使用和多端口配置
    本文介绍了Redis的默认端口、数据库使用和多端口配置的方法。通过选择不同的数据库和使用flushdb命令可以实现对不同数据库的访问和清除数据。同时,本文还介绍了在同一台机器上启用多个Redis实例的方法,并讨论了配置认证密码的步骤和注意事项。 ... [详细]
  • 负载均衡_Nginx反向代理动静分离负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分
    nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解 ... [详细]
  • 第四讲ApacheLAMP服务器基本配置Apache的编译安装从Apache的官方网站下载源码包:http:httpd.apache.orgdownload.cgi今 ... [详细]
  • 监控目标明白监控的重要性以及使用监控要实现的业务目标通常包括以下三点:对目标系统进行实时监控监控可以实时反馈目标系统的当前状态目标系统硬件、软件、业务是否正常、目 ... [详细]
  • python中安装并使用redis相关的知识
    本文介绍了在python中安装并使用redis的相关知识,包括redis的数据缓存系统和支持的数据类型,以及在pycharm中安装redis模块和常用的字符串操作。 ... [详细]
  • Redis通用指令及数据库操作详解
    本文详细介绍了Redis中的通用指令,包括key的基本操作、扩展操作和查询模式,以及数据库的基本操作和相关操作。同时还解决了key重复问题,并提供了解决方案。文章内容参考了黑马Redis教程。 ... [详细]
author-avatar
欣荣_75229
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有