#yyds干货盘点# Prometheus Exporter(二十八) RabbitMQ Exporter

网友投稿 360 2022-10-09

#yyds干货盘点# Prometheus Exporter(二十八) RabbitMQ Exporter

本文已经收录在 Prometheus 合集 Prometheus 都可以采集那些指标?-- 常用 Exporter 合集 中。

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

对于官方插件:

包含 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

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

配置 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
RABBIT_URL 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, recvcnt". 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 (见支持将 BERT 编码作为 JSON 的替代品。考虑到 BERT 编码是在 Erlang VM 中用 C 实现的,它比纯 Erlang JSON 编码更有效。所以当我们在 RabbitMQ 中有很多对象时可以极大的减少监控开销。

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

RABBIT_CAPABILITIES=nobert ./rabbitmq_exporter

指标

所有的指标都会以 rabbitmq_ 前缀开头,完整的监控列表可以查看 。

对于 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 参数来兼容。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:如何缩小安全漏洞爆炸半径,实现服务间零信任安全?
下一篇:Spring事务的七种传播行为
相关文章

 发表评论

评论列表