はじめに

json形式のログの値を取り出しアラートを発報させたいといったケースにおいて、jsonの解析に時間がかかる(解析のための正規表現が分からない)。

というような方向けに、New RelicのUIからjson解析が簡単に行える機能が用意されています。
今回は、その手順とNRQLへの組み込み方について説明する記事とさせていただきます。

なお、今回はAWS CloudTrailに出力されるEC2「i-0265f4ec1141ce0d9」のStartInstancesログを対象としています。
EventBridgeやFirehoseの設定については省きます。

以下はStartInstancesのサンプルログです。

{
    "eventVersion": "1.10",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "ABCDEFGHIJKL:masaki@sample.com",
        "arn": "arn:aws:sts::1234567890:assumed-role/sample-admin/masaki@sample.com",
        "accountId": "1234567890",
        "accessKeyId": "NMOPQRSTUVWXYZ",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "ABCDEFGHIJKL",
                "arn": "arn:aws:iam::1234567890:role/sample-admin",
                "accountId": "1234567890",
                "userName": "sample-admin"
            },
            "attributes": {
                "creationDate": "2024-09-03T07:41:56Z",
                "mfaAuthenticated": "false"
            }
        }
    },
    "eventTime": "2024-09-03T07:45:23Z",
    "eventSource": "ec2.amazonaws.com",
    "eventName": "StartInstances",
    "awsRegion": "ap-northeast-1",
    "sourceIPAddress": "123.456.789.012",
    "userAgent": "Mozilla-xxx-Safari",
    "requestParameters": {
        "instancesSet": {
            "items": [
                {
                    "instanceId": "i-abcdefghijkl"
                }
            ]
        }
    },
    "responseElements": {
        "requestId": "1234567890abcdefjhijkl",
        "instancesSet": {
            "items": [
                {
                    "instanceId": "i-abcdefghijkl",
                    "currentState": {
                        "code": 0,
                        "name": "pending"
                    },
                    "previousState": {
                        "code": 80,
                        "name": "stopped"
                    }
                }
            ]
        }
    },
    "requestID": "1234567890abcdefjhijkl",
    "eventID": "abcdefg",
    "readOnly": false,
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "1234567890",
    "eventCategory": "Management",
    "tlsDetails": {
        "tlsVersion": "TLSv1.2",
        "cipherSuite": "ECDHE-RSA-AES128-GCM-SHA256",
        "clientProvidedHostHeader": "ec2.ap-northeast-1.amazonaws.com"
    },
    "sessionCredentialFromConsole": "true"
}

New Relicコンソール上での任意のログ値取得手順

1 Logsで対象のログを表示し、任意のログ値から「Create query time parsing rule」を実施

2 Parseする値を選択

3 「Query」を選択

4 「Query Your Data」でカウントできるように修正

さいごに

UIから直接ログを解析可能な便利な機能がNew Relicに用意されているので、ログ解析のための正規表現が苦手な方や初めてログ解析される方はこちらの機能を活用すると良いかと思います。
お疲れ様でした。

参考:https://docs.newrelic.com/jp/docs/logs/ui-data/query-time-parsing/