ECS/Fargate の FireLens で Sumo Logic へログを送ってみた

2019.11.06

こんにちは、望月です。

最近リリースされた FireLens により、ECS/Fargate タスクのログ出力先が柔軟に選択できるようになりました。

この FireLens を利用し、Sumo Logic に直接ログを取り込むようにしてみたのでご紹介します。

FireLens については下記ブログで紹介しているため、ここでは Sumo Logic の部分にフォーカスし、説明していきたいと思います。

[アップデート] ECS/Fargateでログ出力先をカスタマイズできる「FireLens」機能がリリースされました

やってみた

ホスト型コレクタの作成

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 へ直接取り込みたいという場合には、こちらの方法がマッチするかと思いますので、試していただければと思います。

参考

AWS Fargate log collection - Sumo Logic