Azure MonitorのデータをGrafanaで可視化する

## GrafanaでのAzureの監視
[Grafana](https://grafana.com/) に [Azure Monitorのデータソースプラグイン](https://grafana.com/plugins/grafana-azure-monitor-datasource) があって、これを使うとAzure Monitor, Log Analytics, Application InsightsのデータをGrafanaで可視化できる。GrafanaであればAzure Monitorだけじゃなくて、Graphiteをはじめとしたいろんなデータソースを使うことができるので、モニタリングのダッシュボードをここに集約できてよさそうだ。グラフもかっこいいし。

## 環境構築
### Azure MarketplaceからGrafanaをデプロイ
Azure Marketplaceで"Grafana"と検索すると以下のようにGrafana LabsのGrafanaが出てくるので、これを選んでデプロイする。デプロイは普通の仮想マシンとあまり変わらないので、仮想マシンのデプロイをしたことがあるなら困らないはず。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/144789/a00d57f5-5a01-e24d-0c5e-2a040da94c30.png)

これはデプロイ後の仮想マシンの管理画面。
![vm.PNG](https://qiita-image-store.s3.amazonaws.com/0/144789/b0849631-e381-94d4-5aa7-b99dc26d8bc4.png)

リソースグループにgrafana-nsgが作成されているが、デプロイした環境ではNetwork interfaceにもSubnetにもどこにも関連付けされていなかった。念のためデプロイ後に確認したほうがよさそう。InboundルールとしてGrafanaサーバアクセス用の3000/TCPが開放されている。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/144789/f684703d-b8c6-6646-1ca0-247f9e6cddf0.png)

### Grafanaのデータソース設定
ブラウザから http://<パブリックIP>:3000 または http://<DNS名>:3000 にアクセスして以下のようにGrafanaのログイン画面が出て来たらいったんデプロイ成功。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/144789/47c290f9-be63-97ac-33a0-07a62da3b467.png)

Marketplaceからのデプロイ時に設定した認証情報を入れてログインするとホーム画面が出てくる。Marketplaceからデプロイすると最初からAzure Monitorプラグインがセットされている。ここで "Add data source" を選択してデータソースの設定を行う。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/144789/29076053-c523-8f0c-c9f6-bd925775157f.png)

データソースの設定のためには、ひと手間必要で、Azure Monitor等のリソースにGrafanaからアクセスするためのサービスプリンシパルっていうのを作成しないといけない。"サービス プリンシパルは、リソース/サービス レベルの無人操作を実行する目的でテナント内で作成する Azure Active Directory アプリケーション リソースです。" って公式ドキュメントに書いてあるが、簡単に言うとアプリのための代表のユーザーみたいなもん。
[サービスプリンシパルの作り方や権限の与え方の公式ドキュメント](https://docs.microsoft.com/ja-jp/azure/active-directory/develop/howto-create-service-principal-portal) に沿って作成する。Azure Monitorデータソースを使用するには、作ったサービスプリンシパルに対象のサブスクリプションまたはリソースグループまたはリソースに対しての"閲覧者(Reader)"ロールを割り当てる必要がある。ロールの割り当て方法は [このページの通りの操作](https://docs.microsoft.com/ja-jp/azure/active-directory/develop/howto-create-service-principal-portal#assign-the-application-to-a-role) (ロールはReaderを割り当て) で、下図のように設定することでできた。
![roleassignment.PNG](https://qiita-image-store.s3.amazonaws.com/0/144789/b945796c-6e48-bdd7-29e4-4b539c8f91a7.png)
Log Analyticsに関しては後日設定して投稿する予定。

Grafanaのデータソース設定画面では以下のように設定する。

| 項目 | 設定 |
|---|---|
| Name  | データソース名 |
| Type  |  Azure Monitor |

Azure Monitor API Detailsでは以下のように設定する。

| 項目 | 設定 |
|---|---|
| Azure Cloud | Azure (GovernmentとかChinaのような個別クラウドも選択できる!) |
| Subscription Id　| サブスクリプションのID |
| Tenant Id　| Azure ADのディレクトリID |
| Client Id　| サービスプリンシパルのApplication ID |
| Client Secret　| サービスプリンシパルで作成したキー |

Log Analyticsのところで同じ資格情報を使いたい場合はSame details as Azure Monitor APIにチェックを入れればOK (今回はスキップ)。
![datasource.PNG](https://qiita-image-store.s3.amazonaws.com/0/144789/2a66a831-88a9-3b06-90f7-068037dc3315.png)

### Dashboardの作成
Azure Monitorのデータソース設定が完了したら、GrafanaのHomeに戻り、New Dashboardを選択。ダッシュボードに掲載するオブジェクトのタイプを聞かれるのでGraphを選択する。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/144789/672f1afb-4fb8-cb5e-4637-9fada4da35a3.png)

Graphのオブジェクトが配置されるので、Panel TitleをクリックしてEditを選択すると、グラフの編集画面に遷移する。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/144789/a0001718-9c28-1cd2-ced4-00ae46d19c55.png)

Metricsタブで、Service箇所に作成したデータソースのAzure Monitorを選択し、Azureのリソースグループをはじめとした各種の監視対象を選択し、グラフ化したいMetricを選択(ここでは仮想マシンのPercentage CPUの指定期間での平均値)すると、図のようにグラフが表示される。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/144789/e79435c0-f225-ba8b-2d82-7c2062d2faf6.png)

必要なメトリックで作ったグラフを並べて、監視ダッシュボードがこんな感じでできる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/144789/08d4b688-03c4-5355-e790-68815180061a.png)

次はLog Analyticsのほうを試してみる予定。