1

OpenHab や Grafana インスタンスなどのローカル サービスを監視するために、Telegraf と Prometheus を使用しています。

http_response プラグインは、次の結果を生成する場合があります。

http_response_http_response_code{host="master-pi",instance="192.168.2.15:9126",job="telegraf-master-pi",method="GET",result="success",result_type="success",server="http://www.grafana.local",status_code="200"}    200
http_response_http_response_code{host="master-pi",instance="192.168.2.15:9126",job="telegraf-master-pi",method="GET",result="success",result_type="success",server="http://www.grafana.local",status_code="502"}    502
http_response_http_response_code{host="master-pi",instance="192.168.2.15:9126",job="telegraf-master-pi",method="GET",result="success",result_type="success",server="http://www.thuis.local/start/index",status_code="200"} 200

ここで、過去 30 分間の !200 status_code カウントが 200 status_code カウントより多い場合に通知するアラートが必要です。

私は簡単に始めました:

alert: service_down_external
expr: http_response_http_response_code{status_code!~"200|302"}
for: 35m
labels:
  severity: high

これは問題なく動作しますが、問題は、10 秒ごとではなく 5 ~ 30 分ごとに監視しているサービスでは機能しないことです (一部の API の負荷を減らしたいため)。

だから私は考えました、別の方法で試してみましょう:

expr: count_over_time(http_response_http_response_code{status_code!~"200|302"}[30m]) > on(job, instance, method, server) count_over_time(http_response_http_response_code{status_code=~"200|302"}[30m])

これは有望に思えましたが、残念ながら 200/302 応答がまったくない場合は機能しません。その場合、「データなし」が返されます。

だから私は、それを合計金額で割りましょう:

count_over_time(http_response_http_response_code{status_code!~"200|302"}[300m]) > on(job, instance, method, server) count_over_time(http_response_http_response_code[300m])

しかし、それは次の結果になります:

Error executing query: found duplicate series for the match group {instance="192.168.2.15:9126", job="telegraf-master-pi", method="GET", server="http://www.grafana.local/series"} on the right hand-side of the operation: [{host="master-pi", instance="192.168.2.15:9126", job="telegraf-master-pi", method="GET", result="success", result_type="success", server="http://www.grafana.local/series", status_code="502"}, {host="master-pi", instance="192.168.2.15:9126", job="telegraf-master-pi", method="GET", result="success", result_type="success", server="http://www.grafana.local/series", status_code="200"}];many-to-many matching not allowed: matching labels must be unique on one side

また、無視しようとすると:

count_over_time(http_response_http_response_code{status_code!~"200|302"}[30m]) >ignoring(status_code) count_over_time(http_response_http_response_code[30m])

同じエラーが発生します。

過去 30 分間に http 応答で 5xx エラーしか返されなかった場合に警告する他の方法はありますか?

4

1 に答える 1