AWS Cloudwatch貢献者洞察.便利ですか.



貢献者洞察でログをチェックしてください
右!それで、我々はログを持っています.我々はCloudWatchログの洞察を使用してクエリをすることができます、我々はCloudWatchログを介してそれを観察することができますし、我々は今、多くの、多くのことを行うことができます.最後に、我々はそれらを持っている!
AWSは我々に貢献者洞察と呼ばれるもう一つのツールを与えます.このサービスは、ログを分析し、時系列を作成し、このデータを表示するために使用できます.それはかなり強力です!

CloudWatchサービス、寄稿者の洞察に移動します.クリックCreate rule . ドロップダウンでLog group(s) 私たちのAPIのログを選択します.初めて選択しますSample rule , API Gateway and Calls by route and HTTP method (CLF) . 実際には、JSONまたはCLF(この場合)を選択する場合は問題ではありません.

そのままの構成を保ってください.
Log format: CLF (or JSON if you selected it earlier)  
Contribution: ip  
Aggregation: Count
クリックNext ルール名を指定します.私の名前はAPIGW_byCount .
アフター・クリックCreate rule , 任意のデータを参照するには数分(AWS主張5)を待つ必要があります.

これは分析と集約を構築します.画面では4つの異なるIPSを見ます( IPSですか?
上の例は自動生成されます.
我々がカスタムのものをつくることができるならば、見ましょう.
エディタに移動Syntax 画面をテキストエディタに変更します.

この例は次のようになります.
{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "LogGroupNames": [
        "API-Gateway-Execution-Logs_9fcv1s573l/Prod"
    ],
    "LogFormat": "JSON",
    "Contribution": {
        "Keys": [
            "$.ip"
        ],
        "Filters": []
    },
    "AggregateOn": "Count"
}
ここでは、クエリを使用して再生を開始することができます.

我々が問うものを視覚化しましょう
我々の仕事を視覚化する時間です.クリックActions , View in CloudWatch Metrics と選択Unique contributors .

時間内に私は別のIPSからいくつかのより多くの要求を受け、下に視覚化を見ることができます.


役に立つようにしましょう
まあ我々が今見るものはそうです.ではなく、本当に便利?正しい.この視覚化は、IPSについてではありません.それは多くの要素のいくつかのミックスです.何か知ってる?これは忘れなさい.それを正しくしましょう.
私たちがする必要があるのは、AWSによって提供されたサンプルの仕事であり、それらを書き換えるか、または私たち自身を作成することです.または、これが我々がすることです、我々はAPIが生成しているログを書き直します.まあ、我々はとにかくそれを行う必要があります.
よろしい.APIサービスに行って、適切なAPIを選びましょうStages , Prod を選択し、Logs/Tracing タブ.

クリックEnable Access Logging , 使用Insert Example JSON用.デフォルトのログ(実際にデフォルトのデフォルトログとは異なる)を持ちます.以下の例のようにもう一つのフィールドを加えましょう.
{ "requestId":"$context.requestId", "ip": "$context.identity.sourceIp", "caller":"$context.identity.caller", "user":"$context.identity.user","requestTime":"$context.requestTime", "httpMethod":"$context.httpMethod","resourcePath":"$context.resourcePath", "status":"$context.status","protocol":"$context.protocol", "responseLength":"$context.responseLength","traceId":"$context.xrayTraceId" }
文字列の最後にtraceId フィールド.
私も少し修正Log Destination ARN ログ間の振る舞いを区別するために.それはあなたのために読みやすくなります.
では、ルールの構文は以下のようになります.
{
    "AggregateOn": "Count",
    "Contribution": {
        "Filters": [],
        "Keys": [
            "$.ip"
        ]
    },
    "LogFormat": "JSON",
    "LogGroupNames": [
        "API-Gateway-Execution-Logs_9fcv1s573l"
    ],
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    }
}
また、適切な(新しいものを使用してください!)ロググループ(覚えて、あなたのものは私のものとは異なります!)
まず第一に、あなたは全く別のログを見ることができます.より短く、より明確に構造化.

そして、それは貢献者洞察にどのように見えますか?まあ、すごい!


SAMテンプレート
テンプレートを変更する時です.
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
Description: simple Lambda

Resources:
  accessLogGroup:
    Type: AWS::Logs::LogGroup

  lambdaDemoApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: Prod
      Description: 'Prod stage'
      TracingEnabled: true
      MethodSettings:
      - HttpMethod: '*'
        LoggingLevel: INFO
        ResourcePath: '/*'
        MetricsEnabled: true
        DataTraceEnabled: true
      AccessLogSetting:
        DestinationArn: !GetAtt accessLogGroup.Arn
        Format: >-
          '{ "requestId":"$context.requestId", 
          "ip": "$context.identity.sourceIp", 
          "caller":"$context.identity.caller", 
          "user":"$context.identity.user", 
          "requestTime":"$context.requestTime", 
          "httpMethod":"$context.httpMethod", 
          "resourcePath":"$context.resourcePath", 
          "status":"$context.status", 
          "protocol":"$context.protocol", 
          "responseLength":"$context.responseLength", 
          "traceId":"$context.xrayTraceId" }'

  lambdaFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: simplefunction.handler
      CodeUri: lambdafunction/
      Runtime: python3.8
      Policies:
        - CloudWatchLambdaInsightsExecutionRolePolicy
      AutoPublishAlias: live
      Description: Simple demo function
      MemorySize: 128
      Timeout: 10
      Tracing: Active
      Layers:
        - !Sub "arn:aws:lambda:${AWS::Region}:580247275435:layer:LambdaInsightsExtension:14"
      Events:
        simpleApi:
          Type: Api
          Properties:
            RestApiId: 
              !Ref lambdaDemoApi
            Path: /
            Method: get
ご覧の通り、一つのリソースを追加しました.AccessLogGroup and AccessLogSettings のプロパティでlambdaDemoApi .
今、あなたは夢中になることができます.APIのログを構築し、それを視覚化する多くの可能性があります.今すぐ知っています:)
カバーイメージHebi B. からPixabay