NewRelicのMetricsとEventsの特性とNRQLによるクエリ

newreliclog

NewRelicはテレメトリデータを、MELTと呼ばれる、 Metrics, Events, Logs, Tracesに分類している。 送られたデータは標準SQL-likeのNRQLで参照しダッシュボードに表示したりアラートの条件にすることができるが、データの種類によっては必要な値が得られないことがある。

Metrics

定期的に送られる集計値。集計値を持つことで転送量が抑えられ長期に渡るトレンドを追いやすくなるが、後で集計するための情報が失われてしまうというトレードオフがある。

dimensional metrics

集計値にリソースの情報といった任意のメタデータを付加したもの。typeには summary, count, gaugeなどが入り、それによって含まれるフィールドや使える集計関数が異なる。例えば、summaryの場合 min() や max(), average() などには対応しているが percentile() は出すことができない。

// SELECT `aws.elb.Latency` FROM Metric WHERE `aws.elb.Latency` IS NOT NULL
{"type":"summary","count":123,"sum":0.04,"min":0,"max":0.001}
...

// SELECT keyset() FROM Metric WHERE `aws.elb.Latency` IS NOT NULL
{
    "stringKeys": [
        "aws.Arn",
        "aws.MetricStreamArn",
        "aws.Namespace",
        "aws.accountId",
        "aws.elb.AvailabilityZone",
        "aws.elb.LoadBalancerName",
        "aws.elb.Service",
        "aws.elb.canonicalHostedZoneName",
        "aws.elb.canonicalHostedZoneNameId",
        "aws.elb.dnsName",
        "aws.elb.scheme",
        "aws.elb.vpcId",
        "aws.region",
        "collector.name",
        "displayName",
        ...
    ],
    "numericKeys": [
        "endTimestamp",
        "timestamp"
    ],
    "booleanKeys": [],
    "summaryKeys": [
        "aws.elb.Latency"
    ],
    ...
}

Events

APMのTransactionのような事象ごとのデータ。Metricsとは逆に転送量は大きくなるが様々な集計を行える。

// SELECT request.uri, totalTime FROM Transaction
{
    "events": [
        {
          "timestamp": 1654364052164,
          "request.uri": "/path",
          "totalTime": 0.000124612
        },
        ...
    ]
}

// SELECT percentile(totalTike, 95) FROM Transaction FACET request.uri
{
    "facets": [
      {
        "name": "/path",
        "results": [
          {
            "percentiles": {
              "95": 0.0000125
            }
          }
        ],
        "beginTimeSeconds": 0,
        "endTimeSeconds": 0
      },
      ...
    ]
}

summary() などの関数でMetricsに変換することができる。

// SELECT summary(totalTime) FROM Transaction WHERE request.uri = '/path'
{
    "count": 4073,
    "total": 314.2522969348,
    "min": 0.000018678,
    "max": 72.14054709
}

参考

Metrics, Events, Logs, Traces ってなんだ?