nsqadmin

nsqadmin 是一个 Web UI,用于实时查看聚合的集群统计信息并执行各种管理任务。

命令行选项

-acl-http-header string
    用于检查已认证管理员用户的 HTTP 标头(默认为 "X-Forwarded-User")
-admin-user value
    管理员用户(可多次指定;如果指定,则只有这些用户能够执行特权操作;acl-http-header 用于确定已认证用户)
-allow-config-from-cidr string
    允许从该 CIDR 发送 HTTP 请求到 /config 端点的范围(默认为 "127.0.0.1/8")
-base-path string
    URL 基础路径(默认为 "/")
-config string
    配置文件路径
-graphite-url string
    graphite HTTP 地址
-http-address string
    监听 HTTP 客户端的 <addr>:<port>(默认为 "0.0.0.0:4171")
-http-client-connect-timeout duration
    HTTP 连接超时(默认为 2s)
-http-client-request-timeout duration
    HTTP 请求超时(默认为 5s)
-http-client-tls-cert string
    HTTP 客户端的证书文件路径
-http-client-tls-insecure-skip-verify
    配置 HTTP 客户端跳过 TLS 证书验证
-http-client-tls-key string
    HTTP 客户端的密钥文件路径
-http-client-tls-root-ca-file string
    HTTP 客户端的 CA 文件路径
-log-level value
    设置日志详细程度:debug、info、warn、error 或 fatal(默认为 INFO)
-log-prefix string
    日志消息前缀(默认为 "[nsqadmin] ")
-lookupd-http-address value
    lookupd HTTP 地址(可多次指定)
-notification-http-endpoint string
    发送管理员操作 POST 通知的 HTTP 端点(完全限定)
-nsqd-http-address value
    nsqd HTTP 地址(可多次指定)
-proxy-graphite
    代理到 graphite 的 HTTP 请求
-statsd-counter-format string
    statsd 实现的计数器统计键格式。如果不需要格式化,请设置为空字符串。(默认为 "stats.counters.%s.count")
-statsd-gauge-format string
    statsd 实现的仪表统计键格式。如果不需要格式化,请设置为空字符串。(默认为 "stats.gauges.%s")
-statsd-interval duration
    nsqd 配置为推送到 statsd 的时间间隔(必须与 nsqd 匹配)(默认为 1m0s)
-statsd-prefix string
    发送到 statsd 的键前缀(%s 用于主机替换,必须与 nsqd 匹配)(默认为 "nsq.%s")
-verbose
    [已弃用] 无效果,请使用 --log-level
-version
    打印版本字符串

statsd / Graphite 集成

在使用 nsqd --statsd-address=... 时,您可以指定 nsqadmin --graphite-url=https://graphite.yourdomain.com 来在 nsqadmin 中启用 graphite 图表。如果使用不添加键前缀的 statsd 克隆(如 statsdaemon),还需指定 --use-statsd-prefix=false

管理员通知

如果设置了 --notification-http-endpoint 标志,nsqadmin 将在每次执行管理员操作(如暂停通道)时,向指定的(完全限定)端点发送 POST 请求。

请求主体包含有关操作的信息(某些字段在适当情况下将被省略),如下所示:

{
  "action": "unpause_channel",
  "channel": "mouth",
  "topic": "beer",
  "timestamp": 1357683731,
  "user": "df",
  "user_agent": "Mozilla/5.0 (Macintosh; Iphone 8)",
  "remote_ip": "1.2.3.4:5678",
  "url": "http://nsqadmin.local/api/topics/api_requests/nsq_to_file",
  "via": "localhost"
}

如果请求到 nsqadmin 中包含 HTTP Basic Authentication 用户名,则 user 字段将被填充,例如在使用 htpasswd 认证或位于 oauth2_proxy 后面时。

提示:您可以通过将 --notification-http-endpoint 设置为指向 nsqd HTTP Publish API 的地址,使用主题名称 admin_actions 创建 NSQ 管理员操作通知流。例如,如果在同一节点上运行 nsqd,您可以使用 --notification-http-endpoint="http://127.0.0.1:4151/put?topic=admin_actions"

社区贡献的实用工具 nsqadmin2slacknsqadmin2hipchat 可分别将消息中继到 HipChat 和 Slack。

捕获的操作包括:

  • create_channel
  • create_topic
  • delete_channel
  • delete_topic
  • empty_channel
  • empty_topic
  • pause_channel
  • pause_topic
  • tombstone_topic_producer
  • unpause_channel
  • unpause_topic

指标

以下指标通过 nsqadmin 在主题、通道和客户端连接上暴露。

消息队列:

  • Depth:内存中 + 磁盘上的当前消息总和(即等待交付的消息“积压”)。
  • In-Flight:已交付但尚未完成(FIN)、重新入队(REQ)或超时的当前消息计数。
  • Deferred:已重新入队并明确延迟、尚未可交付的当前消息计数。

统计信息:

  • Requeued:由于超时或明确重新入队而将消息添加回队列的总次数。
  • Timed Out:在配置超时前未收到客户端响应的消息重新入队总次数。
  • Messages:自节点启动以来接收的新消息总计数。
  • Rate:前两个 statsd 间隔内新消息的每秒速率(仅在启用 graphite 集成时可用)。
  • Connections:当前连接的客户端数量。
  • Delivery:在每个拓扑类别(zoneLocal、regionLocal、global)中交付给消费者的消息,按主机生命周期的百分比(仅在 nsqd 中启用 topology-aware-consumption 实验且消息 > 0 时可用)

客户端连接:

  • Client Host:客户端 ID(主机名),悬停时显示连接远程地址。
  • Protocol:NSQ 协议版本和客户端用户代理。
  • Attributes:TLS 和 AUTH 连接状态,与 nsqd 主机相关的拓扑类别(zoneLocal、regionLocal、global)。
  • NSQd Host:此客户端连接到的 nsqd 节点地址。
  • In-flight:已交付给此客户端并等待响应的当前消息计数。
  • Ready Count:此连接上可处于飞行中的最大消息数。这由客户端的 max_in_flight 设置控制。
  • Finished:此客户端已完成(FIN)的消息总计数。
  • Requeued:此客户端已重新入队(REQ)的消息总计数。
  • Messages:交付给此客户端的消息总计数。

如果为 nsqd 主机启用了拓扑感知消费实验,则与 nsqd 主机相同区域的客户端连接将以绿色显示。与 nsqd 主机相同区域但不同区域的客户端连接将以黄色显示。