shell脚本-采集容器内自定义端口tcp连接数并通过http接口推送到Prometheus

news2024/9/20 10:56:52

目录

1、脚本编写

2、脚本说明

3、运行脚本


1、脚本编写

脚本监控服务器 5000 端口的 TCP 连接数。使用 netstat 工具获取连接数,并通过一个简单的 shell 服务器提供 /connect 接口。具体功能如下:

vim prometheus_tcp_monitor.sh    编写脚本,内容如下:
 #!/bin/bash
 ​
 # 端口和认证信息
 PORT=5000
 USERNAME="xiaopeng"
 PASSWORD="xiaopeng_passwd"
 ​
 # 定义工具列表
 tools=("netstat" "python3" "nc")
 ​
 # 先检查相关工具是否安装
 for tool in "${tools[@]}"; do
     if command -v $tool &> /dev/null; then
         echo "已安装 $tool"
     else
         echo "$tool 未安装,正在安装..."
         # 安装工具
         if [[ "$tool" == "netstat" ]]; then
             sudo apt-get install -y net-tools
         else
             sudo apt-get install -y $tool
         fi
 ​
         # 再次检查是否安装成功
         if command -v $tool &> /dev/null; then
             echo "$tool 安装成功"
         else
             echo "$tool 安装失败,请手动检查"
         fi
     fi
 done
 ​
 # 获取TCP端口连接数函数
 get_tcp_connection_count() {
   netstat -an | grep ":$PORT" | grep ESTABLISHED | wc -l
 }
 ​
 # 启动简单的HTTP服务器函数
 start_http_server() {
   python3 -m http.server 8800 --bind 0.0.0.0 > /dev/null 2>&1 &
   SERVER_PID=$!
   echo "HTTP server started on port 8800 with PID $SERVER_PID"
 }
 ​
 # 处理HTTP请求函数
 handle_request() {
   while true; do
     # 获取请求的路径
     read request
 ​
     # 检查请求路径是否为 /connect
     if echo "$request" | grep -q "GET /connect"; then
       # 解析Authorization header
       read auth_header
       if echo "$auth_header" | grep -q "Authorization: Basic"; then
         # 提取用户名和密码
         provided_auth=$(echo "$auth_header" | cut -d ' ' -f3 | base64 --decode)
 ​
         # 验证用户名和密码
         if [ "$provided_auth" = "$USERNAME:$PASSWORD" ]; then
           # 返回Prometheus格式的指标
           connection_count=$(get_tcp_connection_count)
           response="HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\n# HELP tcp_connections_total TCP 5000 port connections.\n# TYPE tcp_connections_total gauge\ntcp_connections_total $connection_count"
         else
           # 返回401 Unauthorized
           response="HTTP/1.1 401 Unauthorized\r\nWWW-Authenticate: Basic realm=\"User Visible Realm\"\r\nContent-Length: 0\r\n\r\n"
         fi
       else
         # 返回401 Unauthorized
         response="HTTP/1.1 401 Unauthorized\r\nWWW-Authenticate: Basic realm=\"User Visible Realm\"\r\nContent-Length: 0\r\n\r\n"
       fi
 ​
       # 发送响应
       echo -e "$response" | nc -l -p 8800 -q 1
     fi
   done
 }
 ​
 # 启动HTTP服务器
 start_http_server
 ​
 # 处理HTTP请求
 handle_request

2、脚本说明

  • 获取TCP连接数:使用 netstat 命令过滤出端口 5000 的连接数。

  • 启动HTTP服务器:使用 python3 -m http.server 启动一个简单的 HTTP 服务器,监听端口 8800。

  • 处理HTTP请求:使用 nc (netcat) 工具来监听端口 8800,并处理 /connect 路径的请求。

  • Basic Auth 验证:解析 Authorization Header,验证用户名和密码。如果验证成功,返回 Prometheus 格式的 TCP 连接数指标;否则,返回 401 Unauthorized

3、运行脚本

prometheus_tcp_monitor.sh 添加可执行权限

 chmod +x prometheus_tcp_monitor.sh

运行脚本

 ./prometheus_tcp_monitor.sh

然后prometheus端开启数据采集,配置监控面板,编写promQL过滤tcp_connections_total的值即可

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

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

相关文章

Docker 安装消息队列RabbitMQ

拉取镜像 docker pull rabbitmq拉取最新镜像 创建并运行 docker run -d --hostname my-rabbit --name rabbit-p 15672:15672 -p 5673:5672rabbitmq开启Web管理 进入容器 docker exec -it rabbitmq /bin/bash开启web管理 rabbitmq-plugins enable rabbitmq_managementhttp:…

一文通透DeepSeek-V2(改造Transformer的中文模型):从DeepSeek LLM到DeepSeek-V2的MLA与MoE

前言 成就本文有以下三个因素 24年5.17日,我在我司一课程「大模型与多模态论文100篇」里问道:大家希望我们还讲哪些论文 一学员朋友小栗说:幻方发布的deepseek-v224年5.24日,我司一课程「大模型项目开发线上营1」里的一学员朋友…

Typora + PicGo + SMMS 实现markdown格式文档图片上传

Typora PicGo SMMS 实现图片自动上传 1. Typora 软件安装2. PicGo 的安装2.1 下载 PicGo 3. 配置 SMMS 图床服务3.1 注册并登录 SMMS3.2 获取 API Token 4. 软件配置4.1 Typora 图床设置4.2 PicGo 配置 5. 使用 Typora 实现图片自动上传 1. Typora 软件安装 Typora中文版是一…

排序1

