ZABBIX

### 1 监控是什么,为什么要监控

#### 1.1 监控概述

监控是指对行为、活动或其他变动中信息的一种持续性关注,通常是为了对人达成影响、管理、指导或保护的目的

监控:

见识主机,架构状态

控制,事后追责

目标

​ 早发现造出来

​ 网站扩容

随着用户的增多,服务随时可能被oom

#### 1.2 监控大纲

“`
1、监控与命令
2、面试题:你们公司监控了什么
3、监控通用架构
4、监控生产最佳实践
5、监控设备
6、自定义监控
7、自定义监控进阶与故障案例
8、监控与告警,邮件、微信、短信、电话、钉钉、飞书、调取api接口
9、监控886-zabbix-agent2
agent:通用
snmp:网络设备,带宽,流量
jmx(java gateway tomcat)
ipmi
10、自动化监控
自动发现
自动注册
主动与被动
分布式监控proxy:多个机房,多个地区监控
11、监控中级挑战
iid低级自动发现:自动获取、调价监控项、触发器、图形、mysql多实例、tomcat多实例
zabbix内置,自动发现网卡,磁盘分区,硬盘,cpu
手动创建iid(端口)
自动获取对应服务的端口,按照指定格式显示
zabbix客户端,创建自动发现key
创建自定义监控项
web页面操作,添加监控项原型
web页面操作,添加触发器原型
web页面操作,添加图形原型
启动自动发现规则
zabbix api
全网监控项目
zabbix与提升
grafana

“`

### 2 监控的一些命令

| 项目 | 对应的检查命令 |
| —- | ———————————————————— |
| 网站 | curl/wget |
| 服务 | systemctl/service/chconfig |
| 进程 | ps/pstree/pgrep/pidstat/top/htop |
| cpu | top/htop/vmstat/mpstat/lscpu/cpuinfo/w/uptime/sar |
| 内存 | top/free/ps/iotop/vmstat/mpstat/sar/hcache |
| 磁盘 | iptop/iostat/sar,磁盘测试命令dd |
| 网络 | iftop/nethogs/nstat/ifstat/mtr/sar/ip/route |
| 硬件 | megacli(raid)/ipmitool(温度,cpu坟山转速)/Im_sensors(温度) |

“`
procs ———–memory———- —swap– —–io—- -system– ——cpu—–
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 6804916 2708 650304 0 0 13 5 107 143 0 0 99 0 0
“`

### 3 监控有哪些

| 阶段 | 说明 |
| —- | ———————————————————— |
| 过去 | nagios+cacti |
| 目前 | zabbix,grafana,openFaicon(小米开源),prometheus,n9e,滴滴开源 |

### 4 zabbix监控架构

#### 4.1 生命周期

LTS long time support长期维护版本

#### 4.2 zabbix监控架构

“`
zabbix是一个cs架构的服务
zabbix监控流程
zabbix-agent获取数据-发送给zabbix-server服务端-数据存放在服务端–数据库–zabbix web页面展示数据
“`

#### 4.3 主机规划

| 角色 | 主机名 | 网络 | 配置 |
| ———— | ————- | —- | —- |
| zabbix服务端 | zabixx-server | 62 | 2c4g |
| zabbix | web01 | 7 | 1c1g |
| zabbix客户端 | db01 | 51 | 1c1g |

“`
安装步骤
1、安装docker20.10和docker-compose 2.26
2、导入镜像
3、docker-compose启动,浏览器访问与配置
4、宿主机安装客户端zbx_agent2

yum install -y docker
cat >/etc/docker/daemon.json</etc/zabbix/zabbix_agent2.conf< /dev/null` 2>
/dev/null || true
endscript
}
“`

#### 5.2 客户端配置

| zabbix客户端目录详解 | 说明 |
| —————————— | —————————— |
| /etc/zabbix/zabbix_agent2.conf | 配置文件 |
| /etc/zabbix/zabbix_agent2.d/ | 自配置文件目录,用于自定义监控 |
| /var/log/zabbix | 日志 |

#### 5.3 zabbix_agent和zabbix_agent2

| | zabbix_agent | zabbix_agent2 |
| ——– | —————- | ———————————————————— |
| 开发语言 | C语言 | Go语言和C语言 |
| 性能 | 独立进程方式运行 | 1个进程多个线程运行,减少资源消耗,占用较少的tcp资源,能够承受更高并发 |

### 6 监控任意主机流程

“`
1、安装客户端及修改配置文件,测试
2、web页面添加主机,关联模版
3、调试
“`

![image-20241216162748546](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241216162748546.png?lastModify=1746594238)

![image-20241216162641623](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241216162641623.png?lastModify=1746594238)

![image-20241216162656921](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241216162656921.png?lastModify=1746594238)

等待变绿

#### 6.1 小结

“`
1、安装客户端及修改配置文件,测试,交给ansible
2、web页面添加主机,关联模版,通过zabbix自动发现与自动注册
3、调试

调试命令
zabbix_get -s 172.16.1.8 -k system.hostname
“`

### 7 弥补监控死角-自定义监控

#### 7.1 概述

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

linux zabbix agent模板可以监控以下等内容

“`
cpu
磁盘
内存,swap
网络,网卡
系统负载
进程数量
用户登录数量
系统运行时长
自定义监控应用场景
模版中没有我们所需要的监控项
末班中监控项过多

web01自动以监控僵尸进程数量?自定义监控
web01监控没有通过堡垒机登录的用户数量
“`

#### 7.2 自定义监控全流程

| 步骤 | 流程 | 说明 |
| —— | ————————————————— | ————————————– |
| 客户端 | 通过命令、脚本取出对应的值 | |
| | 根据zabbix_agent2要求按格式书写配置文件,创建,键值 | 键值key用于获取客户端数据 |
| 服务端 | 服务端测试键值是否可用 | zabbix_get |
| | web页面:键值也监控项关联,创建监控项 | |
| | web页面:测试 | |
| | web页面:图形 | |
| | web页面:触发器(报警) | 是否发出警告:需要根据情况决定是否设置 |

##### 1 客户端

“`
通过命令、脚本取出对应的值

获取僵尸进程数量
top bn1 | awk ‘NR==2{print $(NF-1)}’

