1. 简介

因生产存在一套 zookeeper 需要进行监控,但因为版本只有3.4.11,秉承没挂我就躺平不升级原则就不能碰。又因查看了 zookeeper 文档发送从3.6.0版本才开始有原生支持开放指标接口供 Prometheus采 集。地址:https://zookeeper.apache.org/doc/r3.6.0/zookeeperMonitor.html

那么生产集群原则上是不支持上面的配置滴,那么就只能使用 zookeeper-exporter 进行采集

2. zookeeper-exporter 部署监控

开源项目:https://github.com/dabealu/zookeeper-exporter

镜像地址:https://docker.aityp.com/image/docker.io/dabealu/zookeeper-exporter:v0.1.13

2.1. Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: external-zookeeper-dyck-exporter
  namespace: monitoring
  labels:
    app: external-zookeeper-dyck-exporter
    type: zookeeper-exporter
    system: dyck
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 2
  selector:
    matchLabels:
      app: external-zookeeper-dyck-exporter
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: external-zookeeper-dyck-exporter
        type: zookeeper-exporter
        system: dyck
    spec:
      containers:
        - image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/dabealu/zookeeper-exporter:v0.1.13
          imagePullPolicy: IfNotPresent
          name: zookeeper-exporter
          args:
            - -zk-hosts
            - 10.196.68.43:2181,10.196.68.44:2181,10.196.68.45:2181
            - -location
            - /metrics
          env:
            - name: TZ
              value: Asia/Shanghai
          ports:
            - containerPort: 9141
              protocol: TCP
          resources:
            limits:
              cpu: 500m
              memory: 512Mi
            requests:
              cpu: 100m
              memory: 64Mi
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File

2.2. Service

apiVersion: v1
kind: Service
metadata:
  name: external-zookeeper-dyck-exporter
  labels:
    app: zookeeper
    type: zookeeper-exporter
    system: dyck
  namespace: monitoring
spec:
  type: ClusterIP
  ports:
    - name: http-metrics
      port: 9141
      protocol: TCP
      targetPort: 9141
  selector:
    app: external-zookeeper-dyck-exporter
    type: zookeeper-exporter
    system: dyck

2.3. ServiceMonitor

---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: external-zookeeper-exporter
  labels:
    app: zookeeper-exporter
    release: prometheus-community
  namespace: monitoring
spec:
  endpoints:
    - port: http-metrics
      interval: 30s
      path: /metrics
      relabelings:
        - sourceLabels: [ __meta_kubernetes_service_label_app, __meta_kubernetes_service_label_system ]
          targetLabel: job
          separator: "-"  # 用连字符连接两个标签值
          action: replace
      metricRelabelings:
        - sourceLabels: [ zk_host ]
          targetLabel: instance
          action: replace
          regex: "(.+):.+"
          replacement: "$1"
  selector:
    matchLabels:
      app: zookeeper
      type: zookeeper-exporter
  namespaceSelector:
    matchNames:
      - monitoring

这边设置 metricRelabelings 是因为一个 Pod 监控了多个 zk_host 服务,需要进行区分替换 instance,不然 grafana dashboard 界面不好看了。 

3. grafana dashboard 配置

grafana id: 11442,地址:https://grafana.com/grafana/dashboards/11442-zookeeper-exporter-dabealu/



  • 无标签
写评论...