一、概述 直接插入排序 是稳定排序 二、插入排序 1)直接插入排序 2)折半插入排序 3)希尔排序 、 三、交换排序 1)冒泡排序 2)快速排序

three.js 着色器学习 聚集地

预览地址:https://z2586300277.github.io/three-cesium-examples 国内站点预览:http://threehub.cn github: https://github.com/z2586300277/three-cesium-examples

swift微调Qwen-7B大模型

环境说明: CUDA相关环境已搭建完成,不会装CUDA环境可参照我的其它文章; 显卡:4张3090 1、安装swift环境 #从源码安装 git clone https://github.com/modelscope/swift.git cd swift pip install -e .[llm] pip install -e .[e…

文件读写与缓存机制

文件读写与缓存机制 写文件: 1:stdio函数库 fopen/fwrite/fflush/fclose File* fp2: POSIX系统级别函数 open/write/close fd3:Windows系统级别函数 CreateFile/WriteFile/CloseHandle**同步数据到磁盘:**FlushFileBuffers、f…

永磁同步电机高性能控制算法(13)后续篇—— 基于高阶扩张状态观测器(ESO)的无模型预测控制(MFPC)

1.前言 前文已经介绍过了高阶ESO相对于传统ESO的优势。 https://zhuanlan.zhihu.com/p/703039702https://zhuanlan.zhihu.com/p/703039702 但是当时搭的ESO有点问题。把公式修正之后,发现前文用的改进四阶ESO无法使用。 今天来解释一下为什么改进4阶ESO无法使用…

SystemTap(stap)架构和原理介绍,以及脚本编写举例

1 SystemTap简介 SystemTap是一个诊断Linux系统性能或功能问题的开源工具。它允许开发人员和系统管理员深入研究内核甚至用户空间应用程序的行为,以便发现错误状态、性能问题,或者仅仅为了解系统是如何工作的。它使得对运行时的Linux系统进行诊断调式变…

递归算法及应用

一.简介 1.介绍 递归(Recursion)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法,其核心思想是分治策略。 在日常开发中,我们使用循环语句远远大于递归,但这不能说明递归就没有用武之地&am…

服务器(百度云)部署项目(jar包)

java项目打包成jar包:clean------compile------install jar包上传到服务器上 和jar包相同的文件里,创建Dockerfile文件。 Dockerfile文件的内容informationerasure是jar包名,这里可根据自己定义的名字进行更换。 Dockerfile文件内容&#x…

chrome打印dom节点不显示节点信息

正常直接console dom节点 代码改成 var parser new DOMParser(); var docDom parser.parseFromString(testHtml, text/html); console.log(docDom) let htmlHeader ref< HTMLElement | null>(null) let htmlBoby ref< HTMLElement | null>(null) htmlHeader.v…

Datawhale AI 夏令营 第五期 CV Task1

活动简介 活动链接&#xff1a;Datawhale AI 夏令营&#xff08;第五期&#xff09; 以及CV里面的本次任务说明&#xff1a;Task 1 从零上手CV竞赛 链接里的教程非常详细&#xff0c;很适合小白上手&#xff0c;从报名赛事到使用服务器平台再到跑模型&#xff0c;手把手教&…

【Go语言基础】调度器模型GPM与垃圾回收器GC

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了Go语言学习的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于Go语言趣学指南进行的&#xff0c;每个知识点的修正和深入主要参…

ubuntu系统在线安装下载firefox-esr流览器

1、在线firefox流览器 Firefox ESR(Extended Support Release)是火狐浏览器的长期支持版本&#xff0c;针对同一个主版本提供一年左右的安全性与稳定性支持。如果您因为火狐浏览器改版而导致有原本能用的功能变得不能使用的话(例如Firefox 64.0把RSS订阅的功能拿掉了)&#xf…

IO进程day02(文件IO)

目录 【1】什么是文件IO 1》概念 2》特点 3》操作 【2】函数接口 1》打开文件open() 思考&#xff1a;文件IO和标准IO的打开方式的对应关系 2》关闭文件 close() 3》读写文件 read write 1> 读文件 read() 2> 写文件 write() 练习&#xff1a;文件IO实现cp…

使用AWS的EC2服务如何降低成本

在现代企业中&#xff0c;云计算已经成为推动业务创新和发展的重要工具。亚马逊云服务&#xff08;AWS&#xff09;的弹性计算云&#xff08;EC2&#xff09;提供了灵活的计算能力&#xff0c;企业可以根据需求快速部署和管理应用。然而&#xff0c;如何在使用EC2服务的过程中有…

无人机之多旋翼无人机的用途

一、航拍与摄影 高清摄像&#xff1a;多旋翼无人机搭载高清摄像头&#xff0c;可以进行高空拍摄&#xff0c;获取清晰的图像和视频资料&#xff0c;广泛应用于影视制作和新闻报道。 实时传输&#xff1a;无人机可通过图像传输设备&#xff0c;实现实时画面回传&#xff0c;为…

linux常见基础命令

Linux基础命令 (下面这些命令都是最常见的命令.更复杂的会在之后的C语言学习陆续深入) 1、 pwd 功能&#xff1a; print work directory的缩写&#xff0c;显示当前目录的绝对路径 2、 cd 功能&#xff1a; change directory的缩写&#xff0c;切换目录 绝对路径&#xff1a;以…

知识改变命运 数据结构【二叉树OJ题】

1. 检查两颗树是否相同OJ链接 class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {if(pnull&&q!null||p!null&&qnull) {return false;}if (pnull&&qnull) {return true;}if (p.val!q.val) {return false;}boolean leftisSameTree(p.…