zabbix批量添加端口监控

news2024/9/23 3:31:54

背景

以前做监控的时候,一台机器上就几个重要端口,手动添加一下监控就可以了。这次公司一个新业务上了很多服务器,每台服务器上的业务端口很多,而且还不一样。着手动添加会累死人的。所以想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}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

R、python读取空间转录组的8种方式

“ 空间转录组测序主要包括5个步骤,我们着重下游分析部分:空转数据分析和可视化。本篇主分享如何使用python和R读取空转数据,主要使用scanpy stlearn seurat包” 引言 在正式开始之前,我们先看看cellranger流程跑完之后&#xff0…

在Node.js中MongoDB排序的方法

本文主要介绍在Node.js中MongoDB排序的方法。 目录 Node.js中MongoDB排序使用原生的mongodb驱动程序进行排序使用Mongoose库中的排序 Node.js中MongoDB排序 在Node.js中使用MongoDB进行排序,可以使用原生的mongodb驱动程序或者Mongoose库。 使用原生的mongodb驱动…

macbookpro 2024怎么恢复出厂设置

可能你的MacBook曾经是高性能的代表,但是现在它正慢慢地逝去了自己的光芒?随着逐年的使用以及文件的添加和程序的安装,你的MacBook可能会开始变得迟缓卡顿,或者失却了以往的光彩。如果你发现你的Mac开始出现这些严重问题&#xff…

使用Go实现一个百行聊天服务器

前段时间, redis作者不是整了个c语言版本的聊天服务器嘛, 地址, 代码量拢共不过百行. 于是, 心血来潮下, 我也整了个Go语言版本. 简单来说就是实现了一个聊天室的功能. 将所有注释空行都去掉, 刚好100行实现. 废话不多说, 先上代码: package mainimport ("fmt"&quo…

区块链的可扩展性研究【06】Plasma

1.Plasma:Plasma 是一种基于以太坊区块链的 Layer2 扩容方案,它通过建立一个分层结构的区块链网络,将大量的交易放到子链上进行处理,从而提高了以太坊的吞吐量。Plasma 还可以通过智能合约实现跨链交易,使得不同的区块…

机器学习之无监督学习

聚类:发掘纵向结构的某种模式信息,某些x属于相同的分布或者类别 特征学习:发掘横向结构的某种模式信息,每一行都可以看成是一种属性或特征 密度估计:发掘底层数据分布,x都是从某个未知分布p(x)采出来的&a…

39、平均池化和全局平均池化

在了解了池化算法的基本概念之后,继续了解一个应用很广泛的池化,叫作全局平均池化。 先看下平均池化。平均池化就是在池化核标定的范围内,对像素取平均值然后作为输出。在很多AI框架或算法描述中,平均池化大概可以分为两种:一种叫作adaptive average pool(自适应平均池化…

Facebook广告系统结构

Facebook广告系统是一个复杂的大型系统,由多个组件和子系统相互配合工作,实现了广告的投放、拍卖、个性化推荐和效果评估等功能。下面小编讲讲Facebook广告系统的结构。 1、广告管理界面 广告管理界面是广告主与Facebook进行交互的入口,广告…

@PostMapping接收String类型的参数

接口这样定义: PostMapping("/aaa") public void getById(String param)参数这样测试:

腾讯云优惠全站搜——云服务器配置大全精准

腾讯云推出优惠全站搜页面 https://curl.qcloud.com/PPrF9NFe 在这个页面可以一键查询所需云服务器、轻量应用服务器、数据库、存储、CDN、网络、安全、大数据等云产品优惠活动大全,活动打开如下图: 腾讯云优惠全站搜——优惠合集 如上图,在这…

Linux下FFmepg使用

1.命令行录一段wav,PCM数据 ffmpeg -f alsa -i hw:0,0 xxx.wav//录制 ffplay out.wav//播放ffmpeg -f alsa -i hw:0,0 -ar 16000 -channels 1 -f s16le 1.pcm ffplay -ar 16000 -channels 1 -f s16le 1.pcm -ar freq 设置音频采样率 -ac channels 设置通道 缺省为1 2.将pcm…

10天玩转Python第7天:python 面向对象 全面详解与代码示例

今日内容 封装(定义类的过程) 案例(存放家具) 继承 多态 封装的补充 私有和公有权限属性的分类(实例属性, 类属性)方法的分类(实例方法, 类方法, 静态方法) 封装案例 # 定义家具类 class HouseItem: """家具类""" def __init__(self, name, a…

LT7911D是TYPE-C/DP或者EDP转2 PORT MIPI和LVDS加音频

1.概述: T7911D是一款高性能TYPE-C/DP/EDP转2 PORT MIPI或者LVDS的芯片,目前主要在AR/VR或者显示器上应用的很多,对于DP1.2输入,LT7911D可配置为1/2/4车道。自适应均衡化使其适用于长电缆应用,最大带宽可达21.6Gbps。…

Vue3报错: ‘defineProps‘ is not defined,解决方法

问题出现: 今天在使用 <script setup>组合式 API 的语法糖的时候&#xff0c;定义defineProps时候报错&#xff1a; ‘defineProps’ is not defined 查了一下资料&#xff0c;这是因为eslint的语法校验导致的问题。 解决方法1&#xff1a; 在项目根目录的文件.eslin…

时序预测 | Python实现XGBoost电力需求预测

时序预测 | Python实现XGBoost电力需求预测 目录 时序预测 | Python实现XGBoost电力需求预测预测效果基本描述程序设计参考资料预测效果 基本描述 该数据集因其每小时的用电量数据以及 TSO 对消耗和定价的相应预测而值得注意,从而可以将预期预测与当前最先进的行业预测进行比较…

JS中的String常用的实例方法

splice():分隔符 把字符串以分隔符的形式拆分为数组 const str pink,red;const arr str.split(,);console.log(arr);//Array[0,"pink";1:"red"]const str1 2022-4-8;const arr1 str1.split(-);console.log(arr1);//Array[0,"2022";1:"…

深入理解网络 I/O:单 Group 混杂模式|多 Group 主从模式

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…

DS考研真题总结——客观题(1)

开始整理真题中的客观小题&#xff0c;至于和算法有关的大题统一最后整理~ 定义背诵&#xff1a;数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下&#xff0c;精心选择的数据结构可以带来更高的运行或者存储效…

现代雷达车载应用——第2章 汽车雷达系统原理 2.2节 汽车雷达架构

经典著作&#xff0c;值得一读&#xff0c;英文原版下载链接【免费】ModernRadarforAutomotiveApplications资源-CSDN文库。 2.2 汽车雷达架构 从顶层来看&#xff0c;基本的汽车雷达由发射器&#xff0c;接收器和天线组成。图2.2给出了一种简化的单通道连续波雷达结构[2]。这…

javaEE -17(13000字 CSS3 入门级教程)

一&#xff1a;CSS3 简介 CSS3 是 CSS2 的升级版本&#xff0c;它在 CSS2 的基础上&#xff0c;新增了很多强大的新功能&#xff0c;从而解决一些实际面临的问题&#xff0c;CSS3 在未来会按照模块化的方式去发展&#xff1a;https://www.w3.org/Style/CSS/current-work.html …