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へログ長期保管構成を検証

0
Last updated at Posted at 2026-02-05

はじめに

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

以下の続きとなります。

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

構成の再確認

本シリーズでは、単一のEC2インスタンス上に
Zabbix Server / Agent を構築し、
監視データを CloudWatch Logs 経由で S3 に集約する構成を採用しています。

image.png

本記事では、セキュリティ面も考慮し、
以下の方針で構成しています。

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

検証環境

本記事の検証は、以下の環境で実施しています。

項目 内容
クラウド AWS
サービス EC2
OS Ubuntu Server 22.04 LTS
Zabbix 6.0 LTS
Webサーバ Apache
DB MariaDB
PHP Ubuntu標準(Apache連携)
リージョン ap-northeast-1(東京)

IAMロールの作成権限を与える

本検証では、管理者権限は IAM ユーザーに直接付与せず、
管理者権限を持つ IAM グループを作成し、
対象ユーザーをそのグループに所属させる構成としました。

これにより、ユーザー単位で権限を管理するのではなく、
グループ単位で権限管理を行うことができ、
運用性およびセキュリティの向上が期待できます。

なお、本検証では作業効率を考慮し、
AdministratorAccess を付与したグループを使用しています。

実運用では、最小権限の IAM ポリシーを設計する必要があります。

IAMロールを作る(EC2用)

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

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

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

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

※EC2ロール(CloudWatchAgentServerPolicy)は「EC2→CloudWatch Logsへ送る」ための権限です。
CloudWatch Logs→S3エクスポートは CloudWatch Logs サービスが実行するため、S3側のバケットポリシーで許可します。

EC2にロールをアタッチ

  • EC2 → インスタンス
  • 対象の EC2 を選択
  • アクション → セキュリティ → IAMロールを変更
  • 先ほど作成したEC2Role-ZabbixCWAgent を選択
  • IAMロールの更新
    image.png

IAMロールが利用できているか確認(STS)

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
# CloudWatch Agent をダウンロード

sudo dpkg -i amazon-cloudwatch-agent.deb
# パッケージをインストール

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

ls /opt/aws/amazon-cloudwatch-agent/
# CloudWatch Agent がインストールされたディレクトリの中身を表示

CloudWatch Agent は /opt/aws/amazon-cloudwatch-agent/
インストールされます。

主に確認するディレクトリは以下です。

  • bin:実行ファイル
  • etc:設定ファイル
  • logs:エージェントログ

特に logs ディレクトリは、
トラブルシューティング時に重要となります。

CloudWatch Agent を使用する理由

EC2 の標準 CloudWatch メトリクスでは、
CPU やネットワークなどの基本情報のみ取得可能です。

CloudWatch Agent を使用することで、
メモリ・ディスク使用率や OS / アプリケーションログを
CloudWatch Logs / Metrics に送信できます。

本構成では、Zabbix ログを CloudWatch Logs に集約し、
S3 に長期保管するために導入しています。

設定ファイルを作成

Zabbixのログのパスを確認

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

zabbix_agentd.logzabbix_server.logを CloudWatch Logs に集約します。
 
CloudWatch Agent の設定用 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",
            "retention_in_days": 30
          },
          {
            "file_path": "/var/log/zabbix/zabbix_agentd.log",
            "log_group_name": "/zabbix/agent",
            "log_stream_name": "{instance_id}",
            "timezone": "Local",
            "retention_in_days": 30
          }
        ]
      }
    }
  }
}

設定項目の補足

■ retention(ログ保持期間)を設定する理由

CloudWatch Logs のログ保持期間は、デフォルトでは無期限に保存されます。
無期限保存のまま運用すると、ログが蓄積され続け、ストレージコストが増加する可能性があります。

そのため、本構成では retention_in_days を設定し、
一定期間経過後にログが自動削除されるようにしています。

例:

  • 7日:短期検証環境
  • 30日:一般的な運用ログ
  • 90日以上:監査用途

■ timezone を Local に設定する理由

CloudWatch Logs は基本的に UTC でログを扱います。
一方で、EC2 上のアプリケーションログ(今回の場合は Zabbix ログ)は
OS のローカルタイム(JST)で出力されることが多くあります。

そのため timezone を Local に設定することで、
CloudWatch Logs 上でも OS と同じ時刻基準でログを確認でき、
障害調査やログ解析が容易になります。


■ log_stream_name に instance_id を使用する理由

本構成では log_stream_name に {instance_id} を使用しています。

これにより、EC2 インスタンスごとにログストリームが自動的に分離されます。

この設定を行うことで:

・複数インスタンス運用時のログ分離が容易
・Auto Scaling 環境でも自動的にログを識別可能
・障害発生時に対象インスタンスを特定しやすい

といったメリットがあります。

設定反映&起動

CloudWatch Agent に設定ファイルを読み込ませ、サービスを起動します。

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
オプション 役割
-a fetch-config 設定読み込み
-m ec2 実行環境指定
-c file: 設定ファイル指定
-s Agent起動

実行後に行われる処理

