今日もAWSの勉強を進めていきます。
今回は、ECSでログを取得・収集・管理する手法にどんなものがあるか、まとめていきます。
(2023年4月時点の情報です)
もくじ
3.AWS CloudWatch Logsを利用したログ取得
・CloudWatch LogsによるECSコンテナのロギング方法
4.FireLens for Amazon ECSを利用したログ取得
1.ECSでの主なログ取得方法
Amazon ECSでログを取得・管理する方法は複数ある。
以下に、主なログ取得・管理方法の概要を示す。
方法 | 説明 |
---|---|
ログドライバ | ロギングアプリケーションにログを転送・集約・管理する方法。 ECSタスク定義にて、当該ロギングアプリケーションのログドライバを指定する必要。 |
AWS CloudWatch Logs | AWSのサービスであるCloudWatch Logsに、ログを転送・集約・管理する方法。 |
FireLens for Amazon ECS | FireLens for Amazon ECSを利用して、AWSのサービス等にログを転送・集約・管理する方法。 |
AWS CloudTrail | AWS CloudTrailで、ECSからのAPIコールなどのイベントを記録する方法。 ログ内容を作りこみたい時は不向きだが、 無料かつデフォルトで有効になっているサービスのため、 必要に応じてイベント履歴を参照・利用すると良い。 記録したイベントの確認や履歴保存期間設定などの操作は、CloudTrail側で行う。 |
コンテナ内でのログ出力 | コンテナ内に直接ログを出力する方法。 ただしこの方法では、ログの集約や解析が困難になることがある。 |
以降、本記事では、
ログドライバ、AWS CloudWatch Logs、FireLens for Amazon ECSを利用する各方法について、
詳細を見ていく。
2.ログドライバを利用したログ取得
◎利用できるログドライバ
Dockerコンテナでは、ログの集約や管理をコンテナ自身で行わず、
専用のロギングアプリケーションに任せることが一般的である。
その際、利用するロギングアプリケーションのドライバを設定することが必要となる。
デフォルトでは、ECSのコンテナは、
Dockerデーモンで使用されるのと同じログドライバを使用するが、
設定次第で別のドライバを利用することもできる。
ホストがFargateかEC2かによって、利用可能なログドライバは以下の通り異なる。
ホスト | 利用可能なドライバ | 備考 |
---|---|---|
Fargate | awslogs splunk awsfirelens |
ロギングのために追加のソフトウェアがいる場合、 タスクの外でインストールする必要あり。 |
EC2 | awslogs fluentd gelf json-file journald logentries syslog splunk awsfirelens |
ホストの環境変数" ログドライバを登録しておく必要あり。 |
◎ECSタスク定義のパラメータ設定
ECSでログドライバを利用する場合は、
ECSタスク定義にて、オブジェクト型のパラメータ"logConfiguration"を設定する必要がある。
"logConfiguration"オブジェクトは以下のパラメータを持つ。
パラメータ | 説明 |
---|---|
logDriver | 使用するログドライバを設定する。 |
options | ログドライバに送信する構成情報のキーと値ペア。 例えばawslogsをログドライバとする時に、 awslogsに渡す、ログストリーム送信先となるロググループの情報などを指定できる。 |
secretOptions | ログドライバに送信する、機密情報へのアクセス情報。 認証情報などをログドライバに渡したいときに指定する。 |
3.AWS CloudWatch Logsを利用したログ取得
◎AWS CloudWatch Logsとは
AWS CloudWatchは、AWSの各種サービスやオンプレミスのリソースに対して、
モニタリング(監視)や、モニタリングデータの活用を行えるサービスである。
CloudWatch Logsはその中でも代表的な機能の1つであり、
ECSコンテナに限らず、各種AWSサービスやアプリケーションのログを、
収集・監視・保存・アクセス・分析するサービスを提供している。
※AWS CloudWatchのその他の機能は、以前の記事↓に概要をまとめています。
ECSのログ収集において、AWS CloudWatch Logsを利用するケースは、
よくある事例の1つとなっている。
◎CloudWatch LogsによるECSコンテナのロギング方法
ECSのコンテナのロギングにCloudWatch Logsを用いるには、
ホストの種別によって、以下の設定・条件を全て満たすことが必要となる。
ホスト | 必要な設定・前提条件 |
---|---|
Fargate | ①ECSタスク定義のパラメータ設定 |
EC2 | ①コンテナエージェントのバージョンが1.9.0以降であること ②ECSタスク定義のパラメータ設定 ③IAMロールの設定 |
*ECSタスク定義のパラメータ設定
ECSでログドライバを利用する場合と同様、
ECSタスク定義にて、オブジェクト型のパラメータ"logConfiguration"を設定する必要がある。
設定内容は以下の通り。
※"logConfiguration"オブジェクトの各パラメータの説明は2.ログドライバを利用したログ取得を参照。
・logConfigurationオブジェクトの"logDriver"パラメータに、"awslogs"を指定。
・logConfigurationオブジェクトの"options"パラメータに、以下の値を指定。
設定項目 | 説明 | 必須 |
---|---|---|
awslogs-create-group | ロググループを自動的に作成する(true)か否(false)か。 デフォルトはfalse。 ※ロググループ:CloudWatch Logsのログの管理単位。 |
× |
awslogs-region | ログ送信先となるAWSのリージョン。 | 〇 |
awslogs-group | ログストリームを送信する先のロググループ。 | 〇 |
awslogs-stream-prefix | ログストリームがどのコンテナのものか、対応関係を分かりやすくするためのプレフィックス値。 ホストがFargateの場合は必須、EC2の場合は必須でないが設定推奨。 |
△ |
awslogs-datetime-format | ログが複数行に渡るとき、行開始とするパターン。Python strftime 形式で指定する。awslogs-multiline-patternとの併用不可。 |
× |
awslogs-multiline-pattern | ログが複数行に渡るとき、行開始とするパターン。 正規表現で指定する。 awslogs-datetime-formatとの併用不可。 |
× |
mode | コンテナからawslogsドライバへの、ログ配信モード。 blocking:コンテナから直接ドライバへログを配信する。 non-blocking:ログをコンテナ毎の中間バッファ領域に保存する。 |
× |
max-buffer-size | modeをnon-blockingとした場合の、中間バッファ領域のサイズ。 | × |
*IAMロールの設定
ホストがEC2の場合、ホストのIAMロールに、以下の権限を含める必要がある。
・logs:CreateLogStream
・logs:PutLogEvents
4.FireLens for Amazon ECSを利用したログ取得
◎FireLens for Amazon ECSとは
FireLensとは、OSSのロギングアプリケーションであるFluentdやFluent Bitと連携し、
コンテナのログの収集および、様々なAWS内外のサービスへ出力・活用を簡単に行えるようにしたサービスである。
Fargate、EC2の両ホストで利用できるが、Windwosコンテナでは利用できない。
前章で紹介したAWS CloudWatch Logsと、FireLens for Amazon ECSは、
いずれもAWSのロギングサービスと言えるが、
両者には以下のような違いがある。
CloudWatch Logs | FireLens | |
---|---|---|
ログ出力先 | CloudWatchだけ ※CloudWatchから更に 別の宛先(S3など)に転送は可能。 |
AWSのサービスおよび、 AWSパートナーの各種宛先 ※複数指定可能。 ログの内容によって出力先を分けることもできる |
FireLensは、AWSサービス外含めて、複数箇所にログを送信でき、
カスタマイズ性に優れているのが長所である。
なお、ログの送信先などの詳細は、タスク定義のパラメータ設定値で柔軟に指定できる。
またFireLensを利用する際は、サイドカー構成(メインのコンテナとは別で、補助的な処理(ここではロギング)を行うコンテナを設ける構成)を取ることが一般的である。
以上を図にまとめると、以下のようになる。
サイドカー構成をとる場合は、メインのコンテナのlogDriverをawsfirelensにする必要がある。
◎ECSタスク定義のパラメータ設定
FireLens for Amazon ECSを利用してロギングするコンテナを作成するには、
ECSタスク定義にて、オブジェクト型パラメータ"firelensConfiguration"を設定する必要がある。
※コンテナがたくさん出てきてややこしいが、
firelensConfigurationの設定対象となるコンテナは赤枠で囲ったやつ。↓
ちなみによくある事例としてサイドカー構成の図を載せているが、
Firelensを利用するコンテナが必ずしもサイドカーコンテナである必要はない。
"firelensConfiguration"オブジェクトのパラメータは以下の通り。
パラメータ | 説明 |
---|---|
type | FireLensの裏で使用するログルータ。 fluentd または fluentbit のいずれかを指定する。 |
options | ログルータを設定するときに使用するオプション。 ログのカスタム設定ファイルパス情報や、 ログに追加するメタデータ(タスク、クラスター、ホストの詳細など)を設定できる。 |