【Azure】Azure Arcを用いてNginx(EC2)のアクセスログを確認する。

# 1. はじめに
### 1-1 ご挨拶
初めまして、井村と申します。
クラウドサービスを触り始めて約3年になりました。最近考えることはマルチクラウド、ハイブリットクラウドの需要が増えるのかなと。その為、Azure Arcを触ってみました。


### 1-2 対象読者
- Azureに興味がある

### 1-3 Azure Arcとは？
[Azure Arc の概要](https://learn.microsoft.com/ja-jp/azure/azure-arc/overview)より、マルチクラウドとオンプレミスで一貫した管理プラットフォームを提供し、ガバナンスと管理を簡素化するサービス。
管理するリソースとして仮想マシン、Kubernetes クラスター、データベースとなります。
ガバナンス、セキュリティ、コンプライアンスに該当する各Azureリソースを利用して管理、運用できるのが強みだと思います。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/254bafd2-5647-cf37-6356-779c57149952.jpeg" width=75%>

### 1-4 システム構成と検証の流れ

![AzureArc_02.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/7a0e5860-8c41-8055-509f-5b409eb333d8.jpeg)

上記がシステム構成図となります。
AWS上にはhttpサーバであるEC2を作成します。httpサービスはNginxです。
Azure上ではEC2を管理するAzure Arc、EC2のsyslogを格納するLog Analytiscワークスペースを作成します。
検証としては、
access.logに記述されるNginxへアクセスしたクライアントIPアドレスを取得することです。
取得方法はLog Analytiscワークスペースへ格納されたログにクエリします。

# 2. 構築
### 2-1 EC2の作成
構築手順は割愛。以下に注意事項を記載します。

- AMIは「Amazon Linux 2023 AMI」ではなく、「Amazon Linux 2 AMI」で作成。
→　2023/06/26現在、syslogをLog Analytiscワークスペースへ転送するにはAzure Monitor Agentのインストールが必要ですが、「Amazon Linux 2023 AMI」が対象外である。詳細は[公式ドキュメント](https://learn.microsoft.com/ja-jp/azure/azure-monitor/agents/agents-overview#linux)を参照。

- Security GroupはEC2にアクセスするためのssh、Nginxへアクセスするためのhttp、Azure ArcとAzure Arcエージェントの通信するためのhttpsを許可。

### 2-2 Nginxのインストール
以下コマンドを実行してEC2にNginxをインストールします。私はTera TermからEC2にログインしています。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/4bf50ae1-3de0-9d0b-87ad-e9eaa778e14e.jpeg" width=50%>

```bash:bash
# Nginxのインストール
sudo amazon-linux-extras install nginx1

# Nginxの自動起動
sudo systemctl enable nginx

# Nginxの起動
sudo systemctl start nginx
```

自端末のWEBブラウザからEC2のパブリックIPアドレスへアクセスしてNginxのウエルカム画面が出力されればokです。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/57855c50-3ed0-d2c7-b8f3-c532bfdc9482.jpeg" width=50%>

### 2-3 ログ出力先変更
参考に各バージョンの確認です。

```bash:bash
# カーネルのバージョン確認
cat /proc/version
↓
Linux version 5.10.179-171.711.amzn2.x86_64 (mockbuild@ip-10-0-57-205) (gcc10-gcc (GCC) 10.4.1 20221124 (Red Hat 10.4.0-1), GNU ld version 2.35.2-9.amzn2.0.1) #1 SMP Tue Jun 6 01:59:18 UTC 2023

# Nginxのバージョン確認
nginx -v
↓
nginx version: nginx/1.22.1

```
Nginxのメイン設定ファイルである「/etc/nginx/nginx.conf」からaccess.logのパスである「/var/log/nginx/access.log」をコメントアウトし、syslogへパス変更します。

```bash:bash
# メイン設定ファイルの変更
sudo vi /etc/nginx/nginx.conf

### ↓↓↓ファイルの修正
# before 
access_log  /var/log/nginx/access.log  main;

# after
# access_log  /var/log/nginx/access.log  main;
access_log syslog:server=unix:/dev/log;

### ↑↑↑ファイルの修正

# Nginxの再起動
sudo systemctl restart nginx
```

再度、自端末のWEBブラウザからEC2のパブリックIPアドレスへアクセスしてNginxのウエルカム画面が出力しsyslogを確認する。

```bash:bash
# syslogの確認
sudo tail /var/log/messages
↓
un 25 16:13:06 ip-10-0-0-6 journal: ip-10-0-0-6.ap-northeast-1.compute.internal nginx: XXX.XXX.XXX.XXX - - [25/Jun/2023:16:13:06 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.58"
```
XXX.XXX.XXX.XXXに自端末のIPアドレスが表示されればokです。

### 2-4 Log Analytiscワークスペースの作成
構築手順は割愛。[公式ドキュメント](https://learn.microsoft.com/ja-jp/azure/azure-monitor/logs/quick-create-workspace?tabs=azure-portal)を参照。

### 2-5 Azure Arcエージェントのインストール
EC2にAzure Arcエージェントをインストールします。インストールするとAzure ArcからEC2を管理することができます。[公式ドキュメント](https://learn.microsoft.com/ja-jp/azure/azure-arc/servers/learn/quick-enable-hybrid-vm)に沿ってインストールを実行します。
Azureの検索窓から「Azure Arc」と検索。
Azure Arcの左ペインから「サーバー」を選び、「＋追加」ボタンを押下。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/6bf60eb9-1a6b-1f43-8db9-9a52b15cf598.jpeg" width=50%>

単一サーバの「スクリプトの生成」を押下。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/53705272-32b1-bf93-15e2-ab1148ca0576.jpeg" width=75%>


「リソースの詳細地域」タブではLog Analyticsと同じ場所、OSはLinuxを選択します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/ffe1e3ce-8d84-0e83-258b-f6903d0d2d9f.jpeg" width=75%>

「スクリプトのダウンロードと実行」タブではAzure Arcエージェントのインストールシェルスクリプトをローカルにダウンロードできます。ダウンロード後、シェルスクリプトである「OnboardingScript.sh」をEC2へアップロードし、シェルを実行します。

```bash:bash
# OnboardingScript.shの確認
ls
↓
OnboardingScript.sh

# OnboardingScript.shの実行
bash OnboardingScript.sh

```

途中で認証を求められます。ワンタイムパスワードを入力し、ユーザアカウントを入力し、処理を進めてください。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/fed0b4d7-8dde-6561-0a44-8d38882e36b0.jpeg" width=75%>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/be4c413d-5f26-11e6-9da1-af40ec157b9f.jpeg" width=50%>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/b0385ff2-b7bf-2176-a966-bd41bfe24ad4.jpeg" width=50%>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/4d0f4a20-2668-bb22-cedb-e7c5b94e21d3.jpeg" width=50%>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/95e45d15-fa4f-bca5-8cb5-f2b3b772c3fe.jpeg" width=50%>

正常終了すると、Azure上で状態が接続済みになります。また、Azure上の「名前」とAWS上の「Instance ID」が同じであることが確認できます。

![AzureArc_12.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/c5d1d9e1-5d78-ca0f-f9d5-cda53b65a76e.jpeg)

![AzureArc_13.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/e6672159-bda0-080a-d837-715eeb6600dd.jpeg)

### 2-6 Azure Connected Machine エージェントのインストール
Log Analyticsワークスペースにsyslogを転送するためには、Azure Monitor Agentを仮想マシンにインストールする必要があります。その前に、[公式ドキュメント](https://learn.microsoft.com/ja-jp/azure/azure-arc/servers/learn/quick-enable-hybrid-vm)の前提条件を確認すると以下の通り。

- Azure 以外: Azure の "外部" (つまり、オンプレミス) または他のクラウドでホストされている物理サーバーと仮想マシンにエージェントをインストールするには、最初に Azure Arc Connected Machine エージェントをインストールする必要があります (追加コストなし)。

Azure Connected Machine エージェントのインストールシェルスクリプトは[公式ドキュメント](https://learn.microsoft.com/ja-jp/azure/azure-arc/servers/agent-overview#linux-agent-installation-details)に「Install_linux_azcmagent.sh」としてあります。「OnboardingScript.sh」と同様にEC2条でシェルスクリプトを実行します。

```bash:bash
# Install_linux_azcmagent.shの確認
ls
↓
Install_linux_azcmagent.sh

# Install_linux_azcmagent.shの実行
bash Install_linux_azcmagent.sh

```
正常終了後、EC2を再起動します。再起動後、各デーモンが起動されていることを確認します。

```bash:bash
# himdsd.serviceの確認
systemctl status himdsd.service

# gcad.serviceの確認
systemctl status gcad.service

# extd.serviceの確認
systemctl status extd.service

```

![AzureArc_14.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/f1c041ae-6eee-91ec-c015-b404725dff89.jpeg)



### 2-7 Azure Monitor Agentのインストール
最後の構築となります。
syslogをLog Analyticsワークスペースへ転送するためにEC2へAzure Monitor Agentをインストールします。Azure Monitor Agentのインストール方法は何パターンかありますが、今回は「データ収集ルール」の作成を行います。
「データ収集ルール」はどの仮想マシンを対象とするか、対象となった仮想マシンのログをどのLog Analyticsワークスペースに送るかということを設定します。「データ収集ルール」作成時に対象となった仮想マシンにAzure Monitor Agentがインストールされていない場合、Azure Monitor Agentをインストールしてくれます。

以下の公式ドキュメントを参照して「データ収集ルール」を作成します。
- [Azure Monitor エージェントを使用して仮想マシンからイベントとパフォーマンス カウンターを収集する](https://learn.microsoft.com/ja-jp/azure/azure-monitor/agents/data-collection-rule-azure-monitor-agent?tabs=portal#create-a-data-collection-rule)
- [Azure Monitor エージェントを使用して Syslog イベントを収集する](https://learn.microsoft.com/ja-jp/azure/azure-monitor/agents/data-collection-syslog)


Azureの検索窓から「モニター」と検索。
Azure Arcの左ペインから「データ収集ルール」を選び、「＋追加」ボタンを押下。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/0ac0b1db-da5b-183b-21a0-906120e19964.jpeg" width=50%>

「基本」タブではリージョン、プラットフォームをAzure Arcと合わせます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/1400d617-bff2-17aa-f268-34f1a129b6a8.jpeg" width=75%>


「リソース」タブでは「＋リソースの追加」を押下後、対象リソースを選択し「適用」を押下。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/1f48282c-5bf4-190f-51af-7e78c160adcd.jpeg" width=75%>

「収集と配信」タブでは「＋データソースの追加」を押下後、データソースの種類を「Linux Syslog」を選択。「次へ：ターゲット」を押下。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/5d2c33ee-cf9c-50f8-189d-9e8485ffc798.jpeg" width=75%>

ターゲットでは「アカウントまたは名前空間」で作成したLog Analyticsを選択し「データソースの追加」を押下。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/3608097c-f06f-ac04-a25f-2cda6392d296.jpeg" width=75%>

蛇足ですが「データソースの追加」でデータソースの種類で「パフォーマンスモニター」も便利なので入れます。上記が設定が完了したら、「確認と作成」で「データ収集ルール」を作成します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/e1ad27f4-3f49-7336-4982-c0aea9586c86.jpeg" width=50%>

# 3. 検証
それでは検証を行います。
Azure Arcの左ペインからログを選びます。
検索窓でsyslogと入力し、候補から「All Syslog」の「実行」を押下。
これでLog Anayticsワークスペースのログに対してクエリを実行します。

![AzureArc_21.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/1ae19f5b-687f-457e-5170-9ed00897687b.jpeg)

画面上部がクエリコマンドです。実行結果がたくさんでます。結果のスクロールを下に下げます。

![AzureArc_22.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/f179e6ae-0608-964b-0118-4fe66b9e8ff2.jpeg)

NginxのアクセスログがLog Anayticsワークスペースに転送されていることが確認できました。
赤枠にクライアントIPアドレスが表示されています。

![AzureArc_24.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/67da046c-7800-9214-6c0c-240d4c605248.jpeg)


# 4. 終わりに
本記事を最後まで読んで頂きましてありがとうございます。
Azure Arcを用いてEC2のログを取得しました。他Azureリソースと同様にログからアラートを飛ばせるので実用的だと思います。本記事で記載しませんでしたが、[VM insights](https://learn.microsoft.com/ja-jp/azure/azure-monitor/vm/vminsights-overview) も試しました。視覚的にわかりやすくメトリックを取得できました。

今後の課題としては全く触っていないAWSの操作方法でした。

# 5. 参考記事
- [Azure Arc の概要](https://learn.microsoft.com/ja-jp/azure/azure-arc/overview)
- [サポートされるオペレーティング システム - Linux](https://learn.microsoft.com/ja-jp/azure/azure-monitor/agents/agents-overview#linux)
- [nginxで、ログを全部syslogに飛ばす](https://iww.hateblo.jp/entry/20221028/nginx)
- [クイックスタート: Azure Arc 対応サーバーにハイブリッド マシンを接続する](https://learn.microsoft.com/ja-jp/azure/azure-arc/servers/learn/quick-enable-hybrid-vm)
- [Azure Monitor エージェントを管理する - 前提条件](https://learn.microsoft.com/ja-jp/azure/azure-arc/servers/learn/quick-enable-hybrid-vm)
- [Azure Connected Machine エージェントの概要 - Linux エージェントのインストールの詳細](https://learn.microsoft.com/ja-jp/azure/azure-arc/servers/agent-overview#linux-agent-installation-details)
- [Azure Monitor エージェントを使用して仮想マシンからイベントとパフォーマンス カウンターを収集する](https://learn.microsoft.com/ja-jp/azure/azure-monitor/agents/data-collection-rule-azure-monitor-agent?tabs=portal#create-a-data-collection-rule)
- [Azure Monitor エージェントを使用して Syslog イベントを収集する](https://learn.microsoft.com/ja-jp/azure/azure-monitor/agents/data-collection-syslog)
- [VM insights の概要](https://learn.microsoft.com/ja-jp/azure/azure-monitor/vm/vminsights-overview)