Azure Arc-enabled SQL ServerでオンプレSQL Serverのインベントリを視覚化する

# はじめに
[Azure Arc-enabled SQL Server](https://learn.microsoft.com/ja-jp/sql/sql-server/azure-arc/overview?view=sql-server-ver16)は、[Azure Arc-enabled Server](https://learn.microsoft.com/ja-jp/azure/azure-arc/servers/overview)というAzureの外部にホストされているWindowsやLinuxの物理サーバと仮想マシンにAzureの機能を拡張して、ハイブリッドマシン化するサービスの上に成り立っているSQL Server専用のハイブリッドサービスである。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144789/7dabaae3-5046-9733-11be-1df547fc2fce.png)


これを有効化すると、Azure外で動作しているSQL Serverに対して主に以下のメリットが与えられる:

- SQL ServerのインベントリをAzureから一元管理
- パッチやバックアップの一元管理および自動化
- ベストプラクティスアセスメント
- Purviewと連携したデータガバナンス
- SQL Serverの従量課金利用の選択肢
- Microsoft Defender for Cloudの有効化
- 拡張セキュリティ更新プログラムをAzure Arc経由でSubscribeできる

有効化する方法は簡単で、Azure Portalからウィザードに従って生成したPowerShellスクリプトを該当のサーバで実行することで、必要な拡張エージェントが登録されてAzureと接続される。通常はメタデータのやり取りだけなので、既存のワークロードに対して負荷をかけることはほとんど無い。

https://learn.microsoft.com/ja-jp/sql/sql-server/azure-arc/prerequisites?view=sql-server-ver16&tabs=azure

魅力的なメリットが並んでいるが、ここではインベントリの一元管理部分にフォーカスして、より便利なダッシュボードを作成する方法を確認してみたので、その方法をここでまとめてみたい。

# 動機
Azure Arc-enabled SQL Serverを使用して、Azrue Arcの管理画面内で登録されている資産を以下のように管理することができるが、リストとしては非常にシンプルで、ここにタグなどのカスタムの列を追加することはできるが、本当に必要な情報をすべて可視化できるわけではない。必要な情報を得るためには、それぞれの項目の中からプロパティなどを探していかなければならない。これでももちろん便利にインベントリ管理は可能ではあるが、もう少し便利なビューを用意したい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144789/b6e1dc99-e27e-57ea-107c-b486d6e58735.png)

# ソリューション
SQL Serverのインベントリ管理をより便利にするために、Azureポータル上にカスタムのダッシュボードを作成する。データソースとしては、Azure Arc-enabled SQL Serverの詳細な情報がAzure Resource Graphに登録されている。そのため、Kustoクエリを実行して必要な情報を抽出して成形することでダッシュボード作成が可能になる。

### タグを追加して、管理しやすい情報を付与する
SQL Serverそのものの情報はAzure Arc-enabled SQL Serverのメタデータとして登録されているが、システム以外の情報に関してはAzure Arcでは持つことができない。しかしながら、インベントリ管理を便利にするためには、その他のメタデータが欲しい場合がある。例えば以下のような情報:

- オーナー : SQL Server の管理者名
- メール : SQL Server 管理者のメールアドレス
- 部署名 : SQL Server 管理者の所属部署
- 電話番号 : SQL Server 管理者の社内電話番号

これらのような情報があれば、何かあった場合に簡単に担当者を特定して連絡を取ることができる。
以下のようにAzure Arcに登録されているSQL Serverのエントリに対してタグを付与しておく。
(注) ここで付与したタグの項目は、インベントリ情報をまとめる際のKustoクエリと関連するため、タグを変更する場合はクエリも合わせて変更する必要がある。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144789/1835595e-d994-385e-3448-99f90aa3ca94.png)

### クエリを実行する
AzureポータルのAzure Arcの管理画面から、SQL Serverの一覧画面に戻り、「クエリを開く」をクリックすると、Azure Resource Graphエクスプローラーが表示され、そこから取得したい情報に応じてクエリを実行する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144789/a9cae92e-dd3a-dba5-9921-6b5154e4c2f0.png)

