SSHD 采集插件
监控数据采集器 Categraf 的 sshd 采集插件介绍
SSHD守护进程插件通过解析last命令的输出来收集 SSH 连接统计信息,能够监控当前活跃的 SSH 连接数量和新建连接数量。企业版v0.4.26及以上包含此插件。
系统要求
- 操作系统支持:目前仅支持
Linux系统 - 权限要求:需要有执行
last命令的权限 - 命令依赖:系统需要安装
last命令(通常默认安装)
配置说明
配置文件位于conf/inputs.sshd/sshd.toml
基础配置说明
# 数据采集间隔(秒)
interval = 15
[[instances]]
# 是否在指标中包含用户名标签
# 启用后,指标将包含 username 标签用于详细跟踪
# 默认值:false
enable_username = false
# 是否在指标中包含客户端 IP 标签
# 启用后,指标将包含 remote_ip 标签用于详细跟踪
# 默认值:false
enable_ip = false
配置参数说明
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| interval | int | 15 | 采集周期配置 |
| enable_username | bool | false |
是否启用用户名标签 |
| enable_ip | bool | false |
是否启用远程 IP 标签 |
监控指标
插件会生成以下两个核心指标:
sshd_connections_current
- 指标类型:Gauge
- 含义:当前采集周期内发现的 SSH 连接总数(包括所有活跃连接)
- 用途:监控当前系统的 SSH 连接负载情况
sshd_new_connections
- 指标类型:Gauge
- 含义:自上次采集以来的新 SSH 连接数量
- 用途:监控 SSH 连接的增长趋势和登录活动
标签配置与输出示例
场景 1:无标签模式(默认)
配置
enable_username = false
enable_ip = false
指标输出示例
sshd_connections_current 5
sshd_new_connections 2
场景 2:仅用户名标签
配置:
enable_username = true
enable_ip = false
输出示例
sshd_connections_current{username="admin"} 3
sshd_connections_current{username="root"} 2
sshd_new_connections{username="admin"} 1
sshd_new_connections{username="root"} 1
场景 3:仅远程 IP 标签
配置
enable_username = false
enable_ip = true
输出示例
sshd_connections_current{remote_ip="192.168.1.100"} 4
sshd_connections_current{remote_ip="10.0.0.50"} 1
sshd_new_connections{remote_ip="192.168.1.100"} 2
场景 4:用户名和远程 IP 双标签
配置
enable_username = true
enable_ip = true
输出示例
sshd_connections_current{username="admin",remote_ip="192.168.1.100"} 3
sshd_connections_current{username="root",remote_ip="10.0.0.50"} 1
sshd_connections_current{username="admin",remote_ip="192.168.1.200"} 1
sshd_new_connections{username="admin",remote_ip="192.168.1.100"} 2
使用场景
监控系统整体的 SSH 连接情况
# 当前活跃连接数
sshd_connections_current
# 新建连接数
sshd_new_connections
用户行为监控
监控特定用户的连接活动:
# 特定用户的连接数
sshd_connections_current{username="admin"}
# 新用户连接活动
sshd_new_connections{username="admin"}
# 连接数最多的前 5 个用户
topk(5, sshd_connections_current)
安全监控
基于 IP 地址的安全分析
# 来自特定 IP 的连接
sshd_connections_current{remote_ip="192.168.1.100"}
# 来自特定 IP 的新连接
sshd_new_connections{remote_ip="192.168.1.100"}
# 连接数超过 3 个的 IP(可能的异常行为)
sshd_connections_current > 3
综合分析
结合用户名和 IP 的复合分析:
# 特定网段的用户活动
sshd_connections_current{username="admin",remote_ip=~"192.168.*"}
# 来自特定网段的新连接
sshd_new_connections{username="admin",remote_ip=~"192.168.*"}
# 每个 IP 的用户多样性(安全分析)
count by (remote_ip) (sshd_connections_current)
数据采集机制
- 命令执行优先级:
- 首选:last -F -i -w(完整时间戳 + IP 地址 + 宽格式)
- 备选:last -i -w(Linux 标准格式)
- 兜底:last(基础格式,最大兼容性)
- 时间解析能力:
- 支持完整时间戳格式(包含年份)
- 智能年份检测(处理跨年情况)
- 向后兼容性处理
- 会话过滤:
- 识别 SSH 类型会话(pts/、ttys 终端)
- 排除控制台登录和本地终端
- 按时间倒序优化解析
- 性能优化
- 早期终止:遇到上次采集时间之前的记录时停止解析
- 高效过滤:优化的终端类型检测算法
- 精确时间戳:使用完整时间戳避免解析歧义
- 增量处理:仅处理新的或变化的连接数据
- IPv4/IPv6 支持:支持双栈网络环境
注意事项
- 系统兼容性:目前仅支持 Linux 系统,其他系统会显示警告并跳过采集
- 权限要求:需要确保运行用户有执行 last 命令的权限
- 状态维护:插件在采集周期之间维护状态,确保新连接计数的准确性
- 自动过滤:自动过滤控制台登录和非 SSH 终端
- 命令兜底:当 last -F -i -w 不完全支持时会优雅降级
- 采集频率:支持各种采集频率(1分钟、5分钟等)
- 地址检测:支持 IPv4 和 IPv6 远程地址检测
故障排除
如果插件无法正常工作,请检查:
- 系统是否为 Linux
- last 命令是否可用且有执行权限
- 配置文件语法是否正确
- 检查插件日志中的错误信息