服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - 数据库技术 - Prometheus 长期远程存储方案 VictoriaMetrics 入门实践

Prometheus 长期远程存储方案 VictoriaMetrics 入门实践

2022-04-27 23:01k8s技术圈阳明 数据库技术

VictoriaMetrics(简称VM) 是一个支持高可用、经济高效且可扩展的监控解决方案和时间序列数据库,可用于 Prometheus 监控数据做长期远程存储。

Prometheus 长期远程存储方案 VictoriaMetrics 入门实践

VictoriaMetrics(简称VM) 是一个支持高可用、经济高效且可扩展的监控解决方案和时间序列数据库,可用于 Prometheus 监控数据做长期远程存储。

前面章节我们介绍了 Thanos 方案也可以用来解决 Prometheus 的高可用和远程存储的问题,那么为什么我们还要使用 VictoriaMetrics 呢?相对于 Thanos,VictoriaMetrics 主要是一个可水平扩容的本地全量持久化存储方案,VictoriaMetrics 不仅仅是时序数据库,它的优势主要体现在以下几点。

  • 对外支持 Prometheus 相关的 API,可以直接用于 Grafana 作为 Prometheus 数据源使用。
  • 指标数据摄取和查询具备高性能和良好的可扩展性,性能比 InfluxDB 和 TimescaleDB 高出 20 倍。
  • 这处理高基数时间序列时,内存方面也做了优化,比 InfluxDB 少 10x 倍,比 Prometheus、Thanos 或 Cortex 少 7 倍。
  • 高性能的数据压缩方式,与 TimescaleDB 相比,可以将多达 70 倍的数据点存入有限的存储空间,与 Prometheus、Thanos 或 Cortex 相比,所需的存储空间减少 7 倍。
  • 它针对具有高延迟 IO 和低 IOPS 的存储进行了优化。
  • 提供全局的查询视图,多个 Prometheus 实例或任何其他数据源可能会将数据摄取到 VictoriaMetrics。
  • 操作简单
  1. VictoriaMetrics 由一个没有外部依赖的小型可执行文件组成
  2. 所有的配置都是通过明确的命令行标志和合理的默认值完成的
  3. 所有数据都存储在 - storageDataPath 命令行参数指向的目录中
  4. 可以使用 vmbackup/vmrestore 工具轻松快速地从实时快照备份到 S3 或 GCS 对象存储中
  • 支持从第三方时序数据库获取数据源
  • 由于存储架构,它可以保护存储在非正常关机(即 OOM、硬件重置或 kill -9)时免受数据损坏
  • 同样支持指标的 relabel 操作

架构

VM 分为单节点和集群两个方案,根据业务需求选择即可。单节点版直接运行一个二进制文件既,官方建议采集数据点(data points)低于 100w/s,推荐 VM 单节点版,简单好维护,但不支持告警。集群版支持数据水平拆分。下图是 VictoriaMetrics 集群版官方的架构图。

Prometheus 长期远程存储方案 VictoriaMetrics 入门实践

主要包含以下几个组件:

  • vmstorage:数据存储以及查询结果返回,默认端口为 8482。
  • vminsert:数据录入,可实现类似分片、副本功能,默认端口 8480。
  • vmselect:数据查询,汇总和数据去重,默认端口 8481。
  • vmagent:数据指标抓取,支持多种后端存储,会占用本地磁盘缓存,默认端口 8429。
  • vmalert:报警相关组件,不如果不需要告警功能可以不使用该组件,默认端口为 8880。

集群方案把功能拆分为 vmstorage、 vminsert、vmselect 组件,如果要替换 Prometheus,还需要使用 vmagent、vmalert。从上图也可以看出 vminsert 以及 vmselect 都是无状态的,所以扩展很简单,只有 vmstorage 是有状态的。

vmagent 的主要目的是用来收集指标数据然后存储到 VM 以及 Prometheus 兼容的存储系统中(支持 remote_write 协议即可)。

下图是 vmagent 的一个简单架构图,可以看出该组件也实现了 metrics 的 push 功能,此外还有很多其他特性:

  • 替换 prometheus 的 scraping target
  • 支持基于 prometheus relabeling 的模式添加、移除、修改 labels,可以方便在数据发送到远端存储之前进行数据的过滤
  • 支持多种数据协议,influx line 协议,graphite 文本协议,opentsdb 协议,prometheus remote write 协议,json lines 协议,csv 数据
  • 支持收集数据的同时,并复制到多种远端存储系统
  • 支持不可靠远端存储(通过本地存储 -remoteWrite.tmpDataPath ),同时支持最大磁盘占用
  • 相比 prometheus 使用较少的内存、cpu、磁盘 io 以及网络带宽

