これは何
EC2でログ生成→Kinesis firehose→S3、の流れを実装してみたの記事です。
Kinesis Data Firehoseを作成
コンソールからKinesisへ移動します。
配信ストリームを押下。
適当に名前をつけます。
今回は""Direct PUT or other sources""にします。
オプションでJSONデータ形式に変換してくれるみたいですが、デフォルトのまま次へ行きます。
今回はログデータをS3へ置くので、デフォルトのままでOKです。
S3バケットを作成します。名前はグローバルで一意でなければなりません。
適当に""tests-0000-tests11"""とかつけておきます。これがFirehoseの宛先になります。
Buffer Sizeで、Firehoseからの受信データを5MBに分割します。
intervalは300になっていますが、より迅速にデータを取り出したいため、最小値の60にします。
暗号化などありますが、今回はデフォルトで行きます。暗号化されたい方はここで設定できます。
最後に、セキュリティアクセス権限を提供するIAMロールが必要です。
Firehoseは、S3にアクセスできる必要があります。それを達成するためにロールを作成します。
EC2セットアップ
Creating...
になっている間に、適当にEC2を立てます。
Security Groupでは、SSH 22番ポートとHTTP 80番ポートをご自身のIPで開けてください。
作成したマシンにSSHします。
AMIをAmazon Linux 2にした場合は、以下でSSHできると思います。
$ chmod 600 秘密鍵
$ ssh -i 秘密鍵 ec2-user@パブリックIP
データを収集して Kinesis Data Streams に送信するため、kinesis agentをマシンにインストールします。
$ sudo yum install –y aws-kinesis-agent
aws-kinesis-agentを起動します。
$ sudo service aws-kinesis-agent start
kinesis agentの設定ファイルを編集します。
vi /etc/aws-kinesis/agent.json
{
"cloudwatch.emitMetrics":false,
"firehose.endpoint": "https://firehose.ご自身のAZ.amazonaws.com",
"flows": [
{
"filePattern": "/var/log/httpd/*log",
"deliveryStream": "作成したFirehoseの名前"
}
]
}
再起動します。
$ systemctl restart aws-kinesis-agent
WEBサーバーをインストールします。
$ sudo yum -y install httpd
$ sudo systemctl enable httpd
$ sudo systemctl start httpd
ログの権限を変更します。
$ sudo chmod 755 /var/log/httpd
$ sudo chmod 644 /var/log/httpd/*
IAMロール作成
AWSコンソールでEC2へ行き、IAMロールを使って、EC2へアクセス権限を付与します。
EC2内の構成ファイルにアクセスキーやシークレットキーを書くのは、EC2に侵入された場合のことを考えると、セキュリティ的によろしくないです。
EC2にIAMロールをアタッチして認証を行う方がセキュリティ的には好ましいと考えます。
IAMロールを利用する場合、アクセスキーとシークレットキーの項目を設定ファイルに記載する必要は無くなります。
EC2を押下します。
タグは適当に決めます。
作成したら、ロールをEC2に割り当てます。
WEBサーバーにアクセスしてログを生成する
ブラウザで、
http://<EC2 IPアドレス>/
と入力します。
*今回暗号化してないのでhttpです。
ログを見に行きます。
$ tail -f /var/log/aws-kinesis-agent/aws-kinesis-agent.log
下記文字列が出てきたら、送信されていることを確認できます。
2021-08-21 03:21:29.935+0000 (Agent.MetricsEmitter RUNNING) com.amazon.kinesis.streaming.agent.Agent [INFO] Agent: Progress: 4 records parsed (1806 bytes), and 0 records sent successfully to destinations. Uptime: 150060ms
それではS3へ出力されているか確認します。
出ていますね。
参考
https://docs.aws.amazon.com/ja_jp/streams/latest/dev/writing-with-agents.html