AWS

AWS EC2 + Kinesis Firehose + S3でApacheログを集約

AWS Kinesisを利用することで、ログ集約サーバをサーバレス化します。

 

 

事前準備

  • EC2インスタンスを作成しておく

 

① IAM ロールの作成

EC2にIAMロールを作成して割り当てます。

  • このロールを使用するサービスを選択:EC2
  • ポリシー:AmazonKinesisFirehoseFullAccess
  • ロール名:EC2-Kinesis-Full-Role

 

 

② Kinesis 配信ストリームの作成

【サービス】から【Kinesis】を選択し、【配信ストリームの作成】をクリックします。

 

 

  • Delivery Stream name: EC2-Send-Log-S3(任意)
  • Source: Direct PU or other sources

 

【Next】をクリックします。

 

 

Select a destination

 

バケットの作成

【Create new】を押して上記画像を参考にバケットを作成します。

 

Permissions

 

 

 

 

③ EC2対応

 

Apacheのインストール

 

# yum -y install httpd
# systemctl enable httpd
# systemctl start httpd

 

ログフォーマット設定 LTSV形式に変更

$ vi /etc/httpd/conf/httpd.conf

...
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
+   LogFormat "time:%t\tforwardedfor:%{X-Forwarded-For}i\thost:%h\treq:%r\tstatus:%>s\tsize:%b\treferer:%{Referer}i\tua:%{User-Agent}i\treqtime_microsec:%D\tcache:%{X-Cache}o\truntime:%{X-Runtime}o\tvhost:%{Host}i" ltsv

    <IfModule logio_module>
      # You need to enable mod_logio.c to use %I and %O
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>

    CustomLog "logs/access_log" combined
+   CustomLog logs/access_log_ltsv ltsv
...

Athenaで検索するのでLTSV形式にしています。

 

設定の反映

# systemctl restart httpd

 

 

パーミッション重要!

# chmod 755 /var/log/httpd
# chmod 644 /var/log/httpd/access_log

Kinesis-Agentがログを読めないといけません。

 

Kinesis Agentのインストール

$ sudo yum install –y https://s3.amazonaws.com/streaming-data-agent/aws-kinesis-agent-latest.amzn1.noarch.rpm

 

設定ファイル編集

$ sudo vi /etc/aws-kinesis/agent.json


{
  "cloudwatch.emitMetrics": true,
  "kinesis.endpoint": "",
  "firehose.endpoint": "",

  "flows": [
    {
      "filePattern": "/tmp/app.log*",
      "kinesisStream": "yourkinesisstream",
      "partitionKeyOption": "RANDOM"
    },
    {
      "filePattern": "/tmp/app.log*",
      "deliveryStream": "yourdeliverystream"
    }
  ]
}


↓変更

{
  "cloudwatch.emitMetrics": false,
  "firehose.endpoint": "https://firehose.ap-northeast-1.amazonaws.com",
  "flows": [
    {
      "filePattern": "/var/log/httpd/access_log_ltsv",
      "deliveryStream": "EC2-Send-Log-S3"
    }
  ]
}
  • “filePattern”: “<ログのパス>”
  • “deliveryStream”: “<Kinesis デリバリーストリーム>”
  • “firehose.endpoint”: “<Firehorseエンドピント>”

 

 

# systemctl restart aws-kinesis-agent
# systemctl enable aws-kinesis-agent

 

④ WEBにアクセスしてログ送信

 

http://<EC2 IPアドレス>/

 

Kinesis-Agentのログを見る

# tail -f /var/log/aws-kinesis-agent/aws-kinesis-agent.log


2019-10-11 05:26:40.551+0000 ip-172-31-20-252.ap-northeast-1.compute.internal (Agent.MetricsEmitter RUNNING) com.amazon.kinesis.streaming.agent.Agent [INFO] Agent: Progress: 735 records parsed (148449 bytes), and 735 records sent successfully to destinations. Uptime: 450046ms
2019-10-11 05:27:10.545+0000 ip-172-31-20-252.ap-northeast-1.compute.internal (FileTailer[fh:EC2-Send-Log-S3:/var/log/httpd/access_log].MetricsEmitter RUNNING) com.amazon.kinesis.streaming.agent.tailing.FileTailer [INFO] FileTailer[fh:EC2-Send-Log-S3:/var/log/httpd/access_log]: Tailer Progress: Tailer has parsed 735 records (148449 bytes), transformed 0 records, skipped 0 records, and has successfully sent 735 records to destination.
2019-10-11 05:27:10.551+0000 ip-172-31-20-252.ap-northeast-1.compute.internal (Agent.MetricsEmitter RUNNING) com.amazon.kinesis.streaming.agent.Agent [INFO] Agent: Progress: 735 records parsed (148449 bytes), and 735 records sent successfully to destinations. Uptime: 480046ms
2019-10-11 05:27:40.545+0000 ip-172-31-20-252.ap-northeast-1.compute.internal (FileTailer[fh:EC2-Send-Log-S3:/var/log/httpd/access_log].MetricsEmitter RUNNING) com.amazon.kinesis.streaming.agent.tailing.FileTailer [INFO] FileTailer[fh:EC2-Send-Log-S3:/var/log/httpd/access_log]: Tailer Progress: Tailer has parsed 735 records (148449 bytes), transformed 0 records, skipped 0 records, and has successfully sent 735 records to destination.
2019-10-11 05:27:40.551+0000 ip-172-31-20-252.ap-northeast-1.compute.internal (Agent.MetricsEmitter RUNNING) com.amazon.kinesis.streaming.agent.Agent [INFO] Agent: Progress: 735 records parsed (148449 bytes), and 735 records sent successfully to destinations. Uptime: 510046ms

 

Agent: Progress: 735 records parsed (148449 bytes), and 735 records sent successfully to destinations.

送信に成功した旨のログがでています。

 

デフォルトだと300秒経つか、5MBを越えるとS3に送信する仕様になっています。

 

⑤ S3のバケットを確認

ログの転送を確認できたらおっけ。

 

⑥ 複数サーバからの集約確認

複数サーバからKinesisのデリバリーストリームに送って、ログ集約できるかのテストを行います。

 

きちんとKinesisで集約されてS3にアップロードされています。

Kinesis Firehoseを利用することでログ集約サーバをサーバレス化できました。

 

 

Amazonおすすめ

iPad 9世代 2021年最新作

iPad 9世代出たから買い替え。安いぞ!🐱 初めてならiPad。Kindleを外で見るならiPad mini。ほとんどの人には通常のiPadをおすすめします><

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)