Prometheus 长期远程存储方案 VictoriaMetrics 入门实践

接下来我们就分别来介绍了 VM 的单节点和集群两个方案的使用。

单节点

这里我们采集 node-exporter 为例进行说明,首先使用 Prometheus 采集数据,然后将 Prometheus 数据远程写入 VM 远程存储,由于 VM 提供了 vmagent 组件,最后我们使用 VM 来完全替换 Prometheus,可以使架构更简单、更低的资源占用。

这里我们将所有资源运行在 kube-vm 命名空间之下:

  kubectl create ns kube-vm

首先我们这 kube-vm 命名空间下面使用 DaemonSet 控制器运行 node-exporter,对应的资源清单文件如下所示:

# vm-node-exporter.yaml apiVersion: apps/v1 kind: DaemonSet metadata: name: node-exporter namespace: kube-vm spec: selector: matchLabels: app: node-exporter template: metadata: labels: app: node-exporter spec: hostPID: true hostIPC: true hostNetwork: true nodeSelector: kubernetes.io/os: linux containers:
        - name: node-exporter image: prom/node-exporter:v1.3.1 args:
            - --web.listen-address=$(HOSTIP):9111 - --path.procfs=/host/proc - --path.sysfs=/host/sys - --path.rootfs=/host/root - --no-collector.hwmon # 禁用不需要的一些采集器
            - --no-collector.nfs - --no-collector.nfsd - --no-collector.nvme - --no-collector.dmi - --no-collector.arp - --collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/containerd/.+|/var/lib/docker/.+|var/lib/kubelet/pods/.+)($|/)
            - --collector.filesystem.ignored-fs-types=^(autofs|binfmt_misc|cgroup|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|mqueue|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|sysfs|tracefs)$ ports:
            - containerPort: 9111 env:
            - name: HOSTIP valueFrom: fieldRef: fieldPath: status.hostIP resources: requests: cpu: 150m memory: 180Mi limits: cpu: 150m memory: 180Mi securityContext: runAsNonRoot: true runAsUser: 65534 volumeMounts:
            - name: proc mountPath: /host/proc - name: sys mountPath: /host/sys - name: root mountPath: /host/root mountPropagation: HostToContainer readOnly: true tolerations: # 添加容忍
        - operator: "Exists" volumes:
        - name: proc hostPath: path: /proc - name: dev hostPath: path: /dev - name: sys hostPath: path: /sys - name: root hostPath: path: /

由于前面章节中我们也创建了 node-exporter,为了防止端口冲突,这里我们使用参数 --web.listen-address=$(HOSTIP):9111 配置端口为 9111。直接应用上面的资源清单即可。

  kubectl apply -f vm-node-exporter.yaml   kubectl get pods -n kube-vm -owide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES node-exporter-c4d76 1/1 Running 0 118s 192.168.0.109 node2 <none>           <none> node-exporter-hzt8s 1/1 Running 0 118s 192.168.0.111 master1 <none>           <none> node-exporter-zlxwb 1/1 Running 0 118s 192.168.0.110 node1 <none>           <none>

 

然后重新部署一套独立的 Prometheus,为了简单我们直接使用 static_configs 静态配置方式来抓取 node-exporter 的指标,配置清单如下所示:

# vm-prom-config.yaml apiVersion: v1 kind: ConfigMap metadata: name: prometheus-config namespace: kube-vm data: prometheus.yaml: | global: scrape_interval: 15s scrape_timeout: 15s scrape_configs:
    - job_name: "nodes" static_configs:
      - targets: ['192.168.0.109:9111', '192.168.0.110:9111', '192.168.0.111:9111'] relabel_configs: # 通过 relabeling__address__ 中提取 IP 信息,为了后面验证 VM 是否兼容 relabeling - source_labels: [__address__] regex: "(.*):(.*)" replacement: "${1}" target_label: 'ip' action: replace

上面配置中通过 relabel 操作从 __address__ 中将 IP 信息提取出来,后面可以用来验证 VM 是否兼容 relabel 操作。

同样要给 Prometheus 数据做持久化,所以也需要创建一个对应的 PVC 资源对象:

