跳至主内容

如何监控身份验证尝试

·阅读时长4分钟

自 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(基于 ETS 的指标存储)中过期这些指标,因此不建议在生产集群上定期跟踪身份验证来源。这条规则的唯一例外可能是当远程 IP 地址和用户的数量保证是有限的时。

可以使用 CLI 命令启用/禁用对远程来源的跟踪。这使得即时故障排除变得容易,无需重新启动节点。

CLI 命令可以在 rabbitmqctlrabbitmq-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
}]

可以使用 DELETE HTTP 请求重置身份验证尝试指标,例如 DELETE /api/auth/attempts/{node}/source

Prometheus HTTP

Prometheus HTTP 端点(默认情况下为 https://: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
© . This site is unofficial and not affiliated with VMware.