【企业级监控】Zabbix监控网站并发连接数

Zabbix自定义监控项与触发器

文章目录

  • Zabbix自定义监控项与触发器
    • 资源列表
    • 基础环境
    • 前言
    • 一、什么是zabbix的Key值
    • 二、获取远程Key值
      • 2.1、获得主机的Key值
      • 2.2、被监控端安装Agent
      • 2.3、zabbix_get命令获取Agent数据举例
        • 2.3.1、zabbx_get获取cpu核心数
        • 2.3.2、获取目标主机系统和内核版本参数
        • 2.3.3、查看目标端口是否开启
        • 2.3.4、查看进程是否开启
        • 2.3.5、查看磁盘剩余空间
        • 2.3.6、查看当前网卡流量
        • 2.3.7、获取目标主机内存值
    • 三、Zabbix自定义key值
      • 3.1、添加Nginx模块支持
        • 3.1.1、安装nginx
        • 3.1.2、添加nginx_status模块
      • 3.2、测试首付能够获取到Nginx状态
      • 3.3、添加监控脚本
        • 3.3.1、添加脚本
        • 3.3.2、重启zabbix-agent
      • 3.4、修改agent端参数以支持自定义key值
      • 3.5、Zabbix_get测试
      • 3.6、Zabbix Web端添加监控
        • 3.6.1、添加告警媒介
        • 3.6.2、设置报警发送给用户
        • 3.6.3、添加模块
        • 3.6.4、为模板添加监控项
      • 3.7、验证自定义监控
        • 3.7.1、为主机关联新创建的模板
        • 3.7.2、为该主机添加新的监控图形
        • 3.7.3、验证自定义监控数据和图形
      • 3.8、为nginx监控创建触发器及邮件报警测试
        • 3.8.1、为模板添加触发器
        • 3.8.2、添加告警动作和操作
        • 3.8.3、触发报警

资源列表

操作系统配置主机名IP
CentOS 7.92C4Gzbx192.168.93.101
CentOS 7.92C4Gserver01192.168.93.102
CentOS 7.92C4Gserver02192.168.93.103

基础环境

  • 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
  • 关闭内核安全机制
setenforce 0
sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config

前言

  • 当我们需要获取某台主机上的数据时,直接利用zabbix提供的模板可以很方便的获得需要的数据,但是有些特别的数据,利用这些现有模板或监控项是无法实现的,例如网站状态信息的监控、mysql数据库主从状态等信息 。这时就需要自己定义键值和监控项,以满足企业对检测数据的需要。

一、什么是zabbix的Key值

  • Zabbix中内置了很多监控参数(Key),我们可以通过在客户端配置文件中定义Key,获取监控对象中的系统、CPU、网络、内存、文件系统等信息。
  • Key(键)是zabbix标记item的键,是一种标识符。利用Key可以定义一个监控对象,那么这个监控对象肯定是采集数据的,但是采集数据的时候可能存在很多节点与server交互,那么需要具体哪个采集节点,就可以用Key进行采集。

二、获取远程Key值

2.1、获得主机的Key值

  • 监控项(Itens)就是监控指标获取数据的方式、数据类型、更新数据的时间间隔、历史数据保留时间、趋势数据保留时间、监控项的分组等指标。另外一个概念是监控指标,用key表示,它是构成监控项的一个元素,在一个主机/模板中必须是唯一的。
  • zabbix agent是利用Key获取主机监控数据的,在每个agent端的监控项上,都可以找到zabbix客户端对应的许多key值。
  • “数据采集”——>“主机”——>“监控项”,可以看到每台主机的监控项中,为了采集对应的主机信息,都有一个键值,利用这个键值,Zabbix就可以获取对应的数据。
    在这里插入图片描述

2.2、被监控端安装Agent

  • 所有Agent主机都要操作,
rpm -ivh pcre2-10.23-2.el7.x86_64.rpm 
rpm -ivh zabbix-agent-6.4.8-release2.el7.x86_64.rpm
  • 修改配置文件