# apiVersion: storage.k8s.io/v1 # kind: StorageClass # metadata: # name: local-storage # provisioner: kubernetes.io/no-provisioner # volumeBindingMode: WaitForFirstConsumer --- apiVersion: v1 kind: PersistentVolume metadata: name: prometheus-data spec: accessModes:
    - ReadWriteOnce capacity: storage: 20Gi storageClassName: local-storage local: path: /data/k8s/prometheus persistentVolumeReclaimPolicy: Retain nodeAffinity: required: nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname operator: In values:
                - node2 --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: prometheus-data namespace: kube-vm spec: accessModes:
    - ReadWriteOnce resources: requests: storage: 20Gi storageClassName: local-storage

然后直接创建 Prometheus 即可,将上面的 PVC 和 ConfigMap 挂载到容器中,通过 --config.file 参数指定配置文件文件路径,指定 TSDB 数据路径等,资源清单文件如下所示:

# vm-prom-deploy.yaml apiVersion: apps/v1 kind: Deployment metadata: name: prometheus namespace: kube-vm spec: selector: matchLabels: app: prometheus template: metadata: labels: app: prometheus spec: volumes:
        - name: data persistentVolumeClaim: claimName: prometheus-data - name: config-volume configMap: name: prometheus-config containers:
        - image: prom/prometheus:v2.35.0 name: prometheus args:
            - "--config.file=/etc/prometheus/prometheus.yaml" - "--storage.tsdb.path=/prometheus" # 指定tsdb数据路径
            - "--storage.tsdb.retention.time=2d" - "--web.enable-lifecycle" # 支持热更新,直接执行localhost:9090/-/reload立即生效 ports:
            - containerPort: 9090 name: http securityContext: runAsUser: 0 volumeMounts:
            - mountPath: "/etc/prometheus" name: config-volume - mountPath: "/prometheus" name: data --- apiVersion: v1 kind: Service metadata: name: prometheus namespace: kube-vm spec: selector: app: prometheus type: NodePort ports:
    - name: web port: 9090 targetPort: http

直接应用上面的资源清单即可。

  kubectl apply -f vm-prom-config.yaml   kubectl apply -f vm-prom-pvc.yaml   kubectl apply -f vm-prom-deploy.yaml   kubectl get pods -n kube-vm -owide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES node-exporter-c4d76 1/1 Running 0 27m 192.168.0.109 node2 <none>           <none> node-exporter-hzt8s 1/1 Running 0 27m 192.168.0.111 master1 <none>           <none> node-exporter-zlxwb 1/1 Running 0 27m 192.168.0.110 node1 <none>           <none> prometheus-dfc9f6-2w2vf 1/1 Running 0 4m58s 10.244.2.102 node2 <none>           <none>
  kubectl get svc -n kube-vm NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE prometheus NodePort 10.103.38.114 <none> 9090:31890/TCP 4m10s

部署完成后可以通过 http://:31890 访问 Prometheus,正常可以看到采集的 3 个 node 节点的指标任务。

Prometheus 长期远程存储方案 VictoriaMetrics 入门实践Prometheus 长期远程存储方案 VictoriaMetrics 入门实践

同样的方式重新部署 Grafana,资源清单如下所示:

# vm-grafana.yaml apiVersion: apps/v1 kind: Deployment metadata: name: grafana namespace: kube-vm spec: selector: matchLabels: app: grafana template: metadata: labels: app: grafana spec: volumes:
        - name: storage persistentVolumeClaim: claimName: grafana-data containers:
        - name: grafana image: grafana/grafana:main imagePullPolicy: IfNotPresent ports:
            - containerPort: 3000 name: grafana securityContext: runAsUser: 0 env:
            - name: GF_SECURITY_ADMIN_USER value: admin - name: GF_SECURITY_ADMIN_PASSWORD value: admin321 volumeMounts:
            - mountPath: /var/lib/grafana name: storage --- apiVersion: v1 kind: Service metadata: name: grafana namespace: kube-vm spec: type: NodePort ports:
    - port: 3000 selector: app: grafana --- apiVersion: v1 kind: PersistentVolume metadata: name: grafana-data spec: accessModes:
    - ReadWriteOnce capacity: storage: 1Gi storageClassName: local-storage local: path: /data/k8s/grafana persistentVolumeReclaimPolicy: Retain nodeAffinity: required: nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname operator: In values:
                - node2 --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: grafana-data namespace: kube-vm spec: accessModes:
    - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: local-storage
  kubectl apply -f vm-grafana.yaml   kubectl get svc -n kube-vm |grep grafana grafana NodePort 10.97.111.153 <none> 3000:31800/TCP 62s

同样通过 http://:31800 就可以访问 Grafana 了,进入 Grafana 配置 Prometheus 数据源。

