【zabbix】批量监控端口,自动发现规则

news2024/11/27 12:35:42

 快速搞定端口批量监控

一、脚本及配置

1、(文件名:check_port.py)(python2.7版本) 存在路径:/etc/zabbix/zabbix_agentd.d/check_port.py

这个脚本有一部分内容是我从百度上找的,有一部分自己新增的,有一部分改吧改吧,凑合用

#!/usr/bin/python
__author__ = 'Hudaye'
import os
import json
import subprocess

command = "sudo netstat -tnlp|egrep -i tcp|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort|uniq"
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
output = process.communicate()[0]
ports = output.decode().split()
json_output = json.dumps(ports)

data = {}
tcp_list = []
port_list = []
tt = []
lines = os.popen(command).readlines()
for line in lines:
    port = line.split()
    port_list.append(port[0])
for i in port_list:
    if i in json_output:
      tt.append(i)
for port in list(set(tt)):
    port_dict = {}
    port_dict['{#TCP_PORT}'] = port
    tcp_list.append(port_dict)

data['data'] = tcp_list
jsonStr = json.dumps(data, sort_keys=True, indent=4)
print(jsonStr)

执行check_port.py脚本因为linux环境各不一样,所以当你在服务端使用:zabbix_get -s 'ip' -p 10050 -k mis-port 命令获取agent端数据时或许会报以下错误:

sudo: sorry, you must have a tty to run sudo
# 1、那就把:sudo netstat -tnlp|egrep -i tcp|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort|uniq
# 这一行中的sudo拿掉就行了
# 2、或者不拿掉sudo可以在sudo后面加-t或者-tt
# 两个方法都试下,哪个能用用哪个,再解决不了,就上百度

2、(文件名:ZHJX_Port_Status.conf) zabbix配置文件

1、mis-port键

2、python指令路径:/usr/bin/python

3、文件存在路径:/etc/zabbix/zabbix_agentd.d/

将下面的命令写入ZHJX_Port_Status.conf配置文件中

UserParameter=mis-port,/usr/bin/python /etc/zabbix/zabbix_agentd.d/check_port.py

免密执行netstat命令,这一步在zabbix-agent机器上配置,这一步一定要配置,不然服务端无法获取agent端数据

# 开启用户可写权限
chmod u+w /etc/sudoers

vim /etc/sudoers
# 写入免密执行netstat信息
zabbix  ALL=(ALL)       NOPASSWD: /bin/netstat

# 关闭用户可写权限
chmod u-w /etc/sudoers

# 重启zabbix-agent
systemctl restart zabbix-agent2

在zabbix服务端测试:

# 172.16.35.47是agent端IP,mis-port是ZHJX_Port_Status.conf文件中自定义的键
zabbix_get -s '172.16.35.47' -p 10050 -k mis-port

测试过了欸,你看有数据哇

 

二、配置zabbix自动发现规则

创建模板:Check_ALL_Linux_Port

配置➡模板

 创建完模板后,在模板里找到你创建的模板,点进去找到自动发现规则

然后创建发现规则 ,创建完成后如下图

填入自动发现名: Template Ports Discovery,填入ZHJX_Port_Status.conf zabbix配置文件中定义好的mis-port键

 配置监控项原型 名:Tcp_Port $1

