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:单台机器
- 硬件信息: 磁盘,raid状态,温度,风扇转速,机房温度,湿度
- 系统信息:cpu,内存(内存,swap,buffer/cache),磁盘(io,使用率,inode),负载,网络(inout),
- 服务信息:各种服务状态,进程,端口,状态,特定的信息(不同服务)
- 业务(应用/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生命争取及版本选择
6.2 Zabbix监控架构
- Zabbix是一个CS(服务端/客户端)架构的服务 0
- zabbix监控架构
- Zabbix-Agent获取数据–发送给–>Zabbix-Server服务端-.数据会被存放->数据库<– Zabbix Web 页面展示数据
- 采集数据—-》数据收集,数据分析,报警—》存储—》友好的展示
七、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]监控流程
- 在客户端安装zabbix-agent2
- 修改配置文件 指定Server为zabbix服务端
- web页面 配置–>主机中添加主机与关联模板
- 添加后检测与检查数据
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服务端监控项关联起来。
- 创建监控项
- 配置监控项名字,填写:键值
- 信息类型:这里键值结果都是数字,选择数字(无正负即可),如果有小数选择浮点类型,如果是字符,选择字符串。
- 更新间隔:这里调整为5s秒,生产环境非必须尽量增长间隔比如1m,10m,1h等等
- 历史数据与趋势数据
历史数据与趋势数据 | 说明 | 推荐配置 |
---|---|---|
历史数据(history)保留时长: | 每个更新间隔获取到的数据 | 推荐空间不乐观 可以设置为30d |
趋势数据(trend)保留时长: | 记录数据变化的趋势,占用空间较少 | 推荐保留更长时间 3650d |
- 监控项配置信息汇总
- 进行监控项测试
- 温馨提示:处处有测试,保证数据可用。
- 测试结果
- 添加监控项完成,查看添加的监控项
- 这里的图形是zbx替我们根据数据自动创建的。
c) web页面:触发器
- 根据监控项获取的数值(内容),决定是否要告警、是否要提示异常。
- trigger扳机
- 创建触发器
- 配置触发器名字,严重程度和表达式
- 表达式配置详情
- 添加完成后的触发器配置
- 出现故障后的提示
d)web页面:添加图形
- 添加图形
- 配置图形名字与添加监控项
- 查看图形的预览(监控项要已经获取到数据才行)
- 检查图形
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
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正常使用即可。
- 理解自定义键值的传参
2)服务端
[root@m02-zbx-server ~]# zabbix_get -s 172.16.1.5 -k user.login[root]
10.0.0.1
- web 添加监控项
- web 触发器
最近1个值和上一个值是否一致(不一致)
last(/lb01/user.login[root],#1) <> last(/lb01/user.login[root],#2)
- 查看
3)小结
- 自定义监控,带参数。
- 带参数+awk取列。($$取列)
- 优先使用zbx内置key和模板中监控项。
- 多看看模板中的监控项和触发器规则。{$XXXX}
10.6 使用模板
2)添加自定义监控项
- 进入主机中复制即可
- 选择要复制的监控项,选择复制即可(可批量多选)
- 选择复制到模板中
- 检查模板中监控项部分:多了2个监控项
3)复制触发器与图形
- 主机–>触发器
- 复制
- 检查模板
- 复制图形与复制触发器与监控项一致
4)模板关联主机
- 进入主机中,批量选择要添加模板的主机,批量更新
- 添加模板关联主机成功
- 错误提示:
- 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)个人邮箱隹备(略)
- 配置个人邮箱
3)配置发件人
- a:配置发件人-报警媒介
- 告警邮件内容: Messages template
- 故障告警信息
- 故障恢复告警信息
- 添加完成
#信息类型是: 问题( 发生故障 )
主题: 故障名称: {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}
- 进行测试
- 提示发送成功
- 检查邮箱内容
4)配置收件人
- 本质:zbx的用户、用户组。
- 对所有人员进行分组
- 运维组 : lidao@qq.com
- 开发组: lidaokaifa@qq.com
- 老大组: lidaoboss@qq.com
- b:收件人
- 添加收件人信息
- 配置收件人
- 配置完成
5)什么条件下给用户发送邮件?(条件/动作)
- c:动作–启用
- 触发器动作
- 启动即可
- 已启用
- 制造故障检查仪表盘
- 检查邮件
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页面 配置-->动作
- 需要去企业微信后台,开通白名单
- 错误提示:
故障提示:
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}
- 添加报警媒介类型
- 添加报警内容模板
- 测试发件人
4)配置收件人
5)整体测试
- 制造新的故障
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
- 温馨提示⚠ 主机名中不要包含中文
- 默认安装目录即可
- 安装完成检查-进程
- 检查开机自启动
- 安装目录及配置文件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
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功能
- 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)添加主机
3) 检查
- 在服务端安装fping
[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 原理图
- 方案02 原理图(类似于自定义监控)
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进程
c)添加主机
- 也可以添加个 zabbix agent客户端监控
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
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 ) |
十二、来点新的乐趣-自动化监控
- 自动添加主机并关联模板。
自动添加主机方案 | 含义 | 应用场景 |
---|---|---|
自动发现(服务端主动) | zbx服务端 主动去找是否有新的主机,如果有则添加进来,关联模板 | 配置简单,大量添加主机不适合。临时性可用 |
自动注册(客户端主动) | zbx客户端 主动去找服务端提交自己的信息,请求向服务端注册 | 配置繁琐,经常性。大量主机 |
12.1 自动发现
- 客户端(zbx agent),配置文件.
- web配置自动发现规则. - 发现主机
- web配置自动发现的动作 - 发现主机后关联模板,添加主机,加入主机组,启用
1)客户端(zbx agent),配置文件
ansible实现
playbook
yum
template
2)web配置自动发现规则
- 配置–>自动发现 创建自动发现规则
- 检查自动发现的主机
- (注意仅仅发现并不会添加到zbx主机中)
3)web配置动作
- 配置 自动发现 的动作
- 添加组
- 关联模板
- 启动主机
- 进入自动发现动作配置
- 启动自动发现动作
- 配置自动发现动作的操作(关联主机组,关联模板)
- 检查自动发现
- 检查添加的主机
4) 自动发现原理与小结
- 客户端(zbx agent),配置文件
- web配置自动发现规则. - 发现主机
- web配置动作 - 发现主机后关联模板,添加主机,加入主机组,启用
12.2 自动注册
- 应用场景,经常性添加主机。
- 准备:
- 关闭 自动发现 规则
- 关闭 自动发现 动作
- 自动发现的主机 删除
- zbx客户端配置: 修改zabbix客户端配置文件: ServerActive=服务端ip 和Hostname=… …
- web页面,动作–>自动注册 autoreg…
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
- 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页面,动作–>自动注册
- 与自动发现类似,客户端找到服务端后提交自己信息。
- 服务端通过自动注册动作进行判断与添加即可。
- 进入自动注册动作配置页面
- 创建自动注册动作
- 配置自动注册动作
- 配置自动注册操作
- 完成与等待
- 可以选择重启客户端或者服务端的zabbix服务来加快显示
3)小结
- 整体流程与自动发现类似,但是自动注册无法再web页面直接查看是否发现了主机,只能看是否添加主机。
- 自动注册,web页面没有地方配置规则,自动注册把规则写入到了客户端配置文件中的。
- web页面只需要配置,自动注册动作即可。
十三、来点大的-分布式监控
13.1 分布式监控概述及应用场景
- zabbix分布式监控应用场景: 监控多个地区/多个机房的服务器,服务器之间内网不通
多个节点(区域、机房)zbx监控问题 | 方案01:客户端直接写服务端公网ip | 方案02:使用分布式监控 |
---|---|---|
带宽 | ||
网络稳定性问题 | ||
可能存在误报 |
- 应用场景
13.2 分布式监控实战
- 目标:
- 应对公司网站服务器较多场景.
- 公司网站服务器分散在不同的机房或地区(跨机房)
1) 分布式监控搭建
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页面添加代理
- 配置代理
- 注意名字与代理配置中一致。
- web页面可以看到最近出现时间(只要有时间即可)
- 如果长时间没有出现,可以查看代理日志,如果持续出现not found 情况。可以重启下代理和服务端。
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
- web页面修改,修改这些服务器通过代理获取数据的。修改为
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
- 准备获取令牌
- 获取令牌
- 显示令牌( 注意仅显示1次 )
- 通过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
- 根据图形调整缓存,进行数量。调整缓存大小之前
- 调整缓存大小之后
- 进程数量调整
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服务端收集数据的进程 使用率的 影响
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模板
- 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场景
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
- db01
- redis
- 数据库
- 模板
- 日志
- 数据空间
存储
- 系统监控
- 服务进程
- 是否可用:挂载下,创建些文件
- 监控共享存储使用的空间
对象存储(开发书写代码,测试写入)
备份服务器
- 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场景监控
- 配置web场景基本信息
- 添加操作步骤部分:第1步-检查zbx首页是否可以访问.
- 添加操作:第2步骤检查zbx-api接口是否可以访问
- 检查监控结果
- 检查结果
十六、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
- 检查当前高可用情况(主节点检查) 和检查高可用情况(备节点)
zabbix_server -R ha_status
- web页面查看
- 客户端配置
[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
- 配置仪表盘显示高可用状态信息
- 补充
核心:
- 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监控数据进行展示。
- 卖家秀
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
- 跳过重新设置密码
- grafana页面
- 简单配置
- 开灯与配置语言
3)配置zbx插件
- 激活zabbix插件.
- 如果搜索不到zabbix表示没有安装对应的插件.
- 可以通过提供的软件包解压或者grafana-cli plugins install alexanderzobnin-zabbix-app安装.
4)配置grafana的数据源
- grafana连接zabbix(添加数据源 datasource )
- 配置zabbix数据源:填写zbx_api接口地址
- 导入自带的几个仪表盘(dashboard)
5)web: Grafana web页面添加与配置图形dashboard,仪表盘
- 添加几个模板
- 修改模板
6) 配置与修改模板
- 修改以主机名
- 修改以显示uptime
- 修改以显示cpu使用率
/CPU (?!idle)/ # 原始
/^CPU .*time$/ #
#/^CPU (?!idle).*time$/ #
/CPU (?!idle).*time$/
7)自定义监控获取zbx服务端的每秒新值
- zabbix.stats键值的结果之一
- 需要通过自定义监控创建1个监控项运行zabbix.stats键值
- 创建相关项(监控项)对上面监控项结果进行过滤(sed反向引用)
- 定义监控项(主要项)
- 创建监控项(相关项)
- 配置相关项的过滤条件.
"requiredperformance":14.209444,
正则部分
"requiredperformance":([0-9.]+) 我们想要的内容 \1
- 输入测试数据(来自于zabbix.stats键值)并测试正则表达式.
- 测试数据可以通过下面命令获取:
zabbix_get -s 127.0.0.1 -k zabbix.stats #用于获取测试正则的数据
- 检查最新数据看看是否获取到数据.
- 修改grafana页面
- 成果显示
- 继续创建相关项监控
- 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
- 设置问题
- 设置负载
- 添加另一种query
- 显示
17.3 一个更完善的模板(仪表盘)
- 下载官方仪表盘
链接: https://grafana.com/grafana/dashboards/
- 使用id或下载json数据文件
- 导入仪表盘
- 两种方式,一种JSON格式导入;另一种输入导入上文提到的ID号
- 导入
- 没有数据,准备进行更改,打开仪表盘编辑模式
- 开启编辑模式
- 保存
- 修改注意事项(右边的展示区也会导致,no data或N/A情况)
- grafana仪表盘中变量的设置与修改
- 默认
- 修改后
- 关于模板报错解决与处理(版本与分类问题)(之前版本有此问题)
- 本意是想获取应用集
- 如果获取不到就把他删掉
- 磁盘监控
- 监控网卡
- 界面去掉多选选项,成为单选
- 修改后效果
17.4 Grafana总结
- 通过来自于各种数据源的数据,通过Grafana进行展示。
- 自定义仪表盘与使用变量(主机组和主机)。
- 熟练使用创建,修改仪表盘即可。
- zbx: 相关项监控
名词 | 含义说明 |
---|---|
dashborad | 仪表盘 拥有各种图形页面(展示监控项) |
panel | 面板 其中某一个监控项 |
赞赏是不耍流氓的鼓励