こんにちは、浴衣が欲しくて毎日インスタで浴衣の写真を見ている西村です。
リソースの監視に便利なGrafanaくんですが、スケーリングの度に手動でアラートの有効/無効を変更するのが面倒非効率のため、APIを活用しプログラム化する方法を調べました。
API Keyの作成
コードでAPI Keyを作成する方法もございますが、今回はGUI上からKeyを作成します。
Grafanaを開き、Configuration(歯車マーク) -> API Keys
を選択し画像のような画面に遷移します。青色で表示された「New APIKey」を押し
- Key name
: 任意の名前
- Role
: Viewer / Editor / Admin の中から任意の権限を選択
- Time to live
: 有効期限を指定
3種類の情報を入力し、Keyを作成してください。
(作成画面を閉じたら2度とKeyの内容を確認できないため、必ずメモをしてください)
1. アラートの一括取得
アラートを一括取得するためには/api/alerts
&GET
リクエストをすることでアラートの情報を一括取得できます。
サンプルリクエスト
$HEADER = @{
Authorization = "Bearer ${API_KEY}"
}
$URL = "<GrafanaURL>/api/alerts"
Invoke-RestMethod -Method Get -Uri $URL -Headers $HEADER -ContentType "application/json"
サンプルレスポンス
id : <alertId>
dashboardId : <dashboardId>
dashboardUid : <dashboardUid>
dashboardSlug : <dashboardSlug>
panelId : <panelId>
name : <PanelName>
state : <アラートが有効ならok / アラートが無効ならpaused>
newStateDate : <更新日時>
evalDate : 0001/01/01 0:00:00
evalData : @{noData=True}
executionError :
url : <サブディレクトリ>
このようなレスポンスがアラートの個数分返ってきます。
2. アラートの個別取得
アラートを個別取得するためには/api/alerts/$alertId
&GET
リクエストをすることで指定したIDのアラートの情報を取得できます。
サンプルリクエスト
$HEADER = @{
Authorization = "Bearer ${API_KEY}"
}
$URL = "<GrafanaURL>/api/alerts/${AlertId}"
Invoke-RestMethod -Method Get -Uri $URL -Headers $HEADER -ContentType "application/json"
サンプルレスポンス
Id : <alertId>
Version : <Panelのバージョン情報>
OrgId : <組織のID>
DashboardId : <dashboardId>
PanelId : <panelId>
Name : <PanelName>
Message :
Severity :
State : <アラートが有効ならok / アラートが無効ならpaused>
Handler : 1
Silenced : False
ExecutionError :
Frequency : 60
For : 300000000000
EvalData : @{noData=True}
NewStateDate : <更新日>
StateChanges : <更新回数>
Created : <作成日時>
Updated : <更新日時>
Settings : <パネルの設定関連>
3. アラートの有効/無効の操作
アラートの有効/無効の操作をするためには/api/alerts/$AlertId/pause
&POST
リクエストを行い、BODY
の中で有効(false)か無効(true)を指定しないといけません。
サンプルリクエスト
$HEADER = @{
Authorization = "Bearer ${API_KEY}"
}
$URL = "<GrafanaURL>/api/alerts/${AlertId}/pause"
$BODY = @{
paused = $true
} | ConvertTo-Json -Depth 100
Invoke-RestMethod -Method Post -Uri $URL -Headers $HEADER -Body $BODY -ContentType "application/json"
サンプルレスポンス
alertId : <alertId>
message : Alert un-paused
state : unknown
4. 正常性の確認
正常性の確認を行うためには/api/alerts/test
&POST
リクエストを行い、BODY
の中でダッシュボードを構成するJSONとpanelIDを指定しないといけません。
(「Test Rule」をAPIで実行する方法です)
サンプルリクエスト
$HEADER = @{
Authorization = "Bearer ${API_KEY}"
}
$URL = "<GrafanaURL>/api/alerts/test"
$BODY = @{
dashboard = <ダッシュボードを構成するJSON>
panelId = <panelID>
} | ConvertTo-Json -Depth 100
Invoke-RestMethod -Method Post -Uri $URL -Headers $HEADER -Body $BODY -ContentType "application/json"
サンプルレスポンス
firing : False
state : <Test Alertの結果>
conditionEvals : <アラートの条件>
timeMs : <処理時間>
logs : <ログ関連の設定>
注意点
現状ダッシュボードを構成するJSONをエクスポートする方法がない
執筆時点でGrafanaAPI
を活用し、ダッシュボードを構成するJSONをエクスポートする方法はありません。そのため、実行環境にダッシュボードを構成するJSONがないとこのAPIは使えません。
最後に
運用保守に便利なGrafanaさんの小技4選でした。今後も手動対応している部分をコード化し、業務改善して楽できるように頑張っていきたいと思います。