私の戦闘力は53万です

awsとgcpについて書きます

CloudWatch Contributor Insightsを触ってみる

CloudWatch Contributor Insightsを触ってみる機会がありましたので、 備忘がてらブログに書きます。

機能概要

ドキュメントにも記載はありますが、もう少し噛み砕くと、
cloudwatch logsの特定箇所を抽出し、
トップN分析的に可視化することができます。
例えば下記をトップN分析的にランキング表示することが可能です。

  • VPCフローログで、送信元 IP アドレスおよび送信先 IP アドレスごとのバイト転送量を出力する
  • アプリログで、特定のエラーコードごとの機能IDを出力する
  • ECSのコンテナログで、アウトバウンド通信している先のIPをランキング的に出力する

下記で具体的に設定してみました。

表示項目の選定

CloudWatch Contributor Insightsでは、
logsからどの項目を抽出し表示するかを設定します。
(結果的には裏でJSONが作成されます)
そのJSONを作成することをルール作成と呼んでいます。

今回は下記を作成するとします。 https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/ContributorInsights-Rule-Examples.html
例:VPC フローログを元に、送信元 IP アドレスおよび送信先 IP アドレスごとのバイト転送 を出力する
VPCフローログは既に作成済みの前提です。

では設定画面を見ていきます。

f:id:remmemento:20200119225222p:plain
設定1

f:id:remmemento:20200119225242p:plain
設定2

上記設定をし、JSONをみると下記のようになっています。
※分かりやすくするためにコメント入れていますので、
設定原本は上記のドキュメントを参照ください。

{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "LogGroupNames": [
        "/aws/containerinsights/sample-cluster-name/flowlogs"
    ],
    "LogFormat": "CLF",
    "Fields": {
        "4": "srcaddr",#フィールドとしてTSV的に4番目の項目をsrcaddrとして扱う
        "5": "dstaddr",#フィールドとしてTSV的に5番目の項目をdstaddrとして扱う
        "10": "bytes"#フィールドとしてTSV的に10番目の項目をbytesとして扱う
    },
    "Contribution": {
        "Keys": [
            "srcaddr",#軸として利用する
            "dstaddr"#軸として利用する
        ],
        "ValueOf": "bytes",#AggregateOnがSumの場合に利用可。計算対象のフィールドがあれば指定する
        "Filters": []
    },
    "AggregateOn": "Sum"
}

設定値の意味

上記の設定ファイルの意味を書いていきます。

Contribution

Contributionではログから抽出したい項目を指定します。
今回は「送信元 IP アドレスおよび送信先 IP アドレスごとのバイト転送 」を
出力したいため、 関連要素となる下記を指定します。
送信元 IP アドレス:srcaddr
送信先 IP アドレス:dstaddr
バイト転送:bytes

上記の項目をどのように表示するかにより、
さらに下記に分けて記載します。

Contribution.Keys

分類するディメンションを指定します。
具体的には、最終アウトプットの下記を見ると分かりやすいと思います。
Contribution.Keysで指定された、項目ごとに分類がされています。
今回の例では、「送信元IP」、「送信先IP」(赤枠)ごとに分類がされています。

f:id:remmemento:20200119231223p:plain
output

Contribution.ValueOf

数値合計を算出する際、単に回数の合計でなく、
計算結果を表示させたい場合等に利用します。
今回の例では「bytes」を指定しており、
フロー中に転送されたバイト数の合計を算出しています。

Fields

Fieldsは、各項目のエイリアスを定義します。
今回の例ではVPCフローログの位置情報は
下記のVPCフローログのフォーマットを参照することで把握できます。
「srcaddr」が4つ目の位置に存在することが分かります。
そのため「srcaddr」を設定画面で「4」と指定しています。
ここでエイリアスを指定することで
srcaddrをContribution中でも記載可能になります。
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide//flow-logs.html

またその他の項目についてもcloudwatch insightで
検出されるフィールドが選択可能です。
参考でcloudwatch insightで検出されるフィールドを表示します。

f:id:remmemento:20200119225828p:plain
insight1
f:id:remmemento:20200119225850p:plain
insight2
例えば上記から「dstPort」等を利用することも可能です。

結果表示

上記のように設定し、ある程度時間が経過すると、
VPCフローログの結果が下記のように表示されていました。
(結構待たないと表示されませんでした。15分ぐらい)

f:id:remmemento:20200119232154p:plain
result
上記のようにログ中の特定項目を抜き出し、
トップN的に分析することが可能となります。
アプリログも分析できるようなので、例えば、エラーが出ている場合の
機能IDを早く知りたいとかのケースに役に立ちそうだと思いました。

他にも有益な用途で利用されている方が入れば教えて頂けますと幸いです。