Prometheus 长期远程存储方案 VictoriaMetrics 入门实践Prometheus 长期远程存储方案 VictoriaMetrics 入门实践

然后导入 16098 这个 Dashboard,导入后效果如下图所示。

Prometheus 长期远程存储方案 VictoriaMetrics 入门实践Prometheus 长期远程存储方案 VictoriaMetrics 入门实践

到这里就完成了使用 Prometheus 收集节点监控指标,接下来我们来使用 VM 来改造现有方案。

远程存储 VictoriaMetrics

首先需要一个单节点模式的 VM,运行 VM 很简单,可以直接下载对应的二进制文件启动,也可以使用 docker 镜像一键启动,我们这里同样部署到 Kubernetes 集群中。资源清单文件如下所示。

# vm-grafana.yaml apiVersion: apps/v1 kind: Deployment metadata: name: victoria-metrics namespace: kube-vm spec: selector: matchLabels: app: victoria-metrics template: metadata: labels: app: victoria-metrics spec: volumes:
        - name: storage persistentVolumeClaim: claimName: victoria-metrics-data containers:
        - name: vm image: victoriametrics/victoria-metrics:v1.76.1 imagePullPolicy: IfNotPresent args:
            - -storageDataPath=/var/lib/victoria-metrics-data - -retentionPeriod=1w ports:
            - containerPort: 8428 name: http volumeMounts:
            - mountPath: /var/lib/victoria-metrics-data name: storage --- apiVersion: v1 kind: Service metadata: name: victoria-metrics namespace: kube-vm spec: type: NodePort ports:
    - port: 8428 selector: app: victoria-metrics --- apiVersion: v1 kind: PersistentVolume metadata: name: victoria-metrics-data spec: accessModes:
    - ReadWriteOnce capacity: storage: 20Gi storageClassName: local-storage local: path: /data/k8s/vm persistentVolumeReclaimPolicy: Retain nodeAffinity: required: nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname operator: In values:
                - node2 --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: victoria-metrics-data namespace: kube-vm spec: accessModes:
    - ReadWriteOnce resources: requests: storage: 20Gi storageClassName: local-storage

这里我们使用 -storageDataPath 参数指定了数据存储目录,然后同样将该目录进行了持久化,-retentionPeriod 参数可以用来配置数据的保持周期。直接应用上面的资源清单即可。

  kubectl apply -f vm-single-node-deploy.yaml   kubectl get svc victoria-metrics -n kube-vm NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE victoria-metrics NodePort 10.106.216.248 <none> 8428:31953/TCP 75m   kubectl get pods -n kube-vm -l app=victoria-metrics NAME READY STATUS RESTARTS AGE victoria-metrics-57d47f4587-htb88 1/1 Running 0 3m12s   kubectl logs -f victoria-metrics-57d47f4587-htb88 -n kube-vm 2022-04-22T08:59:14.431Z info VictoriaMetrics/lib/logger/flag.go:12 build version: victoria-metrics-20220412-134346-tags-v1.76.1-0-gf8de318bf 2022-04-22T08:59:14.431Z info VictoriaMetrics/lib/logger/flag.go:13 command line flags 2022-04-22T08:59:14.431Z info VictoriaMetrics/lib/logger/flag.go:20 flag "retentionPeriod"="1w" 2022-04-22T08:59:14.431Z info VictoriaMetrics/lib/logger/flag.go:20 flag "storageDataPath"="/var/lib/victoria-metrics-data" 2022-04-22T08:59:14.431Z info VictoriaMetrics/app/victoria-metrics/main.go:52 starting VictoriaMetrics at ":8428"... 2022-04-22T08:59:14.432Z info VictoriaMetrics/app/vmstorage/main.go:97 opening storage at "/var/lib/victoria-metrics-data" with -retentionPeriod=1w ...... 2022-04-22T08:59:14.449Z info VictoriaMetrics/app/victoria-metrics/main.go:61 started VictoriaMetrics in 0.017 seconds 2022-04-22T08:59:14.449Z info VictoriaMetrics/lib/httpserver/httpserver.go:91 starting http server at http://127.0.0.1:8428/

到这里我们单节点的 VictoriaMetrics 就部署成功了。接下来我们只需要在 Prometheus 中配置远程写入我们的 VM 即可,更改 Prometheus 配置:

