如何在Prometheus(Kubernetes监控)中获取节点特定端口的当前TCP连接数
特定端口TCP连接数的Prometheus监控解决办法
一、node_exporter原生不支持按端口拆分指标
node_exporter自带的node_netstat_Tcp_CurrEstab仅统计节点所有ESTABLISHED状态的TCP总连接数,没有按端口维度拆分的内置指标,没法直接筛选出22端口的连接数。
二、两种可行实现方式
1. 用node_exporter的textfile收集器自定义指标
这是最轻量化的方案,无需额外部署新组件:
- 先确认node_exporter启动参数中开启了textfile收集器,比如添加
--collector.textfile.directory=/var/lib/node_exporter/textfile_collector(路径可自行修改) - 编写一个shell脚本,定时统计指定端口的连接数并生成Prometheus格式的指标文件:
#!/bin/bash TARGET_PORT=22 OUTPUT_FILE="/var/lib/node_exporter/textfile_collector/tcp_port_22_connections.prom" # 用ss命令(比netstat高效)统计本地22端口的ESTABLISHED状态连接数 CONN_NUM=$(ss -tna state established | grep -E ":${TARGET_PORT}\s+" | wc -l) # 生成标准Prometheus指标格式 cat > ${OUTPUT_FILE} <<EOF # HELP node_tcp_established_connections_by_port Number of established TCP connections on specific local port # TYPE node_tcp_established_connections_by_port gauge node_tcp_established_connections_by_port{port="${TARGET_PORT}"} ${CONN_NUM} EOF
- 给脚本添加执行权限:
chmod +x /path/to/your/script.sh - 通过crontab设置定时执行,比如每分钟跑一次:
* * * * * /path/to/your/script.sh - 完成后,访问node_exporter的metrics端点(如
http://192.168.1.1:9100/metrics)就能看到node_tcp_established_connections_by_port{port="22"}指标,直接用于PromQL查询和告警。
2. 部署专用连接数监控exporter
如果需要监控多端口、多连接状态(如TIME_WAIT、SYN_RECV等),可以用专门的netstat_exporter或tcp_connection_exporter:
- 这类exporter会自动抓取系统TCP连接的详细维度数据,包括本地端口、远端端口、连接状态等
- 部署后在Prometheus配置中添加该exporter的抓取任务,就能获取到带
port标签的连接数指标,直接筛选22端口即可。
三、告警规则示例(基于自定义指标)
groups: - name: node_tcp_port_alerts rules: - alert: TcpPort22ConnectionsExceeded expr: node_tcp_established_connections_by_port{port="22",instance="192.168.1.1"} > 100 for: 5m labels: severity: warning annotations: summary: "节点192.168.1.1的22端口连接数超标" description: "当前连接数: {{ $value }}, 已超过阈值100"
内容的提问来源于stack exchange,提问作者54vault
相关产品推荐
相关产品推荐