在/etc/zabbix/zabbix_agent2.d目录下新建一个.conf结尾的文件,添加以下内容
UserParameter=check.zombie,top bn1 | awk ‘NR==2{print $(NF-1)}’
重启客户端
固定写法
UserParameter=check.xxx,命令或脚本
“`

##### 2 服务端

“`
在服务端使用以下命令测试
zabbix_get -s 172.16.1.7 -k check.zombie
命令结果0
“`

| zabbix_get命令 | 说明 |
| ————– | ————————— |
| -s | 客户端ip地址 |
| -k | 指定键值 |
| -p | 指定客户端端口号,默认10050 |

##### 3 web页面创建监控项

配置→主机→监控项→创建监控项

![image-20241216172223863](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241216172223863.png?lastModify=1746594238)

![image-20241216172337757](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241216172337757.png?lastModify=1746594238)

![image-20241216173331604](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241216173331604.png?lastModify=1746594238)

![image-20241216180617589](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241216180617589.png?lastModify=1746594238)

![image-20241216180626903](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241216180626903.png?lastModify=1746594238)

![image-20241216180643365](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241216180643365.png?lastModify=1746594238)

![image-20241216180636802](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241216180636802.png?lastModify=1746594238)

![image-20241216180655107](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241216180655107.png?lastModify=1746594238)

“`
制造僵尸进程,查看
gcc zombie.c -o zombie
./zombie &
top查看
“`

测试时报错

“`
Connection to Zabbix server “localhost” failed. Possible reasons:
1. Incorrect server IP/DNS in the “zabbix.conf.php”;
2. Incorrect DNS server configuration.
Cannot assign requested address
“`

##### 4 触发器

根据监控项获取的数值,决定是否要告警,是否要提示异样

![image-20241216180913504](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241216180913504.png?lastModify=1746594238)

![image-20241216180921175](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241216180921175.png?lastModify=1746594238)

![image-20241216180930510](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241216180930510.png?lastModify=1746594238)

![image-20241216180937459](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241216180937459.png?lastModify=1746594238)

![image-20241216180944263](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241216180944263.png?lastModify=1746594238)

![image-20241216180952458](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241216180952458.png?lastModify=1746594238)

![image-20241216181003156](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241216181003156.png?lastModify=1746594238)

![image-20241216181009803](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241216181009803.png?lastModify=1746594238)

##### 5 图形

![image-20241216181515924](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241216181515924.png?lastModify=1746594238)

![image-20241216181522155](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241216181522155.png?lastModify=1746594238)

![image-20241216181533136](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241216181533136.png?lastModify=1746594238)

![image-20241216181539685](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241216181539685.png?lastModify=1746594238)

![image-20241216181544799](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241216181544799.png?lastModify=1746594238)

##### 6 自定义监控小结

“`
只要能通过命令、脚本取出来的东西就可以自定义监控
1、客户端:通过命令脚本取出想要的内容,创建键值key,写入配置文件
2、服务端:命令测试键值,web页面,添加监控项,添加触发器,添加图形
3、调试
“`

### 8 常用键值与触发器函数

#### 8.1 键值

| 常用键值 | 说明 |
| —————— | ———————————————————— |
| agent.hostname | 主机名,获取的是客户端配置文件中指定的主机名 |
| systemctl.hostname | 主机名,系统的主机名,类似于hostname |
| agent.ping | 服务端和客户端是否通畅,通为1,不通为非1 |
| net.if.in[if] | interface网卡网络接口上传流量统计,返回证书,if是网卡名字,可以忽略 |
| proc.num | 进程数,返回整数,name进程名字,user用户,state进程状态,cmaline进程对应命令 |
| net.if.out[if] | 流出流量统计,返回整数 |
| net.tcp.port[port] | 检查是否能建立tcp连接到指定的端口,0不能连接,1可以连接 |

“`
获取的是客户端配置文件中指定的主机名
zabbix_get -s 172.16.1.7 -k agent.hostname
系统的主机名
zabbix_get -s 172.16.1.7 -k system.hostname
zabbix_get -s 172.16.1.7 -k agent.ping
zabbix_get -s 172.16.1.7 -k net.if.in[ens33]
184949
zabbix_get -s 172.16.1.7 -k net.if.out[ens33]
115448

zabbix_get -s 172.16.1.7 -k proc.num
161
zabbix@73ff1d966336:/var/lib/zabbix$ zabbix_get -s 172.16.1.7 -k proc.num[state]
0
zabbix@73ff1d966336:/var/lib/zabbix$ zabbix_get -s 172.16.1.7 -k proc.num[root]
0

