Azure VMの構成情報をLog Analyticsに収集して管理する

Azure AutomationとLog Analyticsを使って、Azure VMにインストールされたソフトウェア情報などの構成管理ができそうなので試してみました。

# 設定

## Log Analyticsワークスペース作成

新たに作成するか、既存のものがあれがそれでよいです。手順は割愛します。

## Automationアカウント設定

* Automationアカウントを開き、[インベントリ]を選択します。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/da5a6a8e-6005-6d32-bc43-19e8f40580d3.png)

* 事前に準備したLog Analyticsワークスペースを選択し、[有効化]を選択します。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/202f17e4-6637-ad4a-0d2f-d051286f5468.png)

* しばらくすると有効化されるので、[Azure VM の追加]を選択します。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/99dd6dca-8220-8a65-b771-b6157263db28.png)

* ここでとまどったんですが、インベントリ収集したい仮想マシンが選べません。
* これはリソースグループの選択箇所で、3つしか選べない謎仕様によるものです。1つチェックを外して、対象のリソースグループを選択すれば仮想マシンが表示されます。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/543d910e-f166-95d1-5096-2707c1e7d655.png)

* 対象のリソースグループ、VMを選択し有効化します。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/6f0432e5-2923-d0ff-2af0-e137e28eb4c3.png)

# 取得できるインベントリ(Linux)

## デーモン

* ここでいうデーモンとは、Linux OSのsystemctlコマンドの実行結果と同一のようです。  

```
systemctl list-unit-files
```

* Azureポータルから見ると  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/6fd609e0-9b5c-76b7-0fce-1c9c7c2942c5.png)

* Log Analyticsクエリで、デーモン一覧を取得する。  

```
ConfigurationData
| where (Computer == "zabbix-agent") and (ConfigDataType == "Daemons")
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/1e5fb08f-d442-c3ef-60e8-c231f5090674.png)

* Log Analyticsクエリで、特定のデーモンを取得する(この例ではhttpdデーモン)  

```
ConfigurationData
| where (Computer == "zabbix-agent") and (ConfigDataType == "Daemons")
| where SvcName == "httpd" 
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/69028415-2340-6599-f153-3ca48c3b3ed8.png)

* Log Analyticsクエリで、httpdがインストールされたコンピュータ名を表示する  

```
ConfigurationData
| where ConfigDataType == "Daemons"
| where SvcName == "httpd" 
| project Computer
```

## ソフトウェア

* ここでいうソフトウェアとは、Linux OSのrpmコマンドの実行結果と同一のようです。  

```
rpm -qa
```

* Azureポータルから見ると、rpmのバージョン情報も取れてますね  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/cfef3582-c3c6-cb67-c4c5-4cb7204e2d56.png)

* Log Analyticsクエリで、ソフトウェア一覧を取得する。  

```
ConfigurationData
| where (Computer == "zabbix-agent") and (ConfigDataType == "Software")
```

* Log Analyticsクエリで、特定のソフトウェアを取得する(この例ではbash)  

```
ConfigurationData
| where (Computer == "zabbix-agent") and (ConfigDataType == "Software")
| where SoftwareName == "bash" 
```

* Log Analyticsクエリで、特定のソフトウェアの変更履歴を確認する(この例ではyum)  

```
ConfigurationChange
| where Computer == "zabbix-agent" 
| where  SoftwareName == "yum"
| order by TimeGenerated desc
```

* Currentに現在のバージョンが、Previousにアップデート前のバージョンが取れています。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/ad9249db-24c4-a180-21bc-7a29f972a182.png)

# 取得できるインベントリ(Windows)

## Windowsサービス

* ここでいうWindowsサービスとは、sc queryコマンドの実行結果と同一のようです。  

```
sc query state= all
```

* Azureポータルから見ると  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/8902ef56-99d2-3db4-ba34-524eef880e97.png)

* Log Analyticsクエリで、デーモン一覧を取得する。  

```
ConfigurationData
| where Computer == "zabbix-agt-win" and ConfigDataType == "WindowsServices"
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/e2a446ea-7c6e-d280-7d4c-836ab6156394.png)

## ソフトウェア

* ここでいうソフトウェアは、reg queryコマンドの実行結果は含まれていました。  

```
reg query "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall" /s | find "DisplayName"
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" /s | find "DisplayName"
```

* Azureポータルから見ると  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/3e99831e-1050-1011-7b48-d91b58849c05.png)

※それ以外にもWindows DefenderのKB情報などもAzureポータルからは確認することができました。

# Azure以外のサーバー

AWS EC2で試しましたが、Log Analyticsワークスペースにインターネット経由もしくはExpressRoute PublicPeering経由で接続できれば問題ないはずです。

* 対象のLog Analyticsを選んで[詳細設定]を選択します。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/9954e820-321e-59ed-3dcf-16d21431ac68.png)

* エージェントをダウンロードし、ワークスペースIDと主キーをコピーしておきます。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/bb3588f1-eeec-e0ad-b121-1427e598fd73.png)

* 今回はLinuxで試します。Linuxの場合、対象サーバーで以下のコマンドを実行します。

```
wget https://raw.githubusercontent.com/Microsoft/OMS-Agent-for-Linux/master/installer/scripts/onboard_agent.sh \
  && sh onboard_agent.sh -w [ワークスペースID] -s [主キー]
```

* しばらく時間を置いて、Automationアカウントのインベントリにアクセスします。  
* １台管理対象になってないというメッセージが表示されるのでクリックします。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/4746e26d-e7d7-e3da-d534-77634da08da7.png)

* 対象サーバーを有効化します。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/298f7b70-71cc-b57f-f5b6-1c6ba7725569.png)

* しばらくするとこんな感じで追加されます。あとはAzure VMと同じように管理できます。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/a037ce6a-58c7-147a-a7cf-947397784537.png)