本文介绍如何做rocketmq的监控,采用rocketmq exporter + kube-prometheus的业内通用方案,主要还是step by step。
rocketmq exporter + prometheus监控原理
RocketMQ-Exporter 的基本逻辑是内部启动多个定时任务周期性的从 MQ 集群拉取数据,然后将数据规范化后通过端点暴露给 Prometheus 即可。
具体介绍参考文章: www.infoq.cn/article/ncs…
配置Step by Step
前提
K8S集群中已安装rocketmq和kube-prometheus
安装rocketmq exporter
- 下载源码
git clone https://github.com/apache/rocketmq-exporter
- 修改配置application.yml
配置namesrvAddr的地址为K8S集群内的rocketmq的nameserver的域名地址
server:
port: 8080
rocketmq:
config:
webTelemetryPath: /rocketmq-exporter/metrics
namesrvAddr: name-server-service.foundation.svc.cluster.local:9876
-
构建镜像
-
部署到K8S集群
apiVersion: v1
kind: Service
metadata:
name: rocketmq-exporter
labels:
app: rocketmq-exporter
spec:
ports:
- name: rocketmq-exporter
port: 8080
targetPort: 8080
selector:
app: rocketmq-exporter
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: rocketmq-exporter
spec:
selector:
matchLabels:
app: rocketmq-exporter
replicas: 1
revisionHistoryLimit: 10
template:
metadata:
labels:
app: rocketmq-exporter
spec:
containers:
- name: rocketmq-exporter
env:
- name: TZ
value: Asia/Shanghai
image: rocketmq-exporter:20220901-094741
imagePullPolicy: Always
ports:
- containerPort: 8080
name: port
protocol: TCP
command:
- /bin/sh
args:
- -c
- set -e; java
-XX:MaxRAMPercentage=80.0 --server.port=8080
- 校验是否成功安装,且能获取到rocketmq的配置
可以配置nginx或者LB来访问服务接口/rocketmq-exporter/metrics,如果能查看到rocketmq的信息,那我们的rocketmq-exporter就安装成功了。
配置Kube-prometheus
- Kube-prometheus配置ServiceMonitor
参考官方文档进行配置 github.com/prometheus-…
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: rocketmq-exporter
labels:
app: rocketmq-exporter
release: prometheus
spec:
jobLabel: rocketmq-exporter
endpoints:
- port: rocketmq-exporter
interval: 30s
scheme: http
path: /rocketmq-exporter/metrics
selector:
matchLabels:
app: rocketmq-exporter
namespaceSelector:
matchNames:
- kube-system
port: rocketmq-exporter 是上面rocketmq-exporter的Service里配置port的名字
path: /rocketmq-exporter/metrics 是rocketmq-exporter暴露的访问地址
selector: matchLabels: app: rocketmq-exporter 匹配Service里配置的label
namespaceSelector: matchNames: - kube-system 是配置rocketmq-exporter所在的命名空间
release: prometheus
这一点比较关键,可以查看Kube-prometheus的README.md说明
By default, Prometheus discovers PodMonitors and ServiceMonitors within its namespace, that are labeled with the same release tag as the prometheus-operator release.
Sometimes, you may need to discover custom PodMonitors/ServiceMonitors, for example used to scrape data from third-party applications.
An easy way of doing this, without compromising the default PodMonitors/ServiceMonitors discovery, is allowing Prometheus to discover all PodMonitors/ServiceMonitors within its namespace, without applying label filtering.
To do so, you can set `prometheus.prometheusSpec.podMonitorSelectorNilUsesHelmValues` and `prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues` to `false`.
-
argocd上同步kube-prometheus
-
查看kube-prometheus的target和graph 判断生效
[root@master1 manifests]# kubectl port-forward --address 0.0.0.0 pod/prometheus-k8s-0 -n monitoring 9090:9090
配置grafana
参考 www.infoq.cn/article/ncs… 的第六点
参考文章
kube-prometheus 监控 rocketmq etcd服务 www.cnblogs.com/fengjian201…
--- 我安装的是kube-prometheus,但是rocketmq却不是etcd存储。
RocketMQ-Exporter 的具体实现 developer.aliyun.com/article/783…
查看promtheus支持的所有exporter prometheus.io/docs/instru…