键值位置的net.tcp.listen[]是zabbix内置的功能,中括号里的{#TCP_PORT}就是后台传过来的批量端口

 

对对对,上图的名字中的$1对应的就是批量端口中的各个端口

最终会显示成这个样纸

配置触发器类型  名称:tcp_port {#TCP_PORT} status

添加按钮点开后选中之前的监控项,然后确定

这里注意:监控项原型和触发器类型这两个功能是自动发现规则功能内部的功能,别弄岔了

要正式将模板应用到主机了,这里要找到需要链接模板的主机

 

 

 选中刚刚创建的模板,确定--然后更新

 

 模板加入完成后,找到自动发现规则

 进入自动发现规则

 测试自动发现规则

 

 你看,成功出现数据了吧

 

 

三、查看最新数据

等待zabbix一会,这个一会可能等的会有点烦,监测里面选择主机会看到最新的数据

 最新数据里出现了最新的端口数据监测记录,这里1表示正常,不正常的情况就是0,仪表板会产生告警

 

四、zabbix监控脚本部署脚本

这玩意儿是用来全自动一键配置agent服务器批量监测端口环境的,除了zabbix服务端页面上的操作,这个脚本可以一键搞定agent服务器环境,前提是要先装好zabbix-agent并且在服务端页面配置好

(文件名:zabbix_Script_Deployment.sh)

#!/bin/bash

remoteHost="172.16.8.198"
userName="root"
des_pass="admin@123"
remoteFile="/etc/zabbix/zabbix_agentd.d"
# 适配多版本zabbix*.d目录
zabbixPath=$(find /etc/zabbix/ -name zabbix*.d)
# 获取zabbix-agent服务名(获取zabbix*.d目录,掐头去尾截取zabbix*.d目录名,将截取出来的目录名的_修改为-)
zabbixAgent=$(find /etc/zabbix/ -name zabbix*.d | sed 's|/etc/zabbix/\(.*\)\.d|\1|' | sed 's|_|-|g')
# 查找/etc/sudoers文件里的"#open zabbix nopasswd netstat"信息
nopwdInfo=$(grep "#open zabbix nopasswd netstat" /etc/sudoers)
nopwd=$(grep "zabbix  ALL=(ALL)       NOPASSWD: /bin/netstat" /etc/sudoers)

# 下载函数(使用expect下载脚本和配置文件)
downloadScript(){
    # 判断部署脚本和zabbix配置文件是否存在 
if [[ -z $(find /etc/zabbix/zabbix*.d/check_port.py 2>/dev/null) && -z $(find /etc/zabbix/zabbix*.d/ZHJX_Port_Status.conf 2>/dev/null) ]];then
# ---------------------------------------------------临时脚本块-------------------------------------------------------------------
# 这一块的逻辑有点问题,但不妨碍使用
# 初次登录新机器,需要输入yes确认,方便后面使用scp
expect -c "
spawn ssh -o StrictHostKeyChecking=no $userName@$remoteHost "exit"
expect "Are you sure you want to continue connecting \(yes/no\)\?"
send "yes\r"
expect "password:"
send "$des_pass\r"
expect eof
" 2>/dev/null
echo "初次登录已完成!"
# ---------------------------------------------------临时脚本块-------------------------------------------------------------------

echo "开始下载相关文件!"
# 下载check_port.py
expect -c "
spawn scp $userName@$remoteHost:$remoteFile/check_port.py $zabbixPath
expect \"password:\"
send \"${des_pass}\r\"
expect eof
"

# 下载ZHJX_Port_Status.conf
expect -c "
spawn scp $userName@$remoteHost:$remoteFile/ZHJX_Port_Status.conf $zabbixPath
expect \"password:\"
send \"${des_pass}\r\"
expect eof
"

else
echo "相关文件已存在,不需要重新下载!"
fi
}

# -------------------检查expect是否安装
if ! command -v expect &> /dev/null; then
    echo "expect command not found. Trying to download and install."
        sudo yum install -y expect
    # 下载函数
    downloadScript
    else
    # 下载函数
    downloadScript
fi

# 判断/etc/sudoers文件中netstat免密执行信息是否存在
if [[ -z $nopwdInfo && -z $nopwd  ]];then
# 免密执行netstat命令
# 开启用户写权限
chmod u+w /etc/sudoers
# 写入免密执行netstat信息
cat >> /etc/sudoers << eof
#open zabbix nopasswd netstat
zabbix  ALL=(ALL)       NOPASSWD: /bin/netstat
eof
# 关闭用户写权限
chmod u-w /etc/sudoers
echo "netstat免密操作已完成!"
else
echo "netstat免密执行信息已存在!不用继续加入!"
fi


if [[ -z $(grep "$zabbixPath" $zabbixPath/ZHJX_Port_Status.conf) ]]; then
	# 开始修改
    sed -i 's#UserParameter=mis-port,/usr/bin/python /etc/zabbix/zabbix_agentd.d/check_port.py#UserParameter=mis-port,/usr/bin/python $zabbixPath/check_port.py#g' $zabbixPath/ZHJX_Port_Status.conf
else
	echo "路径正确!"
fi

if [[ -z $(ps -ef|grep zabbix | grep -v grep) ]];then
echo "zabbix不存在!"
else
# 重启zabbix-agent
systemctl restart $zabbixAgent
echo $zabbixAgent "重启完成!"
fi

五、思路总结

这篇文章总共就三个文件:

check_port.py

ZHJX_Port_Status.conf

zabbix_Script_Deployment.sh

1、首先在目标客户端创建zabbix_Script_Deployment.sh文件,将脚本内容写入

2、zabbix_Script_Deployment.sh执行时会检查服务器有没有安装expect工具,没有就安装

3、expect工具安装完成后,zabbix_Script_Deployment.sh开始执行下载操作

4、下载的是这两个文件(check_port.py 、ZHJX_Port_Status.conf )

5、zabbix_Script_Deployment.sh脚本会自动判断上面两个文件内的路径及目录是否符合当前服务器环境,不符合会找出zabbix相关路径、目录、服务名用来替换不符合的内容

6、执行netstat免密操作,这一步很重要,因为服务端会远程执行脚本里的netstat

7、判断zabbix是否存在

8、脚本不是很完善,懒得继续写了

9、本篇文章可以分为两个步骤操作:先第四步再第二步

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

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

相关文章

【C++】红黑树的实现

文章目录 &#x1f4d5; 概念特性 &#x1f4d5; 红黑树具体实现节点定义结构框架插入 &#x1f4d5; 概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上各个…

Python基础(四)

目录 一、程序的组织结构 1、前言 二、顺序结构 1、介绍 三、对象的布尔值 1、介绍 2、规定 四、分支结构 1、单分支if结构 1、语法语义 2、语法结构 3、案例 2、双分支if...else结构 1、语法语义 2、语法结构 3、案例 3、多分支if...elif...else结构 1、语…

Java语言---栈与队列

目录 一.栈 1.1栈的概念 1.2.栈的实现 1.2.1数组实现 栈 栈的创建 栈的基本方法实现 1.2.2链表实现 栈 栈的创建 栈的基本方法实现 二.队列 2.1队列的概念 2.2队列的实现 2.3代码实现 2.3.1队列代码的构建 2.3.2 队列 基础方法实现 总结 &#x1f63d;个人主页…

深入理解2D卷积和3D卷积

文章目录 卷积核的维度2D卷积单通道多通道代码example2d卷积操作后变化 3D卷积单通道多通道代码 在项目中用到了conv3但是对其背后的原理还有一些模糊的地方&#xff0c;conv2d与多通道的conv2d的区别在哪里&#xff1f;conv3d的思想理论是什么&#xff1f;对此进行探究和记录……

「AI之劫」:当机器超越人类底线,正在侵犯我们的创造力和道德

随着AI技术的不断发展&#xff0c;AI生成内容&#xff08;AIGC&#xff09;已经成为数字娱乐、商业营销和学术研究等领域的热门话题。随着人工智能技术的不断发展越来越多的领域开始应用AI技术&#xff0c;其中之一就是内容生成领域。 AIGC全称为AI-Generated Content, 指基于生…

2023年5月广州/深圳制造业产品经理很适合考的证书-NPDP

产品经理国际资格认证NPDP是新产品开发方面的认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年&#xff0c;是…

【利用AI让知识体系化】入门Egg框架(含实战)

思维导图 文章目录 思维导图第一章&#xff1a;概述1.1 Egg.js 简介1.2 Egg.js 的架构和优势1.3 Egg.js 的基本组件和插件 第二章&#xff1a;环境搭建2.1 Node.js 环境安装和配置2.2 Egg.js 应用创建和项目结构介绍2.3 Egg.js 应用部署和启动 第三章&#xff1a;基本开发3.1 路…

经纬恒润新产品系列 | 这款AR-HUD将颠覆你的认知

随着科技的发展与突破&#xff0c;智能化产品在汽车领域扮演了越来越重要的角色。本文即将介绍**经纬恒润新产品——AR-HUD&#xff08;增强现实抬头显示系统&#xff09;&#xff0c;**它可以将科幻电影中的驾驶场景变为现实——将信息投影在挡风玻璃上&#xff0c;基于此功能…

开发环境搭建和创建STM32工程

目录 一、开发环境搭建 1. STM32CubeMX 2.Keil安装 二、创建STM32工程 一、开发环境搭建 1. STM32CubeMX ST公司出品 工具链接 https://www.st.com/zh/development-tools/stm32cubemx.html STM32CubeMX是一种图形工具&#xff0c;通过分步过程可以非常轻松地配置STM32微控制器和…

coolshell 镜像备份站点

缅怀技术大佬做的一个镜像站点 - RIP 消息刚开始是在推特传开&#xff0c;后面得到了家人同事的证实。噩耗&#xff01; worldpeople2019 太意外了&#xff01;中年程序员&#xff0c;感觉年龄跟我差不多&#xff0c;怎么就这么突然去世了&#xff1f;&#xff01;诸位码农朋友…

Python爬虫进阶(1),Django+Selenium+Mysql+SimpleUI,从零开始搭建自己的爬虫后台管理系统

如果爬虫做完的话都会发现每个文件要么保存到csv或者是其他格式的文件中&#xff0c;这样做多少会有些麻烦&#xff0c;所以需要将这些内容保存起来方便自己管理和查看内容。 相对于flask而言Django有着相对成熟的一个后台管理系统配合上其他一些插件就可以做到即插即用的效果…

hive安装及配置

hive安装和部署 Hive地址 1&#xff0e;Hive官网地址 http://hive.apache.org/ 2&#xff0e;文档查看地址 https://cwiki.apache.org/confluence/display/Hive/GettingStarted 3&#xff0e;下载地址 http://archive.apache.org/dist/hive/ 4&#xff0e;github地址 http…

全新版本,手把手教你配置c\c++

上一篇图片多&#xff0c;语句乱&#xff0c;内容乱 这一篇采用全新的教程 这次在不删软件的前提下进行 老规矩先把之前看的教程残余删除 如果你有很多插件和设置这边建议先备份 打开c盘&#xff0c;在搜索栏里输入你的用户名 在箭头位置搜索你的用户名&#xff0c;就是你…

通过Python的wordcloud库将单词生成词云(心形形状)

文章目录 前言一、wordcloud库是什么&#xff1f;二、安装wordcloud库三、查看wordcloud库版本四、使用方法1.引入库2.定义图片路径3.定义需要分词的文本4.采用jieba搜索引擎模式分词5.加载心形图片6.创建词云对象7.生成词云8.保存词云图9.词云图效果 总结 前言 大家好&#xf…

第十五章 使用iSCSI服务部署网络存储

文章目录 第十五章 使用iSCSI服务部署网络存储一、iSCSI技术介绍1、硬盘接口类型 二、创建RAID磁盘阵列1、添加四块硬盘2、创建RAID磁盘阵列 三、配置iSCSI服务端1、iSCSI服务的和客户端的操作系统以及IP地址2、安装targetcli3、配置服务端共享资源4、创建iSCSI target名称及配…

B.Conveyor Belts

Codeforces Round 863 (Div. 3) 题目链接 题目大意&#xff1a; 有个矩阵传送带&#xff0c;从其中一个传送带跳到邻近的传送带需要消费一点能量。问从 x 1 , y 1 x_1,y_1 x1​,y1​到 x 2 , y 2 x_2,y_2 x2​,y2​最少要多少能量 个人题解&#xff1a; 我只需要算出该点在哪个…

强化学习笔记-05 蒙特卡罗方法Monte Carlo Method

本文是博主对《Reinforcement Learning- An introduction》的阅读笔记&#xff0c;不涉及内容的翻译&#xff0c;主要为个人的理解和思考。 上一节介绍了通过动态规划法来解决强化Markov decision process MDP环境下的学习问题&#xff0c; 动态规划法假设环境是完全可知&#…

APP测试常见功能测试点汇总,赶紧来记笔记

目录 1、安装和卸载 2、运行 3、注册和登录 4、日历控件 5、权限设置 6、软件更新  7、网络环境 8、兼容性测试&#xff1a;   9、异常测试   1、安装和卸载 安装和卸载是任何一款APP中都属于最基本功能。一旦出错&#xff0c;就属于优先级为紧要的BUG。因此APP…

三十六、链路追踪、配置中心

1、链路追踪 在一次调用链路中&#xff0c;可能设计到多个微服务&#xff0c;如果在线上&#xff0c;某个微服务出现故障&#xff0c;如何快速定位故障所在额微服务呢。 可以使用链路追踪技术 1.1链路追踪介绍 在大型系统的微服务化构建中&#xff0c;一个系统被拆分成了许多微…

Ambari-2.7.7源码编译

0 说明 本文基于Ambari-2.7.7版本进行源码编译。所需的编译资料统一提供如下&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1F2D7zBGfKihxTBArnOilTw 提取码&#xff1a;8m17 1 前提条件 1.1 下载ambari源码包 wget https://github.com/apache/ambari/releases/t…