# server01
[root@server01 ~]# vim /etc/zabbix/zabbix_agentd.conf 
Server=192.168.93.101
ServerActive=192.168.93.101
Hostname=server01
[root@server01 ~]# systemctl start zabbix-agent.service 
[root@server01 ~]# systemctl enable zabbix-agent.service# server02
[root@server02 ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.93.101
ServerActive=192.168.93.101
Hostname=server02
[root@server02 ~]# systemctl start zabbix-agent.service 
[root@server02 ~]# systemctl enable zabbix-agent.service 

2.3、zabbix_get命令获取Agent数据举例

2.3.1、zabbx_get获取cpu核心数
[root@zbx ~]# zabbix_get -s 192.168.93.102 -k system.cpu.num
2
2.3.2、获取目标主机系统和内核版本参数
[root@zbx ~]# zabbix_get -s 192.168.93.102 -k system.uname
Linux server01 3.10.0-1160.71.1.el7.x86_64 #1 SMP Tue Jun 28 15:37:28 UTC 2022 x86_64
2.3.3、查看目标端口是否开启
[root@zbx ~]# zabbix_get -s 192.168.93.102 -k net.tcp.port[,22]
1
# 回显结果解释
1:开启
0:关闭
2.3.4、查看进程是否开启
[root@zbx ~]# zabbix_get -s 192.168.93.102 -k proc.num[sshd]
4
# 回显结果解释
如果开启,将会显示对应的进程数
2.3.5、查看磁盘剩余空间
[root@zbx ~]# zabbix_get -s 192.168.93.102 -k vfs.fs.size[/,pfree]
96.086125
2.3.6、查看当前网卡流量
[root@zbx ~]# zabbix_get -s 192.168.93.102 -k net.if.out[ens33,bytes]
177208
# 回显结果解释
在不同时间执行两次命令,用后面的减去前面的,除以两者之间的时间,得到速率
2.3.7、获取目标主机内存值
[root@zbx ~]# zabbix_get -s 192.168.93.102 -p 10050 -k vm.memory.size[total]
3953922048

三、Zabbix自定义key值

  • 使用zabbix agent自带的key值,我们已经可以监控到很多数据了,但是仍然有一些数据,是agent的key值没有的。对于这些特俗的需求,就要求我们自定义key值。

3.1、添加Nginx模块支持

  • 提前监控server01
3.1.1、安装nginx
  • 在server01执行即可
[root@server01 ~]# yum -y install epel-release.noarch
[root@server01 ~]# yum -y install nginx
[root@server01 ~]# cd /etc/nginx/
[root@server01 nginx]# cp nginx.conf.default nginx.conf
cp:是否覆盖"nginx.conf"? y
3.1.2、添加nginx_status模块
  • 编辑如下参数,添加nginx_status模块
[root@server01 nginx]# vim /etc/nginx/nginx.conf
server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   html;index  index.html index.htm;}
#####################################################################location /nginx_status {stub_status on;access_log off;allow 192.168.93.0/24;allow 127.0.0.1;deny all;}
#####################################################################
# 检查配置文件语法是否有错
[root@server01 nginx]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@server01 nginx]# echo "test" > /usr/share/nginx/html/index.html 
[root@server01 nginx]# systemctl start nginx
[root@server01 nginx]# systemctl enable nginx

3.2、测试首付能够获取到Nginx状态

[root@server01 ~]# curl 127.0.0.1/nginx_status
Active connections: 1 
server accepts handled requests1 1 1 
Reading: 0 Writing: 1 Waiting: 0 
# 回显结果解释
Active connections:Nginx正处理的活动链接数1个
server:accepts :Nginx启动到现在共处理了多少个连接handled:Nginx启动到现在共成功创建16449此握手requests:Nginx总共处理了多少次请求
Reading:Nginx读取到客户端的Header信息数
Writing:Nginx返回给客户端的Header信息数
Waiting:Nginx已经处理完正在等候下一次请求指令的驻留链接,开启

3.3、添加监控脚本

