Linux--Zabbix分布式监控--更新7.0版本,添加企业微信告警

Zabbix企业级分布式监控

一、zabbix

Zabbix是一个基于Web界面的提供分布式系统监控,以及网络监控功能的企业级开源解决方案。

Zabbix 是一个高度集成的网络监控套件,通过一个软件包即可提供如下特性

* 数据收集 (主动/被动)

1) 可用性及性能检测;

2) 支持 SNMP(trapping 及 polling)、IPMI、JMX 监控;

3) 自定义检测;

4) 自定义间隔收集收据;

5) server/proxy/agents。

* 灵活的阈值定义

允许灵活地自定义问题阀值,在 Zabbix 中称为触发器(trigger), 存储在后端数据库

中。

 *高级告警配置

1) 可以自定义告警升级(escalation)、接收者及告警方式;

2) 告警信息可以配置并允许使用宏(macro)变量;

3) 通过远程命令实行自动化动作(action)。

* 实时绘图

通过内置的绘图方法实现监控数据实时绘图。

 *扩展的图形化显示

1) 允许自定义创建多监控项视图;

2) 生成网络拓扑(network maps);

3) 自定义的面板(screen)和 slide shows,并允许在 dashboard 页面显示;

4) 生成监控报告。

* 历史数据存储

1) 数据存储在数据库中;

2) 历史数据可配置;

3) 内置数据清理机制。

* 配置简单

1) 被监控主机通过监控设备方式添加;

2) 一次配置,终生监控(译者注:除非调整或删除);

3) 监控设备允许使用模板来添加监控。

 *模板使用

1) 模板中可以添加组监控;

2) 模板允许继承。

 *网络自动发现

1) 自动发现网络设备;

2) Agent 自动注册;

3) 自动发现文件系统、网卡设备、SNMP OID 等。

* 快速的 Web 接口

1) Web 前端采用 PHP 编写;

2) 访问无障碍.

* Zabbix API

Zabbix API 提供程序级别的访问接口,第三方程序可以很快接入。

* 权限系统

1) 安全的权限认证;

2) 用户可以限制允许维护的列表。

 *全特性、Agent 易扩展

1) 在监控目标上部署;

2) 支持 Linux 及 Windows。

 *二进制守护进程

1) C 开发,高性能,低内存消耗;

2) 易移植。

* 具备应对复杂环境情况

通过 Zabbix Proxy 可以非常容易的创建远程监控。

1. Zabbix Server

zabbix_server 是 Zabbix 服务端守护进程。zabbix_agentd、zabbix_proxy 的数据最终

都是提交到 Server。

当然并不是所有数据都主动提交给 zabbix_server,也有的是 Server 主动去取数据。

2. Zabbix Agent

zabbix_agentd 是客户端守护进程,此进程主要用于收集客户端数据,例如 CPU 负载、

内存、硬盘使用情况等。

3. Zabbix Proxy

zabbix_proxy 是 Zabbix 代理守护进程,功能类似 Server。不同的是,zabbix_proxy

只是一个中转站,它需要把收集到的数据提交/被提交到 Server。

4. Zabbix 整体架构

下图是Zabbix整体架构的示意图。

Zabbix官网: https://www.zabbix.com

zabbix 主要由2部分构成 zabbix server和 zabbix agent

zabbix proxy是用来管理其他的agent,作为代理

zabbix监控范畴:

   硬件监控 :Zabbix IPMI Interface

   系统监控 :Zabbix Agent Interface

   Java 监控:ZabbixJMX Interface

   网络设备监抟:Zabbix SNMP Interface

   应用服务监控:Zabbix Agent UserParameter

   MySQL 数据库监控:percona-monitoring-pldlgins

   URL监控:Zabbix Web监控

下面进行zabbix安装配置

192.168.10.2 server端

192.168.10.3 agent端

二、安装部署Zabbix 5.0(新增7.0LTS版)

安装7.0版本访问官网:

https://www.zabbix.com/cn/download?zabb ix=7.0&os_distribution=rocky_linux&os_version=8&components=server_frontend_agent&db=mysql&ws=nginx

以下是安装server端

复制代码
rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/8/x86_64/zabbix-release-latest-7.0.el8.noarch.rpm
dnf module switch-to php:8.2
dnf install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent

初始化数据库

