郑文峰的博客 郑文峰的博客
首页
  • python之路
  • go之路
  • 其他
  • redis
  • mysql
  • docker
  • k8s
读书破万卷
周刊
关于
  • 导航 (opens new window)
  • 代码片段 (opens new window)
  • 收藏
  • 友链
  • 外部页面

    • 开往 (opens new window)
  • 索引

    • 分类
    • 标签
    • 归档
GitHub (opens new window)

zhengwenfeng

穷则变,变则通,通则久
首页
  • python之路
  • go之路
  • 其他
  • redis
  • mysql
  • docker
  • k8s
读书破万卷
周刊
关于
  • 导航 (opens new window)
  • 代码片段 (opens new window)
  • 收藏
  • 友链
  • 外部页面

    • 开往 (opens new window)
  • 索引

    • 分类
    • 标签
    • 归档
GitHub (opens new window)
  • docker

  • k8s

    • k8s之Pod
    • k8s之Deployment
    • k8s之Service
    • k8s之ConfigMap和Secret
    • k8s之Job和CronJob
    • k8s之DaemonSet
    • k8s之PV、PVC和StorageClass
    • k8s之StatefulSet
    • 使用kubeadm安装k8s
    • pod中将代码与运行环境分离
    • django后端服务、logstash和flink接入VictoriaMetrics指标监控
      • 0.简介
      • 1.VictoriaMetrics
      • 2.django 服务接入
      • 3.logstash 接入
      • 4.flink 接入监控
      • 5.VMPodScrape
  • 云原生
  • k8s
zhengwenfeng
2023-02-21
目录

django后端服务、logstash和flink接入VictoriaMetrics指标监控

# 0.简介

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

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

# 1.VictoriaMetrics

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

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

# 2.django 服务接入

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

  • 安装
pip install prometheus-client
1
  • 使用

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

from prometheus_client import start_wsgi_server
start_wsgi_server(9300)
1
2

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

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

- containerPort: 9300
  name: exportport
  protocol: TCP
1
2
3

# 3.logstash 接入

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

http.port: 9600
1

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

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

logstash 的 exporter 可以使用 prometheus-logstash-exporter (opens new window) 来完成,可以去 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
1
2
3
4
5
6
7
8
9
10
11
12

# 4.flink 接入监控

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

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

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

ports:
  - name: exportport
	containerPort: 9300
1
2
3

# 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  • spec.podMetricsEndpoints.port,这个就是在每个 pod 中添加的 ports 中对应的 name,VM 会去找到对应 name 的端口获取指标
  • spec.selector.matchLabels,通过标签过滤找到指定的 pod

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

上次更新: 2023/02/21, 03:15:06
pod中将代码与运行环境分离

← pod中将代码与运行环境分离

最近更新
01
django rest_framework 分页
03-20
02
学习周刊-第03期-第09周
03-03
03
学习周刊-第02期-第08周
02-24
更多文章>
Theme by Vdoing | Copyright © 2022-2023 zhengwenfeng | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式