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,jsonport_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_listzabbix_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.hqwc.cn/news/278640.html

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

相关文章

Unity inspector绘制按钮与Editor下生成与销毁物体的方法 反射 协程 Editor

应美术要求,实现一个在编辑环境下,不运行,可以实例化预制体的脚本 效果如上图所示 1.去实现一个简单的 行、列实例化物体脚本 2.在Inspector下提供按钮 3.将方法暴露出来(通过自定义标签实现) 需求一 using System.C…

【单调栈】【区间合并】LeetCode85:最大矩形

作者推荐 【动态规划】【广度优先搜索】LeetCode:2617 网格图中最少访问的格子数 本文涉及的知识点 单调栈 区间合并 题目 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 示例 1&#xff1…

Kubernetes与Docker:容器编排的未来

在当今快速变化的技术领域,容器化技术已经成为现代应用开发的核心。Docker 提供了一种轻量、可移植、自包含的容器化解决方案,而 Kubernetes(简称K8s)则崛起为容器编排的事实标准。本文将深入研究 Kubernetes 和 Docker 的关系&am…

例如,用一个DatabaseRow类型表示一个数据库行(容器),用泛型Column<T>作为它的键

以下是一个简单的示例&#xff0c;演示如何使用泛型的Column<T>作为DatabaseRow的键&#xff0c;表示一个数据库行&#xff08;容器&#xff09;&#xff1a; // 列定义 class Column<T> {private String columnName;private T value;public Column(String column…

智能优化算法应用:基于静电放电算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于静电放电算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于静电放电算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.静电放电算法4.实验参数设定5.算法结果6.…

UniGUI 之UniDBGrid

目录 1]DataSource设置 2]显示MEMO类型里的文字 3]显示悬浮提示 4]显示当前记录及总记录数 5]读取所有记录&#xff0c;及分页 6]在前面加上序号列 7]不显示标题栏 8]列排序 9]编辑 和 更新 数据 10]获得某单元格里的内容 11]标题别名 12]将某列设置为CheckBox格式 13]列标题…

列表优先于数组

在Java中&#xff0c;列表&#xff08;List&#xff09;通常优于数组&#xff0c;因为列表提供了更灵活的操作和动态调整大小的能力。下面是一个例子&#xff0c;展示了为什么在某些情况下使用列表比数组更好&#xff1a; import java.util.ArrayList; import java.util.List;…

命令调用先构建hashTable

GPT 代码改 #include <stdio.h> #include <stdlib.h> #include <string.h>#define TABLE_SIZE 256struct Node {char *key;void *value;struct Node *next; };struct HashTable {struct Node *table[TABLE_SIZE]; };void initHashTable(struct HashTable *ha…

用CC三维建模建出的OSGB格式,用模方打不开,显示该路径包含OSGB瓦块数量0,是什么原因?

答&#xff1a;模方只识别tile命名的模型文件&#xff0c;此模型是不分块输出&#xff0c;要平面切块重新跑。 模方是一款针对实景三维模型的冗余碎片、水面残缺、道路不平、标牌破损、纹理拉伸模糊等共性问题研发的实景三维模型修复编辑软件。模方4.1新增自动单体化建模功能&…

字符设备驱动模块的编译

一. 简介 本文继上一篇文章的学习&#xff0c;上一篇文章学习了字符设备驱动框架的初步编写。文章地址如下&#xff1a; 字符设备驱动框架的编写-CSDN博客 本文对上一篇编写的驱动模块初步框架进行编译。 二. 字符设备驱动模块的编译 上一篇文章&#xff0c;编写了字符设备…

Kubernetes 的用法和解析 -- 2

一.集群常用指令 1.1 基础控制指令 # 查看对应资源: 状态 $ kubectl get <SOURCE_NAME> -n <NAMESPACE> -o wide [rootkube-master ~]# kubectl get pods -n kuboard -o wide# 查看对应资源: 事件信息 $ kubectl describe <SOURCE_NAME> <SOURCE_NAME_R…

Linux:符号和符号表

文章目录 什么是符号&#xff1f;什么是符号表&#xff1f;全局符号和本地符号1. 全局符号&#xff1a;symtab符号表 2. 本地符号&#xff1a; 符号在汇编阶段符号在链接阶段1.由模块 m 定义并能被其他模块引用的全局符号。2.由其他模块定义并被模块 m 引用的全局符号。3.只被模…