Elastic Cloud × AWS FireLens ― エージェントレスなデータインジェストでインサイトをすばやく抽出

blog-thumb-cloud-aws.png

Amazon Web Services(AWS)FireLensのコンテナーログとイベントを、直接Elastic Cloudにシッピングすることができるようになりました。AWS FireLensは、Amazon ECS(Amazon Elastic Container Service)起動タイプに該当するAmazon EC2(Amazon Elastic Compute Cloud)と、AWS Fargateのどちらにも使えるコンテナーログルーターです。この統合機能を使うと、シッピングやログのリーズナブル保持、さらに脅威の監視と分析など、DevOpsやDevSecOpsで行うAWSのログ管理の作業効率が上がります。

本ブログ記事では、AWS FireLensを使ったElastic Cloudへのエージェントレスなデータインジェストを始める方法を説明します。

ログとイベントのシッピングを効率化する

従来、コンテナーのログとイベントを異なる送信先にシッピングするプロセスは手間がかかり、難易度の高いものでした。たとえば、Cloudwatchにログを送信して、Fluent Bitサイドカーログアグリゲーターに保持し、追加のソフトウェアをインストールするか、追加のコードを記述する…、そんな風にやたらと時間がかかるタスクを廃止できます。現在では、ECSで実行するアプリのログをElastic Cloudに送信するタスクの定義をすばやく設定することができるようになりました。

ログをシンプルに検索、分析、保持

FireLensからデータをストリーミングしてElasticsearchに格納した後は、Kibanaを使ってわずか数分で検索したり、可視化したりできます。また、他のサーバーや仮想マシン、コンテナーから収集したログやメトリック、トレースもElasticに送って、1つの画面で分析することができます。

次にElasticオブザーバビリティを使ってアプリへの深い可視性を確立し、根本原因分析にかかる時間を短縮しましょう。トレースやログ、メトリック、マップ複合サービスの依存性をコードレベルですばやく手軽に分析できるだけでなく、機械学習ベースの異常検知と自動の相関付け機能を活用して“unknown unknowns”(未知の不確定要素)を明らかにできます。

またElasticセキュリティを活用して、“ゼロ時間検知”を目指すこともできます。XDR(Extended Detection and Response)は、オブザーバビリティと同じデータの利用範囲を拡張して実施できます。SIEMとエンドポイントセキュリティデータを集約して、最新のサイバーセキュリティ脅威に対する防御、検知、対応を実践しましょう。

データ量が増えても、Elasticが提供する自動スケーリング機能やインデックスライフサイクル管理機能を活用することで、パフォーマンスとストレージコストのバランスを最適化しながらデータを消去せずに維持できます。

Elastic × AWS FireLensを使い始める

ここからは事例に沿って、FireLensを使ってAmazon ECSからElastic Cloudにコンテナーログを転送する手順を解説します。下の参考用のアーキテクチャー図には、コンテナーログをElastic Cloudに転送している比較的スタンダードなAmazon ECS内のコンテナーとFireLensが示されています。
Amazon ECSからElastic Cloudにコンテナーログを送信している

FireLensのタスクを設定する手順は次の通りです。

1. タスクの定義を設定します。GitHubに公開されているAmazon ECS FireLensのサンプルで定義の例を見ることができます。

2. AWS Identity and Access Management(IAM)をアップデートして、タスクのRoleArn、executionRoleArn IAMロール、Elastic Cloud_Auth、Cloud_IDで置換します。このソリューションに実装するアップデート済みのタスク定義とreadmeは、GitHubレポジトリに公開されています。また、ここで下に例示するタスクの詳細を確認することもできます。
{
   "family": "firelens-EC2-elastic",
   "taskRoleArn": "CHANGE ME",
   "executionRoleArn": "CHANGE ME",
   "containerDefinitions": [{
           "name": "log_router",
           "image": "amazon/aws-for-fluent-bit:latest",
           "essential": true,
           "firelensConfiguration": {
               "type": "fluentbit",
               "options": {
                   "enable-ecs-log-metadata": "true"
               }
           },
           "logConfiguration": {
               "logDriver": "awslogs",
               "options": {
                   "awslogs-create-group": "true",
                   "awslogs-group": "firelens-container",
                   "awslogs-region": "us-east-2",
                   "awslogs-stream-prefix": "firelens"
               }
           },
           "memoryReservation": 50
       },
       {
           "name": "nginx-test",
           "image": "nginx",
           "portMappings": [{
               "containerPort": 80
           }],
           "essential": true,
           "environment": [],
           "logConfiguration": {
               "logDriver": "awsfirelens",
               "secretOptions": [
                       {
                               "valueFrom": "CHANGE ME",
                               "name": "Cloud_Auth"
                       }
               ],
               "options": {
                   "Name": "es",
                   "Port": "9243",
                   "Tag_Key tags": "tags",
                   "Include_Tag_Key": "true",
                   "Cloud_ID": "CHANGE ME",
                   "Index": "elastic_firelens”,
                   "tls": "On",
                   "tls.verify": "Off"
               }
           },
           "memoryReservation": 100
       }
   ]
}

