PrometheusとPythonによる月次レポート - Prometheusドキュメント

このページはPrometheus公式ドキュメント和訳+αの一部です。

一ヶ月全体でどれぐらいリクエストが失敗したかなど、Prometheusからのレポートが欲しくなるのはよくあることだ。

PromQLは、カレンダー関数がいくつかあるものの、ビジネスロジックのために時間経過に連れて変化する時間幅ではなく、恣意的な固定の時間幅に渡る計算を行うためにデザインされている。 つまり、異なる月の日数は異なるので、月次レポートを直接PromQLで行うのは不可能ということである。 ただし、ちょっとしたPhthonスクリプトを使えば、これはとても簡単である。

import datetime
import time
import requests  # Install this if you don't have it already.
 
PROMETHEUS = 'http://localhost:9090/'
 
# Midnight at the end of the previous month.
end_of_month = datetime.datetime.today().replace(day=1).date()
# Last day of the previous month.
last_day = end_of_month - datetime.timedelta(days=1)
duration = '[' + str(last_day.day) + 'd]'
 
response = requests.get(PROMETHEUS + '/api/v1/query',
  params={
    'query': 'sum by (job)(increase(process_cpu_seconds_total' + duration + '))',
    'time': time.mktime(end_of_month.timetuple())})
results = response.json()['data']['result']
 
print('{:%B %Y}:'.format(last_day))
for result in results:
  print(' {metric}: {value[1]}'.format(**result))

これは、ローカル時間の翌月の開始時点で実行されることを意図しており、各ジョブが前月に利用したCPU時間の総量を返す。 そのために、クエリを評価する時点として使いたいので、その月がいつ終わったのか知る必要があり、レンジとして使うために、その月の長さを知る必要がある。 生成される結果は以下のようになる。

December 2018:
 {'job': 'node'}: 120443.3696840266
 {'job': 'prometheus'}: 29707.01091327252
 {'job': 'pushgateway'}: 1600.0859740366413
 {'job': 'alertmanager'}: 2398.4289547078656

これは、明らかに、手始めとなるためのとてもシンプルな例である。 現実には、おそらく、レコーディングルールで集約されたデータから始めて、この情報を何らかの形のデータベースに書き込みたいであろう。

参考リンク

おすすめ書籍

入門 Prometheus ―インフラとアプリケーションのパフォーマンスモニタリング

入門 Prometheus ―インフラとアプリケーションのパフォーマンスモニタリング

入門 監視 ―モダンなモニタリングのためのデザインパターン

入門 監視 ―モダンなモニタリングのためのデザインパターン

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム

和訳活動の支援

Prometheusドキュメント和訳が役に立った方は、以下QRコードからPayPayで活動を支援して頂けるとありがたいです。

PayPayによる支援用QRコード
上のQRコードからPayPayによる支援