当前位置: 首页 > news >正文

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

目录

1、脚本编写

2、脚本说明

3、运行脚本


1、脚本编写

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

vim prometheus_tcp_monitor.sh    编写脚本,内容如下:
 #!/bin/bash​# 端口和认证信息PORT=5000USERNAME="xiaopeng"PASSWORD="xiaopeng_passwd"​# 定义工具列表tools=("netstat" "python3" "nc")​# 先检查相关工具是否安装for tool in "${tools[@]}"; doif command -v $tool &> /dev/null; thenecho "已安装 $tool"elseecho "$tool 未安装,正在安装..."# 安装工具if [[ "$tool" == "netstat" ]]; thensudo apt-get install -y net-toolselsesudo apt-get install -y $toolfi​# 再次检查是否安装成功if command -v $tool &> /dev/null; thenecho "$tool 安装成功"elseecho "$tool 安装失败,请手动检查"fifidone​# 获取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​# 检查请求路径是否为 /connectif echo "$request" | grep -q "GET /connect"; then# 解析Authorization headerread auth_headerif 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 Unauthorizedresponse="HTTP/1.1 401 Unauthorized\r\nWWW-Authenticate: Basic realm=\"User Visible Realm\"\r\nContent-Length: 0\r\n\r\n"fielse# 返回401 Unauthorizedresponse="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 1fidone}​# 启动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的值即可

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Qt中英文支持
  • Openresty 中 ngx.exit(403)的时候,给403页面的body中传递一个参数展示出来
  • 怎样快速搭建 Linux 虚拟机呢?(vagrant 篇)
  • unity3d拼图__附带资源
  • 上书房信息咨询:消费者需求研究指标设计
  • 医院挂号系统的伪代码
  • 看图学sql之sql 中的UNION 和union all
  • html 基础标签
  • 深入解析Smarty SSTI 利用
  • 艾体宝干货丨OIDA之一:掌握数据包分析-学会观察
  • 橙子投屏,轻松连接大屏幕
  • 数学建模2024国赛时间及事项安排
  • 基础概念与简单数据结构的笔记02
  • Linux shell编程学习笔记74:sed命令——沧海横流任我行(中)
  • 滚珠丝杆与支撑座的标准安装与调试方法!
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 4. 路由到控制器 - Laravel从零开始教程
  • css系列之关于字体的事
  • flutter的key在widget list的作用以及必要性
  • gops —— Go 程序诊断分析工具
  • JavaScript设计模式与开发实践系列之策略模式
  • mysql中InnoDB引擎中页的概念
  • React的组件模式
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Webpack 4 学习01(基础配置)
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 前端工程化(Gulp、Webpack)-webpack
  • 如何利用MongoDB打造TOP榜小程序
  • 设计模式走一遍---观察者模式
  • 用Canvas画一棵二叉树
  • 由插件封装引出的一丢丢思考
  • 做一名精致的JavaScripter 01:JavaScript简介
  • #565. 查找之大编号
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (21)起落架/可伸缩相机支架
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • (未解决)macOS matplotlib 中文是方框
  • (一)Linux+Windows下安装ffmpeg
  • (一一四)第九章编程练习
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)Mysql的优化设置
  • (转)关于pipe()的详细解析
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .NET C# 使用GDAL读取FileGDB要素类
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .net 生成二级域名
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .net操作Excel出错解决
  • .net反编译工具