概述
既然开始使用VictoriaMetrics
了那么自然也要了解一下指标怎么写入和读取,比如目前我想采集一个新的指标,应该怎么写入.
本文将使用 python
脚本做个简单的演示,并且详细讲解各种指标的写法.
写入方法较多,下面会挨个介绍和展示,如果文档有不足之处还请见谅,可多参考参考官网的文档.
指标数组写入
为什么需要指标数组这种东西?
实际上这种指标写法叫Batch Write(批量写入)
,即一次性写入多个指标的行为.
假设场景: 单台服务器有 4 张网卡,我们需要采集每张网卡的流量数据上报到VictoriaMetrics
,且均采用同一指名.
那么对于这种数据我们肯定不能一个个请求写入,当写入规模很大时效率太慢不说还占用服务端资源.
所以这个时候就可以用到指标数组批量写入数据,一起写入提升效率,具体操作思路如下
1 | import requests |
生成的指标数组:
1 | {'metric_name': 'custom_cpu_usage', 'labels': {'env': 'prod', 'instance': 'server1', 'job': 'test_job'}, 'value': 67.123456, 'timestamp': 1697054700} |
格式化的 Prometheus 数据:
1 | custom_cpu_usage{env="prod",instance="server1",job="test_job"} 67.123456 1697054700 |
单个指标写入
当然有时候你也想一次只写入一个指标,那么可以参考下面这份代码.
至于他们的区别,在看完上面指标数组
的介绍相信你应该也有所了解了,这里就不在过多解释了,直接上代码.
1 | import requests |
指标追加全局标签
有时候写入指标时希望附带一些附加的全局标签,这些标签往往是全局固定不变的,但是每个指标又得带上它.
举个简单的例子,比如我目前有服务器的流量,磁盘,CPU 使用率指标,那么我怎么知道这个指标是哪台服务器?
所以这个时候是不是应该给他加一个ipv4
标签去记录他的 IP 地址?或者uuid
标签记录他的设备 SN 唯一标识?
但是这个标签你怎么加入呢?可参考下面代码的例子,在 url 的后面我们追加了一个extra_label
参数,里面写了我们的标签名和值.
就是通过这种方式直接添加的,而无需再写入指标里面设置.
1 | import requests |
其实还有一个办法,参考代码如下:
定义一个函数根据环境变量或者脚本变量动态为标签赋值然后 return
给指标合并,最后上报.
1 | import os |
二进制高性能写入
VictoriaMetrics 支持 Prometheus 的 remote_write
协议,允许以二进制格式(Protobuf)
写入数据,相比文本格式更高效.
Python 客户端可以使用 prometheus_client
或自定义 Protobuf
序列化.
场景一般就是高性能写入场景,减少带宽和解析开销,反正按需使用吧.
1 | from prometheus_client import CollectorRegistry, Gauge, remote_write |