Amazon ECS アプリケーションのログとメトリクスの収集
このページでは Amazon ECS アプリケーションでログとメトリクスを収集する方法について説明します。
Amazon ECS のメトリクスの収集
この手順では、Amazon CloudWatch メトリクス Source をセットアップします。
- Sumo Logic のアクセス権限を付与して、使用可能なメトリクスを一覧表示し、メトリクスのデータ ポイントを取得します。手順の詳細は、「AWS 製品へのアクセス権限の付与」を参照してください。
- Hosted Collector を設定します。
- Sumo Web アプリケーションで、[Manage Data (データの管理)] > [Collection (コレクション)] > [Collection (コレクション)] を選択します。
- 上記で設定した Hosted Collector に移動して、[Add (追加)] > [Add Source (Source の追加)] を選択します。
- [Amazon CloudWatch Source for Metrics (Amazon CloudWatch メトリクス Source)] を選択します。
- Name (名前): 新しい Source に表示する名前を入力します。
- Description (説明): 説明 (省略可能) を入力します。
- Regions (リージョン)。ECS の Amazon リージョンを選択します。
- Namespaces (名前空間)。[Select AWS/ECS] を選択します。
- Source Category。ecs_metrics と入力します。
- AWS Access (AWS アクセス)。AWS アクセスには 2 つのオプションがあります。
- Role-based access (ロールベース アクセス)。推奨される方法です。「AWS 製品へのアクセス権限の付与」の説明に従って Amazon ECS にアクセス権を付与した場合は、このオプションを使用できます。 ロール ベースのアクセスの場合、ロールを作成した後に AWS によって提供されるロール ARN を入力します。
-
Key access (キー アクセス)。アクセス キー ID とシークレット アクセス キーを入力します。詳細については、AWS ヘルプの「IAM ユーザのアクセス キーの管理」を参照してください。
- Role-based access (ロールベース アクセス)。推奨される方法です。「AWS 製品へのアクセス権限の付与」の説明に従って Amazon ECS にアクセス権を付与した場合は、このオプションを使用できます。 ロール ベースのアクセスの場合、ロールを作成した後に AWS によって提供されるロール ARN を入力します。
- Scan Interval (スキャン間隔)。Sumo Logic が CloudWatch Source をスキャンして新しいデータがないか確認する間隔として、デフォルトの 5 分を使用するか、または別の間隔を入力します。
- [Save (保存)] をクリックします。
CloudTrail を使用した ECS イベントの収集
この手順では、ECS イベントを収集するように AWS CloudTrail Source をセットアップします。
- AWS アカウントで CloudTrail を設定します。選択内容に従って、S3 バケットが生成されます。
- 上記で作成または使用した Sumo Logic へのアクセス権限を Amazon S3 バケットへ付与します。手順の詳細は、「AWS 製品へのアクセス権限の付与」を参照してください。
- ログが、Amazon S3 バケットに配信されることを確認します。
- Sumo Web アプリケーションで、[Manage Data (データの管理)] > [Collection (コレクション)] > [Collection (コレクション)] を選択します。
- 上記で設定した Hosted Collector に移動して、[Add (追加)] > [Add Source (Source の追加)] を選択します。
- AWS CloudTrail Source を選択します。
- Name (名前): 新しい Source に表示する名前を入力します。
- Description (説明): 説明 (省略可能) を入力します。
- S3 Region (S3 リージョン)。ECS S3 バケットの Amazon リージョンを選択します。
- Bucket Name (バケット名)。ECS S3 バケットの名前を正確に入力します。
- Path Expression (パス式): 収集する S3 オブジェクトに一致する文字列を入力します。この文字列では、ワイルドカードを 1 つ使用できます。(先頭にスラッシュを付けないでください。「Amazon のパス式」参照。)
- Source Category。ecs_event と入力します。
- AWS Access (AWS アクセス)。AWS アクセスには 2 つのオプションがあります。
- Role-based access (ロール ベース アクセス)。推奨される方法です。「AWS 製品へのアクセス権限の付与」の説明に従って Amazon ECS にアクセス権を付与した場合は、このオプションを使用できます。 ロール ベースのアクセスの場合、ロールを作成した後に AWS によって提供されるロール ARN を入力します。
-
キー アクセスの場合、アクセス キー ID と、シークレット アクセス キーを入力します。詳細については、AWS ヘルプの「IAM ユーザのアクセス キーの管理」を参照してください。
- Role-based access (ロール ベース アクセス)。推奨される方法です。「AWS 製品へのアクセス権限の付与」の説明に従って Amazon ECS にアクセス権を付与した場合は、このオプションを使用できます。 ロール ベースのアクセスの場合、ロールを作成した後に AWS によって提供されるロール ARN を入力します。
- Scan Interval (スキャン間隔)。デフォルトの 5 分を使用します。または、Sumo Logic が S3 バケットをスキャンして新しいデータがないか確認する間隔を入力します。
- Enable Timestamp Parsing (タイムスタンプ parse の有効化): チェックボックスをオンにします。
- Time Zone (タイム ゾーン): [Ignore time zone from log file and instead use (ログ ファイルのタイムゾーンを無視して、次を使用します)] を選択して、[UTC] を選択します。
- Timestamp Format (タイムスタンプ形式)。[Automatically detect the format (自動的に形式を検出)] を選択します。
- Enable Multiline Processing (複数行の処理の有効化)。チェックボックスをオンにして [Infer Boundaries (境界を推測する)] を選択します。
- [Save (保存)] をクリックします。
ログ メッセージのサンプル
{ "eventVersion":"1.04", "userIdentity":{ "type":"AssumedRole", "principalId":"ADFDDDFF7FDF7GFFF2DF0:i-76vfa923", "arn":"arn:aws:sts::435456556566:assumed-role/ecsInstanceRole/i-76vfa923", "accountId":"435456556566", "accessKeyId":"AOFGPJFIJFFOIJFIOJHF", "sessionContext":{ "attributes":{ "mfaAuthenticated":"false", "creationDate":"2017-10-02T20:08:54.107Z" }, "sessionIssuer":{ "type":"Role", "principalId":"ADFDDDFF7FDF7GFFF2DF0", "arn":"arn:aws:iam::435456556566:role/ecsInstanceRole", "accountId":"435456556566", "userName":"kevin" } } }, "eventTime":"2017-10-02T20:08:54.107Z", "eventSource":"ecs.amazonaws.com", "eventName":"RegisterTaskDefinition", "awsRegion":"us-west-1", "sourceIPAddress":"73.168.34.72", "userAgent":"Amazon ECS Agent - v1.12.2 (ecda8a6) (+http://aws.amazon.com/ecs/)", "requestParameters":{ "attributes":[ { "name":"com.amazonaws.ecs.capability.privileged-container" }, { "name":"com.amazonaws.ecs.capability.docker-remote-api.1.17" }, { "name":"com.amazonaws.ecs.capability.docker-remote-api.1.18" }, { "name":"com.amazonaws.ecs.capability.docker-remote-api.1.19" }, { "name":"com.amazonaws.ecs.capability.docker-remote-api.1.20" }, { "name":"com.amazonaws.ecs.capability.docker-remote-api.1.21" }, { "name":"com.amazonaws.ecs.capability.docker-remote-api.1.22" }, { "name":"com.amazonaws.ecs.capability.logging-driver.json-file" }, { "name":"com.amazonaws.ecs.capability.logging-driver.syslog" }, { "name":"com.amazonaws.ecs.capability.logging-driver.awslogs" }, { "name":"com.amazonaws.ecs.capability.ecr-auth" }, { "name":"com.amazonaws.ecs.capability.task-iam-role" }, { "name":"com.amazonaws.ecs.capability.task-iam-role-network-host" } ], "totalResources":[ { "type":"INTEGER", "doubleValue":0.0, "integerValue":1024, "longValue":0, "name":"CPU" }, { "type":"INTEGER", "doubleValue":0.0, "integerValue":995, "longValue":0, "name":"MEMORY" }, { "type":"STRINGSET", "stringSetValue":[ "22", "2375", "2376", "51678", "51679" ], "doubleValue":0.0, "integerValue":0, "longValue":0, "name":"PORTS" }, { "type":"STRINGSET", "stringSetValue":[ ], "doubleValue":0.0, "integerValue":0, "longValue":0, "name":"PORTS_UDP" } ], "instanceIdentityDocumentSignature":"pqWe1trtreertermhC6vz\nZ0e/ZyOVVKXOb0fiiouyuyturtyreuFaoghqQ0wWurXzcHb6CrtreyteV6hPM=", "cluster":"graphite", "instanceIdentityDocument":"{\n \"privateIp\" : \"10.0.1.83\",\n \"devpayProductCodes\" : null,\n \"availabilityZone\" : \"us-west-1c\",\n \"accountId\" : \"435456556566\",\n \"version\" : \"2010-08-31\",\n \"instanceId\" : \"i-76vfa923\",\n \"billingProducts\" : null,\n \"instanceType\" : \"t2.micro\",\n \"imageId\" : \"ami-444d0224\",\n \"pendingTime\" : \"2016-11-15T21:07:08Z\",\n \"architecture\" : \"x86_64\",\n \"kernelId\" : null,\n \"ramdiskId\" : null,\n \"region\" : \"us-west-1\"\n}" }, "responseElements":{ "containerInstance":{ "versionInfo":{ }, "runningTasksCount":0, "ec2InstanceId":"i-13dcar4566", "remainingResources":[ { "type":"INTEGER", "doubleValue":0.0, "integerValue":1024, "longValue":0, "name":"CPU" }, { "type":"INTEGER", "doubleValue":0.0, "integerValue":995, "longValue":0, "name":"MEMORY" }, { "type":"STRINGSET", "stringSetValue":[ "22", "2376", "2375", "51678", "51679" ], "doubleValue":0.0, "integerValue":0, "longValue":0, "name":"PORTS" }, { "type":"STRINGSET", "stringSetValue":[ ], "doubleValue":0.0, "integerValue":0, "longValue":0, "name":"PORTS_UDP" } ], "agentConnected":true, "pendingTasksCount":0, "registeredResources":[ { "type":"INTEGER", "doubleValue":0.0, "integerValue":1024, "longValue":0, "name":"CPU" }, { "type":"INTEGER", "doubleValue":0.0, "integerValue":995, "longValue":0, "name":"MEMORY" }, { "type":"STRINGSET", "stringSetValue":[ "22", "2376", "2375", "51678", "51679" ], "doubleValue":0.0, "integerValue":0, "longValue":0, "name":"PORTS" }, { "type":"STRINGSET", "stringSetValue":[ ], "doubleValue":0.0, "integerValue":0, "longValue":0, "name":"PORTS_UDP" } ], "containerInstanceArn":"arn:aws:ecs:us-west-1:435456556566:container-instance/3f28c319-u9n2-1476-3d2n-b7c254fv411", "attributes":[ { "name":"com.amazonaws.ecs.capability.privileged-container" }, { "name":"com.amazonaws.ecs.capability.docker-remote-api.1.17" }, { "name":"com.amazonaws.ecs.capability.docker-remote-api.1.18" }, { "name":"com.amazonaws.ecs.capability.docker-remote-api.1.19" }, { "name":"com.amazonaws.ecs.capability.docker-remote-api.1.20" }, { "name":"com.amazonaws.ecs.capability.docker-remote-api.1.21" }, { "name":"com.amazonaws.ecs.capability.docker-remote-api.1.22" }, { "name":"com.amazonaws.ecs.capability.logging-driver.json-file" }, { "name":"com.amazonaws.ecs.capability.logging-driver.syslog" }, { "name":"com.amazonaws.ecs.capability.logging-driver.awslogs" }, { "name":"com.amazonaws.ecs.capability.ecr-auth" }, { "name":"com.amazonaws.ecs.capability.task-iam-role" }, { "name":"com.amazonaws.ecs.capability.task-iam-role-network-host" } ], "status":"ACTIVE", "version":1 } }, "requestID":"ae86b372-ab77-11e6-824c-c7c4220f0423", "eventID":"ff9fc985-1fbe-4717-965b-607dda32f620", "eventType":"AwsApiCall", "recipientAccountId":"435456556566" }
クエリのサンプル
過去に削除されたリソース
_sourceCategory=ecs* (DeleteCluster or DeleteService or DeregisterContainerInstance or DeregisterTaskDefinition or StopTask) and !(InternalFailure)
| json "eventName" as event_name
| parse "\"userName\":\"*\"" as user
| parse "\"awsRegion\":\"*\"" as region
| parse "\"cluster\":\"*\"" as cluster
| timeslice 1h
| parse regex field=event_name "^(?:Delete|Deregister|Stop)(?<resource_type>[A-Z][A-Za-z]+)"
| count by resource_type, _timeslice
| transpose row _timeslice column resource_type