# mysql -uroot -p
password
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix@'%' identified by '1234.com';
mysql> grant all privileges on zabbix.* to zabbix@'%';
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;

 

#导入初始架构和数据

zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix

 

#编辑配置文件/etc/nginx/conf.d/zabbix.conf

listen 8080;

#编辑server端配置文件 /etc/zabbix/zabbix_server.conf

DBHost=192.168.10.2

DBPassword=1234.com

systemctl restart zabbix-server zabbix-agent nginx php-fpm
# systemctl enable zabbix-server zabbix-agent nginx php-fpm

 

复制代码

 

以下是安装agent端

rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/8/x86_64/zabbix-release-latest-7.0.el8.noarch.rpm
dnf install zabbix-agent2
# 可选插件 # dnf
install zabbix-agent2-plugin-mongodb zabbix-agent2-plugin-mssql zabbix-agent2-plugin-postgresql
systemctl restart zabbix-agent2
systemctl enable zabbix-agent2

 

以下5.0版本部署部分,可忽略

1. 部署Zabbix服务端

不需要提前构建LAMP或LNMP

1.1 服务器配置

服务器

配置

ip地址

主机名

主要软件

zabbix-server

内存至少2G,推荐4G

192.168.10.2

node1

zabbix-server-mysql、zabbix-agent

1.2 服务器环境

systemctl disable --now firewalld

setenforce 0

setenforce: SELinux is disabled

1.3 获取zabbix的下载源

rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm

1.4 更换zabbix.repo为在线源(这里使用阿里源)

cd /etc/yum.repos.d/

sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' zabbix.repo

yum clean all && yum makecache

1.5 下载安装zabbix以及组件

yum install -y zabbix-server-mysql zabbix-agent

vim Ali.repo

 

[Ali]

name=CentOS-$releasever - Base

baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/

gpgcheck=1

gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

yum update

wget -O ali.repo http://mirrors.aliyun.com/repo/Centos-7.repo

yum makecache

yum install centos-release-scl

安装SCL(Software Collections),便于后续安装高版本的 php,默认 yum 安装的 php 版本为 5.4,版本过低,zabbix 5.0 版本对 php 版本最低要 7.2.0 版本。SCL 可以使得在同一台机器上使用多个版本的软件,而又不会影响整个系统的依赖环境。软件包会安装在 /opt/rh 目录下。

1.6 修改zabbix-front前端源,安装zabbix前端环境到scl环境下

vim zabbix.repo

[zabbix-frontend]

##11行,开启安装源

enabled=1

完成后要确保yum源是干净的,只能有以下源

ali.repo CentOS-SCLo-scl.repo CentOS-SCLo-scl-rh.repo zabbix.repo

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

cd /opt/rh

ls

rh-php72

1.7 安装zabbix所需的数据库并启动

yum install -y mariadb-server mariadb

systemctl enable --now mariadb

1.8 初始化数据库并设置密码

mysql_secure_installation

Enter current password for root (enter for none):

#使用root的当前密码登录,回车

Set root password? [Y/n] y

#是否设置root密码,y

New password:

#设置密码

Re-enter new password:

#再次输入密码

Remove anonymous users? [Y/n] y

#移除匿名用户,y

Disallow root login remotely? [Y/n] y也可以n

#禁止root远程登录,y

Remove test database and access to it? [Y/n] y

#移除test数据库,y

Reload privilege tables now? [Y/n] y

#重新加载权限表,y

1.9 添加数据库用户,以及zabbix所需的数据库权限

mysql -u root -p

创建zabbix数据库,并使用utf8字符编码

zabbix用户在任何主机拥有zabbix库中的全部权限,密码为zabbix

刷新权限

create database zabbix character set utf8 collate utf8_bin;

grant all on zabbix.* to 'zabbix'@'%' identified by 'zabbix';

flush privileges;

show databases;

use zabbix;

show tables;

1.10 导入数据库信息

rpm -ql zabbix-server-mysql

zcat /usr/share/doc/zabbix-server-mysql-5.0.19/create.sql.gz | mysql -uroot -pabc123 zabbix

mysql -u root -p

show databases;

use zabbix;

show tables;

zcat命令用于不真正解压缩文件,就能显示压缩包中文件的内容的场合。zcat是一个命令行实用程序,用于查看压缩文件的内容,而无需对其进行解压缩。 它将压缩文件扩展为标准输出,使您可以查看其内容。 另外,zcat与运行gunzip -c命令完全相同。

