我正在将以下指标推送到 Prometheus PushGateway
cpu_usage{process="dsapi_slave",pid="89543"} 0.1
但是在 Prometheus 中,我看到进程值dsapi_sla+
而不是原始推送值dsapi_slave
:
cpu_usage{environment="DEV", exported_instance="machine", exported_job="top", instance="someServer", job="Engine", pid="89543", process="dsapi_sla+", source="push_gateway"}
+
似乎通过添加符号来修剪长度超过 9 个字符的文本。
不确定这个重新标签配置是否导致它,我不这么认为,因为我的目标是实例标签:
relabel_configs:
- source_labels: [__address__]
regex: "([^:]+):\\d+"
target_label: instance
对此有任何提示吗?
编辑:
经过一些调试后,问题似乎是由curl
用于发布数据以推送网关指标端点的命令引起的,但仅当发布它的脚本由 systemd/cron 运行时。
脚本是:
#!/bin/bash
# script to collect the cpu and memory usage per process
var=""
LINES=""
LINES=$(top -bcn2 | awk '/^top -/ { p=!p } { if (!p) print }' | tail -n +8)
while read -r LINE
do
IN=`echo "$LINE" | tr -s ' '`
PID=`echo $IN | cut -d ' ' -f1 `
CMD=`echo $IN | cut -d ' ' -f12 `
CPU=`echo $IN | cut -d ' ' -f9 `
MEM=`echo $IN | cut -d ' ' -f10 `
var=$var$(printf "${TOOL}cpu_usage{process=\"$CMD\", pid=\"$PID\"} $CPU\n")
var="$var
"
var=$var$(printf "${TOOL}memory_usage{process=\"$CMD\", pid=\"$PID\"} $MEM\n")
var="$var
"
done <<< "$LINES"
# push to the prometheus pushgateway
curl -v -X POST -H "Content-Type: text/plain" --data "${var}" https://localhost:10083/metrics/job/top/instance/machine --insecure
手动运行它看起来不错:
使用 systemd 运行它,进程值会被修剪(如果值大于 9 个字符,则添加 + 号):