1. はじめに
1-1 ご挨拶
初めまして、井村と申します。
クラウドサービスを触り始めて約3年になりました。最近考えることはマルチクラウド、ハイブリットクラウドの需要が増えるのかなと。その為、Azure Arcを触ってみました。
1-2 対象読者
- Azureに興味がある
1-3 Azure Arcとは?
Azure Arc の概要より、マルチクラウドとオンプレミスで一貫した管理プラットフォームを提供し、ガバナンスと管理を簡素化するサービス。
管理するリソースとして仮想マシン、Kubernetes クラスター、データベースとなります。
ガバナンス、セキュリティ、コンプライアンスに該当する各Azureリソースを利用して管理、運用できるのが強みだと思います。
1-4 システム構成と検証の流れ
上記がシステム構成図となります。
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」が対象外である。詳細は公式ドキュメントを参照。 -
Security GroupはEC2にアクセスするためのssh、Nginxへアクセスするためのhttp、Azure ArcとAzure Arcエージェントの通信するためのhttpsを許可。
2-2 Nginxのインストール
以下コマンドを実行してEC2にNginxをインストールします。私はTera TermからEC2にログインしています。
# Nginxのインストール
sudo amazon-linux-extras install nginx1
# Nginxの自動起動
sudo systemctl enable nginx
# Nginxの起動
sudo systemctl start nginx
自端末のWEBブラウザからEC2のパブリックIPアドレスへアクセスしてNginxのウエルカム画面が出力されればokです。
2-3 ログ出力先変更
参考に各バージョンの確認です。
# カーネルのバージョン確認
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へパス変更します。
# メイン設定ファイルの変更
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を確認する。
# 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ワークスペースの作成
構築手順は割愛。公式ドキュメントを参照。
2-5 Azure Arcエージェントのインストール
EC2にAzure Arcエージェントをインストールします。インストールするとAzure ArcからEC2を管理することができます。公式ドキュメントに沿ってインストールを実行します。
Azureの検索窓から「Azure Arc」と検索。
Azure Arcの左ペインから「サーバー」を選び、「+追加」ボタンを押下。
単一サーバの「スクリプトの生成」を押下。
「リソースの詳細地域」タブではLog Analyticsと同じ場所、OSはLinuxを選択します。
「スクリプトのダウンロードと実行」タブではAzure Arcエージェントのインストールシェルスクリプトをローカルにダウンロードできます。ダウンロード後、シェルスクリプトである「OnboardingScript.sh」をEC2へアップロードし、シェルを実行します。
# OnboardingScript.shの確認
ls
↓
OnboardingScript.sh
# OnboardingScript.shの実行
bash OnboardingScript.sh
途中で認証を求められます。ワンタイムパスワードを入力し、ユーザアカウントを入力し、処理を進めてください。
正常終了すると、Azure上で状態が接続済みになります。また、Azure上の「名前」とAWS上の「Instance ID」が同じであることが確認できます。
2-6 Azure Connected Machine エージェントのインストール
Log Analyticsワークスペースにsyslogを転送するためには、Azure Monitor Agentを仮想マシンにインストールする必要があります。その前に、公式ドキュメントの前提条件を確認すると以下の通り。
- Azure 以外: Azure の "外部" (つまり、オンプレミス) または他のクラウドでホストされている物理サーバーと仮想マシンにエージェントをインストールするには、最初に Azure Arc Connected Machine エージェントをインストールする必要があります (追加コストなし)。
Azure Connected Machine エージェントのインストールシェルスクリプトは公式ドキュメントに「Install_linux_azcmagent.sh」としてあります。「OnboardingScript.sh」と同様にEC2条でシェルスクリプトを実行します。
# Install_linux_azcmagent.shの確認
ls
↓
Install_linux_azcmagent.sh
# Install_linux_azcmagent.shの実行
bash Install_linux_azcmagent.sh
正常終了後、EC2を再起動します。再起動後、各デーモンが起動されていることを確認します。
# himdsd.serviceの確認
systemctl status himdsd.service
# gcad.serviceの確認
systemctl status gcad.service
# extd.serviceの確認
systemctl status extd.service
2-7 Azure Monitor Agentのインストール
最後の構築となります。
syslogをLog Analyticsワークスペースへ転送するためにEC2へAzure Monitor Agentをインストールします。Azure Monitor Agentのインストール方法は何パターンかありますが、今回は「データ収集ルール」の作成を行います。
「データ収集ルール」はどの仮想マシンを対象とするか、対象となった仮想マシンのログをどのLog Analyticsワークスペースに送るかということを設定します。「データ収集ルール」作成時に対象となった仮想マシンにAzure Monitor Agentがインストールされていない場合、Azure Monitor Agentをインストールしてくれます。
以下の公式ドキュメントを参照して「データ収集ルール」を作成します。
Azureの検索窓から「モニター」と検索。
Azure Arcの左ペインから「データ収集ルール」を選び、「+追加」ボタンを押下。
「基本」タブではリージョン、プラットフォームをAzure Arcと合わせます。
「リソース」タブでは「+リソースの追加」を押下後、対象リソースを選択し「適用」を押下。
「収集と配信」タブでは「+データソースの追加」を押下後、データソースの種類を「Linux Syslog」を選択。「次へ:ターゲット」を押下。
ターゲットでは「アカウントまたは名前空間」で作成したLog Analyticsを選択し「データソースの追加」を押下。
蛇足ですが「データソースの追加」でデータソースの種類で「パフォーマンスモニター」も便利なので入れます。上記が設定が完了したら、「確認と作成」で「データ収集ルール」を作成します。
3. 検証
それでは検証を行います。
Azure Arcの左ペインからログを選びます。
検索窓でsyslogと入力し、候補から「All Syslog」の「実行」を押下。
これでLog Anayticsワークスペースのログに対してクエリを実行します。
画面上部がクエリコマンドです。実行結果がたくさんでます。結果のスクロールを下に下げます。
NginxのアクセスログがLog Anayticsワークスペースに転送されていることが確認できました。
赤枠にクライアントIPアドレスが表示されています。
4. 終わりに
本記事を最後まで読んで頂きましてありがとうございます。
Azure Arcを用いてEC2のログを取得しました。他Azureリソースと同様にログからアラートを飛ばせるので実用的だと思います。本記事で記載しませんでしたが、VM insights も試しました。視覚的にわかりやすくメトリックを取得できました。
今後の課題としては全く触っていないAWSの操作方法でした。
5. 参考記事
- Azure Arc の概要
- サポートされるオペレーティング システム - Linux
- nginxで、ログを全部syslogに飛ばす
- クイックスタート: Azure Arc 対応サーバーにハイブリッド マシンを接続する
- Azure Monitor エージェントを管理する - 前提条件
- Azure Connected Machine エージェントの概要 - Linux エージェントのインストールの詳細
- Azure Monitor エージェントを使用して仮想マシンからイベントとパフォーマンス カウンターを収集する
- Azure Monitor エージェントを使用して Syslog イベントを収集する
- VM insights の概要