AWS SDK for PHP를 사용하여 CloudWatch 지표 및 CloudWatchLogs 로그 보내기

AWS SDK for PHP를 사용하여 CloudWatch 메트릭과 CloudWatchLog에 로그를 보냈을 때의 메모입니다.

환경


  • PHP 5.6
  • AWS SDK for PHP version 3.77

  • AIM 권한



    Amazon CloudWatch 권한 참조을 참조하여 필요한 권한을 부여합니다.

    이번에는 강한 권한이 붙어 있었기 때문에 생략했습니다만, 이것들이 필요하다고 생각합니다.
  • 지표
  • cloudwatch:PutMetricData

  • 로그
  • logs:DescribeLogStreams
  • logs:PutLogEvents

  • 로그(필요한 경우)
  • logs:CreateLogGroup
  • logs:CreateLogStream
  • logs:DescribeLogGroups


  • 로그는 htps : // / cs. 아 ws. 아마존. 이 m / 그럼 _ jp / 아마 존 C ぉ 우도 tch / ぁ st / ぉ gs / 쿠이 ckS 터 C2 엥 s 단세. html # c ぉ 우도 t ch ぉ gs_이 m_로 _p

    구현



    메트릭은 CloudWatchClient::PutMetricData(array) 이고 로그는 CloudWatchLogs:: putLogEvents(array) 보냅니다.

    다만, 각자 생각해야 할 일이 있습니다.

    지표의 차원은 무엇입니까?


    PutMetricData 의 Parameter Syntax 에 있는 Dimensions 가 수수께끼 파라미터였습니다.
    $result = $client->putMetricData([
        'MetricData' => [ // REQUIRED
            [
                'Counts' => [<float>, ...],
                'Dimensions' => [
                    [
                        'Name' => '<string>', // REQUIRED
                        'Value' => '<string>', // REQUIRED
                    ],
                    // ...
                ],
                'MetricName' => '<string>', // REQUIRED
                'StatisticValues' => [
                    'Maximum' => <float>, // REQUIRED
                    'Minimum' => <float>, // REQUIRED
                    'SampleCount' => <float>, // REQUIRED
                    'Sum' => <float>, // REQUIRED
                ],
                'StorageResolution' => <integer>,
                'Timestamp' => <integer || string || DateTime>,
                'Unit' => 'Seconds|Microseconds|Milliseconds|Bytes|Kilobytes|Megabytes|Gigabytes|Terabytes|Bits|Kilobits|Megabits|Gigabits|Terabits|Percent|Count|Bytes/Second|Kilobytes/Second|Megabytes/Second|Gigabytes/Second|Terabytes/Second|Bits/Second|Kilobits/Second|Megabits/Second|Gigabits/Second|Terabits/Second|Count/Second|None',
                'Value' => <float>,
                'Values' => [<float>, ...],
            ],
            // ...
        ],
        'Namespace' => '<string>', // REQUIRED
    ]);
    

    CloudWatch의 지표를 선택할 때 공간 다음에 선택한 사람이 지표 이름의 왼쪽에 표시됩니다.

    RDS의 차원에서 "DbClusterIdentifier, EngineName"을 선택하면 아래와 같이 표시되고 빨간색 테두리로 둘러싸인 부분이 차원입니다.


    이 경우 VolumeBytesUsed의 값을 전달할 때 Dimensions를 아래와 같이 지정합니다.
    'Dimensions' => [
        ['Name' => 'DbClusterIdentifier', 'Value' => rdsのクラスターメ名],
        ['Name' => 'EngineName', 'Value' => 'aurora' ]
    ]
    

    CloudWatchLogs의 putLogEvents 매개 변수 sequenceToken



    API 레퍼런스에 쓰여진 대로, 로그 스트림이 비었을 때 이외는 지정하지 않으면 안됩니다.
    비어 있지 않은 경우는, 이전의 putLogEvents 의 반환값으로부터 sequenceToken 를 얻어, 다음번의 파라미터에 이용합니다.

    You must include the sequence token obtained from the response of the previous call. An upload in a newly created log stream does not require a sequence token. You can also get the sequence token using DescribeLogStreams. If you call PutLogEvents twice using the same value for sequenceToken, both calls may be successful, or one may be rejected.

    htps : // / cs. 아 ws. 아마존. m / a ws-sdk-php / v3 / api / api-gs-2014-03-28. html # 푸 t ㄉ ゔ

    처리로서는 아래와 같습니다.
  • describeLogStreams 로 로그 스트림 정보를 가져옵니다. 얻은 경우에는 uploadSequenceToken를 삼가한다.
  • putLogEvenssequenceToken 에 1. 에서 얻어진 uploadSequenceToken 를 설정한다. 얻지 못한 경우는 설정하지 않는다.
  • putLogEvens 가 성공하면, 반환값의 연상 배열로부터 nextSequenceToken 를 취득한다.
  • 다음의 putLogEvenssequenceToken 에는 3. 의 nextSequenceToken 를 지정한다.
  • putLogEvens 가 성공하면, 반환값의 연상 배열로부터 nextSequenceToken 를 취득한다.

  • 그리고는, 4와 5의 반복.

    이를 지키지 않으면 putLogEvents에서 InvalidSequenceTokenException가 발생합니다.
    InvalidSequenceTokenException (client): The given sequenceToken is invalid. The next expected sequenceToken is: 49590143729088555375190966164052711632594785739741365618
    

    이것은 깨달을 때까지 의미가없는 오류였습니다.

    좋은 웹페이지 즐겨찾기