
こんにちは、浴衣が欲しくて毎日インスタで浴衣の写真を見ている西村です。
リソースの監視に便利な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   : unknown4. 正常性の確認
正常性の確認を行うためには/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選でした。今後も手動対応している部分をコード化し、業務改善して楽できるように頑張っていきたいと思います。







![Microsoft Power BI [実践] 入門 ―― BI初心者でもすぐできる! リアルタイム分析・可視化の手引きとリファレンス](/assets/img/banner-power-bi.c9bd875.png)
![Microsoft Power Apps ローコード開発[実践]入門――ノンプログラマーにやさしいアプリ開発の手引きとリファレンス](/assets/img/banner-powerplatform-2.213ebee.png)
![Microsoft PowerPlatformローコード開発[活用]入門 ――現場で使える業務アプリのレシピ集](/assets/img/banner-powerplatform-1.a01c0c2.png)