1.11 修改zabbix_server配置文件

vim /etc/zabbix/zabbix_server.conf

124行,取消注释,指定zabbix数据库的密码

DBPassword=zabbix

1.12 修改zabbix的php配置文件

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

25行,取消注释,修改时区

php_value[date.timezone] = Asia/Shanghai

1.13 启动zabbix相关服务

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

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

浏览器访问

http://192.168.10.2/zabbix/

点击下一步,设置数据库的密码 zabbix

登录成功

设置文件界面:点击左边菜单栏的【User settings】,【Language】选择 Chinese(zh_CN),再点击 Update 更新。

1.15 解决zabbix_server(node1)的Web乱码问题

主机-图形查看,发现很多乱码

yum install -y wqy-microhei-fonts

\cp -f /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/fonts/dejavu/DejaVuSans.ttf

回到Web页面,检查乱码是否仍然存在

已无乱码

2. 部署zabbix客户端

2.1 服务器配置

服务器

ip地址

主机名

主要软件

zabbix-agent

192.168.10.3

node2

zabbix-agent2

zabbix 5.0 版本采用 golang 语言开发的新版本客户端 agent2 。

     

zabbix 服务端 zabbix_server 默认使用 10051 端口,客户端 zabbix_agent2 默认使用 10050 端口。

     

2.2 服务器环境

systemctl disable --now firewalld

setenforce 0

setenforce: SELinux is disabled

2.3 服务端和客户端配置时间同步

服务端node1

yum install -y ntpdate

ntpdate -u ntp.aliyun.com

客户端

copy

yum install -y ntpdate

ntpdate -u ntp.aliyun.com

2.4 客户端配置时区,与服务器保持一致

mv /etc/localtime{,.bak}

ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

2.5 设置zabbix的下载源,安装zabbix-agent2

rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm

sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo

yum install -y zabbix-agent2

2.6 修改agent2配置文件

vim /etc/zabbix/zabbix_agent2.conf

80行,指定zabbix服务端的IP地址

Server=192.168.10.2

120行,指定zabbix服务端的IP地址

ServerActive=192.168.10.2

131行,指定当前zabbix客户端的主机名

Hostname=node2

2.7 启动zabbix-agent2

systemctl enable --now zabbix-agent2.service

netstat -natp | grep zabbix

2.8 在服务端验证zabbix-agent2的连通性

yum install -y zabbix-get

安装zabbix主动获取数据的命令

zabbix_get -s '192.168.10.3' -p 10050 -k 'agent.ping'

返回1即连通成功,返回0则连通失败

1

zabbix_get -s '192.168.10.3' -p 10050 -k 'system.hostname'

显示客户端的主机名

node2

2.9 在web页面中添加agent主机

点击左边菜单栏【配置】中的【主机】,点击【创建主机】

【主机名称】设置成node2

【可见的名称】设置成node2-192.168.10.3

【群组】选择 Linux servers

【Interfaces】的【IP地址】设置成 192.168.10.3

再给主机添加监控的模板,模板中有很多内置的监控项和触发器

监控项用来收集主机数据,触发器用来出发问题告警,后续可以触发动作执行邮件或者脚本告警

 

【Link new tamplates】搜索 Linux ,选择 Template OS Linux by Zabbix agent,点击 【添加】

三、自定义监控内容

1. 监控需求

案例:自定义监控客户端服务器登录的人数

需求:限制登录人数不超过3个,超过3个就发出报警信息

2. 在客户端创建自定义key

2.1 明确需要执行的linux命令

who

root pts/0 2022-01-19 08:40 (192.168.10.1)

who |wc -l

2.2 创建zabbix的监控项配置文件,用于自定义key

vim /etc/zabbix/zabbix_agent2.conf

268行,可以将自定义的监控项配置文件创建在zabbix_agent2.d目录中

