如何监控身份验证尝试
自从在 3.8.0 版本中提供原生 Prometheus 支持以来,我们一直在不断改进 RabbitMQ 中内置的监控功能。监控代理及其客户端对于在问题影响到环境其他部分以及最终影响最终用户之前检测到问题至关重要。
RabbitMQ 3.8.10 通过 Prometheus 终端和 HTTP API 暴露了客户端身份验证尝试指标。
默认行为是返回以下支持协议的总计、失败和成功身份验证尝试:AMQP 0-9-1、AMQP 1.0 和 MQTT。代理可以配置为跟踪每个单独身份验证尝试的来源,包括远程 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 终端(默认情况下为 https://127.0.0.1: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