RabbitMQ Exporter

对于监控 RabbitMQ 有一个 Exporter 叫 RabbitMQ Exporter,是作者 kbudde 发布的,仓库地址是 https://github.com/kbudde/rabbitmq_exporter ,这是一个非官方的插件,现在最新版本是 v1.0.0-RC12 ,发布于2021 年 12 月 16 日左右,监控数据使用 Prometheus 来进行收集。对于 RabbitMQ 监控,官方也有一个插件,https://www.rabbitmq.com/prometheus.html ,可以对比选择哪个使用。

对于官方插件:

  • 包含 runtime 和 erlang 的指标
  • 集合每个对象的指标
  • Missing filter

对于 RabbitMQ Exporter

  • 支持旧版本的 RabbitMQ 导出监控数据
  • 对于对象,有更多的配置选项和过滤选项
  • 依赖于管理接口的数据,这可能是缓慢/延迟的

也许最好的解决办法是同时使用两个 Exporter 来互相补充。

安装运行

RabbitMQ Exporter 可以使用二进制运行,也可以使用 Docker 容器来运行。二进制文件可以从仓库直接下载,Docker 镜像从 Docker Hub 下载就好。

如果使用Docker 容器运行,Exporter 和 RabbitMQ 的容器需要共享网络,这样可以使用localhost和默认用户/密码(guest)。

启动 RabbitMQ

 docker run -d -e RABBITMQ_NODENAME=my-rabbit --name my-rabbit -p 9419:9419 rabbitmq:3-management

启动 RabbitMQ Exporter

 docker run -d --net=container:my-rabbit kbudde/rabbitmq-exporter

启动好以后访问 http://host:9419/metrics 就可以看到监控指标,管理插件也不需要公开。

配置 Exporter

RabbitMQ Exporter 可以使用 JSON 配置文件或者环境变量来进行配置。

RabbitMQ Exporter 需要将配置文件放在 conf/rabbitmq.conf。如果是在容器(docker/kubernetes)中运行Exporter, 需要在配置中使用参数指定配置文件路径,将缺省的 /conf/rabbitmq.conf 路径覆盖:

./rabbitmq_exporter -config-file config.example.json

配置文件示例如下:

{
    "rabbit_url": "http://127.0.0.1:15672",
    "rabbit_user": "guest",
    "rabbit_pass": "guest",
    "publish_port": "9419",
    "publish_addr": "",
    "output_format": "TTY",
    "ca_file": "ca.pem",
    "cert_file": "client-cert.pem",
    "key_file": "client-key.pem",
    "insecure_skip_verify": false,
    "exlude_metrics": [],
    "include_queues": ".*",
    "skip_queues": "^$",
    "skip_vhost": "^$",
    "include_vhost": ".*",
    "rabbit_capabilities": "no_sort,bert",
    "enabled_exporters": [
            "exchange",
            "node",
            "overview",
            "queue"
    ],
    "timeout": 30,
    "max_queues": 0
}

也可以使用环境变量来配置,可以使用的环境变量如下:

Environment variable default description

RABBITURL |http://127.0.0.1:15672 |url to rabbitMQ management plugin (must start with http(s)://) RABBIT_USER |guest |username for rabbitMQ management plugin. User needs monitoring tag! RABBIT_PASSWORD |guest |password for rabbitMQ management plugin RABBIT_USER_FILE| |location of file with username (useful for docker secrets) RABBIT_PASSWORD_FILE| |location of file with password (useful for docker secrets) PUBLISH_PORT |9419 |Listening port for the exporter PUBLISH_ADDR |"" |Listening host/IP for the exporter OUTPUT_FORMAT |TTY |Log ouput format. TTY and JSON are suported LOG_LEVEL |info |log level. possible values: "debug", "info", "warning", "error", "fatal", or "panic" CAFILE |ca.pem |path to root certificate for access management plugin. Just needed if self signed certificate is used. Will be ignored if the file does not exist CERTFILE |client-cert.pem |path to client certificate used to verify the exporter's authenticity. Will be ignored if the file does not exist KEYFILE |client-key.pem |path to private key used with certificate to verify the exporter's authenticity. Will be ignored if the file does not exist SKIPVERIFY |false |true/0 will ignore certificate errors of the management plugin SKIP_VHOST |^$ |regex, matching vhost names are not exported. First performs INCLUDE_VHOST, then SKIP_VHOST INCLUDE_VHOST |. |regex vhost filter. Only queues in matching vhosts are exported INCLUDE_QUEUES |. |regex queue filter. Just matching names are exported SKIP_QUEUES |^$ |regex, matching queue names are not exported (useful for short-lived rpc queues). First performed INCLUDE, after SKIP RABBIT_CAPABILITIES |bert,no_sort |comma-separated list of extended scraping capabilities supported by the target RabbitMQ server RABBIT_EXPORTERS| |exchange,node,queue List of enabled modules. Possible modules: connections,shovel,federation,exchange,node,queue,memory RABBIT_TIMEOUT |30 |timeout in seconds for retrieving data from management plugin. MAX_QUEUES |0 |max number of queues before we drop metrics (disabled if set to 0) EXCLUDE_METRICS | |Metric names to exclude from export. comma-seperated. e.g. "recv_oct, recv_cnt". See exporter*.go for names

使用环境变量的启动方式如下:

SKIP_QUEUES="RPC_.*" MAX_QUEUES=5000 ./rabbitmq_exporter

新版本的 RabbitMQ 可以提供一些特性来减少这个 Exporter 获取监控数据所带来的开销。RABBIT_CAPABILITIES 环境目前支持以下功能:

  • no_sort :

默认情况下,RabbitMQ 管理插件使用默认的 vhost/name 排序。从3.6.8版本开始,可以通过向 RabbitMQ 传递空的sort 参数(?sort=)来避免这种排序开销。这个选项可以在3.6.X 版本中安全启用,但它不会提供任何性能改进。它 v3.4.x 以及 3.5.x 不兼容。

  • bert

自 3.6.9 (见https://github.com/rabbitmq/rabbitmq-management/pull/367)以来,RabbitMQ 支持将 BERT 编码作为 JSON 的替代品。考虑到 BERT 编码是在 Erlang VM 中用 C 实现的,它比纯 Erlang JSON 编码更有效。所以当我们在 RabbitMQ 中有很多对象时可以极大的减少监控开销。

如果 RabbitMQ 的版本小于 v3.6 ,no_sortbert 是默认打开的,你需要重写默认配置。

RABBIT_CAPABILITIES=nobert ./rabbitmq_exporter

指标

所有的指标都会以 rabbitmq_ 前缀开头,完整的监控列表可以查看 https://github.com/kbudde/rabbitmq_exporter#metrics

对于 RabbitMQ Exporter 全局监控有关于 Exporter 自身状态的,包括 up、build info 等。另外会有关于集群的、队列的变化值、队列的计数值、Exchange、Node 、连接情况、Shovel、内存等指标,约么 200+ 以上吧。

已知问题解决方法

当出现 Error while retrieving data from rabbitHost statusCode: 500 的时候是因为,这个 Exporter 最好是使用 RabbitMQ v3.6.8 版本以上,如果你的 RabbitMQ 版本低于 v3.6.8 ,那么需要设置 RABBIT_CAPABILITIES=compat 参数来兼容。

results matching ""

    No results matching ""