使用Azure Arc来查看Nginx (EC2) 的访问日志
首先
1-1 你好吗
初次见面,我是井村。我开始接触云服务已经有大约3年的时间了。最近我在思考的问题是多云和混合云的需求是否正在增加。为了这个原因,我尝试了使用Azure Arc。
1-2 读者群体
- Azureに興味がある
1-3 Azure Arc是什么?
Azure Arc的概述提供了一个跨多个云和本地的统一管理平台,简化了治理和管理服务。作为要管理的资源,包括虚拟机、Kubernetes集群和数据库。我认为其优势在于利用符合治理、安全和合规性的各个Azure资源进行管理和运营。

1-4 系统构建和验证流程

以上是系统配置图。
在AWS上创建一个作为HTTP服务器的EC2实例,而HTTP服务将使用Nginx。
在Azure上,我们将创建Azure Arc来管理EC2实例,并创建Log Analytisc工作区来存储EC2的syslog。
验证目标是获取访问Nginx的客户端IP地址,并通过查询存储在Log Analytisc工作区中的日志来实现。
创立
创建EC2实例2-1
不需要構築的步驟。下面將列出注意事項。
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的欢迎界面,那就可以了。

将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地址就可以了。
创建2-4的Log Analytisc工作区
省略构筑步骤,请参考官方文件。
安裝2-5 Azure Arc代理。
在EC2上安装Azure Arc代理。安装后,您可以使用Azure Arc来管理EC2。按照官方文档进行安装。
在Azure的搜索框中搜索”Azure Arc”。
从Azure Arc的左侧窗格中选择”服务器”,然后点击”+”按钮进行添加。

点击单个服务器上的“生成脚本”。

在「资源详细区域」选项卡中,选择与 Log Analytics 相同的位置,并选择 Linux 作为操作系统。

在「下载和执行脚本」选项卡中,您可以将Azure Arc代理的安装脚本下载到本地。下载后,将名为「OnboardingScript.sh」的脚本上传到EC2,并执行该脚本。
# OnboardingScript.shの確認
ls
↓
OnboardingScript.sh
# OnboardingScript.shの実行
bash OnboardingScript.sh
在途中可能需要进行认证。请您输入一次性密码,并输入用户账户,以继续进行处理。





当正常结束时,Azure上的状态将变为已连接。同时,我们可以确认Azure上的“名称”与AWS上的“实例ID”是相同的。


安装2-6蓝色连接机器的代理。
为了将syslog传送到Log Analytics工作区,您需要在虚拟机上安装Azure Monitor Agent。在此之前,请查看官方文档的前提条件如下。
- Azure 以外: Azure の “外部” (つまり、オンプレミス) または他のクラウドでホストされている物理サーバーと仮想マシンにエージェントをインストールするには、最初に Azure Arc Connected Machine エージェントをインストールする必要があります (追加コストなし)。
Azure Connected Machine的安装脚本在官方文档中被称为”Install_linux_azcmagent.sh”。您可以像执行”OnboardingScript.sh”脚本一样,在EC2实例上执行该Shell脚本。
# 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 エージェントを使用して仮想マシンからイベントとパフォーマンス カウンターを収集する
- Azure Monitor エージェントを使用して Syslog イベントを収集する
在Azure的搜索框中搜索“监视器”。
从Azure Arc的左侧窗格中选择“数据收集规则”,然后点击“+添加”按钮。

在“基本”选项卡中,将区域和平台与Azure Arc匹配。

在「资源」选项卡中点击「添加资源」,选择目标资源,然后点击「应用」。

在「收集与传送」选项卡中,点击「添加数据源」,选择数据源类型为「Linux Syslog」。然后点击「下一步:目标」。

在“目标”选项中,选择通过“帐户或名称空间”创建的Log Analytics,并点击“添加数据源”。

添加数据源时,虽然有点多余,但还是将“性能监视器”作为数据源类型之一添加进去,这样会更方便。在完成上述设置后,在“确认和创建”中创建“数据收集规则”。

3. 验证
让我们进行验证。
从Azure Arc的左侧窗格选择日志。
在搜索框中输入syslog,并从候选项中选择“所有Syslog”的“执行”按钮。
这样就可以对Log Anaytics工作区的日志进行查询。

在画面的顶部是查询命令。会有很多执行结果。将结果滚动向下。

我确认Nginx的访问日志已经传送到了Log Analytics工作区。
客户端的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 の概要