AWSでLinuxサーバ上のApacheのアクセスログやアプリケーションログ、サーバのログイン履歴など任意のログをS3に送る方法についてご説明します。
AWSで提供されているKinesis Firehoseというリアルタイムにデータを送信するサービスを利用します。
Amazon Kinesis Data Firehose とは
Kinesisエージェント用のIAMユーザーを作成する
Linuxにインストールするkinesisエージェント用のIAMユーザーを作成します。
AWSコンソールにログインし、上部のメニューのサービスからIAMを選択肢、左のメニューのユーザーを選択します。画面に表示されるユーザーの追加ボタンをクリックします。
好きなユーザー名を入力し、プログラムよるアクセスにチェックします。
そのまま次に進めて、最後にアクセスキーIDとシークレットアクセスキーが表示されるので保存しておきます。
Kinesisエージェント用のIAMユーザーにアクセス権限を与える
IAMのユーザーのメニューから作成したユーザーをクリックし、インラインポリシーの追加をクリックします。
下記のように権限を設定します。
適当にポリシーに名前をつけ、アクセス権限の設定を完了します。
Kinesis配信ストリームの作成
次に、サーバからログを受け取り、S3に転送するためのKinesis配信ストリームを作成します。
上のサービスのメニューからKinesisを選択し、配信ストリームの作成をクリックします。
配信ストリームの名前を適当に設定します。
SourceのところでDirect PUT or other sourcesを選択します。
DestinationでAmazon S3を選択します
S3 Bucketの項目でCreate newボタンを押して、出力先のS3バケットを新しく作成します。(既存のものを使っても問題ありません)
好きなS3バケット名入力しRegionを選択します。
IAM roleの項目でCreate new or chooseを選択します。
IAMロールが自動的に作成され、適切な権限が与えられます。
あとは、そのまま進めて、配信ストリームの作成を完了させます。
Kinesisエージェントのインストール
ログを送りたいサーバにKinesisエージェントをインストールします。これはAmazon Linux2で試した手順ですが、CentOSやRedhatの場合は、7以降のバージョンでKinesisエージェントに対応しています。
下記のコマンドを実行しkinesisエージェントのパッケージをインストールします。
sudo yum install –y https://s3.amazonaws.com/streaming-data-agent/aws-kinesis-agent-latest.amzn1.noarch.rpm
下記のファイルを編集し、S3に送りたいログファイル名をとkinesis配信ストリーム名、IAMユーザーのアクセスキーID, シークレットキー設定します。注意点として、読み取るファイルは、kinesisエージェントの起動ユーザーaws-kinesis-agent-userが読み取りができる必要があります。
{ "cloudwatch.emitMetrics": false, "firehose.endpoint": "https://firehose.(リージョン名、東京の場合は、ap-northeast-1).amazonaws.com", "awsAccessKeyId": "(IAMユーザーのアクセスキーID)", "awsSecretAccessKey": "(IAMユーザーのシークレットアクセスキー)", "flows": [ { "filePattern": "/var/tmp/app.log*", ← 送りたいログのPATH "deliveryStream": "send-log-to-s3" } ] }
Kinesisエージェントを起動し、自動起動を設定
systemctl start aws-kinesis-agent systemctl enable aws-kinesis-agent
以上でサーバのログがS3に保存されるようになります。