本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「Grafana APIを活用しアラートを操作する方法4選」を再編集したものです。
こんにちは、浴衣が欲しくて毎日インスタで浴衣の写真を見ている西村です。
リソースの監視に便利な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 : <PanelName>
name :
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><Panelのバージョン情報>
Version : <dashboardId>
OrgId : <組織のID> DashboardId : <panelId>
PanelId : <PanelName>
Name :
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><panelID>
/api/alerts/test" $BODY = @{ dashboard = <ダッシュボードを構成するJSON> 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をエクスポートする方法がない
執筆時点でGrafana APIを活用し、ダッシュボードを構成するJSONをエクスポートする方法はありません。そのため、実行環境にダッシュボードを構成するJSONがないとこのAPIは使えません。
最後に
運用保守に便利なGrafanaさんの小技4選でした。今後も手動対応している部分をコード化し、業務改善して楽できるように頑張っていきたいと思います。
西村 凌/FIXER
インフラエンジニア1年生