zabbix_get -s 172.16.1.7 -k net.tcp.port[,22]
1
zabbix_get -s 172.16.1.7 -p 10050 -k proc.num[,,zomb]
0
“`

#### 8.2 常用键值参考

https://www.zabbix.com/documentation/6.0/zh/manual/config/items/itemtypes/zabbix_agent

#### 8.3 触发器函数

写在触发器表达式中,用于设置报警条件

触发器函数要结合键值(监控项)

| 功能(函数) | 说明 |
| ———— | ——————————– |
| 对比与比较 | |
| last() | 最近值,取出最近一些值 |
| nodata() | 是否有数据 |
| diff() | 是否发生变化,一般配合md5check() |
| 进行计算 | |
| avg() | 平均值 |
| min() | 最小值 |
| max() | 最大值 |

分析案例-目的是用来检查/etc/passwd的变化情况,间接检查是否有用户增加或删除

“`
last(/backup/vfs.file.cksum[/etc/passwd,sha256],#1) <>
last(/backup/vfs.file.cksum[/etc/passwd,sha256],#2)
#倒数第1个 /etc/passwd 的md5值
last(/Zabbix server/vfs.file.cksum[/etc/passwd,sha256],#1)
<>
#倒数第2个 /etc/passwd 的md5值
last(/Zabbix server/vfs.file.cksum[/etc/passwd,sha256],#2)
倒数第1个md5的值和倒数第2个md5的是 如果不相等了,则报警.
目的是用来检查/etc/passwd的变化情况,间接检查是否有用户增加或删除.
“`

#### 8.4 自定义监控-参数案例

“`
把zbx自定义监控键值UserParameter=key,命令或脚本
当成一个脚本或命令
脚本命令运行的时候不要参数,参考我们10.2里面的写法
脚本或命令运行的时候需要传参,参考我们接下来的写法即可
“`

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

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

“`
选择命令
w who只能显示当前此时此刻,登录情况
lastlog实现
调取接口实现
键值:实现取出指定用户登录的ip地址
服务端:web页面触发器对比
“`

| 步骤 | 流程 | 说明 |
| —— | ——————————————- | ———————————— |
| 客户端 | 通过命令、脚本取出对应的值 | |
| | 根据zbx要求按照格式,书写配置文件,创建键值 | 键值key用于获取客户端数据 |
| | 重新客户端客户端测试键值是否可用 | zabbix_agent2 -t |
| 服务端 | 服务端测试键值是否可用 | zabbix_get |
| | web页面:键值与客户端关联 | |
| | web页面:测试 | |
| | web页面:触发器 | 是否发出警告需要根据情况决定是否设置 |

#### 1 客户端

“`
lastlog |grep root |awk ‘{print $3}’
root有可能未来是其他用户

书写键值
UserParameter=user.login.check[*],lastlog | grep “$1” | awk ‘{print $$3}’
如果使用自定义键值传参,awk取列的时候要使用$$列。
如果没有传参,awk正常使用即可
测试键值
abbix_agent2 -t user.login.check[root]
“`

![image-20241218112943771](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218112943771.png?lastModify=1746594238)

#### 2 服务端

“`
zabbix_get -s 172.16.1.7 -k user.login.check[root]
“`

#### 3 web添加监控项

![image-20241218113744054](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218113744054.png?lastModify=1746594238)

![image-20241218113759979](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218113759979.png?lastModify=1746594238)

web触发器添加

“`
last(/web01/user.login.check[root],#1)
<>
last(/web01/user.login.check[root],#2)
意思是最后两个值不相等
“`

#### 4 小结

“`
自定义监控,key带参数
故障:带参数+awk取列时使用$$3才是取第三列
多看看模版中的监控项和触发器规则
“`

### 9 使用模版

“`
我们一般在某一台机器上创建监控项,触发器,图形,一般用于测试
测试完成需要创建或修改模版,把自定义监控项复制过去
使用的时候只需要把模版与主机关联
发送对应的自定义配置文件和脚本

自定义监控后续步骤
1、创建模版
2、添加自定义监控项
3、添加触发器
4、添加图形
5、模版关联主机
6、客户端配置自定义键值分发配置文件和脚本
“`

#### 1 创建模版

![image-20241218114917352](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218114917352.png?lastModify=1746594238)

![image-20241218114934929](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218114934929.png?lastModify=1746594238)

在模板中创建变量(宏)

![image-20241218115002445](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218115002445.png?lastModify=1746594238)

检查模板信息

![image-20241218115016311](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218115016311.png?lastModify=1746594238)

#### 2 添加自定义监控项

进入主机中复制即可

![image-20241218115125436](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218115125436.png?lastModify=1746594238)

选择要复制的监控项,选择复制即可,(可批量)

![image-20241218115155946](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218115155946.png?lastModify=1746594238)

选择复制到模板中

![image-20241218115214410](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218115214410.png?lastModify=1746594238)

提示复制成功

![image-20241218115233527](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218115233527.png?lastModify=1746594238)

检查末班中监控项部分:多乐两个监控项

![image-20241218115341342](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218115341342.png?lastModify=1746594238)

#### 3 复制触发器与图形

主机→触发器

![image-20241218115426127](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218115426127.png?lastModify=1746594238)

复制

![image-20241218115436774](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218115436774.png?lastModify=1746594238)

检查模板

![image-20241218115447623](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218115447623.png?lastModify=1746594238)

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

#### 4 模板关联主机

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

![image-20241218115624920](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218115624920.png?lastModify=1746594238)

选择模板部分

![image-20241218115640163](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218115640163.png?lastModify=1746594238)

添加模版关联主机成功

![image-20241218115700460](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218115700460.png?lastModify=1746594238)

#### 5 配置linux客户端键值

分发键值配置文件到db01和nfs01

重启zbx客户端,使用ansible分发

#### 6 调试

给监控项设置标记,方便分类

“`
zabbix5.x之前叫应用及,zabbix6.x叫标记,都是用于分类
“`

#### 7 小结

“`
找到一台主机进行测试标记,监控项,触发器,图形。。。
然后创建模版,把对应的内容复制到模板中
模板关联主机
键值的配置文件发过去
“`

#### 8 自定义监控流程

“`
客户端:命令,脚本,客户端子配置文件
服务端:测试客户端键值
前端:添加监控项、触发器、图形,并测试有数据后,创建模板,复制监控项,复制触发器,复制图形,模板与主机关联
客户端:分发自定义配置和脚本
测试与检查
“`

## 10 换个角度看监控 zabbix-agent

#### 1 zabbix客户端概述

| zabbix客户端 | 应用场景 |
| ————- | ———————————————————— |
| zabbix-agent2 | 适用于几乎所有情况,支持自定义监控,linux,windows server,android/ios |
| SNMP客户端 | 用于监控网络设备,简单网络管理协议,监控网络设备 |
| JMX | jmxremote java-gateway监控java app(tomcat),未来推介自定义健康zabbixz_agent2+jstack/jmap/jstats |
| IPMI | 监控硬件,直接使用自定义监控ipmitool+megacli |

#### 2 zabbix-agent监控windows

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

##### 2.1 安装windows客户端

安装完成后修改windows zabbix-agents注释掉tls加密认证功能

“`
sed -i ‘/^TLS/s@^@#@g’ zabbix_agent2.conf
net stop “Zabbix Agent 2”
net start “Zabbix Agent 2″
“`

![image-20241218125121756](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218125121756.png?lastModify=1746594238)

#### 3 网络监控snmp

snmp简单网络管理协议

“`
流程:
1、开启网络设备的snmp功能,只读权限,设置社团名字(V2C)(V3用户名+密码),命令行手动测试
2、web添加主机配置接口,关联模板

snmp有多个版本
v2c使用团体名作为认证
v3版本用户名和密码认证
命令行连接测试网络设备
yum install -y net-snmp-utile
snmpwalk -v 2c oldboykey 10.0.0.1 SysDesc
“`

##### 3.1 开启网络设备snmp功能

![image-20241218154935874](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218154935874.png?lastModify=1746594238)

![image-20241218154952673](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218154952673.png?lastModify=1746594238)

配置团体名

![image-20241218155011291](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218155011291.png?lastModify=1746594238)

“`
[root@m03 ~]# snmpwalk -c oldboykx -v 2c 192.168.13.1 SysDesc
snmpwalk 命令,使用get方式访问网络设备
-c 团体名字
-v snmp版本
ip地址
指令(获取网络设备的信息) 名称方式/oid sysdesc、sysUptime、IfNumber、IfDescr、IfInOctet、IfInOctet、
“`

##### 3.2 添加主机

![image-20241218155353852](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218155353852.png?lastModify=1746594238)

![image-20241218155400549](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218155400549.png?lastModify=1746594238)

##### 3.3 检查

![image-20241218155422033](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218155422033.png?lastModify=1746594238)

##### 3.4 小结

“`
网络设备开启snmp功能,web进行检查
用于监控网络设备
支持snmp服务设备进行监控
“`

#### 4 监控java应用

方案选型和原理

| 方案 | 监控方案 | 说明 |
| —– | ————————————– | ———————————————————— |
| 方案1 | 开启java jmxremote | zbx中关联对应的模板,安装与开启java工具 zbx-java-gateway |
| 方案2 | 通过java命令,自定义监控获取想要的指标 | 通过在java应用服务器安装zbx agent和java命令(jmap,jstack)然后自定义监控 |

##### 1 方案1 原理图

![image-20241218162819647](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218162819647.png?lastModify=1746594238)

##### 2 方案2 原理图(类似于自定义监控)

![image-20241218162855472](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241218162855472.png?lastModify=1746594238)

##### 3 方案1实战

“`
1、开启远程监控功能
2、zabbix服务端部署java gateway配置
3、添加主机关联模版
“`

###### 1 开启远程监控功能

“`
修改tomcat目录下bin/catalina.sh
添加以下几行内容
CATALINA_OPTS=”$CATALINA_OPTS \
-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″
172.16.1.9是tomcat服务器自己ip
查看是否有12345端口
“`

###### 2 docker运行gateway

“`
docker run -d –name zbx_java_gateway –link zabbix-mysql-6.0:zabbix-server -p 10052:10052 –network=zabbix_net zabbix/zabbix-java-gateway:ubuntu-6.0-latest
“`

删除已有zbx服务器容器并重新创建1个并指定java gateway ip+端口

“`
docker run –name zabbix-server-mysql-6.0 -d \
-e DB_SERVER_HOST=”mysql-server” \
-e MYSQL_DATABASE=”zabbix” \
-e MYSQL_USER=”zabbix” \
-e MYSQL_PASSWORD=”1″ \
-e MYSQL_ROOT_PASSWORD=”Root123″ \
-e ZBX_JAVAGATEWAY_ENABLE=true \
-e ZBX_JAVAGATEWAY=172.16.1.62 \
-e ZBX_JAVAGATEWAYPORT=10052 \
–link mysql-server:mysql-server \
–network=oldboy_zbx_net \
-p 10051:10051 \
–restart always \
zabbix/zabbix-server-mysql:ubuntu-6.0-latest
修改zbx服务端配置文件.
-e ZBX_JAVAGATEWAY_ENABLE=true 启动java_gateway功能,zbx服务端
java_gateway进程
-e ZBX_JAVAGATEWAY=172.16.1.62 #
-e ZBX_JAVAGATEWAYPORT=10052
“`

docker-compose

“`
services:
db:
image: “mysql:8.0-debian”
container_name: “mysql-server”
networks:
– oldboy_zbx_net
restart: always
ports:
– 3306:3306
– 33060:33060
volumes:
– /app/data/mysql/:/var/lib/mysql/
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASS}
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_USER_PASS}
command:
– –character-set-server=utf8
– –collation-server=utf8_bin
– –default-authentication-plugin=mysql_native_password
zbx_server:
image: zabbix/zabbix-server-mysql:ubuntu-6.0-latest
container_name: zabbix-server-mysql-6.0
networks:
– oldboy_zbx_net
restart: always
ports:
– 10051:10051
links:
– db:mysql-server
depends_on:
– db
environment:
DB_SERVER_HOST: “mysql-server”
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASS}
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_USER_PASS}
ZBX_JAVAGATEWAY_ENABLE: true
ZBX_JAVAGATEWAY: 172.16.1.62
ZBX_JAVAGATEWAYPORT: 10052
zbx_web:
image: zabbix/zabbix-web-nginx-mysql:ubuntu-6.0-latest
container_name: zabbix-web-nginx-mysql
networks:
– oldboy_zbx_net
restart: always
ports:
– 80:8080
links:
– db:mysql-server
– zbx_server:zabbix_server
depends_on:
– db
– zbx_server
environment:
ZBX_SERVER_HOST: “zabbix_server”
DB_SERVER_HOST: “mysql-server”
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASS}
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_USER_PASS}
zbx_java_gateway:
image: zabbix/zabbix-java-gateway:ubuntu-6.0-latest
container_name: zabbix-java-gateway
restart: always
networks:
– oldboy_zbx_net
ports:
– 10052:10052
links:
– zbx_server:zabbix_server
networks:
oldboy_zbx_net:
driver: “bridge”
ipam:
config:
– subnet: 172.100.0.0/16
ip_range: 172.100.1.0/24
gateway: 172.100.1.1
错误
yaml: line 2: did not find expected key
未对齐
使用docker-compose config来检查语法,无输出及语法正确
“`

###### 3 zbx服务端部署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. 重启服务端
“`

