Zabbix监控告警系统入门,zabbix邮件报警、分级报警以及nginx的故障自愈

知梧 1291 2023-06-15

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

本文关于Zabbix监控告警系统入门,zabbix邮件报警、分级报警以及nginx的故障自愈。

第一章 Zabbix 入门

1.1 Zabbix 概述

Zabbix 是一款能够监控各种网络参数以及服务器健康性和完整性的软件。Zabbix 使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件的告警,这样可以快速反馈服务器的问题。基于已存储的数据,Zabbix 提供了出色的报告和数据可视化功能。Zabbix 支持轮询和被动捕获。基于 Web 的前端页面确保您的网络状态和服务器健康状况可以从任何地方进行评估。在经过适当的配置后,Zabbix 可以在监控 IT 基础设施方面发挥重要作用。无论是对于拥有少量服务器的小型组织,还是拥有大量服务器的大型公司而言,同样适用。

1.2 Zabbix 基础架构

image-20220416204923044

核心组件主要是Agent 和Server,其中Agent 主要负责采集数据并通过主动或者被动的方式采集数据发送到Server/Proxy,除此之外,为了扩展监控项,Agent 还支持执行自定义脚本。Server 主要负责接收Agent 发送的监控信息,并进行汇总存储,触发告警等。ZabbixServer 将收集的监控数据存储到Zabbix Database 中。Zabbix Database 支持常用的关系型数据库,如果MySQL、PostgreSQL、Oracle 等,默认是MySQL,并提供Zabbix Web页面(PHP 编写)数据查询。

1.3 Zabbix 和Prometheus

image-20220416204841331

综合比对:

如上面的表格,从开发语言上看,为了应对高并发和快速迭代的需求,监控系统的开发语言已经慢慢从C语言转移到Go。不得不说,Go凭借简洁的语法和优雅的并发,在Java占据业务开发,C占领底层开发的情况下,准确定位中间件开发需求,在当前开源中间件产品中被广泛应用。从系统成熟度上看,Zabbix是老牌的监控系统:Zabbix是在1998年就出现的,系统功能比较稳定,成熟度较高。而Prometheus是最近几年才诞生的,虽然功能还在不断迭代更新,但站在巨人的肩膀之上,在架构设计上借鉴了很多老牌监控系统的经验;从数据存储方面来看,Zabbix采用关系数据库保存,这极大限制了Zabbix采集的性能,而Prometheus自研一套高性能的时序数据库,在V3版本可以达到每秒千万级别的数据存储,通过对接第三方时序数据库扩展历史数据的存储;从配置复杂度上看,Prometheus只有一个核心server组件,一条命令便可以启动,相比而言,其他系统配置相对麻烦;从社区活跃度上看,目前Zabbix比较活跃,但基本都是国内的公司参与,Prometheus在这方面占据绝对优势,社区活跃度虽然不如,但是受到CNCF的支持,后期的发展值得期待;从容器支持角度看,由于Zabbix出现得比较早,当时容器还没有诞生,自然对容器的支持也比较差。而Prometheus的动态发现机制,不仅可以支持swarm原生集群,还支持Kubernetes容器集群的监控,是目前容器监控最好解决方案。

结论:

如果监控的是物理机,用 Zabbix,Zabbix在传统监控系统中,尤其是在服务器相关监控方面,占据绝对优势。甚至环境变动不会很频繁的情况下,Zabbix 也会比 Prometheus 好使;但如果是云环境的话,除非是 Zabbix 玩的非常溜,可以做各种定制,否则还是 Prometheus 吧,毕竟人家就是干这个的。Prometheus开始成为主导及容器监控方面的标配,并且在未来可见的时间内被广泛应用。如果是刚刚要上监控系统的话,不用犹豫了,Prometheus 准没错

第二章 Zabbix部署

2.1 集群规划

进程hadoop102节点hadoop103节点hadoop104节点
zabbix-agent
zabbix-server

