本記事は New Relic 使ってみた情報をシェアしよう! by New Relic Advent Calendar 2023 シリーズ2 18日目の記事です。
はじめに
CloudWatch cross-account observability でモニタリングアカウントに集めた CloudWatch メトリクスを NewRelic へ転送したとき、
NewRelic 側ではどの AWS アカウントから転送されたメトリクスだと判別されるのか、
もしかしたら全部モニタリングアカウントのメトリクスと集約されてしまうのでは?と思い、
気になったため実際にやってみました。
結論
NewRelic に取り込まれたメトリクスの Dimension には、
- ソースアカウントのメトリクスには、ソースアカウントの AWS アカウント ID
- モニタリングアカウントのメトリクスには、モニタリングアカウントの AWS アカウント ID
が付与されていました。
(Dimensions の aws.accountID の箇所に、モニタリングアカウントとソースアカウントの AWS アカウント ID がそれぞれ入っていました)
やってみました
構成
- ソースアカウントとモニタリングアカウントで1つずつ AWS アカウントを用意しました
- NewRelic へのメトリクス連携は CloudWatch Metric Streams 統合 を利用しました
設定・確認
モニタリングアカウント側の設定
- 手順 5. の、連携するデータの選択では [メトリクス] を選択する
- terraform でやる場合は以下
resource "aws_oam_sink" "this" {
name = "foo"
}
resource "aws_oam_sink_policy" "this" {
sink_identifier = aws_oam_sink.this.id
policy = data.aws_iam_policy_document.oam.json
}
data "aws_iam_policy_document" "oam" {
statement {
effect = "Allow"
principals {
identifiers = [
<ソースアカウントの AWS アカウント ID>
]
type = "AWS"
}
actions = ["oam:CreateLink", "oam:UpdateLink"]
resources = ["*"]
condition {
test = "ForAllValues:StringEquals"
variable = "oam:ResourceTypes"
values = ["AWS::CloudWatch::Metric"]
}
}
}
ソースアカウント側の設定
- 手順 3. の、連携するデータの選択では [メトリクス] を選択する
- terraform でやる場合は以下
resource "aws_oam_link" "this" {
label_template = "$AccountName"
resource_types = ["AWS::CloudWatch::Metric"]
sink_identifier = <前手順で作成した aws_oam_sink.this の arn>
}
モニタリングアカウントおよび NewRelic アカウントで CloudWatch Metric Streams 統合を構成
- AWS 側には CloudWatch Metric Stream や Kinesis Firehose などメトリクス転送に必要なリソース等を作成
- NewRelic 側には対象の AWS アカウントとリンクする設定を実施
- [Infrastructure] -> [AWS] の画面で "Set up Amazon Web Services integrations through the UI. " のリンクから、ガイド付きセットアップを実施可能
- 上記リソースの作成をまとめて terraform でやる場合はこちらの module を利用可能
確認
上記の設定が完了したら、NewRelic にデータ連携が出来ていることを確認する
NewRelic の [Infrastructure] -> [AWS] の画面で、真ん中上部あたりのプルダウンリストで metric stream のものを選択し、
同画面の右部あたり Account status dashboard をクリックして以下の画面に遷移する
Metrics が 0 でなければ、メトリクスが連携されている
次に NewRelic の [Query Your Data] -> [Data explorer] -> [Metrics] の画面で、左側の Metric の一覧から CloudWatch のメトリクス(aws. で始まるもの)を選択し(画像では aws.ec2.CPUUtilization)、
Metric 一覧の下部にある Dimensions を開いて id でフィルタリングすると以下のように、メトリクスに付与された AWS アカウント ID (aws.accountID)を確認できる
おわりに
CloudWatch Metric Stream では取得できないメトリクス もいくつかあるため、注意が必要です。
それらについては、API Polling でのメトリクス取得が必要になりそうです。
以上、簡単な内容ではありましたが、お読みいただきありがとうございました。