3.3.1、添加脚本
[root@server01 ~]# vim /etc/zabbix/nginx-status.sh
#/bin/bash 
NGINX_PORT=80 
NGINX_COMMAND=$1 
nginx_active(){ 
/usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Active/ {print $NF}' 
}
nginx_reading(){ 
/usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Reading/ {print $2}' 
}
nginx_writing(){ 
/usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Writing/ {print $4}' 
}
nginx_waiting(){ 
/usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Waiting/ {print $6}'
}
nginx_accepts(){ 
/usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $1}' 
}
nginx_handled(){ 
/usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $2}' 
}
nginx_requests(){ 
/usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $3}' 
}
case $NGINX_COMMAND in 
active) 
nginx_active; 
;; 
reading) 
nginx_reading; 
;; 
writing) 
nginx_writing; 
;; 
waiting) 
nginx_waiting; 
;; 
accepts) 
nginx_accepts; 
;; 
handled) 
nginx_handled; 
;; 
requests) 
nginx_requests; 
;; 
*) 
echo $"USAGE:$0 {active|reading|writing|waiting|accepts|handled|requests}" 
esac 
3.3.2、重启zabbix-agent
[root@server01 ~]# chmod +x /etc/zabbix/nginx-status.sh
[root@server01 ~]# systemctl restart zabbix-agent.service

3.4、修改agent端参数以支持自定义key值

[root@server01 ~]# vim /etc/zabbix/zabbix_agentd.conf 
# 默认352行,进行修改
UnsafeUserParameters=1
# 默认361行,取消注释进行修改
UserParameter=nginx_status[*],/etc/zabbix/nginx-status.sh $1
# 备注
UnsafeUserParameters=1:启用自定义Key功能
UserParameter:指定脚本
nginx_status:为Key值名称。[*]里面写脚本参数,没有可以不写。/etc/zabbix/nginx-status.sh $1路径为脚本所在路径。
[root@server01 ~]# systemctl restart zabbix-agent.service

3.5、Zabbix_get测试

[root@zbx ~]# zabbix_get -s 192.168.93.102 -k nginx_status[accepts]
2

3.6、Zabbix Web端添加监控

3.6.1、添加告警媒介
  • “告警”——>“媒介”——>选中“Email”,
    在这里插入图片描述

  • 测试发送邮件,记得启动Email
    在这里插入图片描述
    在这里插入图片描述

3.6.2、设置报警发送给用户
  • 点击“用户”——>“用户”——>点击“Admin”用户——>点击“报警媒介”——>点击类型下面的“添加”选项卡
    在这里插入图片描述

在这里插入图片描述

3.6.3、添加模块
  • “数据采集”——>“模板”——>“创建模板”,创建一个名为Nginx状态的模板
    在这里插入图片描述
3.6.4、为模板添加监控项
  • 点击“数据采集”,再点击“模板”选项后,找到刚刚创建名为Nginx状态的模板,点击“监控项”后,再点击“创建监控项”按钮,创建出如下监控项。
# 添加监控项
监控项 nginx active 键值为 nginx_status[active]
监控项 nginx reading 键值为 nginx_status[reading]
监控项 nginx writing 键值为 nginx_status[writing]
监控项 nginx waiting 键值为 nginx_status[waiting]
监控项 nginx accepts 键值为 nginx_status[accepts]
监控项 nginx handled 键值为 nginx_status[handled]
监控项 nginx requests 键值为 nginx_status[requests]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.7、验证自定义监控

3.7.1、为主机关联新创建的模板
  • “数据采集”——>“主机”,为该主机关刚才创建的模板。
    在这里插入图片描述
3.7.2、为该主机添加新的监控图形
  • “数据采集”——>“主机”——>“图形”,点击“创建图标”创建nginx active图形
  • 备注:其他监控的图形创建方式一样,此处不在一一列举
    在这里插入图片描述
3.7.3、验证自定义监控数据和图形
  • “检测”——>“主机”,查看server01的检测数据,以及新添加的图形
    在这里插入图片描述

在这里插入图片描述

3.8、为nginx监控创建触发器及邮件报警测试

3.8.1、为模板添加触发器
  • 点击“数据采集”按钮,再点击“模板”选项,然后点击“nginx-status”模板,选择"触发器"选项,点击“创建触发器”按钮
    在这里插入图片描述

  • 添加表达式,点击“添加”按钮,在弹出界面里架空项选择nginx主机的“nginx active”监控项,功能选择“last-最后(最近)的 T 值,结果大于 N”,N填写为3,再点击“插入”按钮。这里的意思是当Nginx的活跃链接大于3时,触发报警。
    在这里插入图片描述