・設定ファイルの読み込み
・CloudWatch Logs への送信設定の反映
・CloudWatch Agent サービスの起動

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

CloudWatch Agentが動いているか確認します。

sudo systemctl status amazon-cloudwatch-agent

image.png

CloudWatch → ログ → Log Management
image.png

ロググループに /zabbix/agent/zabbix/server が表示されているので、ログが送られています。

S3バケットを作成

S3 → バケットを作成
バケット名: your-bucket-name (例)
image.png

バケットポリシーの設定

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

本記事では例として以下の値を使用しています。

  • バケット名:zabbix-log-archive(例)

実際に設定する際は、以下を自分の環境の値に置き換えてください。

  • バケット名
  • AWSアカウントID
  • CloudWatch Logs の ARN

バケットポリシー内の "Resource" には、対象となる S3 バケット名を指定します。

また、本構成ではセキュリティ向上のため、以下の条件を付与しています。

  • aws:SourceAccount
     → 指定した AWS アカウントからのアクセスのみ許可

  • aws:SourceArn
     → 指定した CloudWatch Logs(ロググループ)からのアクセスのみ許可

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowCloudWatchLogsGetBucketAcl",
      "Effect": "Allow",
      "Principal": {
        "Service": "logs.ap-northeast-1.amazonaws.com"
      },
      "Action": "s3:GetBucketAcl",
      "Resource": "arn:aws:s3:::your-bucket-name",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:logs:ap-northeast-1:123456789012:log-group:/zabbix/*"
        }
      }
    },
    {
      "Sid": "AllowCloudWatchLogsPutObject",
      "Effect": "Allow",
      "Principal": {
        "Service": "logs.ap-northeast-1.amazonaws.com"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::your-bucket-name/*",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:logs:ap-northeast-1:123456789012:log-group:/zabbix/*"
        }
      }
    }
  ]
}

バケットポリシー欄に貼り付けて 保存 をクリック

各設定項目の解説

項目 設定値例 役割 解説
Version 2012-10-17 ポリシーバージョン IAMポリシーの構文バージョン。現在は基本これ固定。
Statement 配列 ポリシールール本体 複数ルールをまとめて定義する。
Sid AllowCloudWatchLogsGetBucketAcl ルール識別子 任意。運用時の可読性向上のために付ける。
Effect Allow 許可 or 拒否 Allow = 許可 / Deny = 拒否
Principal logs.ap-northeast-1.amazonaws.com 誰に許可するか CloudWatch Logs サービスに許可を与えている。
Action s3:GetBucketAcl 許可する操作 CloudWatch Logs が S3 に書き込めるか確認するために必要。
Action s3:PutObject 許可する操作 CloudWatch Logs が S3 にログファイルを書き込むために必要。
Resource arn:aws:s3:::bucket-name 対象バケット バケット本体。ACL確認時に使用。
Resource arn:aws:s3:::bucket-name/* 対象オブジェクト バケット内のファイル書き込み対象。
Condition 制限条件 セキュリティ強化 特定の条件を満たした場合のみ許可する。
aws:SourceAccount AWSアカウントID アカウント制限 指定アカウントからのアクセスのみ許可。
aws:SourceArn CloudWatch Logs ARN リソース制限 指定ロググループからのアクセスのみ許可。

CloudWatch Logs から S3 にログをエクスポートする

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

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

バケット名: <先ほど作ったバケット名>
エクスポートをクリック
スクリーンショット 2026-02-09 144130.png

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

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

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

ダウンロードして解凍を行います
メモ帳で開くと、ログファイルであることが確認できました

最後に

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

本構成により、EC2 上で動作する Zabbix のログを CloudWatch Logs に集約し、
S3 へ長期保管できるログ基盤を構築できました。

これにより、以下を実現できます。

  • ログの一元管理
  • 長期保管による監査対応
  • EC2 ローカルディスク容量の圧迫回避
  • CloudWatch Logs による検索・分析の容易化

本記事ではログ基盤の構築を主目的とし、
CloudWatch Logs から S3 へのエクスポートは手動または都度実行を前提としています。

なお、ログエクスポートの自動化(EventBridge + Lambda + ExportTask)については、
オプション構成として別記事で検証予定です。


今回の検証で重要だと感じたポイント

  • CloudWatch Logs → S3 エクスポート時には s3:GetBucketAcl 権限が必要
  • Export は「イベント発生時刻」を基準に抽出される
  • CloudWatch Logs と S3 は同一リージョン構成が必要
  • IAM ロールによりアクセスキー不要で安全に API 利用が可能
  • CloudWatch Logs(検索・可視化)と S3(低コスト長期保管)を組み合わせることで、実務でも利用されるログ基盤を構築できる

本検証を通じて、
実務でも採用される「CloudWatch Logs × S3」のログ基盤を、
設計意図を含めて理解できた点は大きな収穫でした。

【補足】Zabbix と CloudWatch の役割分担

Zabbix CloudWatch
監視・アラート ログ保管
リアルタイム検知 長期保存
運用監視 監査・分析
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?