logo头像

老陕小张学技术接地气

zabbix入门

一、什么是监控,为什么需要监控

1.1 监控概述

官方说明:^来自维基百科^监控是指对行为、活动或其他变动中信息的一种持续性关注,通常是为了对人达成影响、管理、指导或保护的目的。

    • 监控:
    • 监视主机,架构状态
    • 控制,事后追责
    • 目标: 早发现早处理,(故障,性能,架构)网站扩容(用数据说话)
  • eg:随着用户的增多,服务随时可能会被oomm(Out of Memmory)

1.2 监控课程大纲

  • 监控与命令

  • 面试题: 你们公司监控了什么内容

  • 监控通用架构

  • 监控生产最佳实战

  • 监控设备

  • 自定义监控

  • 自定义监控进阶与故障案例

  • 监控与告警 邮件 微信 短信 电话 钉钉 调取api接口

    • 监控之Zabbix-Agent2
    • agent:通用
    • snmp:网络设备,带宽,流量
    • jmx(java gateway tomcat)
    • iprmi
    • 自动化监控
    • 自动发现
    • 自动注册
    • 主动与被动
    • 分布式监控proxy:多个机房,多个地区监控
    • 监控终极挑战

    • 1ld 低级自动发现: 自动获取、添加监控项,触发器,图形 MySQL多实例,tomcat多实例

    • Zabbix内置:自动发现网卡,磁盘分区,硬盘,cpu

    • 手动创建11d:(端口)

    • 自动获取对应服务的端口,按照指定格式

    • 显示zabbix客户端,创建自动发现key

    • 创建自定义监控项

    • web页面操作,添加监控项原型

    • web页面操作,添加触发器原型

    • web页面操作,添加图形原型

    • 启用自动发现规则

  • zabbix api

    全网监控项目

    • Zabbix与提升

    • grafana

  • 补充

二、Linux的那些独孤九剑级别的命令

项目 对应坚持命令
网站/业务/api curl/wget
服务 systemctl/service/chkconfig(c6)
进程 ps/pstree/pgrep/pidstat/top/htop
CPU top/htop/vmstat/mpstat/lscpu/cpuinfo/w/uptime/sar
内存 top/free/ps/iotop(swap)/vmstat/mpstat/sar/hcache(buffer+cache)
磁盘 iotop/iostat/sar #硬盘测试命令dd,fio
网络 iftop(整体宽带使用情况)/nethogs(精确到进程)/nstat/ifstat/mtr/sar
硬件 Megacli(raid)/ipmitool(温度,cpu风扇转速)/lm_sensors(温度)

三、企业面试题:你们们公司监控如何做的

3.1 初级回答

cpu,内存,磁盘,网卡,进程,服务

3.2 必备回答

回答运维面试相关问题,尽量避免一问一答

分层次,框架,避免问什么回答什么

角度01:单台机器

  1. 硬件信息: 磁盘,raid状态,温度,风扇转速,机房温度,湿度
  2. 系统信息:cpu,内存(内存,swap,buffer/cache),磁盘(io,使用率,inode),负载,网络(inout),
  3. 服务信息:各种服务状态,进程,端口,状态,特定的信息(不同服务)
  4. 业务(应用/api)信息:应用,程序代码是否有问题,(需要我们与开发沟通,书写一个页面)eg:lnmp的时候的 php与mysql测试页面

网站集群监控(用户访问流程)

  • DNS解析:ping/dig/nslookup/host
  • DNS解析域CDN是否ok 本质:通过全局访问测试工具(模仿用户在全国(全球)各地访问我们的网站)
  • 任性不差钱: 全国各地(核心城市),1台服务器,在服务器访问你们的源站/cdn/dns,(对应的服务:smokeping)
  • 免费: http://17ce.com 调试工具:http://cesule.tingyun.com/cesule/home
  • 商业版:听云,监控宝(告警)
  • TCP三次握手-网站负载均衡监控 ss -ant
  • HTTP请求豹纹-监控web日志查看(状态码)补充:加上HTTPS监控过期
  • 请求经过网站架构
  • 负载均衡Iginx)
  • web服务器(php,tomcat..)
  • 缓存
  • 数据库存储
  • HTTP响应豹纹-监控web日志查看(状态码)
  • TCP四次挥手-网站负载均衡监控 ss-ant
  • 断开连接

角度03:其他

  • 错误日志监控,error10g,catalina.out
  • 网站性能监控:apm监控:skywalking
  • 舆情监控

四、监控的脚本时代-过去时

#脚本取出内存使用率
cat /server/scripts/check_mem.sh
#!/bin/bash
MEM=`free -m |awk 'NR==2{print $NF}'`
if [$MEN -le 100];then
	echo "当前的内存还剩余 $MEM" |mail -s '内存不足了!'  skillixx.126.com
fi

五、监控的现代时

阶段
过去 Nagios(难)+Cacti
目前 Zabbix+Grafana,OpenFalcon,Prometheus
未来 Zabbix7.0/8.0 lts?,something new

六、Zabbix监控架构

6.1 生命周期

LTS

zabbix生命争取及版本选择

zabbix_releases

life_cycle_of_zabbix_lts_release

6.2 Zabbix监控架构

  • Zabbix是一个CS(服务端/客户端)架构的服务 0
  • zabbix监控架构
  • Zabbix-Agent获取数据–发送给–>Zabbix-Server服务端-.数据会被存放->数据库<– Zabbix Web 页面展示数据
  • 采集数据—-》数据收集,数据分析,报警—》存储—》友好的展示

zabbix20240801120219

七、Zabbix生产快速实践指南

7.1 主机规划

配置要求:传送门

规模 平台 CPU/内存 数据库 受监控的主机数量
小型 CentOS Virtual Appliance MySQL InnoDB 100
中型 CentOS 2 CPU cores/2GB MySQL InnoDB 500
大型 RedHat Enterprise Linux 4 CPU cores/8GB RAID 10 Mysql InnoDB或PostgreSQL >1000
极大型 RedHat Enterprise Linux 8 CPU cores/16GB Fast RAID10 MySQL InnoDB或PostgreSQL >10000
角色 主机名 eth0/eth1 配置
Zabbix服务端 zabbix-server 1C2G
Zabbix客户端 web01 1C1G
Zabbix客户端 db01 1C1G
参数 所需磁盘空间的计算公式(单位:字节)
Zabbix配置文件 固定大小。通常为 10MB 或更少,
History(历史数据) days(items/refresh rate)243600 bytes items:监控项数量。days:保留历史数据的天数。refresh rate:监控项的更新间隔。bytes:保留单个值所需要占用的字节数,依赖于数据库引擎,通常~90字节。
Trends(趋势数据) days(items/3600)243600bytes items:监控项数量。days:保留历史数据的天数。bytes:保留单个趋势数据所需要占用的字节数,依赖数据引擎,通常为~90字节。
Events(事件数据) daysevents24 3500 bytes events:每秒产生的事件。假设最糟糕的情况下,每秒参数1个事件。days:保留历史数据的天数。bytes:保留单个趋势数据所需的字节数,取决于数据库引擎,通常为~170字节。

7.2 企业Zabbi安装最佳实战-Cent0S7

安装方式
极速全自动安装yum
混合安装yum+自定义配置 lnmp(yum) zabbix-server(yum) zabbix-web环境
docker
源码编译安装

nginx

[root@zabbix01 ~]# cat /etc/nginx/conf.d/ztxdztgbo.com.conf
server {
  listen 80;
  server_name ztxdztgbo.com;
  root /app/code/zbx;
  location / {
   index index.php;
 }
  location ~ \.php$ {
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME /app/code/zbx$fastcgi_script_name;
  include fastcgi_params;
}
}

php

./configure --prefix=/usr/local/php             --with-config-file-path=/usr/local/php/etc             --enable-fpm             --with-fpm-user=nginx             --with-fpm-group=nginx             --enable-mbstring             --with-curl             --with-openssl             --with-zlib             --with-mysqli             --enable-mysqlnd             --with-pdo-mysql             --enable-bcmath             --with-gd             --with-jpeg             --with-freetype             --enable-gd             --enable-sockets             --with-zip
[root@zabbix01 ~]# cat /app/code/zbx/info.php
<?php
phpinfo();
php?>
[root@zabbix01 zbx]# cat mysqli.php
<?php
$link_id=mysqli_connect("localhost","zabbix","1") or
mysqli_error();
if($link_id){
 echo "mysql successful by oldby!";
}else{
echo mysqli_error();
}
?>

数据库

zabbix-server

[root@zabbix01 zbx]# cat /etc/yum.repos.d/zabbix.repo
[zabbix]
name=Zabbix Official Repository - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/zabbix/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.tuna.tsinghua.edu.cn/zabbix/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.tuna.tsinghua.edu.cn/zabbix/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.tuna.tsinghua.edu.cn/zabbix/non-supported/rhel/7/$basearch/
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
gpgcheck=1

web部署

八、监控一台服务器主机

8.1 Zabbix agent vs agent2

在任何一台服务器上面安装zabbix-agent zabbix-agent2

zabbix agent zabbix agent2
开发语言 C语言 Go语言和C语言
性能 独立进行方式运行 1个进程多线程技术运行,减少资源消耗占用较少tcp资源,能够承担更高并发

8.2 Zabbix Agent[2]监控流程

  1. 在客户端安装zabbix-agent2
  2. 修改配置文件 指定Server为zabbix服务端
  3. web页面 配置–>主机中添加主机与关联模板
  4. 添加后检测与检查数据

1)补充:zabbix服务端与客户端配置详解

2)监控客户端

九、自定义监控那点事

9.1 自定义监控概述

  • 我们通过zbx客户端+各种模板实现监控。

    • linux zabbix agent模板

    • cpu

    • 磁盘

    • 内存,swap

    • 网络,网卡

    • 系统负载

    • 进程数量

    • 用户登录数量

    • 系统运行时长

    • 自定义监控应用场景:
    • 模板中没有我们所要的监控项
    • 默认的模板中监控项过多。
  • web01 监控80端口是否存在? 自定义监控

9.2 自定义监控项流程

  • 客户端:书写命令或脚本,修改配置文件。
  • 服务端:测试,web页面操作。
