prometheus
pushgateway

pushgatewayのgrouping keyとlabelは別物

2回ハマったのでメモる

https://github.com/prometheus/pushgateway

pushgatewayにメトリクスを作る時

$ echo 'testmetric 1' | curl --data-binary @- localhost:9091/metrics/job/testjob

とすると

testmetric{instance="",job="testjob"} 1

このようなメトリクスが得られ、

labelkey="labelvalue"のlabelを付けたい時は

$ echo 'testmetric 1' | curl --data-binary @- localhost:9091/metrics/job/testjob/labelkey/labelvalue

とするか、

$ echo 'testmetric{labelkey="labelvalue"} 1' | curl --data-binary @- localhost:9091/metrics/job/testjob

とすれば

testmetric{instance="",job="testjob",labelkey="labelvalue"} 1

この形のメトリクスが得られます

そしてこの両者の違いは

前者はjob=testjob,labelkey=labelvalueでメトリクスがグルーピングされており、

後者はjob=testjobでグルーピングされている状態になります

この違いはどういう違いかというと、

$ echo 'testmetric 1' | curl --data-binary @- localhost:9091/metrics/job/testjob/labelkey/labelvalue1

$ echo 'testmetric 1' | curl --data-binary @- localhost:9091/metrics/job/testjob/labelkey/labelvalue2

とした時に、labelkey=labelvalue1labelkey=labelvalue2は別のグループなので両方残ります

$ echo 'testmetric{labelkey="labelvalue1"} 1' | curl --data-binary @- localhost:9091/metrics/job/testjob

$ echo 'testmetric{labelkey="labelvalue2"} 1' | curl --data-binary @- localhost:9091/metrics/job/testjob

とすると、グループは両方ともjob=testjobなので、labelvalue1が上書きされてlabelvalue2のメトリクスだけが残ります

また、メトリクスを削除する場合、

$ curl -XDELETE localhost:9091/metrics/job/testjob

このコマンドで削除されるのはjob=testjobのグループのメトリクスだけで、job=testjob,labelkey=labelvalueのメトリクスは削除されません。

job=testjob,labelkey=labelvalueのメトリクスを削除したいなら

$ curl -XDELETE localhost:9091/metrics/job/testjob/labelkey/labelvalue

とする必要があります。

値が変わる時に上書きしたいか別のメトリクスにしたいかで使い分けることができるんですね。

3度目はないぞ