MySQL

zabbix-web

2.2 准备工作

2.2.1 关闭集群

如果集群开启,先关闭集群。因为安装Zabbix前,需要重启虚拟机。

2.2.2 关闭 3 台节点防火墙

分别在 102 、 103 和 104 上执行

sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service

2.2.3 关闭 3 台节点上的 SELinux

1)修改配置文件/etc/selinux/config

sudo vim /etc/selinux/config

修改如下内容

# This file controls the state of SELinux on the system.# SELINUX= can take one of these three values:#     enforcing - SELinux security policy is enforced.#     permissive - SELinux prints warnings instead of enforcing.#     disabled - No SELinux policy is loaded.SELINUX=disabled# SELINUXTYPE= can take one of three two values:#     targeted - Targeted processes are protected,#     minimum - Modification of targeted policy. Only selected processes are protected. #     mls - Multi Level Security protection.SELINUXTYPE=targeted

2)重启服务器

[atguigu@hadoop102 ~]$ sudo reboot

2.3 配置 3 台节点 的 Zabbix yum 源

2.3.1 安装 yum 仓库

  1. 安装 zabbix 的 软件 仓库 配置包

这个包包含了 yum(软件包管理器)的配置文件。

[wkf@hadoop102 ~]$ sudo rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm

[wkf@hadoop103 ~]$ sudo rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm

[wkf@hadoop104 ~]$ sudo rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
  1. 安装 Software Collections 仓库

[wkf@hadoop102 ~]$ sudo yum install -y centos-release-scl

2.3.2 修改 zabbix 仓库配置文件

hadoop102、hadoop103、hadoop104三台节点,依次执行如下步骤。

  1. 查看原始 zabbix. repo 文件

sudo cat /etc/yum.repos.d/zabbix.repo

查看内容如下

[wkf@hadoop102 ~]$ sudo cat /etc/yum.repos.d/zabbix.repo
[zabbix]
name=Zabbix Official Repository - $basearch
baseurl=http://repo.zabbix.com/zabbix/5.0/rhel/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591

[zabbix-frontend]
name=Zabbix Official Repository frontend - $basearch
baseurl=http://repo.zabbix.com/zabbix/5.0/rhel/7/$basearch/frontend
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591

[zabbix-debuginfo]
name=Zabbix Official Repository debuginfo - $basearch
baseurl=http://repo.zabbix.com/zabbix/5.0/rhel/7/$basearch/debuginfo/
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
gpgcheck=1

[zabbix-non-supported]
name=Zabbix Official Repository non-supported - $basearch
baseurl=http://repo.zabbix.com/non-supported/rhel/7/$basearch/
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
gpgcheck=1
  1. 执行以下命令完成全局替换 修改为阿里云镜像

[wkf@hadoop102 ~]$ sudo sed -i 's/http:\/\/repo.zabbix.com/https:\/\/mirrors.aliyun.com\/zabbix/g' /etc/yum.repos.d/zabbix.repo
  1. 查看修改之后的 zabbix .repo 文件

[wkf@hadoop102 ~]$ sudo cat /etc/yum.repos.d/zabbix.repo
[zabbix]
name=Zabbix Official Repository - $basearch
baseurl=https://mirrors.aliyun.com/zabbix/5.0/rhel/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591

[zabbix-frontend]
name=Zabbix Official Repository frontend - $basearch
baseurl=https://mirrors.aliyun.com/zabbix/5.0/rhel/7/$basearch/frontend
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591

[zabbix-debuginfo]
name=Zabbix Official Repository debuginfo - $basearch
baseurl=https://mirrors.aliyun.com/zabbix/5.0/rhel/7/$basearch/debuginfo/
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
gpgcheck=1