3.8.2、添加告警动作和操作
  • “告警”——>“动作”——>“触发器动作”,点击创建动作按钮

  • 添加触发条件,条件选择触发器,并指定上一步中创建的触发器
    在这里插入图片描述

  • 设置触发器的操作,指定触发后发送报警信息的的接收用户。
    在这里插入图片描述

3.8.3、触发报警
  • 模拟多个用户访问网站,使得链接数大于设定的报警阈值,并观察邮箱的报警邮箱

  • 使用脚本,分别在不同的4太主机上执行,进行访问网站,模拟多用户访问网站

cat >> ./nginx-active.sh << EOF
while true
do
curl 192.168.93.102 	# IP写为Nginx的IP
done
EOF

在这里插入图片描述

  • 可能需要等待几分钟才会发送邮件
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/377097.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ESP32CAM物联网教学11

ESP32CAM物联网教学11 霍霍webserver 在第八课的时候&#xff0c;小智把乐鑫公司提供的官方示例程序CameraWebServer改成了明码&#xff0c;这样说明这个官方程序也是可以更改的嘛。这个官方程序有四个文件&#xff0c;一共3500行代码&#xff0c;看着都头晕&#xff0c;小智决…

opencascade AIS_InteractiveContext源码学习8 trihedron display attributes

AIS_InteractiveContext 前言 交互上下文&#xff08;Interactive Context&#xff09;允许您在一个或多个视图器中管理交互对象的图形行为和选择。类方法使这一操作非常透明。需要记住的是&#xff0c;对于已经被交互上下文识别的交互对象&#xff0c;必须使用上下文方法进行…

探索IP形象设计:快速掌握设计要点

随着市场竞争的加剧&#xff0c;越来越多的企业开始关注品牌形象的塑造和推广。在品牌形象中&#xff0c;知识产权形象设计是非常重要的方面。在智能和互联网的趋势下&#xff0c;未来的知识产权形象设计可能会更加关注数字和社交网络。通过数字技术和社交媒体平台&#xff0c;…

年轻人「躺平」、「摆烂」现象的根源是什么?

年轻人「躺平」、「摆烂」现象的根源是什么? 穷人没有资格躺平 我可以躺平吗?当然可以了! 对于有些人来说是躺平在房车里,直接开到命运的终点;而你是躺在马路中间,被命运的车轮反复碾压。 中国一线城市的00后,他们的父母多是没有哥哥、姐姐、弟弟、妹妹的独生子女,…

S7-200smart与C#通信

https://www.cnblogs.com/heizao/p/15797382.html C#与PLC通信开发之西门子s7-200 smart_c# s7-200smart通讯库-CSDN博客https://blog.csdn.net/weixin_44455060/article/details/109713121 C#上位机读写西门子S7-200SMART PLC变量 教程_哔哩哔哩_bilibilihttps://www.bilibili…

昇思25天学习打卡营第19天|sea_fish

打卡第19天。本次学习的内容为生成式中的Diffusion扩散模型。记录学习的过程。 模型简介 什么是Diffusion Model&#xff1f; 如果将Diffusion与其他生成模型&#xff08;如Normalizing Flows、GAN或VAE&#xff09;进行比较&#xff0c;它并没有那么复杂&#xff0c;它们都…

【C语言报错已解决】格式化字符串漏洞(Format String Vulnerability)

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引言&#xff1a;一、问题描述&#xff1a;1.1 报错示例&#xff1a;1.2 报错分析&#xff1a;1.3 解决思路&#xff…

Qt中文个数奇数时出现问号解决

Qt中文个数奇数时出现问号解决 目录 Qt中文个数奇数时出现问号解决问题背景问题场景解决方案 问题背景 最近在开发一个小工具&#xff0c;涉及到一些中文注释自动打印&#xff0c;于是摸索如何把代码里面的中文输出到csv文件中&#xff0c;出现了乱码&#xff0c;按照网上的攻…

RedisTemplate 中序列化方式辨析

在Spring Data Redis中&#xff0c;RedisTemplate 是操作Redis的核心类&#xff0c;它提供了丰富的API来与Redis进行交互。由于Redis是一个键值存储系统&#xff0c;它存储的是字节序列&#xff0c;因此在使用RedisTemplate时&#xff0c;需要指定键&#xff08;Key&#xff09…

Hi3861 OpenHarmony嵌入式应用入门--HTTPD

