[アップデート] CloudWatch Contributor Insights が一般利用可能になりました

既に Cloudwatch Logs にあるログ分析にはお手軽ですね!ただし、なんでもかんでも分析できるモノではない。
2020.04.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

先日のアップデートで CloudWatch Contributor Insights が一般利用可能(GA)になりました。

CloudWatch Contributor Insights とは

2019年11月にプレビューとして発表された CloudWatch Contributor Insights によって、システムパフォーマンスに影響しているコントリビューターを CloudWatch Logs 上の時系列データから容易に分析することが出来ます。

従来であれば、CloudWatch Logs から Lambda や Kinesis に連携し、JSON ではないテキストであればカスタムフィールドを付与したり、集計処理をしたうえで CloudWatch のカスタムメトリクスに送る、というような作り込みをしていたかと思いますが、これらが CloudWatch Contributor Insights だけで完結できます。

対応リージョン

すべてのリージョンで利用可能です

料金

  • 1 ルールあたり $0.5/月
  • ルールにマッチした 100 万ログインベントリあたり $0.03/月

やってみる

CloudWatch 管理コンソールから Contributor Insights を開き、Create rule をクリックします。新規作成画面になりますので、まずは Sample rule をベースに作成するのが簡単で良いでしょう。プルダウンメニューからどのような分析を行いたいかを選択します。

今回は VPC Flow Logs - Traffic by Source Address and Action を選択しましたが、その他にも以下のようなサンプルルールがあります。

API Gateway

  • Faults by Router and HTTP Method (JSON)
  • Faults by Router and HTTP Method (CLF)
  • User Errors by Route and HTTP Method (JSON)
  • User Errors by Route and HTTP Method (CLF)
  • Faults by IP (JSON)
  • Faults by IP (CLF)
  • User Errors by IP (JSON)
  • User Errors by IP (CLF)
  • Calls by Route and HTTP Method (JSON)
  • Calls by Route and HTTP Method (CLF)
  • Calls by IP (JSON)
  • Calls by IP (CLF)
  • Top Callers by Uesr Errors (JSON)
  • Top Callers by Uesr Errors (CLF)

Route 53 Query Logs

  • Requests by Query Name
  • Requests by Query Name and Edge Location
  • Requests by Query Name, EdgeLocation and ResponsCode
  • Failuers by Query Name, EdgeLocation and ResponsCode
  • Failuers by Query Name

Container Insights Logs - Amazon EKS & Kubernetes

  • Errors by Kubernetes Host
  • Top Host and Container by Errors
  • Container Last Termination Status
  • Top Performance Types
  • Network TX Bytes by Container Type
  • Network RX Bytes by Container Type

Container Insights Logs - Amazon ECS

  • Network RX Errors by Container id
  • Network TX Errors by Container id

VPC Flow Logs

  • Bytes Transfers by source and Destination IP Address
  • Top HTTP Packkets By Destination Address
  • Top Sources by Rejected TCP Connections
  • Traffic by Source Address and Action
  • Traffic by Source Address and Rejected Action

サンプルルールを指定しますと、自動的に Log format や Fields , Contribution が入力されています。サンプルをそのまま利用する場合は、ユーザーが指定するのは Log group(s) のみです。

注意

プレフィックス一致による複数選択を利用する場合は、不要なロググループが含まれないように気をつけてください。CloudWatch Contributor Insights は、ルールに一致する各ログイベントに対して料金が発生することをお忘れなく。


フィルターを利用することで対象を限定することが出来ます。CLF の場合は Fields でマッピングしていないものを Match で指定することは出来ません。以下のようなエラーになります。


今回は宛先ポートを Redshift (default: 5439) に絞り込んでみました。VPC Flow Logs のログフォーマット を確認すると dstport が 7 番目となっていますので、そのように指定します。


ちなみに、JSON の場合はキーを指定するだけです。


Aggregate on では単純にレコードの総数を集計する COUNT か、指定したフィールドの合計を集計する SUM のいずれかになります。


すべてを指定して Create を実行すると、このように簡単に集計、グラフの描画が出来ます!


Actions - View in metrics から、この CloudWatch Contributor Insights の結果に対してメトリクスを付けて、CloudWatch アラーム に登録することも可能です。

JSON

今回はウィザードで作成しましたが、JSON で指定することも可能です。

{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "LogGroupNames": [
        "/aws/vpc/cm-test-vpc"
    ],
    "LogFormat": "CLF",
    "Fields": {
        "4": "srcaddr",
        "7": "dstport",
        "13": "action"
    },
    "Contribution": {
        "Keys": [
            "srcaddr",
            "action"
        ],
        "Filters": [
            {
                "Match": "dstport",
                "EqualTo": 5439
            }
        ]
    },
    "AggregateOn": "Count"
}

さいごに

CloudWatch Contributor Insights を使ってみた感想としては、非常に簡単!

一方で、あくまでコントリビューターの分析であるため、利用できるのは COUNTSUM のみとなっており、利用できるフィルターもシンプルです。

既に CloudWatch Logs にログがあるならば CloudWatch Contributor Insights で簡易分析するのには重宝しそうですが、高度な分析や、いま CloudWatch Logs にログがないのであれば、従来どおり Kinesis や Lambda を使った分析が良いかと思います。 (CloudWatch Logs の取り込みには $0.76/GB 掛かりますので)

以上!大阪オフィスの丸毛(@marumo1981)でした!