[zabbix-non-supported]
name=Zabbix Official Repository non-supported - $basearch
baseurl=https://mirrors.aliyun.com/non-supported/rhel/7/$basearch/
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
gpgcheck=1
  1. 打开 /etc/ repos .d zabbix.repo 文件, 启用 zabbix web 仓库

sudo vim /etc/yum.repos.d/zabbix.repo

image-20220416212633511

2.4 安装 Zabbix

在hadoop102、hadoop103、hadoop104三台节点分别执行以下安装命令

[wkf@hadoop102 ~]$ sudo yum install -y zabbix-server-mysql zabbix-agent zabbix-web-mysql-scl zabbix-apache-conf-scl

[wkf@hadoop103 ~]$ sudo yum install -y zabbix-agent

[wkf@hadoop104 ~]$ sudo yum install -y zabbix-agent

2.5 配置 Zabbix

2.5.1 创建 zabbix 数据库

mysql -uroot -p123456 -e"create database zabbix character set utf8 collate utf8_bin"

2.5.2 导入 Z abbix 建表语句

zcat /usr/share/doc/zabbix-server-mysql-5.0.22/create.sql.gz | mysql -uroot -p123456 zabbix

2.5.3 配置 Zabbix_ Server (hadoop102)

修改zabbix-server配置文件

sudo vim /etc/zabbix/zabbix_server.conf

DBHost=hadoop102
DBName=zabbix
DBUser=root
DBPassword= 123456

2.5.4 配置 Zabbix Agent (三台节点)

修改zabbix-agent配置文件

sudo vim /etc/zabbix/zabbix_agentd.conf

修改如下内容:

Server=hadoop102#ServerActive=127.0.0. 1#Hostname=Zabbix server

2.5.5 配置 Zabbix Web 时区(hadoop102)

修改/etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf文件

sudo vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf

修改如下内容:

php_value[date.timezone] = Asia/Shanghai

2.6 启动停止 Zabbix

2.6.1 启动 Zabbix

[wkf@hadoop102 ~]$ sudo systemctl start zabbix-server zabbix-agent httpd rh-php72-php-fpm

[wkf@hadoop102 ~]$  sudo systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm

[wkf@hadoop103 ~]$ sudo systemctl start zabbix-agent

[wkf@hadoop103 ~]$ sudo systemctl enable zabbix-agent

[wkf@hadoop104 ~]$ sudo systemctl start zabbix-agent

[wkf@hadoop104 ~]$ sudo systemctl enable zabbix-agent

2.6.2 停止 Zabbix

[wkf@hadoop102 ~]$ sudo systemctl stop zabbix-server zabbix-agent httpd rh-php72-php-fpm

[wkf@hadoop102 ~]$  sudo systemctl disable zabbix-server zabbix-agent httpd rh-php72-php-fpm

[wkf@hadoop103 ~]$ sudo systemctl stop zabbix-agent

[wkf@hadoop103 ~]$ sudo systemctl disable zabbix-agent

[wkf@hadoop104 ~]$ sudo systemctl stop zabbix-agent

[wkf@hadoop104 ~]$ sudo systemctl disable zabbix-agent

2.6.3 连接 Zabbix_ Web 数据库

  1. 浏览器访问 http://hadoop102/zabbix

image-20220417123016340

  1. 检查配置

image-20220417123121390

  1. 配置数据库

    image-20220417123229154

  2. 配置 zabbix server

image-20220417123303318

image-20220417123351255

2.6.4 登录 Zabbix

  1. 用户名: Admin 密码: zabbix

image-20220417123441821

  1. 点击 User Settings ,语言设成中文

    image-20220417123603828

image-20220417123658502

image-20220417123750291

注意:这里默认会对Zabbix Server进行监控,但是我们可以看到目前该主机是红色,不可用的状态,原因是主机的地址不能使用127.0.0.1需要后续我们单独配置。

第三章 Zabbix使用

3.1 Zabbix 术语

3.1.1 主机( Host )

一台你想监控的网络设备,用IP或域名表示。

