基于 rocketmq exporter + kube-prometheus 监控 rocketmq

1,265 阅读2分钟

本文介绍如何做rocketmq的监控,采用rocketmq exporter + kube-prometheus的业内通用方案,主要还是step by step。

rocketmq exporter + prometheus监控原理

RocketMQ-Exporter 的基本逻辑是内部启动多个定时任务周期性的从 MQ 集群拉取数据,然后将数据规范化后通过端点暴露给 Prometheus 即可。

image.png

具体介绍参考文章: 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 image.png

参考官方文档进行配置 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…