[アップデート]Amazon CloudWatch Metric Streamのコンソールで、New Relicなどの製品に対して、データ連携可能なクイックセットアップがサポートされました

2023.10.20

はじめに

Amazon CloudWatch Metric Streamのコンソール上で、5つのサードパーティ製品を対象に、メトリクスを送信するクイックセットアップがサポートされました。

CloudWatch Metric Streamのコンソール上で、「サードパーティ製品」「宛先のURL」「APIキー」を指定すると連携が可能です。

セットアップすると、Kinesis Data FirehoseやS3バケット、IAM ロールが自動作成されます。

対象の製品は以下の5つです。

  • Datadog
  • Dynatrace
  • New Relic
  • Splunk Observability Cloud
  • SumoLogic

今回は、New Relicを利用して、アップデートのセットアップを試してみます。

ちなみに、CloudWatch メトリクスをNew Relicに送信する場合、以下の対応が必要でした。

アップデートによって、CloudWatch メトリクスをNew Relicに送信する手順がどのように変わったか確認します。

アップデートに合わせて、ドキュメントも更新されていたので、下記のドキュメントを元に進めます。

前提

  • New Relicのアカウント作成済み

New RelicでAPIキー発行

New Relicのコンソール上でAPIキーを発行します。

キータイプは、Ingest - LicenseでAPIキーを発行し、キーをコピーしておきます

IAMロールの作成まで行う

下記の手順通り、Step1からStep5を対応する必要がありました。

New Relic側でStep5に進み、New Relic側で一意となるAWSアカウント名と、IAMロールのARNを入力します。

Step6のNew Relicに連携するためのCloudFormationのテンプレートは、使用しませんのでダウンロードする必要はありません。

メトリクスストリームの作成

[メトリクスストリームの作成]から、Quick Amazon Web Services Partner setupを選択し、製品にはNew Relicを指定します。

HTTP エンドポイントURLを選択し、先程発行したAPIキーを貼り付けます。

ちなみに、セットアップでサポートされていない5つの製品以外に対して、連携させたい場合、Custom setup with Firehoseを選択します。

続いてNew Relicに送信するメトリクスを選択します。

全て送ることもできますし、特定のメトリクスのみ選択もしくは除外することも可能です。

対象のメトリクスの数が増えるほど、コストも高くなるため、注意しましょう。今回は、全て送るようにしました。

あとは、メトリクスストリーム名を作成するだけです。

メトリクスストリームに対して一意の名前が自動的に生成されてますが、カスタマイズも可能です。

最後に、アカウントで自動作成される各リソースと名前が確認できます。

ちなみに、各製品によって、Kinesis Data Firehose設定は、異なります。先程紹介したAWSドキュメントに、製品ごとの設定値が記載されていますので、ご確認ください。

また、上記の図の赤枠で囲っている箇所では、CloudFormationのテンプレートとしてダウンロードすることもできました。

AWSTemplateFormatVersion: '2010-09-09'
Description: New Relic CloudWatch Metric Stream
Parameters:
  AccessKey:
    Description: Your New Relic API Key
    Type: String
    NoEcho: true
    AllowedPattern: ^.{1,4096}$
    ConstraintDescription: The API key can have up to 4096 characters.
Resources:
  FirehoseToS3Role:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - firehose.amazonaws.com
            Action:
              - sts:AssumeRole
      Path: /
      Policies:
        - PolicyName: newRelic_metric_stream_s3_policy
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action:
                  - s3:AbortMultipartUpload
                  - s3:GetBucketLocation
                  - s3:GetObject
                  - s3:ListBucket
                  - s3:ListBucketMultipartUploads
                  - s3:PutObject
                Resource:
                  - Fn::Sub: $arn:aws:s3:::${StreamBackupBucket}/*
                  - Fn::Sub: $arn:aws:s3:::${StreamBackupBucket}
  MetricStreamToFirehoseRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - streams.metrics.cloudwatch.amazonaws.com
            Action:
              - sts:AssumeRole
      Path: /
      Policies:
        - PolicyName: newRelic_stream_firehose_policy
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action:
                  - firehose:PutRecord
                  - firehose:PutRecordBatch
                Resource:
                  - Fn::Sub: ${MetricKinesisFirehose.Arn}
  StreamBackupBucket:
    Type: AWS::S3::Bucket
  MetricKinesisFirehose:
    Type: AWS::KinesisFirehose::DeliveryStream
    Properties:
      DeliveryStreamName: ExternalFull-RLC-1mHMrn
      DeliveryStreamType: DirectPut
      HttpEndpointDestinationConfiguration:
        BufferingHints:
          IntervalInSeconds: 60
          SizeInMBs: 1
        EndpointConfiguration:
          Name: New Relic
          Url: https://aws-api.newrelic.com/cloudwatch-metrics/v1
          AccessKey:
            Ref: AccessKey
        RequestConfiguration:
          ContentEncoding: GZIP
        RetryOptions:
          DurationInSeconds: 60
        S3BackupMode: FailedDataOnly
        S3Configuration:
          RoleARN:
            Fn::GetAtt:
              - FirehoseToS3Role
              - Arn
          BucketARN:
            Fn::GetAtt:
              - StreamBackupBucket
              - Arn
          ErrorOutputPrefix: newRelic_stream
          BufferingHints:
            IntervalInSeconds: 60
            SizeInMBs: 1
          CompressionFormat: GZIP
  MetricStream:
    Type: AWS::CloudWatch::MetricStream
    Properties:
      Name: ExternalFull-RLC-1mHMrn
      OutputFormat: opentelemetry0.7
      StatisticsConfigurations:
        - IncludeMetrics:
            - Namespace: AWS/EC2
              MetricName: CPUUtilization
          AdditionalStatistics:
            - p99
      IncludeFilters: []
      ExcludeFilters: []
      IncludeLinkedAccountsMetrics: false
      FirehoseArn:
        Fn::GetAtt:
          - MetricKinesisFirehose
          - Arn
      RoleArn:
        Fn::GetAtt:
          - MetricStreamToFirehoseRole
          - Arn

作成後、すこし時間をおくと、CloudWatch メトリクスがNew Relicに連携し、New Relic側でメトリクスを確認できるようになりました。

最後に

今回のアップデートでは、CloudWatch Metric Streamのコンソール上で、5つのサードパーティ製品を対象にメトリクスを送信するセットアップができるようになりました。

New Relicのデータ連携方法は、従来のCloudFormationでスタック作成から、CloudWatch Metric Streamのコンソール上で作成に変わった点のみです。

New Relicの場合、元々CloudFormationのテンプレートが用意されており、連携の作業の負荷が低かったため、今回のアップデートの恩恵はあまり感じられませんでした。

他のサードパーティ製品だと恩恵をより感じる可能性がありますので、機会があれば試してみたいと思います。

参考