zabbix批量添加端口监控

背景

以前做监控的时候,一台机器上就几个重要端口,手动添加一下监控就可以了。这次公司一个新业务上了很多服务器,每台服务器上的业务端口很多,而且还不一样。着手动添加会累死人的。所以想zabbix怎么批量添加端口监控。通过查了资料发现 zabbix可以通过 “自动发现” 的机制来批量添加端口。

一、客户端配置

1.修改agent配置文件

开启自定义key功能

vim /usr/local/zabbix_agent/etc/zabbix_agentd.conf
#添加以下内容

AllowRoot=1

#允许用户创建自定义key
UnsafeUserParameters=1

# 自定义key key的名称为tcpport_list,后边脚本的执行结果赋值给tcpport_list
UserParameter=tcpport_list,/usr/local/zabbix_agent/shell/check_port.py

2.编写脚本

编写脚本,收集agent上的处于listen状态的端口列表

[root@node-2 ~]# cd /usr/local/zabbix_agent/
[root@node-2 zabbix_agent]# mkdir shell

解释:
脚本中{#TCP_PORT}是zabbix的LLD宏。格式就是{#自定义大写变量名}
一般用户宏是{$自定义大写变量名}

[root@node-2 shell]# cat check_port.py 
#!/usr/bin/env python
import os,json

port_list = []
zabbix_data = {}
zabbix_data_json = {}

#过滤服务器上所有listen的端口号
cmd = """netstat -anpt |awk '/LISTEN/{print $4}' |awk -F: '{print $NF}' |sort |uniq"""

port_ret = os.popen(cmd).readlines()
for port in port_ret:
    #将收集到的每个端口组成字段,然后主机到port_list列表当中
    port_list.append( {"{#TCP_PORT}": port.strip()} )

#这一步是必须的,将存 字典 的端口号的 列表 加上 data 的key 重新组成一个字段,用于返回给zabbix使用。
#data关键字也不能变,是固定的
zabbix_data["data"] = port_list

zabbix_data_json = json.dumps(zabbix_data)

#打印结果是必须的,否则值无法赋值给key
print zabbix_data_json

执行结果如下:

[root@node-2 shell]# chmod 777 ./check_port.py
[root@node-2 shell]# ./check_port.py 
{"data": [{"{#TCP_PORT}": "10050"}, {"{#TCP_PORT}": "22"}, {"{#TCP_PORT}": "25"}, {"{#TCP_PORT}": "3306"}]}

重启agent
[root@node-2 shell]# cd /etc/init.d/
[root@node-2 init.d]# bash zabbix_agentd restart

3.测试key

在服务端测试刚才自定义的key是否成功,结果如下,我们已经获取到了我摸嗯自定义的key值

[root@node-1 ~]# zabbix_get -s 192.168.1.23 -p 10050 -k tcpport_list
{"data": [{"{#TCP_PORT}": "10050"}, {"{#TCP_PORT}": "22"}, {"{#TCP_PORT}": "25"}, {"{#TCP_PORT}": "3306"}]}

可能报错如下,这个报错必须解决,如果不解决后边会报错。这个报错的原因是 在启动zabbix agent的时候使用的是zabbix用户,zabbix用户对netstat命令没有权限

[root@node-1 ~]# zabbix_get -s 192.168.1.23 -p 10050 -k tcpport_list
(Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.)
{"data": [{"{#TCP_PORT}": "10050"}, {"{#TCP_PORT}": "22"}, {"{#TCP_PORT}": "25"}, {"{#TCP_PORT}": "3306"}]}

解决办法:
在agent端执行以下命令

which netstat
chmod u+s /usr/bin/netstat 
ll /usr/bin/netstat
#发现命令变成红色,这是正常的。还有就是属主权限的x 变成了s
-rwsr-xr-x. 1 root root 155008 Aug  8  2019 /usr/bin/netstat

二、服务端配置

1.创建一个新模板

点击 模板 --> 创建模板。
在这里插入图片描述

如上图后,点击 添加 完成模板的创建

2.创建自动发现规则

找到刚才创建的模板,点击进去,“自动发现规则” --> “创建发现规则”

在这里插入图片描述

创建发现规则

在这里插入图片描述

3.创建监控项原型

点击 监控项原型 。创建监控原型其实就是创建监控项

在这里插入图片描述

创建 监控项原型
图中1处的名称的值对应{ITEM.NAME}内置变量
图中2处 {#TCP_PORT}就是客户端定义的key(tcpport_list)对的返回值。这里一定对应上

在这里插入图片描述

4.创建触发器

在这里插入图片描述

创建触发器

在这里插入图片描述

5.客户应用模板

在这里插入图片描述

6.生效

1.查看策略是否生效,在主机的监控项目中查看,如下图,已经生效

在这里插入图片描述

2.最新数据 获取数据成功。如果没有数据,不要做测试,不然触发器会报错
3.获取最新数据时间会比较长,等到有了最新的数据,在测试触发器是否生效。
4.报警信息如下:

故障告警:tcp_port  25  消失
------------------------------
告警医院:xxxxxxx
医院运维:xxxxxx
告警主机:10.xx.xxx.xx--【门诊服务app_Primary】
告警信息:check tcp port 25
当前状态:0

报警信息对应的 自定义信息格式

故障告警:{TRIGGER.NAME}   #这是引用的触发器的名称

告警医院:{$PROJECT}
医院运维:{$BPUSER}
告警主机:{HOST.CONN}--【{HOST.NAME}】
告警信息:{ITEM.NAME}     #这是引用的监控项名称
当前状态:{ITEM.VALUE1}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flink的处理函数

之前的流处理API,无论是基本的转换、聚合,还是更为复杂的窗口操作,其实都是基于DataStream进行转换的,所以可以统称为DataStream API。 在Flink更底层,我们可以不定义任何具体的算子(比如map,f…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《考虑碳交易机制的含风电电力系统日前优化调度》

解读标题 "考虑碳交易机制的含风电电力系统日前优化调度" 意味着在该研究或应用中,对含有风电的电力系统进行日前优化调度,并考虑了碳交易机制。 具体解读如下: "含风电电力系统":指涉及到风能作为电力系统的…

前端设计模式之旅:命令模式

引言 使用命令模式,我们可以将执行特定任务的对象与调用该方法的对象解耦。 核心思想 命令模式的核心思想是将请求封装成一个对象,从而使请求的发起者和请求的执行者解耦。 请求的发起者只需要知道如何创建命令对象并将其传递给请求者,而不需…

Python基础入门第四节,第五节课笔记

第四节 第一个条件语句 if 条件: 条件成立执行的代码1 条件成立执行的代码2 ...... else: 条件不成立执行的代码1 条件不成立执行的代码2 …… 代码如下: 身高 float(input("请输入您的身高(米):")) if 身高 >1.3:print(f您的身高是{身高},已经超过1.3米,您需…

python+appium自动化常见操作

1、点击、输入操作 #点击 driver.find_element(id,com.lemon.lemonban:id/navigation_my).click() #输入 driver.find_element(id,com.lemon.lemonban:id/et_password).send_keys(abc)2、隐形等待 driver.implicitly_wait(10)3、显性等待 #显性等待 locator (xpath,xpath) wai…

数学公式推导中 “:=“和“:=“的区别

A:B 将A定义为(记为,令为)B A:B 将B定义为(记为,令为)A

fckeditor编辑器在Chrome浏览器下编辑时多出空格解决方法

查看专栏目录 Network 灰鸽宝典专栏主要关注服务器的配置,前后端开发环境的配置,编辑器的配置,网络服务的配置,网络命令的应用与配置,windows常见问题的解决等。 文章目录 结尾语网络的梦想 dedecms网站后台采用fckedi…

『OPEN3D』1.5.1 动手实现点云暴力最近邻

本专栏地址: https://blog.csdn.net/qq_41366026/category_12186023.html?spm=1001.2014.3001.5482https://blog.csdn.net/qq_41366026/category_12186023.html?spm=1001.2014.3001.5482 1、暴力最近邻法 暴力最近邻法 (Brute-force Nearest Neighbour Search,BF 搜索) 是…

《人工智能导论》知识思维导图梳理【第6章节】

文章目录 第六章 知识图谱1 知识图谱概述2 知识图谱相关概念3 知识图谱的逻辑结构4 知识图谱的数据存储5 知识图谱的构建过程6 例题 markdown内容的分享 第六章 知识图谱 1 知识图谱概述 2 知识图谱相关概念 3 知识图谱的逻辑结构 4 知识图谱的数据存储 5 知识图谱的构建过程 6…

论文阅读——Mask DINO(cvpr2023)

DINO是检测,Mask DINO是检测分割。 几个模型对比: 传统的检测分割中,检测头和分割头是平行的,Mask DINO使用二分图匹配bipartite matching提高匹配结果的准确性。 box对大的类别不计算损失,因为太大了,会…

Gitee:远程仓库步骤

第一步:新建仓库 第二步:初始化本地仓库,git init 创建分支 git branch 新分支名 第三步:git add . :添加到暂存区 第四步:git config –global user.email关联邮箱,user.name用户名 第…

UE5 Landscaping MapBox 学习笔记

1. Landscaping MapBox 操作录屏 https://www.bilibili.com/video/BV113411U7T9/?spm_id_from333.337.search-card.all.click&vd_source707ec8983cc32e6e065d5496a7f79ee6 安装Landscaping与LandscapingMapbox两个插件 打开Landscaping窗口,这里应该要在Proj…

【CDP】CDP 集群通过Knox 访问Yarn Web UI,无法跳转到Flink Web UI 问题解决

一、前言 记录下在CDP 环境中,通过Knox 访问Yarn Web UI,无法跳转到Flink Web UI 的BUG 解决方法。 二、问题复现 登录 Knox Web UI 找到任一 Flink 任务 点击 ApplicationMaster 跳转 Flink WEB UI 出问题 内容空白,无法正常跳转到…

python 小程序学生选课系统源码

开发工具: PyCharm,mysql5.7,微信开发者工具 技术说明: python django html 小程序 功能介绍: 学生: 登录,选课(查看课程及选择),我的成绩,…

Unity 使用AddTorque方法给刚体施加力矩详解

给刚体施加力,除了使用AddForce方法,我们还可以使用AddTorque方法。该方法是通过施加力矩给刚体以力。AddTorque方法从形式上跟AddForce差不多,它也有4个重载方法: 1、AddTorque(Vector3 torque);使用Vector3类型参数…

kakfa实战指引-实时海量流式数据处理

前言 我们最终决定从头开始构建一些东西。我们的想法是,与其专注于保存成堆的数据,如关系数据库、键值存储、搜索索引或缓存,不如专注于将数据视为不断发展和不断增长的流,并围绕这个想法构建一个数据系统——实际上是一个数据架…

基于YOLOv8深度学习的高精度车辆行人检测与计数系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

zync spi flash 频率配置

spi flash的频率配置 代码流程及最终的频率值。 驱动目录 基于4.14.55 内核, \drivers\spi\spi-dw-fmsh.c (控制器) \drivers\spi\spi-dw.c \drivers\mtd\devices\m25p80.c (设备) \drivers\spi\spi.c spi dts配置说明 spi0: spie000100…

3、Kafka 线上集群部署方案怎么做?

文章目录 1、操作系统的选择1.1、I/O 模型的使用1.2、数据网络传输效率1.3、社区支持度 2、磁盘的选择3、磁盘容量的规划3.1、举例思考本问题:3.2、计算一下:3.3、规划磁盘容量时你需要考虑下面这几个元素: 4、带宽规划4.1、计算 总结 1、操作…

提供一个数据库的表,然后,分页显示表中所有信息,一页10个,此表130条信息。最后再以饼图显示男 女 未知 人数的情况。

运行之后显示的效果&#xff1a; 如果是新项目&#xff0c;建立项目后&#xff0c;把mysql驱动放到指定的目录下即&#xff1a; WebContent\WEB-INF-lib 我用的驱动是 mysql-connector-j-8.0.33.jar 展示页 listpage.jsp <%page import"java.util.Map.Entry"%&g…