![image-20241219123507173](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241219123507173.png?lastModify=1746594238)

![image-20241219123511390](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241219123511390.png?lastModify=1746594238)

![image-20241219123521323](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241219123521323.png?lastModify=1746594238)

###### 4 jar包应用

“`
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
“`

###### 4 自定义监控java应用

只需要jdk,agent客户端完成

不需要jmxremote,不需要javagateway

“`
UserParameter=java.thread.state[*],sh /etc/zabbix/zabbix_agent2.d/check_java_thread_state.sh “$1”

[root@web03 /etc/zabbix/zabbix_agent2.d]# cat check_java_thread_state.sh
#!/bin/bash
##############################################################
# File Name:check_java_thread_state.sh
# Version:V1.0
# Author:oldboy lidao996
# Organization:www.oldboyedu.com
# Desc:
##############################################################
#1.vars
app=/app/tools/tomcat
state=$1

#2.app pid
app_pid=`jps -lvm | grep “${app}” | awk ‘{print $1}’`

#3.blocked number
function blocked() {
jstack ${app_pid} | grep -i blocked | wc -l
return $?
}

#4.running/runnable number
function run() {
jstack ${app_pid} | egrep -i “running|runnable” | wc -l
return $?
}

#5.waiting number
function wait() {
jstack ${app_pid} | grep -i “waiting” | wc -l
return $?
}

#6.case
function main() {
case “$state” in
blocked) blocked ;;
run) run ;;
wait) wait ;;
*) echo error
esac
}

main
“`

###### 5 java监控小结

“`
方案1:推荐使用自定义监控(命令,脚本)
方法2:jmx功能
“`

#### 5 监控硬件设备

“`
物理服务器等服务器设备
远程控制卡连接物理服务器,开启ipmi功能(开机bios里面修改)
“`

| 监控方案 | 步骤 |
| ——– | ———————————————————— |
| 方案1 | 开启设备的ipmi功能监控,添加接口的时候选择ipmi即可(进入biosLAN局域网访问) |
| 方案2 | 通过客户端命令获取指标实现监控硬件:megacli和ipmitool |

## 11 小结

| zabbix客户端 | 说明 |
| ————- | ———————————————————— |
| zabbix-agent2 | 适用于几乎所有情况,支持自定义监控,windows,linux,android,ios |
| snmp客户端 | 用于监控网络设备,简单网络管理协议,监控网络设备 |
| jmx | java-gateway,推荐zabbix_agent2+jmap/stack/jps/jstats |
| ipmi | 硬件,直接使用自定义监控(ipmitool+megacli) |

![image-20241219163354940](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241219163354940.png?lastModify=1746594238)

## 12 监控自动化

自动添加主机并关联模板

自动发现与自动注册,自动识别zbx客户端主机,web页面(创建主机,关联模板关联用户组,启动主机)

| 自动添加主机方案 | 含义 | 应用场景 |
| ———————- | —————————————————- | ————————————– |
| 自动发现(服务端主动) | 服务端主动去找是否有新的主机,如果有就添加 | 配置简单,大量添加主机不适合,临时可用 |
| 自动注册(客户端主动) | 客户端主动去找服务端提交自己的信息,请求想服务端注册 | 配置繁琐,经常性,大量主机 |

### 1 自动发现

“`
1、客户端配置文件
2、web配置自动发现规则-发现新的主机
3、web配置自动发现的动作,发现主机后关联模板,添加主机,加入主机组,启用

“`

#### 1 客户端zbx agent,配置文件

“`
ansible实现
playbook
yum
template
“`

![image-20241219165044949](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241219165044949.png?lastModify=1746594238)

![image-20241219165050007](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241219165050007.png?lastModify=1746594238)

检查自动发现的主机(此时仅仅发现,并不会添加到zbx主机中)

![image-20241220110403136](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241220110403136.png?lastModify=1746594238)

#### 2 web配置动作

“`
1、配置自动发现的动作
2、添加组
3、关联模板
4、启动主机
“`

进入自动发现动作配置

![image-20241220112010987](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241220112010987.png?lastModify=1746594238)

修改自动发现动作

![image-20241220112049904](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241220112049904.png?lastModify=1746594238)

启动自动发现动作

![image-20241220112103006](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241220112103006.png?lastModify=1746594238)

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

![image-20241220112133316](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241220112133316.png?lastModify=1746594238)

![image-20241220112137347](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241220112137347.png?lastModify=1746594238)

检查自动发现

![image-20241220112153253](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241220112153253.png?lastModify=1746594238)

检查添加的主机

![image-20241220112207150](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241220112207150.png?lastModify=1746594238)

3 自动发现原理小结

“`
1、客户端配置,配置文件,重启服务
2、web配置自动发现规则,发现主机
3、web配置动作,发现主机后关联模板,添加主机,加入主机组,启用
“`

![image-20241220112406354](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241220112406354.png?lastModify=1746594238)