Include=/etc/zabbix/zabbix_agent2.d/*.conf291行,自定义监控项的格式如下

# Format: UserParameter=<key>,<shell command>

cd /etc/zabbix/zabbix_agent2.d

vim user_login_limit.conf

UserParameter=user_login_limit,who | wc -l

systemctl restart zabbix-agent2.service

2.3 在服务端验证新建的监控项

zabbix_get -s '192.168.10.3' -p 10050 -k 'user_login_limit'

1

客户端增加登录终端

who

root pts/0 2022-01-19 08:40 (192.168.10.1)

root pts/1 2022-01-19 10:00 (192.168.10.1)

who |wc -l

2

服务端重新验证

zabbix_get -s '192.168.10.3' -p 10050 -k 'user_login_limit'

2

验证成功

3. 在web页面创建自定义监控项模板

  1. 创建模板

点击左边菜单栏【配置】中的【模板】,点击【创建模板】

 

 

【模板名称】设置成 Template User Login

【可见的名称】设置成 Template User Login

【群组】选择 Templates

【描述】可自定义

点击【添加】

 

模板可以链接其他模板,可以不链接(不重新截图了)

  1. 创建应用集(用于管理监控项的)  (7.0版本默认没有应用集了,模板中就是直接配置监控项和触发器即可)

点击上方菜单栏【应用集】,点击【创建应用集】

【名称】设置成User Login

点击【添加】

3.3 创建监控项

进入模板,点击【监控项】,点击【创建监控项】

 

 

【名称】设置成 Number of login users

【键值】设置成user_login_limit键值必须要与自定义的监控项配置文件中设置的保持一致

【更新间隔】设置成 10s

【历史数据保留时长】Storage period 30d(保留时间可自定义设置)

点击 【添加】

 

3.4 创建触发器(当监控项的数据超过设定阈值后,触发报警)

点击上方菜单栏【触发器】,点击【创建触发器】

 

 

【名称】设置成Number of login users is greater than 3

【严重性】设置成 一般严重

【表达式】点击添加,【监控项】点击选择 Number of login users,【功能】选择 last(),【结果】选择 > 3,点击 【插入】

点击 【添加】

 

 

 

 

 

3.5 创建图形

点击上方菜单栏【图形】,点击【创建图形】

 

 

【名称】设置成 Number of login users

【宽】、【高】可直接采用默认值

【监控项】点击添加勾选相关监控项 Number of login users,【功能】选择最大,其它可保持默认值

点击 【添加】

 

3.6 将主机与模板关联起来(一个主机可以关联多个模板)

点击左边菜单栏【配置】中的【主机】,点击你要关联的主机

 

点击上方菜单栏【模板】,【Link new tamplates】搜索 login,选择 Template User Login,点击【更新】

 

3.7 查看监控图形

此时点击【监测】中的【主机】,点击你关联主机的【图形】,即可查看到相关的监控项指标

 


4. 邮件报警

4.1 设置邮件报警

点击左边菜单栏【管理】中的【报警媒介类型】,点击【创建媒体类型】

【名称】设置成 qq_Email

【SMTP服务器】设置成 smtp.qq.com

【SMTP服务器端口】设置成 25

【SMTP HELO】设置成 qq.com

【SMTP电邮】设置成 自己的邮箱地址,例如 xxxx@qq.com

【认证】选择 用户名和密码

【用户名称】设置成 自己的邮箱地址,例如 xxxx@qq.com

【密码】可登录QQ邮箱页面,点击【设置】-->【账户】中的【生成授权码】,通过短信获取授权码

【描述】可自定义

点击上方菜单栏【Message templates】,点击【添加】,【Message type】选择 问题,点击【添加】

点击【添加】,进行测试


收到邮件,测试成功。

点击左边菜单栏【User settings】-->【报警媒介】,点击【添加】

【类型】选择 qq_Email

【收件人】设置成 xxxx@qq.com

【当启用时】设置成 1-7,00:00-24:00

点击 【添加】

再点击 【更新】

 


点击左边菜单栏【配置】中的【动作】,选择相对应的动作名称,点击【启用】

4.2 测试邮件报警

增加客户端的终端连接数至4个,确认是否能收到报警邮件。

who

root pts/0 2022-01-19 08:40 (192.168.10.1)

root pts/1 2022-01-19 10:00 (192.168.10.1)

root pts/2 2022-01-19 11:49 (192.168.10.1)

root pts/3 2022-01-19 11:49 (192.168.10.1)

who |wc -l


报警信息

报警邮件

 

继续配置企业微信告警

效果如下

 

 1、写上python脚本,需要安装python环境,个人用户下载企业微信,创建团队,随后添加机器人,将其webhook地址保存下来

要运行脚本需要python安装requests模块,这个软件包在epel源,所以需要先安装epel-release
yum -y install epel-release.noarch
yum -y install python3
pip3 install requests

在zabbix默认的脚本路径写上自定义脚本wechat.py

vim /usr/lib/zabbix/alertscripts/wechat.py

复制代码
#!/usr/bin/python3
# -*- coding: utf-8 -*-

import requests
import json
import sys

# 机器人的webhook地址
API_URL = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=f1cd4877-17f3-438b-ab1e-5a9c09f54e76"

# HTTP请求头部信息
HEADERS = {
    'Content-Type': 'application/json;charset=utf-8'
}

# 定义发送消息的函数
def send_text(text):
    # 构建消息体
    texts = {
        "msgtype": "text",
        "text": {
            "content": text
        }
    }
    # 发送HTTP POST请求
    response = requests.post(API_URL, json=texts, headers=HEADERS)
    # 打印响应内容(一般用于调试)
    print(response.content)

# 如果该文件被直接执行,则从命令行接收一个参数并将其发送到机器人的webhook地址
if __name__ == '__main__':
    if len(sys.argv) != 2:
        print("Usage: python send_text.py <text>")
        sys.exit(1)
    text = sys.argv[1]  # 获取命令行参数
    send_text(text)  # 发送消息
复制代码

 

cd /usr/lib/zabbix/alertscripts

chmod +x wechat.py

执行脚本进行测试
./wechat.py 123test
{"errcode":0,"errmsg":"ok"}

 

2,创建媒介(指定媒介类型为脚本)

 分别写上类型,脚本名称,和脚本参数 {ALERT.MESSAGE}

 需要给脚本媒介,设置消息模板,模板会脚本通过参数进行发送

复制代码
告警模板消息:
主题
故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!

消息
告警主机:{HOSTNAME1}
告警地址:{HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}


恢复告警的模板信息:
主题
恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!

消息
恢复主机:{HOSTNAME1}
恢复地址:{HOST.IP}
恢复时间:{EVENT.DATE} {EVENT.TIME}
恢复等级:{TRIGGER.SEVERITY}
恢复信息: {TRIGGER.NAME}
恢复项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
复制代码

 

 

 当Zabbix监控系统检测到故障或异常时,就会调用企业微信机器人发送告警通知到指定的微信群或个人微信号中。

 

顺带解释下自动发现和自动注册

zabbix自动发现

zabbix的服务端通过扫描地址段的方式自动发现存活的服务器,发现之后自动进行动作处理,添加主机,关联模板,关联报警等操作。

缺点是扫描速度慢,zabbix的server端压力较大;所有扫描到的客户端只能使用同一的模板,比如Web和数据库使用的模板是不同的,还需要进行手动配置

 

zabbix自动注册
zabbix自动注册与自动发现的角色相反,是从客户端主动将自身信息上传给服务端用来减少服务端的压力。还可以自定义关联各种模板

所以配置一下自动注册,找到告警  -->  动作 -->  自动注册

 

 

 

 

zabbix+grafana图形展示

下载grafana


cd /data/grafana
wget https://mirrors.tuna.tsinghua.edu.cn/grafana/yum/rpm/Packages/grafana-8.2.4-1.x86_64.rpm --no-check-certificate

yum安装解决依赖问题,提前配置好网络源。


yum localinstall grafana-8.2.4-1.x86_64.rpm

systemctl start grafana-server.service

 

访问web
http://192.168.10.60:3000
admin
admin
登陆后需要强制修改密码
1234.com
即可登陆

安装zabbix插件
grafana-cli plugins install alexanderzobnin-zabbix-app

Downloaded alexanderzobnin-zabbix-app v4.2.4 zip successfully

如果提示
Error: ✗ failed to download plugin archive: Get "https://storage.googleapis.com/plugins-community/alexanderzobnin-zabbix-app/release/4.2.6/alexanderzobnin-zabbix-app-4.2.6.zip": read tcp 192.168.110.137:54788->142.251.42.251:443: read: connection reset by pee
下载不了就去github找包

 

登陆网页,开启zabbix插件,添加数据源--zabbix,添加dashboard、panel、add query 保存即可展示zabbix数据
可以到grafana官网下载各种dashboard模板导入到本地grafana及进行展示

 

 

 

 导入官方提供的仪表板

 

 

 

 

 

 

 Zabbix 从入门到入土搞定!!!

 

posted @   wang-a  阅读(563)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示