膨大なログデータは、問題のトラブルシューティングに役立ちます。しかし、ログの属性に何千文字もの文字が含まれていたらどうでしょう?New Relic はこのようなデータをどれだけ保存できるのでしょうか?また、これらのデータの中から有益な情報を見つけるにはどうすればよいでしょうか?
blobの仕組み
NRDBに格納できる文字数(4,094文字)よりも長い文字列の値については、長い文字列を3つに分けて格納します。
ロングログセクション | 説明 |
---|---|
最初の4,094文字 | 最初の4,094文字は、同じ名前の |
次の128,000バイトのUTF-8 | 文字列の次の128,000UTF-8バイトは、名前の前に 実際に保存される文字数は、文字のUTF-8表現に依存します。UTF-8はUnicodeの文字を1〜4バイトで表現するので、最初の4,094文字を過ぎれば32,000〜128,000文字が格納されることになります。 |
残りのキャラクター | 4,094文字+128,000バイトを超えた文字はドロップされ、保存されません。 |
クエリの結果 | BLOB クエリの結果は 20 件に制限されています。 |
したがって、長いmessage
フィールドは次のように格納されます。
message: <first 4,094 characters as a string>newrelic.ext.message: <next 128,000 bytes as a 'blob'>
ヒント
文字列属性の最初の4,094文字を検索できます。最初の4,094文字のアラートを作成することもできます。ただし、 blob
ストレージは検索できないため、最初の4,094文字を超えるテキストは検索またはアラートできません。
ブロブに関するデータの検索
one.newrelic.com > All capabilities > Logs: ログ内の拡張 BLOB データをクエリするには、属性の BLOB 構文にバックティックを含めるようにしてください。
New Relic の任意のログデータを照会するには、以下のクエリを実行します。
SELECT * FROM Log
BLOBデータを展開するには、 message
またはその他の属性を使用して次のクエリを実行します。ブロブの属性は必ずバッククォートで囲んでください。例えば:
SELECT message, another-attribute, blob(`newrelic.ext.message`), blob(`newrelic.ext.another-attribute`) FROM Log
これにより、blob内のデータが拡張され、見ることができるようになります(検索はできません)。例えば、New Relicは次のように返します。
{ "message": <first 4,094 characters> "newrelic.ext.message": <the next 128,000 bytes as Base64> "another-attribute": <first 4,094 characters> "newrelic.ext.another-attribute": <the next 128,000 bytes as Base64>}
ログ UI は、ログ詳細ビューを表示すると、元の値を自動的につなぎ合わせます。NRQL を直接使用してクエリを実行する場合は、次の方法で情報を手動で結合する必要があります。
newrelic.ext.
属性値のBase64をデコードする- 結果のUTF-8を文字列に変換する
- その文字列を"main" 属性の最初の 4,094 文字に付加する。
ロングログのデータ保持
NRDBは、blobレコードを1か月間保持します。既存の長いログメッセージがLogExtendedRecord
として保存されている場合、そのデータはNRDBでも1か月間利用できます。
1か月が経過すると、新しいLogExtendedRecord
属性は作成されなくなります。それらはすべてブロブとしてNRDBに保存されます。