# vm-prom-config2.yaml apiVersion: v1 kind: ConfigMap metadata: name: prometheus-config namespace: kube-vm data: prometheus.yaml: | global: scrape_interval: 15s scrape_timeout: 15s remote_write: # 远程写入到远程 VM 存储
    - url: http://victoria-metrics:8428/api/v1/write scrape_configs:
    - job_name: "nodes" static_configs:
      - targets: ['192.168.0.109:9111', '192.168.0.110:9111', '192.168.0.111:9111'] relabel_configs: # 通过 relabeling__address__ 中提取 IP 信息,为了后面验证 VM 是否兼容 relabeling - source_labels: [__address__] regex: "(.*):(.*)" replacement: "${1}" target_label: 'ip' action: replace

重新更新 Prometheus 的配置资源对象:

  kubectl apply -f vm-prom-config2.yaml # 更新后执行 reload 操作重新加载 prometheus 配置
  curl -X POST "http://192.168.0.111:31890/-/reload"

配置生效后 Prometheus 就会开始将数据远程写入 VM 中,我们可以查看 VM 的持久化数据目录是否有数据产生来验证:

  ll /data/k8s/vm/data/ total 0 drwxr-xr-x 4 root root 38 Apr 22 17:15 big -rw-r--r-- 1 root root 0 Apr 22 16:59 flock.lock drwxr-xr-x 4 root root 38 Apr 22 17:15 small

现在我们去直接将 Grafana 中的数据源地址修改成 VM 的地址:

Prometheus 长期远程存储方案 VictoriaMetrics 入门实践Prometheus 长期远程存储方案 VictoriaMetrics 入门实践

修改完成后重新访问 node-exporter 的 dashboard,正常可以显示,证明 VM 是兼容的。

Prometheus 长期远程存储方案 VictoriaMetrics 入门实践

替换 Prometheus

上面我们将 Prometheus 数据远程写入到了 VM,但是 Prometheus 开启 remote write 功能后会增加其本身的资源占用,理论上其实我们也可以完全用 VM 来替换掉 Prometheus,这样就不需要远程写入了,而且本身 VM 就比 Prometheus 占用更少的资源。

现在我们先停掉 Prometheus 的服务:

  kubectl scale deploy prometheus --replicas=0 -n kube-vm

然后将 Prometheus 的配置文件挂载到 VM 容器中,使用参数 -promscrape.config 来指定 Prometheus 的配置文件路径,如下所示:

# vm-single-node-deploy2.yaml apiVersion: apps/v1 kind: Deployment metadata: name: victoria-metrics namespace: kube-vm spec: selector: matchLabels: app: victoria-metrics template: metadata: labels: app: victoria-metrics spec: volumes:
        - name: storage persistentVolumeClaim: claimName: victoria-metrics-data - name: prometheus-config configMap: name: prometheus-config containers:
        - name: vm image: victoriametrics/victoria-metrics:v1.76.1 imagePullPolicy: IfNotPresent args:
            - -storageDataPath=/var/lib/victoria-metrics-data - -retentionPeriod=1w - -promscrape.config=/etc/prometheus/prometheus.yaml ports:
            - containerPort: 8428 name: http volumeMounts:
            - mountPath: /var/lib/victoria-metrics-data name: storage - mountPath: /etc/prometheus name: prometheus-config

记得先将 Prometheus 配置文件中的 remote_write 模块去掉,然后重新更新 VM 即可:

  kubectl apply -f vm-prom-config.yaml   kubectl apply -f vm-single-node-deploy2.yaml   kubectl get pods -n kube-vm -l app=victoria-metrics NAME READY STATUS RESTARTS AGE victoria-metrics-8466844968-ncfnp 1/1 Running 2 (3m3s ago) 3m45s   kubectl logs -f victoria-metrics-8466844968-ncfnp -n kube-vm ...... 2022-04-22T10:01:59.837Z info VictoriaMetrics/app/victoria-metrics/main.go:61 started VictoriaMetrics in 0.022 seconds 2022-04-22T10:01:59.837Z info VictoriaMetrics/lib/httpserver/httpserver.go:91 starting http server at http://127.0.0.1:8428/ 2022-04-22T10:01:59.837Z info VictoriaMetrics/lib/httpserver/httpserver.go:92 pprof handlers are exposed at http://127.0.0.1:8428/debug/pprof/ 2022-04-22T10:01:59.838Z info VictoriaMetrics/lib/promscrape/scraper.go:103 reading Prometheus configs from "/etc/prometheus/prometheus.yaml" 2022-04-22T10:01:59.838Z info VictoriaMetrics/lib/promscrape/config.go:96 starting service discovery routines... 2022-04-22T10:01:59.839Z info VictoriaMetrics/lib/promscrape/config.go:102 started service discovery routines in 0.000 seconds 2022-04-22T10:01:59.840Z info VictoriaMetrics/lib/promscrape/scraper.go:395 static_configs: added targets: 3, removed targets: 0; total targets: 3