3.1.2 监控项( Item )

你想要接收的主机的特定数据,一个度量数据。

3.1.3 触发器( Trigger )

一个被用于定义问题阈值和“评估”监控项接收到的数据的逻辑表达式。

3.1.4 动作( Action )

一个对事件做出反应的预定义的操作,比如邮件通知。

3.2 Zabbix 实战

这里我们以监控Hdfs集群为例,给大家进行演示,所以首先先执行start-dfs.sh,启动HDFS

image-20220417124841910

3.2.1 创建 Host

  1. 点击 配置/主机/创建主机

image-20220417125948248

  1. 配置主机( Host )

  2. 查看新增( Host )

image-20220417130044557

  1. 重复以上步骤,再创建 hadoop 103 、 hadoop 104 主机。

image-20220417130624432

3.2.2 创建 监控项( Items )

  1. 点击 监控项( Items )

image-20220417130801572

  1. 点击创建监控项( Create Item )

image-20220417130955521

  1. 配置监控项( Item )

image-20220417131446249

  1. 查看创建的监控项

  2. 查看监控项最新数据

image-20220417131922197

3.2.3 创建触发器( Trigger )

  1. 点击 配置/主机/触发器

image-20220417132059681

  1. 点击创建触发器

  2. 编辑触发器

image-20220417132417549

image-20220417132346020

image-20220417132528540

3.2.4 创建动作( Action )

  1. 点击 配置/动作/创建动作

image-20220417132643073

  1. 编辑动作( Action )

image-20220417132844673

image-20220417132802081

定义操作

image-20220417133119649

image-20220417133417459

3.2.5 申请邮箱

邮件报警,可以采用126、163、qq等邮箱。下面以qq邮箱为例。

点击邮箱设置/账户

开启 SMTP 服务

img

要发送短信认证

记住授权码

image-20220417134840157

3.2.6 创建报警媒介类型( Media type )

  1. 点击 管理/报警媒介类型/Email

image-20220417135012538

  1. 编辑 Email ,这里配置的 email 用于发送报警邮件。

image-20220417135546230

  1. 测试 Email

image-20220417135936554

3.2.7 给动作中配置的 用户 配置 Email

image-20220417140144673

image-20220417140235139

image-20220417142259892

3.2.8 测试

  1. 关闭集群中的 HDFS ,会有如下效果

  2. 查看仪表盘故障信息

image-20220417140905501

  1. 查看邮件,接收故障信息

image-20220417142709972

3.3 创建模板

模板是可以方便地应用于多个主机的一组实体。 实体可以是监控项、触发器、图形、应用、web场景等。由于生产上的许多主机是相同或类似的,所以,为一个主机创建的一组实体(项目,触发器,图形,...)可能对其它主机也适用。当然,你可以将它们复制到每个新的主机上,但需要费很大功夫。相反,使用模板,可以将它们复制到一个模板,然后根据需要将模板应用于尽可能多的主机。因此,使用模板是减少工作量并简化Zabbix配置的好方法。

另外,使用模板还有一个好处是当所有主机都需要更改时,只需要在模板上更改某些内容将会将更改应用到所有链接的主机。

3.3.1 点击配置/模板/创建模板

image-20220417143039412

3.3.2 配置模板名称/群组

image-20220417143148328

3.3.3 配置监控项

image-20220417143407136

image-20220417143814176

3.3.4 配置触发器

image-20220417144026495

image-20220417144057509

3.3.5 配置动作

image-20220417144214685

添加模板触发条件

image-20220417144258150

image-20220417144414084

3.3.6 为 hadoop 103 应用模板

image-20220417144727360

image-20220417144847999

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.confUserParameter=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


上一篇:好用的国产告警管理软件推荐
下一篇:如何发送微信告警通知?微信告警如何配置?用Cloud Alert快速实现微信告警
相关文章

 发表评论

暂时没有评论,来抢沙发吧~