0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【構築ログ④】AWS EC2 × Zabbix監視基盤|CloudWatch Logs経由でS3へログ長期保管構成を検証

Posted at

はじめに

本記事は
「AWS EC2 × Zabbix監視基盤構築シリーズ」
の第4回です。

本記事では、EC2 上に構築した Zabbix のログを CloudWatch Logs に集約し、S3 にエクスポートして長期保管する構成 を検証した手順をまとめています。

本検証では以下の役割分担を意識して構成を組みました。

  • Zabbix:監視・検知
  • CloudWatch Logs:ログ集約・可視化
  • S3:長期保管・アーカイブ

本検証ではセキュリティ面も考慮し、

  • EC2 には IAM ロールを使用(アクセスキー未使用)
  • CloudWatch Logs → S3 はサービスプリンシパルで制御
  • バケットポリシーで最小限の権限付与
    という構成としています。

構成図

Zabbixログ

CloudWatch Agent

CloudWatch Logs(ロググループ)

S3(長期保管)

logの存在を確認

ls /var/log/zabbix/
zabbix_agentd.log 
zabbix_server.log

IAMロールを作る(EC2用)

IAMユーザーにロールを作る権限を与えていないため、rootでこの作業を行いました。

IAM コンソール → ロール → ロールを作成(右上)
image.png

信頼されたエンティティ:AWS のサービス
ユースケース:EC2
image.png

許可ポリシーで CloudWatchAgentServerPolicy 付与
image.png

名前を付けて、<ロールを作成>をクリック。
名前: EC2Role-ZabbixCWAgent
image.png

EC2にロールをアタッチ

続けて、rootでこの作業を行いました。

  • EC2 → インスタンス
  • 対象の EC2 を選択
  • アクション → セキュリティ → IAMロールを変更 → IAMロールの更新
    image.png

ポリシーがアタッチされているか確認

AWS CLI をインストール

sudo apt update
sudo apt install -y awscli

バージョンを確認

aws --version
aws-cli/1.22.34 Python/3.10.12 Linux/6.8.0-1044-aws botocore/1.23.34

ポリシーの確認

aws sts get-caller-identity

EC2には IAMロールをアタッチしており、
AWS CLI はロール経由で一時クレデンシャルを取得してAPI を実行しています。
アクセスキーは使用していません。

CloudWatch Agent をインストール

cd /tmp
wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
sudo dpkg -i amazon-cloudwatch-agent.deb

インストールされているか確認

ls /opt/aws/amazon-cloudwatch-agent/
LICENSE  NOTICE  RELEASE_NOTES  THIRD-PARTY-LICENSES  bin  doc  etc  logs  var
# インストール成功

設定ファイルを作成

ログのパスを確認

ls /var/log/zabbix/
zabbix_agentd.log  zabbix_server.log

ログのパスに合わせて、jsonファイルを作成

sudo vi /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
{
  "logs": {
    "logs_collected": {
      "files": {
        "collect_list": [
          {
            "file_path": "/var/log/zabbix/zabbix_server.log",
            "log_group_name": "/zabbix/server",
            "log_stream_name": "{instance_id}",
            "timezone": "Local"
          },
          {
            "file_path": "/var/log/zabbix/zabbix_agentd.log",
            "log_group_name": "/zabbix/agent",
            "log_stream_name": "{instance_id}",
            "timezone": "Local"
          }
        ]
      }
    }
  }
}

設定反映&起動

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
  -a fetch-config \
  -m ec2 \
  -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json \
  -s

CloudWatch Agent がログを送れているか確認

sudo systemctl status amazon-cloudwatch-agent

image.png

コンソール画面では、CloudWatch Logsに反映されています。
image.png

S3バケットを作成

S3 → バケットを作成

EC2を作ったリージョンと同じにする(私は間違えてシドニーで作ってしまったため、シドニーです)

image.png

バケットポリシーの設定

S3 → バケット → 作成したバケット → アクセス許可 → バケットポリシー

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowCloudWatchLogsGetBucketAcl",
      "Effect": "Allow",
      "Principal": {
        "Service": "logs.ap-southeast-2.amazonaws.com"
      },
      "Action": "s3:GetBucketAcl",
      "Resource": "arn:aws:s3:::zabbix-log-archive-842675991179"
    },
    {
      "Sid": "AllowCloudWatchLogsPutObject",
      "Effect": "Allow",
      "Principal": {
        "Service": "logs.ap-southeast-2.amazonaws.com"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::zabbix-log-archive-842675991179/*"
    }
  ]
}

"Resource": はS3の名前を入れる。

CloudWatch Logs を開く

CloudWatch → ログ → Log Management → ロググループを選択
/zabbix/server を選択しました。
image.png

アクション → でーたをAmazon S3 にエクスポート
image.png

2026/02/05のログを送ります。
バケット名の欄で、先ほど作ったバケット名を選択。
エクスポートをクリック。
image.png

無事にエクスポートされました。
image.png

S3 → バケットから以下のフォルダが作成されるので、潜っていくと
image.png

.gzファイルがある。これがログファイル。
image.png

ダウンロードして解凍を行う。ログファイルであることが確認できた。
image.png

さいごに

今回の検証を通して、
CloudWatch Logs と S3 を組み合わせたログ保管構成の基本的な流れを理解することができました。

特に以下の点は重要なポイントだと感じました。

  • CloudWatch Logs から S3 エクスポート時には s3:GetBucketAcl 権限が必要になる
  • CloudWatch Logs Export は「イベント発生時刻」を基準に抽出される
  • CloudWatch Logs と S3 は同一リージョンで構成する必要がある
  • IAM ロールを利用することでアクセスキーを使用せずに安全に API を利用できる
  • CloudWatch Logs は検索・可視化に優れ、S3 は低コストで長期保管に優れているため、
    両者を組み合わせることで実務でもよく使われるログ基盤を構築できると理解できました。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?