如何监控身份验证尝试
自从在 3.8.0 版本中发布原生 Prometheus 支持以来,我们一直在不断改进 RabbitMQ 内置的监控功能。监控 Broker 及其客户端对于在问题影响环境的其余部分以及最终用户之前检测到问题至关重要。
RabbitMQ 3.8.10 通过 Prometheus 端点和 HTTP API 公开了客户端身份验证尝试指标。
默认行为是返回以下支持协议的身份验证尝试总数、失败次数和成功次数:AMQP 0-9-1、AMQP 1.0 和 MQTT。Broker 可以配置为还跟踪每次单独身份验证尝试的来源,包括远程 IP 地址、用户名和协议。由于 AMQP 1.0 授权没有地址信息,因此在非聚合模式下会报告空的源 IP。
配置
RabbitMQ 始终跟踪每个集群节点上的身份验证尝试总数,并按协议对其进行聚合。
可以通过高级配置添加每个地址/用户/协议组合的身份验证尝试。
[
{rabbit, [{track_auth_attempt_source, true}]}
]
启用此选项时必须小心。
通过指标跟踪源 IP、用户名和协议可能会导致高基数,这意味着 RabbitMQ 节点上的内存使用量增加。由于没有明显的标准可以从 RabbitMQ 基于内存 ETS 的指标存储中过期这些指标,因此不建议在生产集群上定期跟踪身份验证来源。此规则的唯一例外可能是远程 IP 地址和用户的数量保证受到限制的情况。
CLI 命令可用于启用/禁用远程来源的跟踪。这使得临时故障排除变得容易,无需重启节点。
CLI 命令可以在 rabbitmqctl
和 rabbitmq-diagnostics
下找到
命令 | 用法 |
---|---|
disable_auth_attempt_source_tracking | 禁用跟踪对等 IP 地址和用户名的身份验证尝试 |
enable_auth_attempt_source_tracking | 启用跟踪对等 IP 地址和用户名的身份验证尝试 |
reset_node_auth_attempt_metrics | 重置目标节点上的身份验证尝试指标 |
list_node_auth_attempt_stats | 列出目标节点上的身份验证尝试 |
我们想指出 reset_node_auth_attempt_metrics
命令。这对于在禁用来源跟踪后重置存储在 RabbitMQ 节点内存中的所有身份验证尝试指标非常有用。
HTTP API
在 管理插件上有两个 HTTP API 端点用于查询身份验证尝试。
第一个始终启用,并返回每个协议的身份验证尝试总数
GET /api/auth/attempts/{node}
[{
"protocol":"http",
"auth_attempts":553,
"auth_attempts_failed":0,
"auth_attempts_succeeded":553
},
{
"protocol":"amqp091",
"auth_attempts":12,
"auth_attempts_failed":10,
"auth_attempts_succeeded":2
}]
第二个需要启用身份验证尝试来源的跟踪。它提供了按来源划分的尝试明细
GET /api/auth/attempts/{node}/source
[{
"remote_address":"127.0.0.1",
"username":"guest",
"protocol":"http",
"auth_attempts":533,
"auth_attempts_failed":0,
"auth_attempts_succeeded":533
},
{
"remote_address":"127.0.0.1",
"username":"roger",
"protocol":"amqp091",
"auth_attempts":10,
"auth_attempts_failed":10,
"auth_attempts_succeeded":0
},
{
"remote_address":"127.0.0.1",
"username":"bugs",
"protocol":"amqp091",
"auth_attempts":2,
"auth_attempts_failed":0,
"auth_attempts_succeeded":2
}]
可以使用 A DELETE
HTTP 请求重置身份验证尝试指标,例如 DELETE /api/auth/attempts/{node}/source
Prometheus HTTP
Prometheus HTTP 端点,默认情况下 http://localhost:15692/metrics,捕获相同的身份验证指标
# TYPE rabbitmq_auth_attempts_total counter
# HELP rabbitmq_auth_attempts_total Total number of authorization attempts
rabbitmq_auth_attempts_total{protocol="amqp091"} 2
# TYPE rabbitmq_auth_attempts_succeeded_total counter
# HELP rabbitmq_auth_attempts_succeeded_total Total number of successful authentication attempts
rabbitmq_auth_attempts_succeeded_total{protocol="amqp091"} 0
# TYPE rabbitmq_auth_attempts_failed_total counter
# HELP rabbitmq_auth_attempts_failed_total Total number of failed authentication attempts
rabbitmq_auth_attempts_failed_total{protocol="amqp091"} 2
要获取来源详细信息,还必须配置 rabbitmq_prometheus 插件以返回每个对象的指标
# TYPE rabbitmq_auth_attempts_total counter
# HELP rabbitmq_auth_attempts_total Total number of authorization attempts
rabbitmq_auth_attempts_total{protocol="amqp091"} 5
# TYPE rabbitmq_auth_attempts_succeeded_total counter
# HELP rabbitmq_auth_attempts_succeeded_total Total number of successful authentication attempts
rabbitmq_auth_attempts_succeeded_total{protocol="amqp091"} 0
# TYPE rabbitmq_auth_attempts_failed_total counter
# HELP rabbitmq_auth_attempts_failed_total Total number of failed authentication attempts
rabbitmq_auth_attempts_failed_total{protocol="amqp091"} 5
# TYPE rabbitmq_auth_attempts_detailed_total counter
# HELP rabbitmq_auth_attempts_detailed_total Total number of authorization attempts with source info
rabbitmq_auth_attempts_detailed_total{remote_address="::ffff:127.0.0.1",username="guest",protocol="amqp091"} 1
# TYPE rabbitmq_auth_attempts_detailed_succeeded_total counter
# HELP rabbitmq_auth_attempts_detailed_succeeded_total Total number of successful authorization attempts with source info
rabbitmq_auth_attempts_detailed_succeeded_total{remote_address="::ffff:127.0.0.1",username="guest",protocol="amqp091"} 0
# TYPE rabbitmq_auth_attempts_detailed_failed_total counter
# HELP rabbitmq_auth_attempts_detailed_failed_total Total number of failed authorization attempts with source info
rabbitmq_auth_attempts_detailed_failed_total{remote_address="::ffff:127.0.0.1",username="guest",protocol="amqp091"} 1