步骤 流程
客户端 linux:通过命令、脚本取出对应的值
linux:根据zbx要求按照格式,书写配置文件,创建键值 键值key用于获取客户端数据
linux:重启客户端客户端测试键值是否可用 zabbix_agent2 -t
服务端 linux:服务端测试键值是否可用 zabbix_get
web页面:键值与监控项关联
web页面:测试
web页面:图形
web页面:触发器(报警) 是否发出警告需要根据情况决定是否设置

9.3 Zabbix-客户端-创建Key(键值)

1)客户端

a)通过命令、脚本取出对应的值
  • 监控80端口是否存在? 自定义监控
ss -lntup |grep -w 80 |wc -l
b)创建键值与重启
[root@lb01 ~]# grep -i include /etc/zabbix/zabbix_agent2.conf 
### Option: Include
#	You may include individual files or all files in a directory in the configuration file.
#	Installing Zabbix will create include directory in /usr/local/etc, unless modified during the compile time.
# Include=
Include=/etc/zabbix/zabbix_agent2.d/*.conf
# Include=/usr/local/etc/zabbix_agent2.userparams.conf
# Include=/usr/local/etc/zabbix_agent2.conf.d/
# Include=/usr/local/etc/zabbix_agent2.conf.d/*.conf
# Include configuration files for plugins
Include=./zabbix_agent2.d/plugins.d/*.conf

# 1. 写入自定义key(键值)
[root@lb01 ~]# cat /etc/zabbix/zabbix_agent2.d/web.conf
#自定义监控的格式
#UserParameter=起个名字,命令或脚本
#命名最好就是 单词+"." (点)
UserParameter=ngx.port,ss -lntup |grep -w 80|wc -l
# 2. 重启客户端
[root@lb01 ~]# systemctl restart zabbix-agent2.service
# 3. 客户端本地测试键值
[root@lb01 ~]# zabbix_agent2 -t ngx.port
ngx.port                                      [s|1]
# s表示类型 文字
# 1表示结果 键值的结果

温馨提示:zabbix_agent2.conf里面有

Include=/etc/zabbix/zabbix_agent2.d/*.conf
1

修改后记得重启zbx客户端

2)服务端

a)服务端手动测试
[root@m02-zbx-server ~]# yum install zabbix-get -y
# zabbix_get 向客户端要指定键值的数据。
zabbix_get命令
-s 客户端IP地址
-p 客户端端口号(默认是10050)
-k 指定键值
[root@m02-zbx-server ~]# zabbix_get -s 172.16.1.5 -k ngx.port
1
[root@m02-zbx-server ~]# zabbix_get -s 172.16.1.5 -k ngx.port
0
b) web页面:创建监控项
  • 把客户端创建的键值与zbx服务端监控项关联起来。
  • 创建监控项

zabbix20240802104355

  • 配置监控项名字,填写:键值
    • 信息类型:这里键值结果都是数字,选择数字(无正负即可),如果有小数选择浮点类型,如果是字符,选择字符串。
    • 更新间隔:这里调整为5s秒,生产环境非必须尽量增长间隔比如1m,10m,1h等等

zabbix20240802104502

  • 历史数据与趋势数据
历史数据与趋势数据 说明 推荐配置
历史数据(history)保留时长: 每个更新间隔获取到的数据 推荐空间不乐观 可以设置为30d
趋势数据(trend)保留时长: 记录数据变化的趋势,占用空间较少 推荐保留更长时间 3650d
  • 监控项配置信息汇总

zabbix20240802104944

  • 进行监控项测试
  • 温馨提示:处处有测试,保证数据可用。
  • 测试结果

zabbix20240802105032

  • 添加监控项完成,查看添加的监控项
  • 这里的图形是zbx替我们根据数据自动创建的。

zabbix20240802105106

zabbix20240802105146

c) web页面:触发器
  • 根据监控项获取的数值(内容),决定是否要告警、是否要提示异常。
  • trigger扳机
  • 创建触发器

zabbix20240802105251

  • 配置触发器名字,严重程度和表达式

zabbix20240802105331

  • 表达式配置详情

zabbix20240802105405

  • 添加完成后的触发器配置

zabbix20240802105441

  • 出现故障后的提示

zabbix20240802105516

d)web页面:添加图形
  • 添加图形

zabbix20240802105602

  • 配置图形名字与添加监控项

zabbix20240802110324

  • 查看图形的预览(监控项要已经获取到数据才行)

zabbix20240802110404

  • 检查图形

zabbix20240802110442

3)自定义监控小结

  • 用一句话形容自定义监控:只要能通过命令、脚本取出来的东西就可以自定义监控。
    • 自定义监控流程:
    • 客户端 通过命令/脚本取出想要内容,UserParameter创建键值key,写入配置文件,客户端检测(zabbix_agent)
    • 服务端 命令测试键值(zabbix_get) ,web页面: 添加监控项 ,添加触发器,添加图形
    • web调试

9.4 常用键值与触发器函数

1)键值

  • 在监控项中使用,键值用于获取数据
常用键值 说明
agent.hostname 主机名 获取的是客户端配置文件中指定的主机名
system.hostname 主机名 系统的主机名 类似于hostname
agent.ping 服务端与客户端是否通畅 通1 不通非1
net.if.in[if,] 网络接口上传(进入)流量统计。返回 整数 if表示网卡名字 可以忽略。
net.if.out[if,] 流出流量统计。返回整数
proc.num[,,,,] 进程数。返回整数
name进程名字
user用户
state进程状态
cmdline进程对应的命令
net.tcp.port[,port] 检查是否能建立 TCP 连接到指定端口。返回 0 - 不能连接;1 - 可以连接
  • 案例过滤僵尸进程数量
state 写为 zomb 
zabbix_get -s 172.16.1.7 -p 10050 -k proc.num[,,zomb]
zabbix_get -s 172.16.1.7 -k net.if.in[eth0,]
zabbix_get -s 172.16.1.7 -k proc.num[nginx]
zabbix_get -s 172.16.1.7 -k net.tcp.port[,80]

zbx客户端键值
链接: https://www.zabbix.com/documentation/6.0/zh/manual/config/items/itemtypes/zabbix_agent

2)触发器函数

  • 写在触发器表达式中.用于设置报警条件.
  • 触发器函数要结合键值(监控项).
功能(函数) 说明
对比与比较
last() 最近值(最新的值),取出最近一些值
nodata() 是否有数据
diff() 是否发生变化一般配合md5check()
进行计算
avg() 平均值
min() 最小值
max() 最大值
  • 分析案例: 目的是用来检查/etc/passwd的变化情况,间接检查是否有用户增加或删除
#倒数第1个 /etc/passwd 的md5值
last(/lb01/vfs.file.cksum[/etc/passwd,sha256],#1)
<>
#倒数第2个 /etc/passwd 的md5值
last(/lb01/vfs.file.cksum[/etc/passwd,sha256],#2)

# 倒数第1个md5的值和倒数第2个md5的是 如果不相等了,则报警.
# 目的是用来检查/etc/passwd的变化情况,间接检查是否有用户增加或删除.
  • 书写触发器案例 swap

    • 条件1:swap总大小大于0(系统有swap)
    • #条件2:swap当前使用的大小大于0(没有直接可以使用的监控项,这里调整为当前swap空闲率小于100)
    #1. 找出满足要求的键值
    system.swap.size[,total]) #取出swap总数
    last(/web01/system.swap.size[,used])  #swap使用大小
    
    #条件swap总大小大于0
    last(/web01/system.swap.size[,total])>0
    
    #条件swap当前使用的大小大于0(没有直接可以使用的监控项,这里调整为当前swap空闲率小于100)
    last(/web01/system.swap.size[,pfree])<100
    
    #表示并且
    -a   ==> and 
    -o   ==> or
    
    #2.完整的表达式
    last(/web01/system.swap.size[,total])>0 and last(/web01/system.swap.size[,used])>0
    

    zabbix20240802112741

max(/Zabbix server/vm.memory.size[available],5m)<{$MEMORY.AVAILABLE.MIN} and last(/Zabbix server/vm.memory.size[total])>0 

# 最近5分钟可用内存小于 指定的值
max(/Zabbix server/vm.memory.size[available],5m) < {$MEMORY.AVAILABLE.MIN} 
# and 并且
# 内存大小大于0 
last(/Zabbix server/vm.memory.size[total])>0

3)触发器依赖

  • 内存不足
  • 开始占用swap
  • 网络断开
  • ping
  • port

https://www.zabbix.com/documentation/6.0/zh/manual/config/triggers/dependencies

9.5 自定义监控-参数案例

  • 目标:检查指定用户是否存在异地登录。

  • 最简单想法:检查指定用户登录的ip地址。进行对比

  • 选择命令:

  • w who只能显示当前此时此刻,登录情况。

  • lastlog 实现

  • 键值:实现取出指定用户的登录的ip地址。

  • 服务端:web页面触发器做对比。

1)客户端

  • 使用命令
lastlog |grep root |awk '{print $3}'  
# root未来可能是其他用户.
  • 书写键值key
[root@lb01 ~]# cat /etc/zabbix/zabbix_agent2.d/web.conf 
#自定义监控的格式
#UserParameter=起个名字,命令或脚本
UserParameter=ngx.port,ss -lntup |grep -w 80|wc -l
UserParameter=user.login[*],lastlog -u "$1"|awk 'NR==2{print $3}'

[root@lb01 ~]# systemctl restart zabbix-agent2.service 
[root@m02-zbx-server ~]# zabbix_get -s 172.16.1.5 -k user.login[root]
root             pts/1    10.0.0.1         一 5月  6 12:30:07 +0800 2024

[root@lb01 ~]# cat /etc/zabbix/zabbix_agent2.d/web.conf 
#自定义监控的格式
#UserParameter=起个名字,命令或脚本
UserParameter=ngx.port,ss -lntup |grep -w 80|wc -l
UserParameter=user.login[*],lastlog -u "$1"|awk 'NR==2{print $$3}'  # 两个$$符号
  • 如果使用自定义键值传参,awk取列的时候要使用$$列。
  • 如果没有传参,awk正常使用即可。
  • 理解自定义键值的传参

zabbix20240802102129

2)服务端

[root@m02-zbx-server ~]# zabbix_get -s 172.16.1.5 -k user.login[root]
10.0.0.1
  • web 添加监控项

zabbix20240802102405

zabbix20240802102506

zabbix20240802102643

  • web 触发器
最近1个值和上一个值是否一致(不一致)
last(/lb01/user.login[root],#1) <> last(/lb01/user.login[root],#2)

zabbix_20240802102701

  • 查看

zabbix20240802102730

zabbix20240802102748

3)小结

  • 自定义监控,带参数。
  • 带参数+awk取列。($$取列)
  • 优先使用zbx内置key和模板中监控项。
  • 多看看模板中的监控项和触发器规则。{$XXXX}

10.6 使用模板

  • 通过创建自定义模板实现,监控项,触发器,图形批量使用。

  • 步骤

    • 创建模板
    • 添加自定义监控项᲼
    • 添加触发器
    • 添加图形
    • 模板关联主机
    • 客户端配置自定义键值

    1)创建模板

    zabbix20240802114110

  • 检查模板信息

zabbix20240802114226

2)添加自定义监控项

  • 进入主机中复制即可
  • 选择要复制的监控项,选择复制即可(可批量多选)

zabbix20240802114300

  • 选择复制到模板中

zabbix20240802114333

  • 检查模板中监控项部分:多了2个监控项

zabbix20240802114508

zabbix20240802115159

3)复制触发器与图形

  • 主机–>触发器

zabbix20240802115323

  • 复制

zabbix20240802115403

  • 检查模板

zabbix20240802115434

  • 复制图形与复制触发器与监控项一致

zabbix20240802115504

zabbix20240802115545

zabbix_20240802115648

zabbix20240802115736

zabbix20240802115752

4)模板关联主机

  • 进入主机中,批量选择要添加模板的主机,批量更新

zabbix20240802115848

  • 添加模板关联主机成功

zabbix20240802115926

  • 错误提示:
  • unkown metric xxxx 未知的键值(监控项)
  • 原因:客户端没有对应的自定义的键值.
  • 解决:复制过去对应的键值即可.

5)配置linux客户端键值
分发键值配置文件到db01和nfs01
重启zbx客户端
6)调试
给监控项设置标记,方便分类
温馨提示: zbx 5.x 及之前 应用集,zbx 6.x 叫标记。都是用于分类
7)小结
找到1台主机进行测试标记,监控项,触发器,图形。。。
然后创建模板,把对应的内容复制到模板中。
模板关联主机
键值的配置文件发过去

十、监控报警那点事

10.1 告警分类

报警方式 企业应用场景
发邮件 个人邮箱 企业邮箱,免费使用
企业微信-告警应用(机器人) 需要使用企业微信,免费
OA系统( 钉钉,飞鸽,…) 与阿里云,免费
短信 0.045元/条左右 (阿里云短信服务) 收费
电话 收费
第三方报警工具/平台: onealert (省事) 只需要配置onealert的平台信息,免费使用(限制),收费

10.2 邮件报警

1)全流程

  • 个人邮箱/企业邮箱
  • 开启个人邮箱 smtp功能 获取授权码
  • 发件人:配置zabbix 报警媒介类型
  • 收件人:配置 用户 接收报警
  • 发件条件:配置动作

2)个人邮箱隹备(略)

  • 配置个人邮箱

zabbix20240802133109

3)配置发件人

  • a:配置发件人-报警媒介

zabbix20240802133159

zabbix20240802133218

  • 告警邮件内容: Messages template
  • 故障告警信息

zabbix20240802133258

  • 故障恢复告警信息

zabbix20240802135529

  • 添加完成

zabbix20240802135614

#信息类型是: 问题( 发生故障 ) 
主题:   故障名称: {EVENT.NAME}
消息: 
故障始于 时间: {EVENT.TIME} 日期: {EVENT.DATE}
故障名称: {EVENT.NAME}
故障主机: {HOST.NAME}
严重程度: {EVENT.SEVERITY}
额外信息: {EVENT.OPDATA}
故障ID: {EVENT.ID}
触发器地址: {TRIGGER.URL}

#信息类型是: Problem recov 故障解决的时候

主题: 故障解决 in {EVENT.DURATION}: {EVENT.NAME}

消息:
故障已经解决 时间: {EVENT.RECOVERY.TIME} 日期: {EVENT.RECOVERY.DATE}
故障名称: {EVENT.NAME}
故障持续时间: {EVENT.DURATION}
故障主机: {HOST.NAME}
故障级别: {EVENT.SEVERITY}
故障ID: {EVENT.ID}
{TRIGGER.URL}
  • 进行测试

zabbix20240802135716

  • 提示发送成功

zabbix20240802135810

  • 检查邮箱内容

zabbix20240802135854

4)配置收件人

zabbix20240802135937

  • 配置收件人

zabbix20240802140057

  • 配置完成

zabbix20240802140131

5)什么条件下给用户发送邮件?(条件/动作)

  • c:动作–启用
    • 触发器动作

zabbix20240802140208

  • 启动即可

zabbix20240802140307

  • 已启用

zabbix20240802140344

  • 制造故障检查仪表盘

zabbix20240802140447

zabbix20240802140513

zabbix20240802140540

  • 检查邮件

zabbix20240802140629

6)邮箱告警小结

  • 分组,用户
  • 配置发件人: 报警媒介类型
  • 配置收件人: 个人用户配置中添加报警媒介
  • 配置动作:(触发器动作)
    • 发送故障的提示
    • 发送故障恢复的提示

10.3 微信报警

1)全流程

  • 微信报警,短信,电话,钉钉 自定义脚本报警

  • 通过脚本(py,shell),调用对方api接口(输入接口需要的信息,访问与使用api接口)

  • 企业微信

  • 企业微信id和告警机器人id和secret

  • 使用脚本(shell/python)调用企业微信api接口: python 输入收件人 信息

  • 发件人: 报警媒介(告警机器人)

  • 收件人: 个人 媒体类型

  • 动作: 已经完成

2)准备环境 1-3

#1.企业微信 id号
企业ID
ww6ac68d5d41044330

#2.创建1个报警机器人(应用)
##机器人的id(应用id)  
AgentId
1000005

##应用密码  
Ss7VFx8Mkzm8XABMNqVRp31zxNnxhbJ_rJzz8sPDgk4
#修改微信报警的脚本
vim /usr/local/share/zabbix/alertscripts/wechat.py

#!/usr/bin/env python
#-*- coding: utf-8 -*-
#author: oldboy-linux
#date: 2021
#description: Zabbix Wechat Alerts Scripts
import requests
import sys
import os
import json
import logging
logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s',
                datefmt = '%a, %d %b %Y %H:%M:%S',
                filename = os.path.join('/tmp','wechat.log'),
                filemode = 'a')
               
#id和secret需要修改
corpid='wxd074861951c67ba6'
appsecret='QtraZrI936DZ0jZ3aSWTZ-lFVheAMgLmq3toM4B9U1A'
agentid=1
#获取accesstoken
token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret
req=requests.get(token_url)
accesstoken=req.json()['access_token']
#发送消息
msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken

#脚本参数
#touser=sys.argv[1]
toparty=sys.argv[1]
subject=sys.argv[2]
#toparty='3|4|5|6'
message=sys.argv[2] + "\n\n" +sys.argv[3]
params={
#       "touser": touser,
       "toparty": toparty,
        "msgtype": "text",
        "agentid": agentid,
        "text": {
                "content": message
       },
        "safe":0
}
req=requests.post(msgsend_url, data=json.dumps(params))

# 书写日志/tmp/wechat.log
logging.info('sendto:' + toparty + ';;subject:' + subject + ';;message:' + message)

chmod +x /usr/lib/zabbix/alertscripts/wechat.py

#安装python环境
yum install -y python3 python3-pip
通过pip3 命令安装requests依赖.
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple requests

#测试
python3 wechat.py 用户的id或组id 标题 内容 '下雨了'  '打雷下雨收衣服'
Traceback (most recent call last):
File "/usr/lib/zabbix/alertscripts/wechat.py", line 7, in <module>
   import requests
ImportError: No module named requests
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
pip install requests

#web页面 发件人:报警媒介类型
{ALERT.SENDTO}  #发给谁
{ALERT.SUBJECT} #报警标题
{ALERT.MESSAGE} #报警内容

故障目前已经解决时间: {EVENT.RECOVERY.TIME} 日期
{EVENT.RECOVERY.DATE}
故障名称: {EVENT.NAME}
故障经历多久: {EVENT.DURATION}
故障主机: {HOST.NAME}
故障级别: {EVENT.SEVERITY}
故障ID: {EVENT.ID}
{TRIGGER.URL}
#web页面 收件人:接收用户
#Web页面 配置-->动作
  • 需要去企业微信后台,开通白名单

zabbix20240802141007

zabbix20240802141028

zabbix20240802141051

zabbix20240802141113

zabbix20240802141142

  • 错误提示:
故障提示:
python3 wechat-v2-lidao996.py lidao996  "webisdown" "nginx is down"
Traceback (most recent call last):
 File "wechat-v2-lidao996.py", line 7, in <module>
   import requests
ModuleNotFoundError: No module named 'requests'
故障解决:
pip3 install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
新的安装方法:
python3 -m pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

3)配置发件人

{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
  • 添加报警媒介类型

zabbix20240802141403

  • 添加报警内容模板

zabbix20240802141437

  • 测试发件人

zabbix20240802141507

4)配置收件人

zabbix20240802141546

zabbix20240802141558

5)整体测试

  • 制造新的故障

zabbix20240802142225

6)小结

  • 企业微信
  • 企业微信id和告警机器人id和secret
  • 使用脚本(shell/python3)调用企业微信api接口: python 输入收件人 信息
  • 发件人: 报警媒介类型
  • 收件人: 个人 媒体类型
  • 动作: 已经完成
  • 补充:通过微信脚本,发送到指定用户。

十一、换个角度看监控-zabbix-agent

11.1 Zabbix客户端概述

zabbix客户端 应用场景
Zabbix-agent2(最常用) 适用于几乎所有情况,支持自定义监控,linux,windows, android/ios
SNMP客户端 用于监控网络设备:
Simple Network Management Protocal 简单网络管理协议 监控网络设备
JMX Java-gateway 监控java app(tomcat),
未来推荐自定义监控(zabbix_agents2 + jmap/jstats)
IPMI 监控硬件(物理服务器,联想(IBM X86架构 ThinkServer) ,华为,浪潮,Dell,IBM,HP)
直接使用自定义监控(ipmitool + megacli )

11.2 Zabbix_agent2 监控 windows

  • 安装客户端,配置
  • 服务端添加主机,关联模板
  • 调试

1)安装windows客户端

  • 安装客户端的时候配置服务端ip

zabbix20240802154003

  • 温馨提示⚠ 主机名中不要包含中文
  • 默认安装目录即可

zabbix20240802160118

  • 安装完成检查-进程

zabbix20240802160152

  • 检查开机自启动

zabbix20240802160401

  • 安装目录及配置文件C:\Program Files\Zabbix Agent 2
91839@DESKTOP-9RU7VPJ MINGW64 /c/Program Files/Zabbix Agent 2
$ grep -i '^[a-z]'   zabbix_agent2.conf
LogFile=C:\Program Files\Zabbix Agent 2\zabbix_agent2.log
Server=10.0.0.63
ServerActive=10.0.0.63
Hostname=DESKTOP-GAMESOFT
ControlSocket=\\.\pipe\agent.sock

2)监控windows

zabbix_20240802160557

3)小结

可以监控windows server版本

11.3 snmmp监控网络设备

  • snmp: 简单网络管理协议
  • 流程:
    • 开启网络设备的SNMP功能,设置暗号(社团名字)(v2c) (v3 用户名+密码)
    • WEB添加主机,配置接口,关联模板。
  • SNMP有多个版本
    • v2c版本使用团体名作为认证。
    • v3版本用户名和密码认证。
  • 命令行连接测试网络设备
yum install -y net-snmp-utils
snmpwalk -v 2c  -c oldboykey  192.168.50.1 SysDesc

1)开启网络设备snmp功能

zabbix20240802161057

zabbix20240802161118

  • zabbix-server检查 网络设备状态
yum install -y net-snmp-utils
COMMUNITY
[root@m03 ~]# snmpwalk -c oldboykx -v 2c 192.168.13.1 SysDesc
SNMPv2-MIBՎʦsysDescr.0 = STRING: H3C Product Version 
ERHMG2-MNW100-R1117
H3C ERHMG2
Copyright(c) 2014-2018 New H3C Technologies Co., 
Ltd. All rights reserved.
[root@m03 ~]# snmpwalk   -c oldboykx -v 2c 192.168.13.1 sysdesc
SNMPv2-MIBՎʦsysDescr.0 = STRING: H3C Product Version 
ERHMG2-MNW100-R1117
H3C ERHMG2
Copyright(c) 2014-2018 New H3C Technologies Co., 
Ltd. All rights reserved.

snmpwalk 命令 使用get方式访问网络设备
-c 团体名称   #v2c版本使用 团体名称
-v 指定 snmp版本 #v2c v3  
ip地址
指令(获取网络设备的信息)   名称方式/oid

#oid Object ID 事务id 给世间万物设置独一无二的id号
[root@m03 /tmp]# snmpwalk -c oldboykx -v 2c 192.168.13.1 sysdesc
[root@m03 /tmp]# snmpwalk -c oldboykx -v 2c 192.168.13.1 sysUptime
DISMAN-EVENT-MIBՎʦsysUpTimeInstance = Timeticks: 
(40733900) 4 days, 17:08:59.00

[root@m03 /tmp]# snmpwalk -c oldboykx -v 2c 192.168.13.1 IfNumber
IF-MIBՎʦifNumber.0 = INTEGER: 19
[root@m03 /tmp]# snmpwalk -c oldboykx -v 2c 192.168.13.1 IfDescr
IF-MIBՎʦifDescr.16777217 = STRING: WAN1
IF-MIBՎʦifDescr.16777218 = STRING: WAN2
IF-MIBՎʦifDescr.50331650 = STRING: LAN1
IF-MIBՎʦifDescr.50331652 = STRING: LAN2
IF-MIBՎʦifDescr.50331654 = STRING: LAN3
IF-MIBՎʦifDescr.50331656 = STRING: LAN4
IF-MIBՎʦifDescr.385875968 = STRING: VLAN1
IF-MIBՎʦifDescr.385875969 = STRING: VLAN11
IF-MIBՎʦifDescr.385875970 = STRING: VLAN12
IF-MIBՎʦifDescr.385875971 = STRING: VLAN13
IF-MIBՎʦifDescr.385875972 = STRING: VLAN14
IF-MIBՎʦifDescr.385875973 = STRING: VLAN15
IF-MIBՎʦifDescr.385875974 = STRING: VLAN16
IF-MIBՎʦifDescr.385875975 = STRING: VLAN17
IF-MIBՎʦifDescr.385875976 = STRING: VLAN18
IF-MIBՎʦifDescr.385875977 = STRING: VLAN19
IF-MIBՎʦifDescr.385875978 = STRING: VLAN20
IF-MIBՎʦifDescr.385875979 = STRING: VLAN21
IF-MIBՎʦifDescr.385875980 = STRING: VLAN66
[root@m03 /tmp]# 
[root@m03 /tmp]# snmpwalk -c oldboykx -v 2c 192.168.13.1 IfInOctet
IF-MIBՎʦifInOctets.16777217 = Counter32: 4096624309
IF-MIBՎʦifInOctets.16777218 = Counter32: 0
IF-MIBՎʦifInOctets.50331650 = Counter32: 3656051160
IF-MIBՎʦifInOctets.50331652 = Counter32: 3255019547
IF-MIBՎʦifInOctets.50331654 = Counter32: 4121087927
IF-MIBՎʦifInOctets.50331656 = Counter32: 0
IF-MIBՎʦifInOctets.385875968 = Counter32: 121007621
IF-MIBՎʦifInOctets.385875969 = Counter32: 1314395390
IF-MIBՎʦifInOctets.385875970 = Counter32: 2701446525
IF-MIBՎʦifInOctets.385875971 = Counter32: 3113202231
IF-MIBՎʦifInOctets.385875972 = Counter32: 3558929335
IF-MIBՎʦifInOctets.385875973 = Counter32: 0
IF-MIBՎʦifInOctets.385875974 = Counter32: 0
IF-MIBՎʦifInOctets.385875975 = Counter32: 0
IF-MIBՎʦifInOctets.385875976 = Counter32: 0
IF-MIBՎʦifInOctets.385875977 = Counter32: 4039834871
IF-MIBՎʦifInOctets.385875978 = Counter32: 3986752945
IF-MIBՎʦifInOctets.385875979 = Counter32: 1748855398
IF-MIBՎʦifInOctets.385875980 = Counter32: 0
[root@m03 /tmp]# snmpwalk -c oldboykx -v 2c 192.168.13.1 IfInOctet
IF-MIBՎʦifInOctets.16777217 = Counter32: 1402719161
IF-MIBՎʦifInOctets.16777218 = Counter32: 0
IF-MIBՎʦifInOctets.50331650 = Counter32: 3689519028
IF-MIBՎʦifInOctets.50331652 = Counter32: 3286579931
IF-MIBՎʦifInOctets.50331654 = Counter32: 4215317407
IF-MIBՎʦifInOctets.50331656 = Counter32: 0
IF-MIBՎʦifInOctets.385875968 = Counter32: 212287463
IF-MIBՎʦifInOctets.385875969 = Counter32: 1314397506
IF-MIBՎʦifInOctets.385875970 = Counter32: 2707094611
IF-MIBՎʦifInOctets.385875971 = Counter32: 3137147383
IF-MIBՎʦifInOctets.385875972 = Counter32: 3560411099
IF-MIBՎʦifInOctets.385875973 = Counter32: 0
IF-MIBՎʦifInOctets.385875974 = Counter32: 0
IF-MIBՎʦifInOctets.385875975 = Counter32: 0
IF-MIBՎʦifInOctets.385875976 = Counter32: 0
IF-MIBՎʦifInOctets.385875977 = Counter32: 4060020833
IF-MIBՎʦifInOctets.385875978 = Counter32: 3987206613
IF-MIBՎʦifInOctets.385875979 = Counter32: 1751758219
IF-MIBՎʦifInOctets.385875980 = Counter32: 0

2)添加主机

zabbix20240802161236

zabbix20240802161441

3) 检查

s

  • 在服务端安装fping

zabbix20240802161626

[root@m02-zbx-server ~]# yum install -y fping

4) 小结

  • 网络设备开启snmp功能,web进行检查.
  • 用于监控网络设备。

11.4 监控java应用

1)方案选型与原理

方案 监控方案 说明
方案01 开启java jmxremote远程监控功能 zbx中关联对应的模板,安装与开启java工具zbx-java-gateway
方案02 通过java命令,自定义监控获取想要指标 通过在java应用服务器安装zbx agent和java命令(jmap,jstack),然后自定义监控
  • 方案01 原理图

zabbix20240802162447

  • 方案02 原理图(类似于自定义监控)

zabbix20240802162528

2)方案01实战

  • 开启远程监控功能
  • zbx服务端部署java gateway 配置
  • 添加主机关联模板
a)开启远程监控功能
  • 开启远程监控功能
[root@web03 tomcat]# vim bin/catalina.sh
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenti
cate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=172.16.1.9"
[root@web03 tomcat]# systemctl start tomcat
[root@web03 tomcat]# ps -ef|grep java
root       1237      1 47 14:51 ?        00:00:07 /server/tools/jdk/bin/java -Djava.util.logging.config.file=/server/tools/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=172.16.1.9 -Dignore.endorsed.dirs= -classpath /server/tools/tomcat/bin/bootstrap.jar:/server/tools/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/server/tools/tomcat -Dcatalina.home=/server/tools/tomcat -Djava.io.tmpdir=/server/tools/tomcat/temp org.apache.catalina.startup.Bootstrap start
root       1276   1159  0 14:51 pts/0    00:00:00 grep --color=auto java
b)zbx服务端部署java gateway 配置
  • zbx服务端 部署 zabbix-java-gateway
1. 安装
yum install -y zabbix-java-gateway
2. 启动
systemctl enable zabbix-java-gateway.service
systemctl start zabbix-java-gateway.service

grep '^[a-Z]' /etc/zabbix/zabbix_java_gateway.conf
LISTEN_PORT=10052
PID_FILE="/var/run/zabbix/zabbix_java_gateway.pid"

systemctl restart zabbix-java-gateway.service
ss -lntup |grep java

3. 配置zbx 服务端
grep -n 'Java.*=' /etc/zabbix/zabbix_server.conf
317:JavaGateway=127.0.0.1
325:JavaGatewayPort=10052
333:StartJavaPollers=5

4. 重启服务端
systemctl restart zabbix-server.service
  • 检查java poller进程

zabbix20240802163150

c)添加主机
  • 也可以添加个 zabbix agent客户端监控

zabbix20240802163229

zabbix20240802163403

3) 方案01补充-jar包启动的应用如何配置jmxremote

java -jar xxx.jar 

java -Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=12345 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Djava.rmi.server.hostname=172.16.1.9 \
-jar xxx.jar

zabbix20240802163503

zabbix20240802163811

11.5 监控硬件设备

  • 硬件服务器
监控方案 步骤
方案01 开启设备的ipmi功能监控,添加接口的时候选择ipmi即可.(进入物理设备的bios系统.LAN局域网访问.)
方案02 通过客户端命令获取指标实现监控硬件:megacli和ipmitool
  • 方案02-通过命令自定义监控
命令 说明
megacli 用于获取raid卡状态
ipmitool cpu温度,风扇转速

11.6 小结

zabbix客户端 应用场景
Zabbix-agent
或agent2(最常用)
适用于几乎所有情况,支持自定义监控,linux,windows, android/ios
SNMP客户端 用于监控网络设备:
Simple Network Management Protocal 简单网络管理协议 监控网络设备
JMX Java-gateway 监控java app(tomcat),
未来推荐自定义监控(zabbix_agents2 + jmap/jstats)
IPMI 监控硬件(物理服务器,联想(IBM X86架构 ThinkServer) ,华为,浪潮,Dell,IBM,HP)
直接使用自定义监控(ipmitool + megacli )

zabbix20240802170852

十二、来点新的乐趣-自动化监控

  • 自动添加主机并关联模板。
自动添加主机方案 含义 应用场景
自动发现(服务端主动) zbx服务端 主动去找是否有新的主机,如果有则添加进来,关联模板 配置简单,大量添加主机不适合。临时性可用
自动注册(客户端主动) zbx客户端 主动去找服务端提交自己的信息,请求向服务端注册 配置繁琐,经常性。大量主机

12.1 自动发现

  • 客户端(zbx agent),配置文件.
  • web配置自动发现规则. - 发现主机
  • web配置自动发现的动作 - 发现主机后关联模板,添加主机,加入主机组,启用

1)客户端(zbx agent),配置文件

ansible实现
playbook
   yum
   template

2)web配置自动发现规则

  • 配置–>自动发现 创建自动发现规则

zabbix20240802172234

  • 检查自动发现的主机
    • (注意仅仅发现并不会添加到zbx主机中)

3)web配置动作

  • 配置 自动发现 的动作
  • 添加组
  • 关联模板
  • 启动主机
  • 进入自动发现动作配置

zabbix20240802173057

  • 启动自动发现动作

zabbix20240802173648

  • 配置自动发现动作的操作(关联主机组,关联模板)

zabbix20240802173748

zabbix20240802173813

  • 检查自动发现

zabbix20240802173855

  • 检查添加的主机

zabbix20240802174121

4) 自动发现原理与小结

  • 客户端(zbx agent),配置文件
  • web配置自动发现规则. - 发现主机
  • web配置动作 - 发现主机后关联模板,添加主机,加入主机组,启用

zabbix20240802174349

zabbix20240802174418

12.2 自动注册

  • 应用场景,经常性添加主机。
  • 准备:
    • 关闭 自动发现 规则
    • 关闭 自动发现 动作
    • 自动发现的主机 删除
  • zbx客户端配置: 修改zabbix客户端配置文件: ServerActive=服务端ip 和Hostname=… …
  • web页面,动作–>自动注册 autoreg…

zabbix20240808094903

zabbix20240808094929

1)zbx客户端配置文件

  • 客户端主动把自己的信息,提供给服务端。
  • 服务端收到数据后通过 自动注册动作,判断与添加。
客户端的配置 说明
Server=172.16.1.63 服务端地址。
ServerActive=172.16.1.63 主动模式下的服务端ip地址。
#Hostname=web01 当前主机名,这个可以注释掉或使用ansible配置。建议注释使用下面的内容,自动获取主机名
HostnameItem=system.hostname 通过后面指定的键值获取主机名。 ⚠ Hostname和HostnameItem2选1.Item监控项、键值
HostMetadataItem=system.uname 主机的 元数据 键值,类似于自动发现中的system.uname判断存活和获取主机信息
  • HostMetadataItem=system.uname

zabbix20240808095231

  • zbx客户端配置(通用)
[root@web01 ~]# grep '^[a-Z]' /etc/zabbix/zabbix_agent2.conf
PidFile=/var/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
Server=172.16.1.62
ServerActive=172.16.1.62
HostnameItem=system.hostname
HostMetadataItem=system.uname
Include=/etc/zabbix/zabbix_agent2.d/*.conf
ControlSocket=/tmp/agent.sock
Include=./zabbix_agent2.d/plugins.d/*.conf
[root@web01 ~]# systemctl restart zabbix-agent2.service 

2)web页面,动作–>自动注册

  • 与自动发现类似,客户端找到服务端后提交自己信息。
  • 服务端通过自动注册动作进行判断与添加即可。
  • 进入自动注册动作配置页面

zabbix20240808095344

  • 创建自动注册动作

zabbix20240808095417

  • 配置自动注册动作

zabbix20240808095455

zabbix20240808095534

  • 配置自动注册操作

zabbix20240808095603

  • 完成与等待

zabbix20240808095648

zabbix20240808095705

  • 可以选择重启客户端或者服务端的zabbix服务来加快显示

zabbix20240808095758

3)小结

  • 整体流程与自动发现类似,但是自动注册无法再web页面直接查看是否发现了主机,只能看是否添加主机。
  • 自动注册,web页面没有地方配置规则,自动注册把规则写入到了客户端配置文件中的。
  • web页面只需要配置,自动注册动作即可。

十三、来点大的-分布式监控

13.1 分布式监控概述及应用场景

  • zabbix分布式监控应用场景: 监控多个地区/多个机房的服务器,服务器之间内网不通
多个节点(区域、机房)zbx监控问题 方案01:客户端直接写服务端公网ip 方案02:使用分布式监控
带宽
网络稳定性问题
可能存在误报
  • 应用场景

zabbix20240808103225

13.2 分布式监控实战

  • 目标:
    • 应对公司网站服务器较多场景.
    • 公司网站服务器分散在不同的机房或地区(跨机房)

1) 分布式监控搭建

zabbix20240808103302

2) zbx-代理

  • 安装zbx-proxy-mysql 代理
  • 安装数据库
  • 配置
1. 安装代理
yum install -y https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/rhel/7/x86_64/zabbix-proxy-mysql-6.0.29-release1.el7.x86_64.rpm
rpm -qa |grep zabbix
zabbix-proxy-mysql-6.0.5-1.el7.x86_64
zabbix-agent2-6.0.5-1.el7.x86_64

2. 安装与启动数据库
[mariadb]
name = MariaDB
baseurl = http://mirrors.aliyun.com/mariadb/yum/10.5/centos7-amd64/
gpgkey = http://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1
enabled=1
yum install -y mariadb-server
检查版本
rpm -qa |grep -i mariadb

systemctl enable --now mariadb
mysql_secure_installation 执行后根据提示yes或no
   Switch to unix_socket authentication [Y/n] N
   Change the root password? [Y/n] n
   Remove anonymous users? [Y/n] Y
   Disallow root login remotely? [Y/n] Y
   Remove test database and access to it? [Y/n] Y
   Reload privilege tables now? [Y/n] Y
   
3. 进入数据库创建库,创建用户。
zibbix_proxy 
create database zabbix_proxy character set utf8 collate utf8_bin;
grant all privileges on zabbix_proxy.* to zabbix_proxy@'localhost' identified by 'zabbix_proxy';

4. 导入数据库(初始化zbx_proxy)
mysql -uroot zabbix_proxy <schema.sql
mysql -uroot -e 'show tables from zabbix_proxy;'

zabbix_proxy 初始化脚本说明

zbx 5.x 初始化脚本在软件包中有。

zcat /usr/share/doc/zabbix-proxy-mysqlՎʺschema.sql.gz | mysql -uzabbix -p123456 zabbix_proxy

zbx 6.x 需要使用源码包中database/mysql/schema.sql,使用这1个就行。

修改代理配置文件

5. 修改zbx_proxy配置文件
[root@web01 ~]# grep '^[a-Z]' /etc/zabbix/zabbix_proxy.conf
Server=172.16.1.63
Hostname=shanghai_proxy
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
PidFile=/run/zabbix/zabbix_proxy.pid
SocketDir=/run/zabbix
DBHost=localhost
DBName=zabbix_proxy
DBUser=zabbix_proxy
DBPassword=zabbix_proxy
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1
systemctl enable --now zabbix-proxy.service

6. 查看代理日志 报错
cannot send proxy data to server at "172.16.1.63": proxy "shanghai_proxy" not found
  • web页面添加代理

zabbix20240808103427

  • 配置代理
    • 注意名字与代理配置中一致。

zabbix20240808103506

zabbix20240808103526

  • web页面可以看到最近出现时间(只要有时间即可)
    • 如果长时间没有出现,可以查看代理日志,如果持续出现not found 情况。可以重启下代理和服务端。

zabbix20240808103555

3) zbx-客户端修改

  • 修改配置文件
[root@nfs01 ~]# grep '^[a-Z]' /etc/zabbix/zabbix_agent2.conf
PidFile=/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
Server=172.16.1.66
ServerActive=172.16.1.66
Hostname=Zabbix server
Include=/etc/zabbix/zabbix_agent2.d/*.conf
PluginSocket=/run/zabbix/agent.plugin.sock
ControlSocket=/run/zabbix/agent.sock
Include=./zabbix_agent2.d/plugins.d/*.conf
[root@nfs01 ~]# systemctl restart zabbix-agent2.service 
[root@m03-zbx-server mysql]# systemctl restart zabbix-proxy.service

zabbix20240808103634

  • web页面修改,修改这些服务器通过代理获取数据的。修改为

zabbix20240808103704

zabbix20240808103717

zabbix20240808103731

13.4 小结

  • zbx分布式监控应用场景
  • 使用流程.

十四、监控终极挑战

13 lld

a.lld概述

b.lld应用场景

c.内置lld应用

aa)内置lld概述及原理

bb)案例01:内置lld自动获取网卡mac地址

cc)案例02:统计网卡总流量

d:从0开始创建一个低级自动发现规则

aa)创建低级自动发现key获取你要的内容端口,磁盘分区名字,网卡名字

bb)创建监控项原型

cc)创建触发器原型

dd)创建图形原型

ee) 激活模板/执行自动发现规则

e. 1ld总结

根据自动发现端口,然后创建监控项原型

web页面 把自动发现的端口与我们创建的监控项 关联起来

13.2 Zabbix api (application interface)

1)api概述

  • api Application Programming Interface 应用程序编程接口 (相当于是shell函数作用)

  • api接口应用场景: 发送企业微信消息,人脸识别,短信验证,身份验证 使用第3方,功能即可.

  • 使用与调用:

    • 自己写程序调用:直接通过程序代码进行调用(shell,python,golang,),需要参考对方的api接口文档(请求参数,要求的格式)

    • api接口调试工具:apipost,postman

    • 官方写好的你来使用(SDK 一般指软件开发工具包): 通过sdk样例快速调用和使用即可.

2)zabbix api

3)zbx api使用流程

  • api接口使用流程:
    • 根据zabbix用户名和密码,获取token(令牌)
    • 使用token,访问或调取zabbix资源
    • zabbix-api-各种方法
  • 方法01 curl命令
  • 方法02 api测试工具
  • curl
  • zbx 6.x
token令牌
21ac48b7ef3d033b16cf202812fd0cbeaf9f6d9104202cbe299fdd0232de97d7
  • 准备获取令牌

zabbix20240808104610

  • 获取令牌

zabbix20240808104809

  • 显示令牌( 注意仅显示1次 )

zabbix20240808104838

  • 通过api获取主机列表
#案例01 通过zabbix api 获取主机列表

curl -X POST -H "Content-Type: application/json-rpc" -d '
{
    "jsonrpc": "2.0",
    "method": "host.get",
    "params": {
    "output": [
        "hostid",
            "host"
       ],
       "selectInterfaces": [
           "interfaceid",
           "ip"
       ]
   },
   "id": 2,
   "auth": "21ac48b7ef3d033b16cf202812fd0cbeaf9f6d9104202cbe299fdd0232de97d7"
}'  http://zbx.oldboylinux.cn/api_jsonrpc.php | jq

-X 指定请求方法
-H 修改请求头
-d 发出POST请求,要上传的内容。

4)小结

  • 会创建zbx api的token
  • 一般对zabbix二次开发.
  • grafana会使用zabbix api获取数据.

13.2 zabbix性能优化

1)优化概述

  • performance tunning 性能调优
    • 网站架构调整: 尽量让用户的请求往前推(用户请求不要到达你的网站走cdn,各种缓存,消息队列)
    • 读? 写? 拆分思想.
    • 穷则战术穿插,富则火力覆盖

2)硬件优化

  • 硬件优化 : cpu,内存,磁盘,网卡(10G万兆网卡,光纤 ),raid

3)zabbix服务端配置优化

  • zabbix参数的配置: 缓存和进程数量

    • xxxxcache 用于zabbix服务端缓存获取的各类数据 (历史数据,趋势数据…)
    • poller zabbix用于数据采集进程 (接收agent的数据的进程 接收snmp 接收jmx 接收ipmi…)
  • 缓存配置

vim /etc/zabbix/zabbix_server.conf
# 用于存储主机、监控项、触发器数据的共享内存大小
CacheSize=8M  #512M 边调节边看监控 Zabbix server: Zabbix cache usage, % free

# 历史数据缓存
HistoryCacheSize=16M
#历史数据索引的缓存
HistoryIndexCacheSize=4M
#趋势数据缓存
TrendCacheSize=4M
#值的缓存
ValueCacheSize=8M
  • 根据图形调整缓存,进行数量。调整缓存大小之前

zabbix20240808105128

  • 调整缓存大小之后

zabbix20240808105202

zabbix20240808105218

  • 进程数量调整
vim /etc/zabbix/zabbix_server.conf
# 收集数据进程的数量
StartPollers=5

# 客户端/主机 不可达 可达主机 (包括IPMI 和 Java)的轮询进程的初始实例数量
StartPollersUnreachable=1

#用于接收http客户端的数据   
StartHTTPPollers=1

#用于收集客户端jmx的数据 (默认是0) java-gateway的时候使用
StartJavaPollers=5

#用于收集zabbix proxy代理的数据的进程数 默认是1 
StartProxyPollers=1

#收集ipmi客户端数据
StartIPMIPollers=0
  • 修改 poller进程数 对 zabbix服务端收集数据的进程 使用率的 影响

zabbix20240808105313

4)Zabbix客户端配置优化

  • 调整zbx客户端的模式。默认是被动模式,改为主动模式。 zbx被动模式简单,zbx服务端压力大。zbx主动模式,适用于大量主机监控。
  • 主动模式注意事项:
    • 改完配置后,主机客户端类型也要改(zbx客户端主动模式),web模板也要修改
    • 不绿了。如果监控中只有主动模式,不绿了。
主动模式配置
grep '^[a-Z]' /etc/zabbix/zabbix_agent2.conf
PidFile=/var/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
Server=172.16.1.62
ServerActive=172.16.1.62         # 修改为服务端ip 
#Hostname 这个注释掉
HostnameItem=system.hostname     # 修改为键值
Include=/etc/zabbix/zabbix_agent2.d/*.conf
ControlSocket=/tmp/agent.sock
Include=./zabbix_agent2.d/plugins.d/*.conf

# 重启客户端
systemctl restart zabbix_agent2.service
  • 关联主动模式zbx模板

zabbix20240808105431

  • zabbix客户端
    • 不在使用客户端的默认的被动模式
    • 使用主动模式 Server 和 ServerActive web页面选择 zabbix客户端(主动模式)

5)Zabbix键值与监控项优化

  • zabbix 键值与监控项处理:
    • 增加更新间隔时间5m 10m
    • 推荐使用自定义模板,控制功能全面监控,监控项少,精简监控项 (精简)
    • 历史数据保留时长减少 设置为30d或7d, 增加趋势存储时间保留时间 365d

5)Zabbix键值与监控项优化

  • zabbix 键值与监控项处理:

    • 增加更新间隔时间5m 10m
    • 推荐使用自定义模板,控制功能全面监控,监控项少,精简监控项 (精简)
    • 历史数据保留时长减少 设置为30d或7d, 增加趋势存储时间保留时间 365d
  • zabbix网站架构容量评估

#zabbix占用磁盘空间的计算

######关于历史数据的管家设置

Zabbix 将接收到的值保存一段固定的时间,通常为几周或几个月。每个新值都需要一定量的磁盘空间用于数据和索引。

所以,如果我们每秒收到 50 个值,且希望保留 30 天的历史数据,值的总数将大约在 (30*24*3600)* 50 = 129,60 0,000,即大约130M 个值。

根据所使用的数据库引擎,接收值的类型(浮点数、整数、字符串、日志文件等),单个值的磁盘空间可能在 40 字节到数百字节之间变化。 通常,数值类型的每个值大约为 90 个字节。

在上面的例子中,这意味着 130M 个值需要占用 1 3000 0000 * 90 bytes = 10.9GB 磁盘空间。

文本和日志类型的监控项值的大小是无法确定的,但可以以每个值大约 500 字节来计算。

#####趋势数据的管家设置

Zabbix 为表 trends 中的每个项目保留1小时的最大值 / 最小值 / 平均值 / 统计值。 该数据用于趋势图形和历史数据图形。 这一个小时的时间段是无法自定义。

Zabbix数据库,根据数据库类型,每个值总共需要大约90个字节。

假设我们希望将趋势数据保持5年。 3000 个监控项的值每年需要占用3000*24*365* 90 = 2.2GB 空间,或者5年需要占用 11GB 空间。
  • zabbix 触发器
    • 尽量使用 .last() (最新数据) .nodata() (是否有数据)
    • 避免使用需要计算函数 .max() .min() .avg()
    • 整体目标:不要让zabbix服务端进行计算/数据库进行计数,需要计算的内容放在客户端(自定义监控项)
zbx  5.x
{Template OS Linux by Zabbix agent:vfs.file.cksum[/etc/passwd].diff()}>0

zbx 6.x 
diff(/Template OS Linux by Zabbix agent/vfs.file.cksum[/etc/passwd]/) = 1

6)zabbix数据库优化

  • 根据业务类型调整:读少写多
    • 1:zabbix是一个写多读少的业务,优化数据库的写入性能,建议使用InnoDB存储引擎或tokudb存储引擎
    • 2:数据库分离或数据库拆分

7)小结

  • zabbix服务端架构与硬件优化
  • zabbix服务端配置 : 缓存,进程数
  • zabbix客户端配置 : 主动模式、被动模式
  • zabbix监控项与键值 更新间隔,历史数据,趋势数据保留时长
  • zabbix触发器 :避免使用计算的函数max(),min(),avg()
  • zabbix使用数据库优化

十五、全网监控项目

15.1 网站需要监控什么?

  • 面试题: 你们公司监控了什么?自定义监控了什么?监控指标?。。。。。
  • 潜台词:问你网站架构监控了什么内容?

1)回答参考

  • ❌不推荐的回答案例:(没有经验,小白)

    • cpu,内存,磁盘,网络,带宽,负载。。。。。。。。
  • ⭕ 推荐的回答:

  • 按照网站层次架构监控的(多个维度监控)

    • 任何一台机器(从下到上):
      • API接口监控:(选做)
      • 业务/app监控:
      • 服务监控:
      • 系统监控:
      • 硬件监控:
    • 按照访问顺序监控(一层一层): dns/cdn,安全组,负载,web,数据库,存储,备份。
    • 补充的监控

2)任何一台机器(从下到上)

监控内容 详细内容 具体实现落地
API接口监控: 监控指定的api接口,比如zbx api。开发提供. curl命令、web场景/监测
业务、应用、app监控: 检查应用是否可用,书写测试代码。类似于info.php,mysqli.php这种页面. curl命令、web场景/监测
服务监控: 基本: 进程,端口
专有: 服务的状态,不同服务不同。
日志 最近2000行日志中是否有error/failed/exception/sever
模板或根据具体要求自定义监控
系统监控: cpu,负载,内存,磁盘,网络,带宽,io,关键文件是否变化,进程,僵尸进程,是否有非堡垒机登录 模板+自定义(僵尸进程,用户异地登录)
硬件监控: 物理服务器,温度,风扇转速,raid状态 ipmi

自定义监控
(ipmitool/megacli)
  • web场景

zabbix20240805155250

3)按照访问顺序监控(一层一层)

  • dns/cdn,安全组,负载,web,数据库,存储,备份
监控内容 详细内容 具体实现落地
DNS 解析是否OK 自定义监控-ping/dig/…
域名: whois baidu.com 过滤过期
证书: curl -Lsv www.baidu.com -o /dev/null过滤expire date 过期
CDN 是否可用.命中率.(web检查) 分布式ping:
商业:监控宝,听云
免费网站: www.17ce.com,ping.chinaz.com
开源软件: smokeping
负载 ngx服务情况,证书过期,网站访问量,并发 ngx/haproxy/keepalived状态:模板
证书:模板、自定义监控。
网站访问量(运营):ip,pv,uv(网站第三方插件实现百度统计),
matomo(php piwiki)
并发:统计80,443端口连接数。
负载均衡健康检查模式upstream_check 自定义监控
访问日志(状态码),错误日志(error,failed数量)
服务:ngx,keepalived(vip数量,备节点是否有vip)
web 主要监控服务情况 具体服务使用对应模板即可。
ngx
php
tomcat(war)/jar包
数据库 redis,mysql 模板即可。
存储 nfs 自定义监控,存储目前多少空间,能否使用.模拟挂载,创建文件检查结果
备份 备份的数据量 自定义监控,系统是否有备份,发送邮件…占用多少空间
  • 用户访问流程之DNS解析
#zabbix服务端自定义监控

#1. DNS是否可用.
ping 就可以,ping通就表示dns可用.
定义带有参数的键值
check.ping[*], sh 脚本  "$1"  #$1是域名 可以解析返回1,否则返回0

#2. 域名过期时间(还剩下多少天)
check.domain[*],sh 脚本 "$1" #$1是域名 显示这个域名还有多久 过期(天)
whois baidu.com #过滤 Expiry 取出这个时间

用于计算两个时间之间有多少天
[root@m02-zbx-server ~]# date -d "2024-04-21"
Sun Apr 21 00:00:00 CST 2024
[root@m02-zbx-server ~]# date -d "2024-04-21" +%s
1713628800
[root@m02-zbx-server ~]# date +%s
1679036681

#3. https证书过期时间.
check.ssl[*],sh 脚本 "$1"  #$1是域名 https://
[root@m02-zbx-server ~]# curl -v https://baidu.com |& grep "expire date"|awk -F': ' '{print $2}'
Feb 27 23:59:59 2024 GMT
[root@m02-zbx-server ~]# date -d "Feb 27 23:59:59 2024 GMT" +%F
2024-02-28
[root@m02-zbx-server ~]# date -d "Feb 27 23:59:59 2024 GMT" +%s
1709078399
  • CDN
    • 流量
    • 带宽
    • (命中率)
    • 暂时web页面查看.
调用公有云的api接口获取.python/golang .
  • 负载均衡
    • 监控基础指标
    • 监控服务
      • nginx (配置负载均衡健康检查模块) tengine 页面(curl) 自定义下监控池塘多少个,每个池塘中节点是否运行中.
      • ngx状态 模板
      • 访问日志:状态码每一种状态码的数量(最近1小时,最近5000行).
[root@lb01 /var/log/nginx]# date +%F
2023-03-17
[root@lb01 /var/log/nginx]# date +%Y/%m/%d
2023/03/17
[root@lb01 /var/log/nginx]# date +%Y/%m/%d" "%H 
2023/03/17 15
[root@lb01 /var/log/nginx]# date +%Y/%m/%d" "%H -d '-1hour'
2023/03/17 14
[root@lb01 /var/log/nginx]# sed -n '/开始的时间/,/结束的时间/p'
^C
[root@lb01 /var/log/nginx]# sed -n '/开始的时间/,/结束的时间/p' access.log
  • web服务 - nginx
    • web:nginx 监控,日志监控
    • php 日志监控,服务监控
    • java 日志,jmxremote
    • xxx
[root@web01 ~]# cat /etc/nginx/conf.d/default.conf
server {
  listen 80 default_server;
  server_name "";
location / {
  charset utf8;
  default_type text/plain;
  return 200 "别闹,没事别乱访问";
}
location /status {
  stub_status;
  # allow
  # deny
  }
}
  • 修改模板
  • web-php
[root@m02-zbx-server ~]# cat /etc/nginx/conf.d/status.conf
server {
  listen 8888;
  server_name status.oldboylinux.cn;
  location /basic_status {
    stub_status;
   }
  location /php_status {
   fastcgi_pass 127.0.0.1:9000;
   fastcgi_index index.php;
   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   include fastcgi_params;
   }
  location /php_ping {
   fastcgi_pass 127.0.0.1:9000;
   fastcgi_index index.php;
   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   include fastcgi_params;
   }
}
[root@web01 /etc/nginx/conf.d]# egrep -v ';|^$' /etc/php-fpm.d/www.conf 
[root@web01 /etc/nginx/conf.d]# egrep -v ';|^$' /etc/php-fpm.d/www.conf 
[www]
user = nginx
group = nginx
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
;;php状态监控的配置
pm.status_path = /php_status
ping.path = /php_ping
ping.response = pong

slowlog = /var/log/php-fpm/www-slow.log
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on

php_value[session.save_handler] = redis
php_value[session.save_path] = tcp://172.16.1.51:6379
php_value[soap.wsdl_cache_dir] = /var/lib/php/wsdlcache

[root@m02-zbx-server ~]# systemctl restart nginx
[root@m02-zbx-server ~]# systemctl restart php-fpm.service
[root@m02-zbx-server ~]# curl http://127.0.0.1:8888/basic_status
Active connections: 1 
server accepts handled requests
 1 1 1 
Reading: 0 Writing: 1 Waiting: 0 
[root@m02-zbx-server ~]# curl http://127.0.0.1:8888/php_status
pool:                 www
process manager:      dynamic
start time:           08/May/2024:08:46:46 +0800
start since:          72
accepted conn:        1
listen queue:         0
max listen queue:     0
listen queue len:     511
idle processes:       4
active processes:     1
total processes:      5
max active processes: 1
max children reached: 0
slow requests:        0
[root@m02-zbx-server ~]# curl http://127.0.0.1:8888/php_ping
pong

zabbix20240805160212

zabbix20240805160235

zabbix20240805160317

  • db01

zabbix20240805160359

  • redis

zabbix20240805160439

zabbix20240805160512

  • 数据库
    • 模板
    • 日志
    • 数据空间

zabbix20240805160557

zabbix20240805160622

  • 存储

    • 系统监控
    • 服务进程
    • 是否可用:挂载下,创建些文件
    • 监控共享存储使用的空间
  • 对象存储(开发书写代码,测试写入)

  • 备份服务器

    • rsync服务
    • 空间
    • md5sum
    • 日常模拟数据恢复. 故障演练.
  • docker容器

    • 系统监控
    • docker模板监控

4)补充监控

  • apm监控网站性能监控。用户访问流程链监控。。。
  • docker监控

5)案例:监控api接口

1. 访问页面是否可以使用 zbx.oldboylinux.cn
http://zbx.oldboylinux.cn

2.访问zbx_api是否可用
http://zbx.oldboylinux.cn/api_jsonrpc.php
  • zbx服务端创建:web场景监控

zabbix20240805160821

  • 配置web场景基本信息

zabbix20240805160859

  • 添加操作步骤部分:第1步-检查zbx首页是否可以访问.

zabbix20240805160927

  • 添加操作:第2步骤检查zbx-api接口是否可以访问

zabbix20240805160958

  • 检查监控结果

zabbix20240805161829

  • 检查结果

zabbix20240805161911

zabbix20240805161930

十六、Zabbix高可用与升级

16.1 高可用

  • zbx 6.x 之前-zbx_server 多个+keepalived实现高可用即可。
  • zbx 6.x 开始 自带ha功能
[root@m03-zabbix-server-lidao996 ~]# zabbix_server -R ha_status
Failover delay: 60 seconds
Cluster status:
   # ID                       Name                 
    Address                       Status     Last Access
   1. cl43tm4p400010zult1zb275p <standalone server>   
    localhost:10051               active     3s
环境准备 说明
m02 zbx主
m03 zbx 服务端的备 或者使用新的主机64
  • 添加远程连接zbx数据库的用户
grant all on zabbix.* to 'zabbix'@'172.16.1.%' identified by 'zabbix'; 
  • 准备web04的 zbx服务端的环境
1. 分发zbx -server命令
2. 分发zbx server的配置文件
3. 分发zbx server 启动配置文件 systemctl daemon-reload 添加用户zabbix
4. 安装依赖。
scp /usr/local/sbin/zabbix_server 10.0.0.10:/usr/local/sbin/
scp zabbix-6.0-all-rpms-lidao996.tar.gz 10.0.0.10:~
scp -r zabbix/   10.0.0.10:/etc/
scp /usr/lib/systemd/system/zabbix-server.service 10.0.0.10:/usr/lib/systemd/system/
  • 开始配置
第1台 zbx服务端
[root@m03-zabbix-server-lidao996 /etc]# grep '^[a-Z]' /etc/zabbix/zabbix_server.conf
ListenPort=10051
LogFile=/tmp/zabbix_server.log
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
JavaGateway=127.0.0.1
JavaGatewayPort=10052
StartJavaPollers=5
Timeout=4
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1
HANodeName=m02-zabbix-server
NodeAddress=172.16.1.62:10051

第2台zbx 服务端
[root@m03 ~]# grep '^[a-Z]' /etc/zabbix/zabbix_server.conf
ListenPort=10051
LogFile=/tmp/zabbix_server.log
DBHost=172.16.1.63
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
JavaGateway=127.0.0.1
JavaGatewayPort=10052
StartJavaPollers=5
Timeout=4
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1
HANodeName=m03-zabbix_server_backup
NodeAddress=172.16.1.63:10051
  • 检查当前高可用情况(主节点检查) 和检查高可用情况(备节点)

zabbix20240808110716

zabbix_server -R ha_status

zabbix20240808110804

  • web页面查看

zabbix20240808110831

  • 客户端配置
[root@web03 ~]# grep '^[a-Z]' /etc/zabbix/zabbix_agent2.conf
PidFile=/var/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
Server=172.16.1.63,172.16.1.62           #多个服务端ip、主机名要用逗号分隔。
ServerActive=172.16.1.63;172.16.1.62     #多个ha集群节点名字或ip,要用分号分隔。
HostnameItem=system.hostname
Include=/etc/zabbix/zabbix_agent2.d/*.conf
ControlSocket=/tmp/agent.sock
Include=./zabbix_agent2.d/plugins.d/*.conf
  • 配置仪表盘显示高可用状态信息

zabbix20240808110909

zabbix20240808110926

zabbix20240808110942

zabbix20240808110957

zabbix20240808111010

zabbix20240808111025

  • 补充

zabbix20240808111209

核心:

  • zbx高可用架构:
  • 前端(可以配置多个做负载均衡(相当于是高可用))
  • 数据库(数据库专用的高可用服务MHA)
  • zabbix 6.0开始HA功能.之前的版本通过keepalived+监控脚本实现高可用.
  • 使用的时候注意数据库连接,数据库用户授权.
  • HA状态检查 zabbix_server -R ha_status

16.2 升级

  • 服务端升级zbx 2.x 3.x 4.x 5.x –> zbx 6.x
  • 升级流程
    • 1.准备好新的数据库,备份好旧的数据库内容。
    • 2.按照数据库升级 要求变更数据库内容
    • 3.准备新的zabbix_server(rpm包)、命令和配置文件。
    • 4.备份,替换旧的zbx_server命令.检查。
    • 5.前端页面,根据要求准备好php对应版本即可。
    • 6.备份,放入新的前端代码即可。
    • 7.调试。

链接: https://www.zabbix.com/documentation/current/zh/manual/appendix/install/db_primary_keys

十七、Grafana的基本应用与配置

17.1 Grafana概述

  • 使用其他服务获取到的数据通过Grafana展示。
  • 通过zbx api接口获取zabbix监控数据进行展示。
  • 卖家秀

zabbix20240808140655

zabbix20240808140723

17.2 Grafana实战

环境准备

环境
m02-zabbix-server zabbix服务端 10.0.0.62
m03-grafana grafana服务端 10.0.0.63
nfs01 zbx客户端 10.0.0.31

使用流程

  • m04: 部署Grafana

  • m04: 安装zabbix插件

  • web: Grafana web页面配置-连接zabbix api (通过各种查询获取数据)

  • web: Grafana web页面添加与配置图形dashboard,仪表盘

  • web: Grafana 补充与使用模板

1)部署grafana 9.3.6

#1. 根据课堂提供的grafana软件包,安装grafana
yum localinstall -y grafana-9.3.6-1.x86_64.rpm 
#2. 启动服务并设置开机自启动
systemctl enable --now grafana-server.service 
# 查看grafana进程及端口号
[root@m03-grafana tools]# ps -ef |grep grafana
grafana    1918      1  4 10:02 ?        00:00:00 /usr/sbin/grafana-server --config=/etc/grafana/grafana.ini --pidfile=/var/run/grafana/grafana-server.pid --packaging=rpm cfg:default.paths.logs=/var/log/grafana cfg:default.paths.data=/var/lib/grafana cfg:default.paths.plugins=/var/lib/grafana/plugins cfg:default.paths.provisioning=/etc/grafana/provisioning
root       1934   1325  0 10:02 pts/0    00:00:00 grep --color=auto grafana
[root@m03-grafana tools]# ss -lntup|grep grafana
tcp    LISTEN     0      16384  [::]:3000               [::]:*                   users:(("grafana-server",pid=1918,fd=13))
#3. 解压插件软件
tar xf grafana-9.3.6-alexanderzobnin-zabbix-app-v4.2.10.tar.gz 
#4. 创建插件目录
mkdir -p /var/lib/grafana/plugins
#5.移动插件到目录中并重启grafana 
mv alexanderzobnin-zabbix-app/ /var/lib/grafana/plugins/
systemctl restart grafana-server.service 
#6. 检查插件
grafana-cli plugins ls 
[root@m03-grafana tools]# grafana-cli plugins ls
installed plugins:
alexanderzobnin-zabbix-app @ 4.2.10
Please restart Grafana after installing plugins. Refer to Grafana documentation for instructions if necessary.
#7. 检查grafana端口

2)web页面访问

  • gra.oldboylinux.cn:3000
  • 用户名/密码: admin/admin

zabbix20240808141112

  • 跳过重新设置密码

zabbix20240808141155

  • grafana页面

zabbix20240808141237

  • 简单配置

zabbix20240808141304

  • 开灯与配置语言

zabbix20240808141323

3)配置zbx插件

  • 激活zabbix插件.

zabbix20240808141411

  • 如果搜索不到zabbix表示没有安装对应的插件.
  • 可以通过提供的软件包解压或者grafana-cli plugins install alexanderzobnin-zabbix-app安装.

zabbix20240808141458

4)配置grafana的数据源

  • grafana连接zabbix(添加数据源 datasource )

zabbix20240808141528

zabbix20240808141540

zabbix20240808141615

  • 配置zabbix数据源:填写zbx_api接口地址

zabbix20240808141659

zabbix20240808141712

  • 导入自带的几个仪表盘(dashboard)

zabbix20240808141746

5)web: Grafana web页面添加与配置图形dashboard,仪表盘

  • 添加几个模板

zabbix20240808141810

  • 修改模板

zabbix20240808141838

zabbix20240808141852

6) 配置与修改模板

  • 修改以主机名

zabbix20240808141930

  • 修改以显示uptime

zabbix20240808142000

  • 修改以显示cpu使用率
/CPU (?!idle)/   # 原始
/^CPU .*time$/    # 
#/^CPU (?!idle).*time$/ # 
/CPU (?!idle).*time$/

zabbix20240808142040

7)自定义监控获取zbx服务端的每秒新值

  • zabbix.stats键值的结果之一
    • 需要通过自定义监控创建1个监控项运行zabbix.stats键值
    • 创建相关项(监控项)对上面监控项结果进行过滤(sed反向引用)

zabbix20240808142114

  • 定义监控项(主要项)

zabbix20240808142153

  • 创建监控项(相关项)

zabbix20240808142216

zabbix20240808142234

  • 配置相关项的过滤条件.

zabbix20240808142306

"requiredperformance":14.209444,
正则部分
"requiredperformance":([0-9.]+)   我们想要的内容 \1
  • 输入测试数据(来自于zabbix.stats键值)并测试正则表达式.

zabbix20240808142734

  • 测试数据可以通过下面命令获取:
zabbix_get -s 127.0.0.1 -k zabbix.stats #用于获取测试正则的数据
  • 检查最新数据看看是否获取到数据.

zabbix20240808142829

  • 修改grafana页面

zabbix20240812144529

  • 成果显示

zabbix20240812144716

  • 继续创建相关项监控
  • zbx 各种poller繁忙程度
    • “poller” busy
    • “history poller” busy
"poller":{"busy":{"avg":0.006772,
正则表达式
"poller":\{"busy":\{"avg":([0-9.]+)  我们想要的内容  \1

"history poller":{"busy":{"avg":0.000000
"history poller":\{"busy":\{"avg":([0-9.]+)    我们想要的内容  \1
  • 设置问题

zabbix20240812144821

  • 设置负载

zabbix20240812144851

  • 添加另一种query

zabbix20240812144921

  • 显示

zabbix20240812144953

17.3 一个更完善的模板(仪表盘)

  • 下载官方仪表盘

链接: https://grafana.com/grafana/dashboards/

zabbix20240812145307

  • 使用id或下载json数据文件

zabbix20240812145336

  • 导入仪表盘

zabbix20240812145405

  • 两种方式,一种JSON格式导入;另一种输入导入上文提到的ID号

zabbix20240812145431

  • 导入

zabbix20240812145459

  • 没有数据,准备进行更改,打开仪表盘编辑模式

zabbix20240812145528

  • 开启编辑模式

zabbix20240812145556

  • 保存

zabbix20240812145635

  • 修改注意事项(右边的展示区也会导致,no data或N/A情况)

zabbix20240812145706

  • grafana仪表盘中变量的设置与修改

zabbix20240812145737

  • 默认

zabbix20240812145807

  • 修改后

zabbix20240812145842

  • 关于模板报错解决与处理(版本与分类问题)(之前版本有此问题)

zabbix20240812145933

  • 本意是想获取应用集

zabbix20240812150002

  • 如果获取不到就把他删掉

zabbix20240812150030

  • 磁盘监控

zabbix20240812150058

  • 监控网卡

zabbix20240812150126

  • 界面去掉多选选项,成为单选

zabbix20240812150156

  • 修改后效果

zabbix20240812150225

17.4 Grafana总结

  • 通过来自于各种数据源的数据,通过Grafana进行展示。
  • 自定义仪表盘与使用变量(主机组和主机)。
  • 熟练使用创建,修改仪表盘即可
  • zbx: 相关项监控
名词 含义说明
dashborad 仪表盘 拥有各种图形页面(展示监控项)
panel 面板 其中某一个监控项
支付宝打赏 微信打赏

赞赏是不耍流氓的鼓励

-->