この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、望月です。
最近リリースされた FireLens により、ECS/Fargate タスクのログ出力先が柔軟に選択できるようになりました。
この FireLens を利用し、Sumo Logic に直接ログを取り込むようにしてみたのでご紹介します。
FireLens については下記ブログで紹介しているため、ここでは Sumo Logic の部分にフォーカスし、説明していきたいと思います。
やってみた
ホスト型コレクタの作成
FireLens からのログ送信先として利用するホスト型コレクタの作成します。
- "Manage Data" -> "Collection" を選択
- 右上に表示された "Add Collector" を選択
- "Hosted Collector" を選択し、作成
- "HTTP Logs & Metrics" を選択し、作成
- 作成後、発行されたHTTPソースアドレスをメモる
- 発行したHTTPソースアドレスは Fargate のログドライバー設定で必要となります。
これで Sumo Logic 側は準備完了となります。簡単ですね!
タスク定義の作成
ECS のタスク定義を作成していきます。
紹介した弊社ブログにも記載されていましたが、現在 FireLens の設定をするためにはコンソールからはできないため JSON を用意し、AWS CLI やコンソールから直接 JSON を流す必要があります。
AWS CLI から流し込むときは、バージョンが最新ではない場合はエラーとなる可能性があるため、注意してください。
- 以下は自身の環境に合わせ、変更してください。
- ``
- ``
- ``
{
"family": "firelens-sumologic-fargate",
"executionRoleArn": "arn:aws:iam:::role/ecsTaskExecutionRole",
"networkMode": "awsvpc",
"cpu": "256",
"memory": "512",
"containerDefinitions": [
{
"name": "log_router_sumo",
"image": "906394416424.dkr.ecr.ap-northeast-1.amazonaws.com/aws-for-fluent-bit:latest",
"essential": true,
"firelensConfiguration": {
"type": "fluentbit"
},
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "awslogs-ecs-fargate-sumo",
"awslogs-create-group": true,
"awslogs-region": "ap-northeast-1",
"awslogs-stream-prefix": "awslogs-ecs-fargate-sumo"
}
}
},
{
"name": "web-app",
"image": "httpd:2.4",
"portMappings": [
{
"containerPort": 80,
"hostPort": 80,
"protocol": "tcp"
}
],
"essential": true,
"entryPoint": [
"sh",
"-c"
],
"command": [
"/bin/sh -c \"echo 'FireLens Sumologic Fargate' > /usr/local/apache2/htdocs/index.html && httpd-foreground\""
],
"logConfiguration": {
"logDriver":"awsfirelens",
"options": {
"Name": "http",
"Host": "",
"URI": "/receiver/v1/http/",
"Port": "443",
"tls": "on",
"tls.verify": "off",
"Format": "json_lines"
}
}
}
],
"requiresCompatibilities": [
"FARGATE"
]
}
- Sumo Logic へログ出力する設定部分は以下となります。
- 発行したHTTPソースアドレスのエンドポイントとトークンは以下の形となります。
https:///receiver/v1/http/
- 以下は自身の環境に合わせ、変更してください。
- ``
- ``
"logConfiguration": {
"logDriver":"awsfirelens",
"options": {
"Name": "http",
"Host": "",
"URI": "/receiver/v1/http/",
"Port": "443",
"tls": "on",
"tls.verify": "off",
"Format": "json_lines"
}
}
ログの確認
立ち上がったコンテナへアクセスを行い、ログが Sumo Logic へ出力されているか確認します。
- "Manage Data" -> "Collection" を選択
- 作成したコレクションから "Open in Log Search" をクリックし、Log Search を開く
- JSON 形式でログが取り込まれていることを確認
まとめ
FireLens を利用し、Sumo Logic にログを取り込むことができました。
今まで ECS/Fargate から Sumo Logic にログを取り込むためには CloudWatch Logs に一旦ログを出力し、Kinesis や Lambda などを利用する必要があったかと思いますが、この方法を使えば CloudWatch Logs を介さず、Sumo Logic にログを取り込むことができます。
ログの用途などによって、Sumo Logic へ直接取り込みたいという場合には、こちらの方法がマッチするかと思いますので、試していただければと思います。