はじめに
監視、モニタリング用のツールのひとつとしてPrometheusがありますが、
Prometheusでのモニタリングデータの参照には、主に下記の手段があります。
①Prometheus web UI
②Grafana
③API clients
私は①②は操作経験がありますが、③については興味がありつつも
なかなか触る機会がありませんでした。
そこで、今回はAPI clientsを利用してデータの参照を試してみたいと思います。
スクリプト作成
まず、API clientsの利用にあたっては、下記のURLを参照しました。
https://prometheus.io/docs/prometheus/latest/querying/api/
PrometheusのAPIの利用は、「HTTP API」という機能で利用でき、HTTPアクセスで使用できることがわかります。
ということで、「HTTP API」を使うサンプルスクリプトを作成してみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
<!DOCTYPE html> <head> <title>Prometheus HTTP APIサンプル</title> <meta charset="UTF-8"> <script type="text/javascript" src="./json2.js"></script> <script type="text/javascript"> /*################################# #処理内容 #################################*/ function main(){ res = SendAPI(); rtndata = JSON.parse(res); console.log(rtndata); } /*################################# #リクエスト実行 #################################*/ function SendAPI(){ var resData, apiURL apiURL = "http://xxx.xxx.xxx.xxx:9090/api/v1/targets"; var request = new XMLHttpRequest(); try { request.open( 'GET', apiURL, false ); request.send(); resData = request.responseText; } catch(e) { throw e.message; } return resData; } </script> </head> <body> <table><tr><td>Prometheus HTTP APIサンプル</td></tr></table><p><p> <input type='button' name='BTN_1' value='APIリクエスト実行!' onclick='main();'> </body> </html> |
今回のスクリプトですが、非常に簡易的なもので、 html画面からボタンを押すことで、Prometheusのモニタリング対象の 情報を取得するものになります。
APIから返却されるデータはJSON形式になりますので、JSONデータを適切な形に変換して表示します。
JSONデータを扱うために、json2.jsを外部からダウンロードして使用しています。
※URL部分については、環境依存のため伏字としておりますので、ご利用の環境に合わせて設定が必要です。
スクリプト実行
それでは、実行してみましょう。
作成したhtmlをブラウザで表示して、ボタンを押下することで処理を開始します。
実行結果は、画面上に直接表示はされず、ブラウザのコンソールに出力されます。
私は今回chromeブラウザを使用しますので、chromeブラウザのデベロッパーツールを立ち上げて
結果を見てみることとします。
データが表示されましたね。
Prometheusの「Targets」画面の出力情報と、上記のデータと比較してみましょう。
上記のTargetsに登録されたスクレイプ対象の4項目が、全てAPIの取得結果にも反映されておりますね。
最後に
今回の方法を使用して、prometeheus画面やgrafana以外から、
プログラム等でPrometheus上のデータを参照することができます。
また、今回は試しておりませんが、より詳細に、モニタリング対象のデータを指定して
取得することも可能となります。
こちらは興味がありましたら、試してみてください。
【参考】
https://prometheus.io/docs/prometheus/latest/querying/api/