httpd 是 Apache HTTP Server 的守护进程名称&#xff0c;Apache HTTP Server 是一种广泛使用的开源网页服务器软件。 本项目是从LwIP中抽取的HTTP服务器代码&#xff1b; Hi3861 SDK中已经包含了一份预编译的lwip&#xff0c;但没有开启HTTP服务器功能&#xff08;静态库无法…

Apache Doris:下一代实时数据仓库

Apache Doris&#xff1a;下一代实时数据仓库 概念架构设计快速的原因——其性能的架构设计、特性和机制基于成本的优化器面向列的数据库的快速点查询数据摄取数据更新服务可用性和数据可靠性跨集群复制多租户管理便于使用半结构化数据分析据仓一体分层存储 词条诞生技术概述适…

谷粒商城学习笔记-23-分布式组件-SpringCloud Alibaba-Nacos配置中心-简单示例

之前已经学习了使用Nacos作为注册中心&#xff0c;这一节学习Nacos另外一个核心功能&#xff1a;配置中心。 一&#xff0c;Nacos配置中心简介 Nacos是一个易于使用的平台&#xff0c;用于动态服务发现和配置管理。作为配置中心&#xff0c;Nacos提供了以下核心功能和优势&am…

集成运算放大器的内部电路结构

原文出自微信公众号【小小的电子之路】 在集成电路问世之前&#xff0c;放大电路都是由晶体管、二极管、电阻、电容等分立元件组成&#xff0c;称为晶体管放大电路&#xff0c;但是复杂的计算限制了这类电路的推广。随着集成电路行业的发展&#xff0c;晶体管放大电路被制作在半…

Vue3 前置知识

1. Vue3 简介 2020年9月18日&#xff0c;Vue.js发布版3.8版本&#xff0c;代号&#xff1a;one Piece(海贼王)经历了&#xff1a;4800次提交、40个RFC、600次PR、300贡献者官方发版地址&#xff1a;Release v3.0.0 One Piecevuejs/,core截止2023年10月&#xff0c;最新的公开版…

Python爬虫速成之路(3):下载图片

hello hello~ &#xff0c;这里是绝命Coding——老白~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#xff1a;绝命Coding-CSDN博客 &a…

开源AI生成连续一致性儿童故事书; GraphRAG结合本地版Ollama;AI辅助老年人用餐;开源无代码AI工作流VectorVein

✨ 1: SEED-Story SEED-Story 是一种能生成包含一致性图像的多模态长篇故事的机器学习模型&#xff0c;配套数据集已开放。 SEED-Story 是一种多模态长故事生成模型&#xff0c;具备生成包含丰富且连贯的叙事文本和一致性高的人物和风格图像的能力。此模型基于 SEED-X 构建。…

论文阅读【时空+大模型】ST-LLM(MDM2024)

论文阅读【时空大模型】ST-LLM&#xff08;MDM2024&#xff09; 论文链接&#xff1a;Spatial-Temporal Large Language Model for Traffic Prediction 代码仓库&#xff1a;https://github.com/ChenxiLiu-HNU/ST-LLM 发表于MDM2024&#xff08;Mobile Data Management&#xf…

PGCCC|【PostgreSQL】PCP认证考试大纲#postgresql 认证

PostgreSQL Certified Professional PCP&#xff08;中级&#xff09; PCP目前在市场上非常紧缺&#xff0c;除了具备夯实的理论基础以外&#xff0c;要有很强的动手能力&#xff0c;获得“PCP&#xff08;中心&#xff09;“的学员&#xff0c;将能够进入企业的生产系统进行运…

c#中的特性

在C#中&#xff0c;特性&#xff08;Attributes&#xff09;是一种向程序元素&#xff08;如类、方法、属性等&#xff09;添加元数据的方式。特性可以用来提供关于程序元素的附加信息&#xff0c;这些信息可以在编译时和运行时被访问。 特性主要有以下几个用途&#xff1a; 提…

《C专家编程》 C++

抽象 就是观察一群数据&#xff0c;忽略不重要的区别&#xff0c;只记录关注的事务特征的关键数据项。比如有一群学生&#xff0c;关键数据项就是学号&#xff0c;身份证号&#xff0c;姓名等。 class student {int stu_num;int id_num;char name[10]; } 访问控制 this关键字…