Netstat_Filter 采集插件
监控数据采集器 Categraf 的网络连接信息采集插件
该插件两个核心作用,监控物理机上指定连接状态,监控K8s环境下Pod内指定连接(或所有连接)的状态和sendq/recvq).
采集原理
- 物理机环境下, 通过遍历/proc/net/tcp (类似netstat方式)过滤和筛选指定连接。
- 在K8s环境下,(推荐)用Daemonset方式部署,插件会通过nsenter 进入当前Node上的Pod的netns内执行ss命令,获取连接的(recvq/sendq)信息。
物理机连接监控
机器上连接很多,我们要做连接状态监控,就要想办法告诉 Categraf 要监控哪些连接,通过xxx_ip和xxx_port配置,可以做连接过滤筛选:
# # collect interval
# interval = 15
[[instances]]
# 以下四选一,分别表示按照本地监听的IP 本地监听的端口,远端的IP 远端的端口过滤
# laddr_ip = ""
# laddr_port = 80
# raddr_ip = ""
# raddr_port = 0
# 企业版的categraf v0.4.9支持
# 如果kube_api_enabled=true 则只过滤Pod内的状态,且只支持laddr_port过滤,laddr_port设置为0 表示查看所有连接状态。
# K8s环境下需要请求apiserver ,这里须设置为true
# 不设置或设置为false则只获取物理机的连接状态
# kube_api_enabled=true
# 只探测监听端口的recvq和sendq, queue_ratio=recvq/sendq
# 大于等于threshold数据会上报
# queue_ratio_threshold=0.8
# 请求apiserver的client-side限制
# kube_api_request_qps=20
# kube_api_request_burst=50
K8s环境下的指标
# 表示监听地址上当前有多少个连接(按照监听IP+端口聚合的) 该指标一直有。
netstat_filter_pod_tcp_connections
# 超过 queue_ratio_threshold时,会产生以下指标
# 表示当前连接queue的最大值, 即监听状态连接的sendq
# 按照localfd sourceIP sourcePort remoteIP remotePort聚合, 本地端口可能对应多个进程,比如nginx,所以用fd区分)
netstat_filter_pod_tcp_queue_max 即监听状态连接的recvq
表示连接queue的当前值(按照localfd sourceIP sourcePort remoteIP remotePort聚合, 本地端口可能对应多个进程,比如nginx,所以用fd区分)
netstat_filter_pod_tcp_queue_current