概要
過去に自分のアプリにエクスポータを追加する方法を紹介しました
今回はエクスポータから取得して Prometheus に溜まったメトリックデータを Ruby から取得してみたいと思います
使用するライブラリは prometheus/prometheus_api_client_ruby になります
環境
- macOS 10.15.7
- Ruby 2.7.1p83
- prometheus-api-client 0.6.2
インストール
bundle init
vim Gemfile
gem "prometheus-api-client"
bundle install
サンプルコード: メトリックの取得とデータ変換
例えば redis-exporter から取得して Prometheus に溜まっているデータを取得するには以下のようなコードになります
vim app.rb
require 'prometheus/api_client'
prometheus = Prometheus::ApiClient.client(url: 'http://192.168.100.10:9090')
now = Time.now
a_hour_ago = now - 60 * 60
response = prometheus.get(
'query_range',
query: 'redis_memory_used_bytes{instance="localhost:9121",job="redis"}',
start: a_hour_ago.strftime("%FT%T%:z"),
end: now.strftime("%FT%T%:z"),
step: '120s',
)
puts response.status
puts response.body
result = JSON.parse(response.body)
t = result["data"]["result"].first["values"].first[0]
v = result["data"]["result"].first["values"].first[1]
puts Time.at(t)
puts v.to_i / (1024.0 * 1024.0)
クエリに関しては Prometheus の UI で確認できるクエリをそのまま入力すれば OK です
データは基本的に時間のレンジで指定するのがいいので start と end を指定しましょう
時刻はフォーマットが決まっているので指定のフォーマットに併せて変換しています (例: 2020-10-16 09:58:44 +0900)
取得できるデータは JSON になっています
時刻データと実際の値が配列になっているのでそれぞれ取得しています
あとは必要なデータ形式に変換すれば OK です
サンプルでは見やすいように時刻を変換しているのとバイトデータとメガバイト単位に変換しています
最後に
prometheus/prometheus_api_client_ruby
を使って Prometheus に溜まったデータを取得してみました
これを元に独自のアラートルールや UI が作成できるようになります
0 件のコメント:
コメントを投稿