从 VM 日志中可以看出成功读取了 Prometheus 的配置,并抓取了 3 个指标(node-exporter)。现在我们再去 Grafana 查看 node-exporter 的 Dashboard 是否可以正常显示。先保证数据源是 VM 的地址。

Prometheus 长期远程存储方案 VictoriaMetrics 入门实践Prometheus 长期远程存储方案 VictoriaMetrics 入门实践

这样我们就使用 VM 替换掉了 Prometheus,我们也可以这 Grafana 的 Explore 页面去探索采集到的指标。

Prometheus 长期远程存储方案 VictoriaMetrics 入门实践Prometheus 长期远程存储方案 VictoriaMetrics 入门实践

UI 界面

VM 单节点版本本身自带了一个 Web UI 界面 - vmui,不过目前功能比较简单,可以直接通过 VM 的 NodePort 端口进行访问。

  kubectl get svc victoria-metrics -n kube-vm NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE victoria-metrics NodePort 10.106.216.248 <none> 8428:31953/TCP 75m

我们这里可以通过 http://:31953 访问到 vmui:

Prometheus 长期远程存储方案 VictoriaMetrics 入门实践

可以通过 /vmui 这个 endpoint 访问 UI 界面:

Prometheus 长期远程存储方案 VictoriaMetrics 入门实践

如果你想查看采集到的指标 targets,那么可以通过 /targets 这个 endpoint 来获取:

Prometheus 长期远程存储方案 VictoriaMetrics 入门实践Prometheus 长期远程存储方案 VictoriaMetrics 入门实践

这些功能基本上可以满足我们的一些需求,但是还是太过简单,如果你习惯了 Prometheus 的 UI 界面,那么我们可以使用 promxy 来代替 vmui,而且 promxy 还可以进行多个 VM 单节点的数据聚合,以及 targets 查看等,对应的资源清单文件如下所示:

# vm-promxy.yaml apiVersion: v1 kind: ConfigMap metadata: name: promxy-config namespace: kube-vm data: config.yaml: | promxy: server_groups:
      - static_configs:
        - targets: [victoria-metrics:8428] # 指定vm地址,有多个则往后追加即可 path_prefix: /prometheus # 配置前缀 --- apiVersion: apps/v1 kind: Deployment metadata: name: promxy namespace: kube-vm spec: selector: matchLabels: app: promxy template: metadata: labels: app: promxy spec: containers:
        - args:
            - "--config=/etc/promxy/config.yaml" - "--web.enable-lifecycle" - "--log-level=trace" env:
            - name: ROLE value: "1" command:
            - "/bin/promxy" image: quay.io/jacksontj/promxy imagePullPolicy: Always name: promxy ports:
            - containerPort: 8082 name: web volumeMounts:
            - mountPath: "/etc/promxy/" name: promxy-config readOnly: true - args: # container to reload configs on configmap change - "--volume-dir=/etc/promxy" - "--webhook-url=http://localhost:8082/-/reload" image: jimmidyson/configmap-reload:v0.1 name: promxy-server-configmap-reload volumeMounts:
            - mountPath: "/etc/promxy/" name: promxy-config readOnly: true volumes:
        - configMap: name: promxy-config name: promxy-config --- apiVersion: v1 kind: Service metadata: name: promxy namespace: kube-vm spec: type: NodePort ports:
    - port: 8082 selector: app: promxy

直接应用上面的资源对象即可:

  kubectl apply -f vm-promxy.yaml   kubectl get pods -n kube-vm -l app=promxy NAME READY STATUS RESTARTS AGE promxy-5f7dfdbc64-l4kjq 2/2 Running 0 6m45s   kubectl get svc promxy -n kube-vm NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE promxy NodePort 10.110.19.254 <none> 8082:30618/TCP 6m12s

访问 Promxy 的页面效果和 Prometheus 自带的 Web UI 基本一致的。

Prometheus 长期远程存储方案 VictoriaMetrics 入门实践

这里面我们简单介绍了单机版的 victoriametrics 的基本使用。关于集群版的使用请关注后续文章。

原文地址:https://mp.weixin.qq.com/s/C3fzohygl5_tey70Qnz3og

延伸 · 阅读

精彩推荐