Amazon ECS Fargateのコンテナーログをシッピングする場合は、最初の数行を次の設定に置換してください。

{
    "family": "firelens-fargate-elastic",
    "taskRoleArn": "",
    "taskRoleArn": "CHANGE ME",
    "executionRoleArn": "CHANGE ME",
    "cpu": "512",
    "memory": "1024",
    "requiresCompatibilities": [
        "FARGATE"
    ],

設定の手順

1. ECS CLIとAWS CLIがインストールされていることを確認します。インストール未了の場合は、AWSのinstallation guide(インストールガイド)の手順に従ってください。

2. `enable-fluent-log-driver.sh`という名前で新しいファイルを開き、以下の情報を格納してECSエージェント内のFluentdログドライバーを有効化します。

#!/bin/bash
echo "ECS_AVAILABLE_LOGGING_DRIVERS=[\"awslogs\",\"fluentd\"]" >> 
/etc/ecs/ecs.config
3. 次のコマンドを使用し、ECSにEC2クラスター、またはFargateクラスターを作成します
ecs-cli up \
--size 2 \
--instance-type t2.medium \
--extra-user-data enable-fluent-log-driver.sh \
--keypair <changeme> \
--capability-iam \
--region=us-east-2 \
--ecs-profile=<changeme> \
--cluster-config <changeme>

4.  タスクの定義をローカルファイル`task_definition.json`に保存し、AWS CLIを使用して登録します。

aws ecs register-task-definition --cli-input-json file://task_definition.json

5.  ECSサービスを作成します。

aws ecs create-service --cluster cluster-name --service-name demo-service --task-definition firelens-example-cloudwatch --desired-count 1 --launch-type 
"EC2"

6. サービスが実行し始めると、Elasticsearchに流入するログをKibanaで表示できます。下のスクリーンショットでは、Kibanaで可視化できるクエリをElasticで実行している様子がわかります。

サービスが実行し始めると、Elasticsearchに流入するログをKibanaで表示できます。下のスクリーンショットでは、Kibanaで可視化できるクエリをElasticで実行している様子がわかります。

Elasticのインデックスに入れたデータを、Kibanaで可視化することもできます。さらに、Elasticで実行するクエリに応じて、関連する可視化を表示するダッシュボードを構築できます。Elasticのアグリゲーションを使用ってデータを抽出、処理すると、データ全体のスパイクや落ち込み、傾向を示すチャートやグラフを作成できます。下のスクリーンショットは、Kibanaのダッシュボードの例です。

下のスクリーンショットは、Kibanaのダッシュボードの例です。

シンプルなデータインジェストを実現するFireLensは、ElasticとAWSのパートナーシップの一環として誕生しました。さらにElasticは、DevOps、DevSecOps向けにセキュリティ・コンプライアンス制御機能を内蔵する単体のUIも提供しています。設定不要のAWS向け統合機能やダッシュボード群はAWSとオンプレミスの環境全体に一元的な可視性を構築し、インフラ、アプリ、ビジネスのパフォーマンスと全体的な健全性に関するすぐれたインサイトをもたらします。

まとめ

これで、データインジェストプロセスを効率化して、すべてのコンテナーログとイベントを1画面で管理する準備は万端です。Elasticは、お客様が望む場所と目的でスムーズなエクスペリエンスを実行できるよう継続的に取り組んでいます。ご紹介したAWSとの効率的な統合機能は、その一例にすぎません。Elastic CloudはElastic Stackのバリューを拡張し、ユーザーがより多くのことを、より高速に実行できるよう支援します。Elastic Cloudは、Elasticのプラットフォームから優れたエクスペリエンスを引き出す最高の方法です。ここでご紹介した以外のAWSとの統合機能について詳しくは、Elasticの統合機能ライブラリをご覧ください。AWSでElasticを使いはじめるには、AWS Marketplace(Elastic)またはelastic.coにアクセスしてください。来週開催されるAWS re:Inventにご参加の方は、Elasticがブースを設置する#1567にぜひお立ち寄りください。

本ドキュメントに記述されているあらゆる機能ないし性能のリリースおよびタイミングは、Elasticの単独裁量に委ねられます。現時点で提供されていないあらゆる機能ないし性能は、すみやかに提供されない可能性、または一切の提供が行われない可能性があります。