Prometheus Push Gateway
· Version-1.31.0 · Experimental
Pushgateway 采集器会开启对应的 API 接口,用于接收 Prometheus 指标数据。
配置¶
进入 DataKit 安装目录下的 conf.d/pushgateway
目录,复制 pushgateway.conf.sample
并命名为 pushgateway.conf
。示例如下:
[[inputs.pushgateway]]
## Prefix for the internal routes of web endpoints. Defaults to empty.
route_prefix = ""
## Measurement name.
## If measurement_name is not empty, using this as measurement set name.
# measurement_name = "prom_pushgateway"
## If job_as_measurement is true, use the job field for the measurement name.
## The measurement_name configuration takes precedence.
job_as_measurement = false
## Keep Exist Metric Name.
## Split metric name by '_', the first field after split as measurement set name, the rest as current metric name.
## If the keep_exist_metric_name is true, keep the raw value for field names.
keep_exist_metric_name = true
配置好后,重启 DataKit 即可。
可通过 ConfigMap 方式注入采集器配置 或 配置 ENV_DATAKIT_INPUTS
开启采集器。
也支持以环境变量的方式修改配置参数(需要在 ENV_DEFAULT_ENABLED_INPUTS
中加为默认采集器):
-
ENV_INPUT_PUSHGATEWAY_ROUTE_PREFIX
配置 endpoints 路由前缀
字段类型: String
采集器配置字段:
route_prefix
示例:
/v1/pushgateway
-
ENV_INPUT_PUSHGATEWAY_MEASUREMENT_NAME
配置指标集名称
字段类型: String
采集器配置字段:
measurement_name
-
ENV_INPUT_PUSHGATEWAY_JOB_AS_MEASUREMENT
是否使用 job 标签值作为指标集名称
字段类型: Boolean
采集器配置字段:
job_as_measurement
默认值: false
-
ENV_INPUT_PUSHGATEWAY_KEEP_EXIST_METRIC_NAME
是否保留原始的 Prometheus 字段名,详见 Kubernetes Prometheus doc
字段类型: Boolean
采集器配置字段:
keep_exist_metric_name
默认值: true
示例¶
Pushgateway 采集器遵循 Prometheus Pushgateway 协议,同时针对 Datakit 的采集特性有一些调整。目前支持以下功能:
- 接收 Prometheus 文本数据和 Protobuf 数据
- 在 URL 指定字符串 labels 和 base64 labels
- 解码 gzip 数据
- 指定指标集名称
下面是一个部署在 Kubernetes 集群中的简单示例:
- 开启 Pushgateway 采集器。此处选择在 Datakit YAML 以环境变量的方式开启。
# ..other..
spec:
containers:
- name: datakit
env:
- name: ENV_DEFAULT_ENABLED_INPUTS
value: dk,cpu,container,pushgateway # 添加 pushgateway,开启采集器
- name: ENV_INPUT_PUSHGATEWAY_ROUTE_PREFIX
value: /v1/pushgateway # 选填,指定 endpoints 路由前缀,目标路由会变成 "/v1/pushgateway/metrics"
# ..other..
- 创建一个 Deployment,产生 Prometheus 数据并发送到 Datakit Pushgateway 的 API。
apiVersion: apps/v1
kind: Deployment
metadata:
name: pushgateway-client
labels:
app: pushgateway-client
spec:
replicas: 1
selector:
matchLabels:
app: pushgateway-client
template:
metadata:
labels:
app: pushgateway-client
spec:
containers:
- name: client
image: pubrepo.guance.com/base/curl
imagePullPolicy: IfNotPresent
env:
- name: MY_NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: PUSHGATEWAY_ENDPOINT
value: http://datakit-service.datakit.svc:9529/v1/pushgateway/metrics/job@base64/aGVsbG8=/node/$(MY_NODE_NAME)/pod/$(MY_POD_NAME)/namespace/$(MY_POD_NAMESPACE)
## job@base64 指定格式是 base64,使用命令 `echo -n hello | base64` 生成值 'aGVsbG8='
args:
- /bin/bash
- -c
- >
i=100;
while true;
do
## 定期使用 cURL 命令向 Datakit Pushgateway API 发送数据
echo -e "# TYPE pushgateway_count counter\npushgateway_count{name=\"client\"} $i" | curl --data-binary @- $PUSHGATEWAY_ENDPOINT;
i=$((i+1));
sleep 2;
done
- 在观测云页面能看到指标集是
pushgateway
,字段是count
的指标数据。
指标集和 tags¶
Pushgateway 采集器不会添加任何 tags。
指标集的命名有两种情况:
- 使用配置项
measurement_name
指定指标集名称 - 使用 job 标签值作为指标集名称
- 对数据字段名称以下划线
_
进行切割,切割后的第一个字段作为指标集名称,剩下字段作为当前指标名称