[老男孩教育-zabbix监控架构-自动发现与自动注册总结| ProcessOn免费在线作图,在线流程图,在线思维导图](https://www.processon.com/view/link/62a2a9b35653bb72c28d6c37)

### 2 自动注册

“`
应用场景,经常性添加主机
准备
关闭自动发现的主机
关闭自动发现动作
自动发现的主机删除

1.zabbix客户端配置:修改zabbix客户端配置文件:ServerActive=服务端ip和Hostname=xxx
2.web页面,动作→自动注册autoreg
“`

#### 1 zabbix客户端配置文件

服务端主动把自己的信息,提供给服务端

服务端收到数据后通过自动注册动作,判断与添加

| 客户端的配置 | 说明 |
| —————————– | ———————————————————— |
| Server=172.16.1.62 | 服务端地址 |
| ServerActive=172.16.1.62 | 主动模式下服务端ip地址 |
| Hostname=web01 | 当前主机名,可以使用ansible自动获取主机名 |
| HostnameItem=system.hostname | 通过后面指定的键值获取主机名,Hostname和HostnameItem二选一,Item监控项,键值 |
| HostMetadateItem=system.uname | 主机的元数据键值,类似于自动发现中的system.uname判断存活和获取主机信息 |

HostMetadateItem=system.uname

![image-20241220115925738](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241220115925738.png?lastModify=1746594238)

zabbix客户端配置(通用)

“`
[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.63
ServerActive=172.16.1.63
HostnameItem=system.hostname
HostMetadataItem=system.uname
Include=/etc/zabbix/zabbix_agent2.d/*.conf
ControlSocket=/tmp/agent.sock
Include=./zabbix_agent2.d/plugins.d/*.conf
“`

#### 2 web页面,动作→自动注册

![image-20241220120230515](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241220120230515.png?lastModify=1746594238)

进入自动注册动作配置页面

![image-20241220120308632](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241220120308632.png?lastModify=1746594238)

创建自动注册动作

![image-20241220120336123](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241220120336123.png?lastModify=1746594238)

配置自动注册动作

![image-20241220120348475](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241220120348475.png?lastModify=1746594238)

![image-20241220120354266](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241220120354266.png?lastModify=1746594238)

配置自动注册操作

![image-20241220120406804](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241220120406804.png?lastModify=1746594238)

完成与等待

![image-20241220120419347](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241220120419347.png?lastModify=1746594238)

#### 3 小结

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

## 13 分布式监控

![image-20241220125009728](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241220125009728.png?lastModify=1746594238)

https://www.processon.com/view/link/62a2f2c87d9c08733ec531a1

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

“`
zabbix分布式(xabbix proxy)监控场景
1、监控多个地区、多个机房的服务器,服务器直接内网不通
2、同一个机房中服务器过多,增加设置代理减轻服务端压力

多个节点(区域、机房)zbx监控问题
1、带宽
2、网络稳定性问题
3、可能存在误报
解决方法
1、客户端直接写服务端公网ip
2、使用分布式监控
“`

### 2 分布式监控实战

| 角色 | ip | 说明 |
| ————- | ———– | ————————————————— |
| zabbix_server | 172.16.1.62 | zabbix服务端,zabbix服务端数据库,zabbix前端web页面 |
| zabbix_proxy | 172.16.1.63 | zabbix_proxy,zabbix_proxy数据库 |
| web03 | 172.16.1.9 | 准备使用proxy代理监控 |

#### 1 zabbix代理

准备数据库

“`
准备一台新机器172.16.1.63
上传docker和docker-compose包
mkdir -p /etc/docker
cat >/etc/docker/dameon.json</usr/lib/systemd/system/docker.service</app/tools/zabbix_proxy/docker-compose.yml</etc/yum.repo.d/mariadb.repo<zbx 6.x
简单升级
前端页面
服务端与客户端升级
数据库准备2套(旧的数据库准备,启动个容器访问旧的数据库即可.)
复杂升级:
前端页面
服务端与客户端升级
数据库升级.(mariadb 5.5 mariadb10.5)

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

## 16 全网监控任务

“`
项目背景: 入职后发现网站监控都使用命令,脚本+定时任务方式. 无法显示图.无法看到趋势
项目流程:
1. 开会对接下需求,开发,运营人员.详细需求. 申请资源.
2. 进行规划简单列下内容目标.
3. 详细细致规划,服务,指标,告警
4. 及时汇报.
5. 汇总总结,故障,形式文档.
6. 培训.
“`

## 17 网站需要什么监控

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

cpu,内存,磁盘,网络,带宽,负载等等
按照网站层次架构监控的(多个监控维度)
横向维度:
dns
cdn
安全组
负载
web
数据
存储
备份

运维维度
vpn
堡垒机
zabbix
pingcurl定义脚本补充的监控

纵向维度:任何一台机器
硬件监控
系统监控
服务监控:根据用户访问节点不同而不同
业务/app监控:页面类似于info.php,mysql.php,test.html,test.jsp
api接口监控
“`

### 1 任何一台机器的监控

| 监控内容 | 详细内容 | 具体实现落地 |
| ———– | ———————————————————— | ———————————————————— |
| 硬件监控 | 如果是物理服务器需要监控,温度,风扇转速,raid状态 | zabbix自带:ipmi自定义监控ipmitool/megacli |
| 系统监控 | cpu,负载,内存,磁盘,网络,带宽,io,关键文件是否发生变化aide,进程,僵尸进程,是否有飞堡垒机登录 | 模板+自定义(僵尸,用户异地登录,堡垒机登录,aide,日志secure) |
| 服务监控 | 进程,端口,服务的状态,日志是否有error,fiiled,exception | 模版或根据具体的要求自定义监控 |
| 业务应用app | 检查应用是否可用,书写测试代码页面,info.php,mysql.php | curl命令,web场景/检测 |
| api接口监控 | 监控指定的api接口,比如zbx api,开发提供(内部接口,外部第三方接口) | curl命令,web场景/检测 |

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

dns/cdn,安全组,负载,web,数据库,存储,备份

| 监控内容 | 详细内容 | 具体实现 |
| —————- | ————————————— | ———————————————————— |
| dns | 解析是否正常 | 自定义监控:ping/dig/nslookup 域名:whois 多虑过期 证书:curl -Lsv [www.baidu.com](www.baidu.com) -o /dev/null过滤expire date过期,openssl命令检查 |
| cdn | 是否可用,命中率 | 登录对应cdn页面检查:命中率,流量,带宽 分布式ping,商业:监控宝,听云 面粉网站[www.17ce.com](www.17ce.com) ping.chinaz.com 开源软件:smokeping |
| 防火墙和网络设备 | 监控流量,带宽,端口 | snmp协议 |
| 负载 | ngx服务情况,证书过期,网站访问量,并发 | nginx/haproxy/keepalived状态 等 |
| web | 主要监控服务情况 | 具体服务使用对应模板即可 ngx、php、tomcat(war)、jar |
| 存储 | nfs | 自定义监控,存储目前多少空间,是否能使用, |
| 备份 | 备份的数据量 | 自定义监控,系统是否有备份,发送邮件,占用空间多少 |

### 3 补充监控

“`
apm监控网站性能,用户访问流程链监控
docker监控:容器,cpu,内存,镜像大小
硬件监控ipmi,网络设备监控snmp监控
运维角度服务
“`

### 4 实施全网监控

“`
核心:
1 按照用户访问流程,运维角度,开发角度逐个进行监控
2 辅助每个节点,硬件监控,系统监控,服务监控,业务监控,api监控
“`

#### 1 dns(lb上配置)

“`
自定义监控放在负载均衡节点,任何一个
域名dns是否可用,nslookup查看解析
域名过期,输出剩余时间(天)
web调取api接口查看,dns查询数量

查询dns是否可用
列出域名二级和三级域名
oldboylinux.cn www.oldboylinux.cn blog.oldboylinux.cn shop.oldboylinux.cn
脚本传参+nslookup命令+判断返回值即可.
[root@m02-zbx-server ~]# cat /server/scripts/check_dns.sh
#!/bin/bash
#author: lidao996
#url: oldboyedu.com
#desc: 检查指定的域名是否可以解析
#可以显示1
#不可以显示0
#1.vars
url=$1
#2.判断是否为域名
#2.检查nslookup命令是否存在
which nslookup &>/dev/null || {
yum install -y bind-utils
}
#3.检查
if nslookup $url &>/dev/null ;then
#输出1表示可以使用
echo “1”
else
#输出0
echo “0”
fi
[root@m02-zbx-server ~]# cat
/etc/zabbix/zabbix_agent2.d/dns.conf
UserParameter=check.dns[*],sh /server/scripts/check_dns.sh
“$1”

分部署测试 ping ,dns ,cdn
https://ping.chinaz.com/www.baidu.com
全国或全世界用户访问网站的速度.
第3方免费网站: ping.chianz.com , 17ce.com ,….
第3方收费免费使用: 监控宝https://www.jiankongbao.com/
自己搭建:全国各地服务器+smokeping
“`

#### 2 检查域名剩余时间

“`
[root@lb01 ~]# cat /server/scripts/check_https_expire.sh
#!/bin/bash
##############################################################
# File Name:30.check_url_guoqi.sh
# Version:V1.0
# Author:oldboy lidao996
# Organization:www.oldboyedu.com
# Desc:
##############################################################
#1.vars
export LANG=en_US.UTF-8
#检查域名过期
check_domain() {
local expire_date=`whois $url |egrep “Expiry|Expiration”
|awk -F “: ” ‘{print $2}’`
local exprire_date_second=`date -d “${expire_date}” +%s`
local date_second_now=`date +%s`
local date_expire_days=`echo “(${exprire_date_second} –
${date_second_now} )/60/60/24” |bc`
echo “$date_expire_days”
}
#检查证书过期
check_https() {
#这里还可以加入curl判断.
local expire_date=`curl -v https://www.$url |& grep expire
|awk -F “: |GMT” ‘{print $2}’`
local exprire_date_second=`date -d “${expire_date}” +%s`
local date_second_now=`date +%s`
local date_expire_days=`echo “(${exprire_date_second} –
${date_second_now} )/60/60/24” |bc`
echo “$date_expire_days”
}
#main
main() {
choice=$1
url=$2
case “$choice” in
domain)
check_domain ;;
https)
check_https ;;
esac
}
main $*
[root@lb01 ~]# cat /etc/zabbix/zabbix_agent2.d/dns.conf
UserParameter=check.dns[*],/bin/bash
/server/scripts/check_dns.sh “$1”
UserParameter=check.domain_https[*],sh
/server/scripts/check_https_expire.sh “$1” “$2”
“`

#### 3 故障案例-zabbix客户端权限问题

“`
[root@lb01 ~]# echo “zabbix ALL=(ALL) NOPASSWD:ALL”
>>/etc/sudoers
[root@lb01 ~]# tail -1 /etc/sudoers
zabbix ALL=(ALL) NOPASSWD:ALL
[root@lb01 ~]# visudo -c
/etc/sudoers:解析正确
[root@lb01 ~]# cat /etc/zabbix/zabbix_agent2.d/domain.conf
UserParameter=domain.dns[*],sh /server/scripts/check_dns.sh
“$1”
UserParameter=domain.expires[*],sudo sh
/server/scripts/check_expires.sh “$1” “$2”
“`

4 cdn监控

“`
每日带宽,web页面或api监控
每日流量,web页面或api监控
CDN命中率,不低于90%,web页面或api监控
“`

![image-20241221180031697](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241221180031697.png?lastModify=1746594238)

#### 4 防火墙

“`
iptables直接看规则即可,开启或关闭
公有云防火墙查看规则即可
硬件防火墙通过snmp监控即可
“`

#### 5 lb负载均衡

##### 1 监控lb通用的

“`
[root@lb01 ~]# cat /etc/yum.repos.d/ngx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[root@lb01 ~]# yum install -y nginx
大礼包nginx-tengine233替换 已有nginx命令

物理层:
系统层:使用模板+sys.conf模板
服务层:
nginx状态检查模块(stub_status)有模版,nginx负载均衡检查功能(check书写脚本自定义监控)
访问:日志,状态码,错误error/failed数量,自定义监控
tcp/ip连接数
并发数
系统层:使用模板+sys.conf模板
系统层监控:
模板linux by zabbix agent(cpu,内存,磁盘,负载,网络,磁盘读写,登录用户数,运行时间)
补充:僵尸进程,挂起进程数,文件是否发生变化,aide –check,用户是否来自于堡垒机
lastlog -u root登录的IP地址是否为堡垒机
服务层:nginx
自建
服务层:nginx/haproxy/lvs
如果是nginx或类型的
开启ngx状态检查模块
开启nginx负载均衡状态检查模块
[root@lb01 ~]# cat /etc/nginx/conf.d/blog.conf
uptream check_pools {
server 192.168.137.7:80;
server 192.168.137.8:80;
}

check interval=3000 rise=2 fall=5 timeout=1000 type=http;
check_http_send “HEAD / HTTP/1.0\r\nHost:
blog.oldboylinux.cn\r\n\r\n”;
check_http_expect_alive http_2xx http_3xx;
}
server {
listen 80;
server_name blog.oldboylinux.cn ;
error_log /var/log/nginx/check-error.log notice;
#最好加入到每个独立的站点中.
location /lb_status {
#负载均衡状态检查模块
check_status;
access_log off;
}
location / {
proxy_pass http://check_pools;
include proxy.conf;
#XFF
}
}
[root@lb01 ~]# cat /etc/nginx/conf.d/check.conf
[root@lb01 ~]# cat /etc/nginx/conf.d/check.conf
server {
listen 8080;
location = /ngx_status {
stub_status;
access_log off;
}
}
[root@lb01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax
is ok
nginx: configuration file /etc/nginx/nginx.conf test is
successful
[root@lb01 ~]# systemctl reload nginx
[root@lb01 ~]# curl localhost:8080/ngx_status
Active connections: 1
server accepts handled requests request_time
6 6 14 0
Reading: 0 Writing: 1 Waiting: 0
[root@lb01 /etc/nginx/conf.d]# cat /etc/nginx/proxy.conf
#Host头保留
proxy_set_header Host $http_host;
#XFF头
#XFF追加
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
proxy_set_header X-Real-Ip $remote_addr;
#proxy_cache oldboy_lidao;
#proxy_cache_valid 200 302 1h;
#proxy_cache_valid 301 1d;
#proxy_cache_valid any 1m;
#ngx buffer
proxy_buffering on;
proxy_buffer_size 128k;
proxy_busy_buffers_size 256k;
proxy_buffers 32 128k;
“`

![image-20241222114807629](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241222114807629.png?lastModify=1746594238)

![image-20241222114818354](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241222114818354.png?lastModify=1746594238)

监控nginx状态,注意修改模板,

![image-20241222114847530](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241222114847530.png?lastModify=1746594238)

http协议监控与相关项监控

![image-20241222114910959](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241222114910959.png?lastModify=1746594238)

修改相关监控-找到模板中对应的监控项进行修改

![image-20241222114946816](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241222114946816.png?lastModify=1746594238)

![image-20241222114952704](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241222114952704.png?lastModify=1746594238)

![image-20241222114959288](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241222114959288.png?lastModify=1746594238)

“`
Nginx: Version监控项修改后的正则
Server: (Tengine|nginx)/([\d.]+)
Nginx: Requests total 监控项修改后的正则
server accepts handled requests request_time\s+([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+)

ngx/tengine 负载/web通用的监控 stub_status模块 8080+/ngx_status
“`

##### 2 负载均衡监控,监控指定站点的web情况,自定义监控

nginx负载均衡自定义监控,开启负载均衡监控检查模块 upstream check编译安装nginx,默认没有关联的模版

监控项:有多少个节点,有多少个分组,每个分组里面的节点状态

“`
[root@lb01 ~]# cat /etc/nginx/conf.d/blog.oldboylinux.cn.conf
upstream blog_pools {
server 10.0.0.7:80;
server 10.0.0.8:80;
check interval=3000 rise=2 fall=5 timeout=1000 type=http;
check_http_send “HEAD /index.php
HTTP/1.0\r\nHost:blog.oldboylinux.cn\r\nUser-Agent:
lb_check\r\n\r\n”;
check_http_expect_alive http_2xx http_3xx;
}
server {
listen 80;
server_name blog.oldboylinux.cn lb01.oldboylinux.cn;
error_log /var/log/nginx/blog.oldboylinux.cn-error.log
notice;
access_log /var/log/nginx/blog.oldboylinux.cn-access.log
main;
location / {
proxy_pass http://blog_pools;
proxy_set_header Host $http_host;
#XFF
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
proxy_set_header X-Real-Ip $remote_addr;
#ngx access.log log_format $http_x_forwarded_for;
}
location /lb_status {
check_status;
access_log off;
#allow
#deny
}
}

[root@lb01 ~]# cat /server/scripts/check_lb_pools.sh
#!/bin/bash
##############################################################
# File Name:/server/scripts/check_lb_pools.sh
# Version:V1.0
# Author:oldboy lidao996
# Organization:www.oldboyedu.com
# Desc:检查负载均衡 每组里面的情况
##############################################################
#1.vars
url=$1
#2.统计负载均衡后端服务器挂掉的数量
total=`curl -s -H Host:${url} localhost/lb_status?
format=csv |wc -l`
up=`curl -s -H Host:${url} localhost/lb_status?format=csv
|grep -wi up |wc -l`
echo “scale=2; $up / $total * 100” |bc -l
[root@lb01 ~]# cat /etc/zabbix/zabbix_agent2.d/lb.conf
UserParameter=check.lb[*],sh /server/scripts/check_lb_pools.sh
“$1”
[root@lb01 ~]# systemctl restart zabbix-agent2.service

监控keepalived是否切换
监控项:过滤下keepalived是否有进程
监控项:是否有vip,过滤vip就可以,确定是否发生主备切换
在备节点书写监控脚本即可
自定义监控脚本
[root@lb01 ~]# cat /server/scripts/chk_vip.sh
#!/bin/bash
##############################################################
# File Name:/server/scripts/chk_vip.sh
# Version:V1.0
# Author:oldboy lidao996
# Organization:www.oldboyedu.com
# Desc:
##############################################################
#1.vars
vip=$1
#2.过滤
vip_cnt=`ip a |grep -w “${vip}” |wc -l`
#3.判断
if [ $vip_cnt -gt 0 ];then
echo 1
else
echo 0
fi
[root@lb01 ~]# cat /etc/zabbix/zabbix_agent2.d/keepalived.conf
[root@lb01 ~]# cat /etc/zabbix/zabbix_agent2.d/keepalived.conf
UserParameter=keepalived.vip[*],sh /server/scripts/chk_vip.sh
“$1″
[root@lb01 ~]# systemctl restart zabbix-agent2.service
“`

“`
监控nginx访问日志和错误日志
nginx访问日志
IP地址出现次数
状态码及出现的次数
nginx错误日志:failed/denied/error/最近5000行
监控系统日志secure日志是否有大量的Failed password
访问日志状态码

[root@lb01 ~]# cat /server/scripts/check_ngx_access_log.sh
#!/bin/bash
##############################################################
# File Name:/server/scripts/check_ngx_access_log.sh
# Version:V1.0
# Author:oldboy lidao996
# Organization:www.oldboyedu.com
# Desc:
##############################################################
#1.vars
access_files=”/var/log/nginx/access.log”
code=$1
#2.case
case “$code” in
200) awk ‘{print $9}’ $access_files |grep -w “200”|wc -l
;;
301) awk ‘{print $9}’ $access_files |grep -w “301”|wc -l
;;
302) awk ‘{print $9}’ $access_files |grep -w “302”|wc -l
;;
304) awk ‘{print $9}’ $access_files |grep -w “302”|wc -l
;;
403) awk ‘{print $9}’ $access_files |grep -w “403”|wc -l
;;
404) awk ‘{print $9}’ $access_files |grep -w “404”|wc -l
;;
500) awk ‘{print $9}’ $access_files |grep -w “500”|wc -l
;;
502) awk ‘{print $9}’ $access_files |grep -w “502”|wc -l
;;
503) awk ‘{print $9}’ $access_files |grep -w “503”|wc -l
;;
504) awk ‘{print $9}’ $access_files |grep -w “504”|wc -l
;;
esac
[root@lb01 ~]# cat /etc/zabbix/zabbix_agent2.d/ngx.conf

UserParameter=nginx.log.status[*],sh
/server/scripts/check_ngx_access_log.sh “$1″
触发器 403 50x 设置.
配置图形

错误日志和secure日志分析
#精确过滤
[root@lb01 ~]# start=`date +%Y\/%m\/%d” “%H:%M -d “-1min”`
[root@lb01 ~]#
[root@lb01 ~]# echo $start
2024/07/26 11:36
[root@lb01 ~]# start=`date +”%Y\/%m\/%d %H:%M” -d “-1min”`
[root@lb01 ~]# echo $start
2024\/07\/26 11:37
[root@lb01 ~]# sed -n “/${start}/,\$p”
/var/log/nginx/error.log
#
UserParameter=check.ngx.error,sudo tail -n1000
/var/log/nginx/error.log |egrep -i ‘error|failed|denied’|wc –
l
#分析安全日志系统是否有异常登录(暴力破解)
UserParameter=check.error.login,sudo tail -n1000
/var/log/secure |egrep -i ‘failed password’|wc -l

zbx 自定义监控权限的问题。
grep zabbix /etc/sudoers
zabbix ALL=(ALL) NOPASSWD: ALL

[root@lb01 /etc/zabbix/zabbix_agent2.d]# cat diy_all.conf
UserParameter=check.lb.status,curl -s -H
Host:blog.oldboylinux.cn 10.0.0.5:8080/lb_status?
format=csv |grep up |wc -l
UserParameter=check.dns[*],/bin/bash
/server/scripts/check_dns.sh “$1”
UserParameter=check.domain_https[*],sh
/server/scripts/check_https_expire.sh “$1” “$2”
#ngx错误日志
UserParameter=check.ngx.error,sudo tail -n1000
/var/log/nginx/error.log |egrep -i
‘error|failed|denied’|wc -l
#分析安全日志系统是否有异常登录(暴力破解)
UserParameter=check.error.login,sudo tail -n1000
/var/log/secure |egrep -i ‘failed password’|wc -l

网络tcp/ip 监控

#并发数
UserParameter=net.tcp.estab,sudo ss -ant |grep -i estab |wc -l
#将要断开连接的数量
UserParameter=net.tcp.wait,sudo ss -ant |grep -i wait |wc -l
“`

#### 6 web监控

##### 1 nginx php

“`
应用:代码,war,jar包
服务:nginx,php,tomcat,jar
系统:模板+自定义

监控php
[root@web01 /etc/nginx/conf.d]# cat status.conf
server {
listen 8888;
server_name status.oldboylinux.cn;
location /ngx_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;
}
}

egrep ‘^pm.status|^ping’ /etc/php-fpm.d/www.conf
pm.status_path = /php_status
ping.path = /php_ping
ping.response = pong
[root@web01 ~]# egrep -v ‘^$|;’ /etc/php-fpm.d/www.conf
[www]
user = nginx
group = nginx
listen = 127.0.0.1:9000
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.status_path = /php_status
ping.path = /php_ping
ping.response = pong
修改后的配置文件
[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
slowlog = /var/opt/remi/php74/log/php-fpm/www-slow.log
php_admin_value[error_log] = /var/opt/remi/php74/log/phpfpm/www-error.log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path] =
/var/opt/remi/php74/lib/php/session

php_value[soap.wsdl_cache_dir] =
/var/opt/remi/php74/lib/php/wsdlcache
pm.status_path = /php_status
ping.path = /php_ping
ping.response = pong
“`

![image-20241222120238163](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241222120238163.png?lastModify=1746594238)

修改模板中的宏

![image-20241222120301217](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241222120301217.png?lastModify=1746594238)

关联模板等待数据

![image-20241222120334792](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241222120334792.png?lastModify=1746594238)

##### 2 应用或业务监控 web场景监控

zabbix给我们准备的替代curl/wget命令方式

未来可以用来监控,应用页面,apit接口

“`
#ngx与php是否正常
cat /app/code/zbx/test_info.php

#php与数据库是否正常
cat test_php_db.php

“`

![image-20241222120941580](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241222120941580.png?lastModify=1746594238)

![image-20241222120947846](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241222120947846.png?lastModify=1746594238)

![image-20241222121013094](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241222121013094.png?lastModify=1746594238)

![image-20241222121052457](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241222121052457.png?lastModify=1746594238)

![image-20241222121059828](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241222121059828.png?lastModify=1746594238)

![image-20241222121107212](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241222121107212.png?lastModify=1746594238)

![image-20241222121117704](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241222121117704.png?lastModify=1746594238)

添加触发器

“`
last(/web01/web.test.fail[web场景名字]) <>0
web.test.fail 该监控项将显示场景中失败的步骤数。如果所有步骤都成功执行,则
返回 0

tomcat,jetty,jboss和jar包监控 推荐自定义监控。
“`

| java监控方案 | 说明 |
| ———— | ————————————– |
| 自定义监控 | 书写自定义监控脚本,灵活 |
| jmx监控 | 需要部署zabbix-java-gateway,关联模版。 |

“`
jmap -HEAP javapid导出jvm信息
jps
jstack

#1.jmap自定义监控
jmap -heap javapid
Eden Space:
capacity = 162529280 (155.0MB)
used = 35942680 (34.277610778808594MB)
free = 126586600 (120.7223892211914MB)
22.11458759923135% used
From Space:
capacity = 5242880 (5.0MB)
used = 5234736 (4.9922332763671875MB)
free = 8144 (0.0077667236328125MB)
99.84466552734375% used
To Space:
capacity = 5242880 (5.0MB)
used = 0 (0.0MB)
free = 5242880 (5.0MB)
0.0% used
PS Old Generation
capacity = 36700160 (35.0MB)
used = 15448416 (14.732757568359375MB)
free = 21251744 (20.267242431640625MB)
42.093593052455354% used
过滤jvm不同内存区域使用情况。
[root@web03 ~]# jmap -heap 1295 |grep -i -A4 eden
Eden Space:
capacity = 162529280 (155.0MB)
used = 35942680 (34.277610778808594MB)
free = 126586600 (120.7223892211914MB)
22.11458759923135% used
[root@web03 ~]# jmap -heap 1295 |grep -i -A4 from
From Space:
capacity = 5242880 (5.0MB)
used = 5234736 (4.9922332763671875MB)
free = 8144 (0.0077667236328125MB)
99.84466552734375% used
UserParameter=java.jvm.eden.capacity,jmap -heap 1295 |grep –
i -A4 eden |awk ‘NR==2{print $3}’
UserParameter=java.jvm[*],sh check_jvm.sh “$1” “$2″
$1jvm内存空间名字 eden from to …
$2是对应指标capacity used free

jstack 自定义监控
·获取java进程的线程信息
state状态,线程状态。
“`

#### 7 api监控

“`
使用web场景实现
应用或业务api
服务api接口, /check /health

监控zabbix api接口是否可用
添加web场景流程与上面监控test_info.php流程一致.
区别在于添加api接口的时候不能只看状态码,应该看返回结果的内容,这里过
滤”Zabbix Server”

45427b7e17fcd58957065fbf713d79bb8d9ae2ea9ae0dd41a742606897cc125
“`

![image-20241222121620321](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241222121620321.png?lastModify=1746594238)

![image-20241222121629396](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241222121629396.png?lastModify=1746594238)

“`
-X 修改请求方法
-H 修改请求头内容
Content-Type: application/json-rpc 上传数据的格式。
-d 发出请求的时候请求主体的内容(上传的内容)
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”: “令牌的内容”
}’ http://zbx.oldboylinux.cn/api_jsonrpc.php
原始数据部分:
{
“jsonrpc”: “2.0”,
“method”: “host.get”,
“params”: {
“output”: [
“hostid”,
“host”
],
“selectInterfaces”: [
“interfaceid”,
“ip”
]
},
“id”: 2,
“auth”:
“49a5d19318c407c34c4708bfbdc5107067d9614337a5c754ad9b4aa19b36c
100”
}
“`

![image-20241222121705250](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241222121705250.png?lastModify=1746594238)

![image-20241222121717070](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241222121717070.png?lastModify=1746594238)

![image-20241222121726846](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241222121726846.png?lastModify=1746594238)

![image-20241222121735694](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241222121735694.png?lastModify=1746594238)

然后添加web场景对应的触发器.

![image-20241222121748160](file://C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20241222121748160.png?lastModify=1746594238)

“`
api接口监控
curl/web场景/python/golang语言代码
web场景监控api.
“`

#### 8 redis监控

“`
redis监控模板
监控redis运行,端口,进程
命中率
占用内存.
Redis by Zabbix agent 2
“`

#### 9 DB监控

“`
mysql
zbx自带模板
第3方模板 pt percona tools
pmm 数据库监控专用
“`

#### 10 存储监控

“`
nfs是否可用.
本地进行临时挂载
本地写入数据
检查是否可以写入
卸载
其他存储调用对应的模板即可.
检查空间
“`

#### 11 其他待补充

“`
安全相关(每个节点) 放在最后
其他待补充
任何一个服务使用流程:
1.部署
2.配置
3.使用
4.监控
5.高可用
6.备份 8.考虑容灾
7.安全
“`

#### 12 总结

“`
https://www.processon.com/view/link/62a6fb42e401fd5a4d63d3bc
非分布式。
尽量使用模板。监控网站这些服务。
系统信息:默认模板即可 Linux by Zabbix agent
服务模块监控对应的服务

周末任务:
1. 使用docker-compose一键部署zabbix监控环境(仅仅服务端架构搭建出服务即
可)
2. 讲解录屏说
“`

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注