0.简介

通过指标监控可以设置对应的告警,快速发现问题,并通过相应的指标定位问题。

背景:使用的 VictoriaMetrics(简称 VM) 作为监控的解决方案,需要将 django 服务、logstash 和 flink 引擎接入进来,VM 可以实时的获取它们的指标存储并进行监控告警,以上的服务都是部署在 k8s 中的。

1.VictoriaMetrics

VictoriaMetrics,是一个快速高效、经济并且可扩展的监控解决方案和时序数据库。比较出名的监控方案有 Promethues,而 VM 是兼容 Promethues 的各种规范、配置等,可以快速的融入 Promethues 生态甚至是取代它。

VM 获取服务指标的方式也是通过主动拉取的方式,每个服务都会暴露一个端口供 VM 来拉取服务的指标信息

2.django 服务接入

可以通过使用第三方库 prometheus-client 来收集服务的指标信息,并暴露端口给 VM 拉取。

  • 安装
pip install prometheus-client
  • 使用

因为该服务使用的是 wsgi 协议的,所以在 wsgi.py 文件中添加以下代码,会开启一个新的线程监听 9300 端口,请求该端口可以获取当前服务的参数指标。

from prometheus_client import start_wsgi_server
start_wsgi_server(9300)

如果想要上报业务指标,可以通过该库在业务中进行埋点和收集。

还需要在 pod 中添加 ports 属性提供给 VM 使用,这个在后面讲解。

- containerPort: 9300
  name: exportport
  protocol: TCP

3.logstash 接入

logstash 是有自己的指标监控服务,需要在配置文件 logstash.yaml 中将其端口暴露。

http.port: 9600

但是其指标格式和 prometheus 的指标格式是不同的,所以需要通过另一个程序 exporter 来将 logstash 指标转换成 prometheus 指标格式。

该 logstash 是部署在 k8s 中的,使用到容器设计模式 sidecar,就是在 pod 中新增一个容器来辅助主容器 logstash 来做监控指标的转换并提供给 VM 调用。

logstash 的 exporter 可以使用 prometheus-logstash-exporter 来完成,可以去 docker hub 中找到对应的镜像,并将其下载下来使用。

在 logstash 的 pod 中添加以下配置来设置 exporter,将暴露 9300 端口作为 logstash 的指标监控端口给 VM 拉取。这里需要配置 ports,在 VM 中需要使用该参数。

- name: logstash-exporter
image: alxrem/prometheus-logstash-exporter:0.7.0
args:
- -logstash.host
- 127.0.0.1
- -logstash.port
- 9600
- -web.listen-address
- 9300
ports:
- name: exportport
  containerPort: 9300

4.flink 接入监控

flink 本身是支持 prometheus 的指标监控,只需要通过添加配置 flink 的参数即可开启。

  metrics.reporters: prom
  metrics.reporter.prom.class: org.apache.flink.metrics.prometheus.PrometheusReporter
  metrics.reporter.prom.port: "9300"

除了上面的配置外,还需要在 Pod 中设置 ports 来供 VM 使用。

ports:
  - name: exportport
	containerPort: 9300

5.VMPodScrape

虽然上面的服务都暴露了指标端口,VM 如何找到它们呢?需要通过创建 VMPodScrape 的资源对象来帮助 VM 来找到它们。

配置如下:

apiVersion: operator.victoriametrics.com/v1beta1
kind: VMPodScrape
metadata:
  labels:
    prometheus: k8s
  name: demo-pod-monitor          
  namespace: monitor
spec:
  namespaceSelector:
    any: true                   
  podMetricsEndpoints:
    - path: /metrics            
      port: exportport          
  selector:
    matchLabels:
      app: django
  • spec.podMetricsEndpoints.port,这个就是在每个 pod 中添加的 ports 中对应的 name,VM 会去找到对应 name 的端口获取指标
  • spec.selector.matchLabels,通过标签过滤找到指定的 pod

通过 kubectl apply -f 创建该资源对象,VM 就能找到指标提供的服务。

欢迎关注,互相学习,共同进步~

我的个人博客
公众号:编程黑洞

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