- Published on
Flatcar + Docker + ClamAV + Fluent Bit + CloudWatch 教學
vaultwarden 主機系統有時候會用 flatcar 版本,這時想丟 log 到 cloudwatch 可以用 Fluentbit,來代替 cloudwatch agent 這篇教你如何在 Flatcar EC2 實例上:
- 使用 Docker 執行 ClamAV 掃毒
- 使用 Fluent Bit 將掃毒結果送到 CloudWatch Logs
1️⃣ ClamAV 掃毒腳本
建立 /clamscan/clamscan.sh:
#!/bin/bash
# 執行 ClamAV 掃描(透過 Docker)
docker run --rm \
--cpus="0.2" \
-v /:/scan \
-v /var/log/clamav:/var/log/clamav \
clamav/clamav:latest \
clamscan -r /scan --log=/var/log/clamav/clamscan.log
# 將最後 13 行追加到 clamscan-summary.log
tail -n 13 /var/log/clamav/clamscan.log >> /var/log/clamav/clamscan-summary.log
exit 0
建立相關資料夾:
mkdir -p /var/log/clamav
chmod +x /clamscan/clamscan.sh
你也可以設 cron job(或 systemd timer)定時執行這個腳本。
2️⃣ Fluent Bit 設定檔
建立 /etc/fluent-bit/fluent-bit.conf:
[SERVICE]
Flush 1
Log_Level info
[INPUT]
Name tail
Path /var/log/clamav/clamscan-summary.log
Refresh_Interval 5
Tag clamscan
DB /fluent-bit/tail-db/clamscan.db
[OUTPUT]
Name cloudwatch_logs
Match *
region ap-northeast-1
log_group_name clamscan-log-group
log_stream_name ${HOSTNAME}
auto_create_group true
注意: region 請換成你實際用的 AWS 區域。
3️⃣ 執行 Fluent Bit Docker container
docker run -d --name fluentbit \
--network=host \
-v /var/log/clamav:/var/log/clamav:ro \
-v /etc/fluent-bit/fluent-bit.conf:/fluent-bit/etc/fluent-bit.conf \
public.ecr.aws/aws-observability/aws-for-fluent-bit:latest
確認成功執行:
docker logs -f fluentbit
重啟:
docker restart fluentbit
4️⃣ EC2 設定
要讓 Fluent Bit 可以自動取得 IAM 資訊(例如角色授權),需要啟用 IMDSv2:
aws ec2 modify-instance-metadata-options \
--instance-id <your-instance-id> \
--http-tokens required \
--http-put-response-hop-limit 2
另外請確認 EC2 的 IAM Role 有下列權限:
{
"Effect": "Allow",
"Action": [
"logs:PutLogEvents",
"logs:DescribeLogStreams",
"logs:DescribeLogGroups",
"logs:CreateLogStream",
"logs:CreateLogGroup"
],
"Resource": "*"
}
當然,這裡是精簡版的教學,從第五點開始:
5️⃣ 使用 systemd timer 定期執行 ClamAV 掃描
步驟一:創建 systemd service 檔案
- 創建
clamscan.service檔案:
sudo nano /etc/systemd/system/clamscan.service
- 加入以下內容:
[Unit]
Description=Run ClamAV Scan
[Service]
ExecStart=/bin/bash /clamscan/clamscan.sh
步驟二:創建 systemd timer 檔案
- 創建
clamscan.timer檔案:
sudo nano /etc/systemd/system/clamscan.timer
- 加入以下內容:
[Unit]
Description=Run ClamAV Scan every hour
[Timer]
OnBootSec=5min
OnUnitActiveSec=1h
Unit=clamscan.service
[Install]
WantedBy=timers.target
步驟三:重新加載 systemd 配置
sudo systemctl daemon-reload
步驟四:啟動 timer
sudo systemctl start clamscan.timer
sudo systemctl enable clamscan.timer
步驟五:查看 timer 狀態
sudo systemctl status clamscan.timer
這樣就完成了 systemd timer 的設定!
✅ 結果確認
掃完毒後可以查看:
cat /var/log/clamav/clamscan-summary.log
進入 AWS CloudWatch Console → Logs → clamscan-log-group 查看結果。