ここでは付与したタグの情報を含むサンプルのクエリを使用する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144789/72bd429f-e047-c024-cc37-2542598938b7.png)


```
resources 
| extend name, type, properties = todynamic(properties), tag = todynamic(tags)
| where type == 'microsoft.azurearcdata/sqlserverinstances'
| project
    name,
    status = properties["status"],
    version = properties["version"],
    licenseType = properties["licenseType"],
    currentVersion = properties["currentVersion"],
    instanceName = properties["instanceName"],
    patchLevel = properties["patchLevel"],
    edition = properties["edition"],
    vCore = properties["vCore"],
    owner = tags["オーナー"],
    mail = tag["メール"],
    phone = tag["電話"],
    department = tag["部署"]
```

クエリの実行結果が画面下部に表示される。この結果に簡単にアクセスできるようにするために、「ダッシュボードにピン留めする」をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144789/0fc2f506-3ac7-c32a-6940-b96a8bb7ed84.png)

ダッシュボードにピン留めするための設定画面が開く。「新規作成」タブを選択し、「ダッシュボード名」を入力したら、「作成してピン留めする」をクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144789/06ff78e9-4776-1bef-3d79-7a4341d3539d.png)

Azure Portal の左上メニューから「ダッシュボード」をクリックする。設定したダッシュボードが表示されていない場合は、左上のダッシュボード名をクリックすると、設定されているダッシュボードのリストが表示されるので、作成したダッシュボード名を選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144789/7fba2ea4-681d-dc4a-a131-8213cbbf6e06.png)

作成したダッシュボードにインベントリの検索結果が表示される。検索結果はボックスの右下をドラッグすると広げることができる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144789/0443b82e-768a-11f3-8f80-9d3a2e5644b7.png)

その他の情報も必要な場合は、別途クエリを作成して、同じようにダッシュボードにピン留めしていくことで追加できる。このようにしてカスタムのダッシュボードを作成することでインベントリ管理をより便利なものにすることができる。

その他の Azure Arc-enabled SQL Server 向けのクエリのサンプルについては、以下のドキュメントに書かれているので参考にすると良い。
[SQL Server データベースを表示する - Azure Arc](https://learn.microsoft.com/ja-jp/sql/sql-server/azure-arc/view-databases?view=sql-server-ver16)

# タグを使用せず、簡単にダッシュボードを作成する

固有のタグを使用する必要が無い場合は、テンプレートをAzureポータルからインポートするだけで、ダッシュボードを作成することができる。便利な情報を集約したテンプレートを作成したので、簡単に作成したい場合はこれを活用すると良い。

https://github.com/thakagi/azure-arc-enabled-sql-dashboard

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144789/5dc5f518-ecbc-c9c6-fc37-d60bd74953d8.png)

このテンプレートには以下が含まれている:

- 登録されているSQL Serverの数
- ライセンスタイプの分布
- 稼働しているクラウドプロバイダー名
- 詳細なインベントリ情報
- SQL Serverのバージョン
- 互換性レベル
- 暗号化されているデータベースの数

インストール方法は簡単ではあるが、簡単に流れを記載すると以下のようになる:

1. リポジトリの `azure-arc-enabled-sql-dashboard.json` ファイルを取得する
2. Azureポータルにアクセスする
2. Azure Arc-enabled SQL Serverが登録されているAzure Subscriptionにアクセスできることを確認する
2. 左メニューからダッシュボードを選択し、アップロードメニューから取得した `azure-arc-enabled-sql-dashboard.json` を選択する

# まとめ
Azure Arc-enabled SQL ServerはAzure以外のプラットフォームで稼働しているSQL Serverを管理するために非常に便利であるが、Resource Graph + ダッシュボードを活用することで、より便利に管理することができる。