ログ イベントにはタイムスタンプ属性が残され、特定のイベントが発生した正確な瞬間がわかります。タイムスタンプを使用すると、特定の時間枠のログを検索して、イベントがいつ何が起こったかを知ることができるため、イベントの順序付けには重要です。
タイムスタンプには多くの形式があり、単一の標準はありません。ほとんどの場合、これらはログ イベントの先頭に表示されますが、ログのかなり後から表示されたり、まったく表示されない場合もあります。
- ログが
timestamp属性とともに送信された場合、またはログからtimestamp属性が解析された場合、New Relic はそのタイムスタンプをログに使用します。 - JSON ログが
timestampフィールドとともに送信される場合、New Relic は JSON フィールドをプロパティとして抽出するときにそのタイムスタンプを使用し、既存のtimestampプロパティよりも優先されます。 timestampが送信されない場合、New Relic はログの取り込み時間をタイムスタンプとして使用します。
ほとんどのログフォワーダーはログ ソースからタイムスタンプ情報を渡すため、自分でタイムスタンプを指定する必要はない場合があります。
重要
一部のログフォワーダーは、 @timestampや@realtime_timestampなどの内部タイムスタンプ フィールドを使用します。 New Relic はこれらのフィールドを認識しますが、顧客が使用すべきではありません。 ログのタイムスタンプを送信するには、 timestamp属性を使用してください。
サポートされているログのタイムスタンプ形式
デフォルトの動作を手動でオーバーライドしてログに含まれるtimestamp値を割り当てるには、2 つのオプションがあります。
- サポートされている時間形式のいずれかで
timestamp属性を含むJSON 形式のログを受信した場合、取り込みタイムスタンプはオーバーライドされます。代わりに、JSON 属性のタイムスタンプ値が使用されます。 - 解析ルールを使用して、取り込み
timestamp値をオーバーライドできます。解析ルールを使用すると、データを抽出して、サポートされている形式のいずれかでタイムスタンプをフォーマットできます。datetimeGrok タイプとpatternを使用して、ログ内のカスタム タイムスタンプ形式を定義することもできます。
次の 2 つのタイムスタンプ形式がサポートされています。
JSON ログでサポートされているタイムスタンプ
timestamp属性を持つ JSON 形式のログを受信した場合、デフォルトの取り込み値timestampを元の JSON 値でオーバーライドします。タイムスタンプ フィールドがない場合、またはフィールドの形式が正しくない場合、ログは取り込みタイムスタンプとともに保存されます。48 時間より古いタイムスタンプを持つペイロードはドロップされることに注意してください。
タイムスタンプは Unix エポック ミリ秒に変換され、予約キーワードtimestampを使用して Long データ型として内部的に保存されます。JSON 本文の形式に応じて、タイムスタンプ フィールドは 4 つの異なる場所に割り当てることができます。
- 単一の JSON オブジェクトを送信する場合の、JSON 本文メッセージの簡略化された一連の属性の内部。
- 1 つ以上の JSON オブジェクトを送信するときの、JSON 本文メッセージの詳細な属性セット内の共通オブジェクト内。タイムスタンプは、この JSON のすべてのログ メッセージに適用されます。
- 1 つ以上の JSON オブジェクトを送信するときの、JSON 本文メッセージの詳細な属性セットのログオブジェクト内の各ログ メッセージ内。タイムスタンプはそのログ メッセージにのみ適用されます。
- 有効な JSON メッセージの場合は、「message」JSON フィールド内。 機能は、あらゆるメッセージ属性を JSON として解析します。 解析されたメッセージ内の結果の JSON 属性がログに追加されます。
以下は、取り込みtimestampをオーバーライドする有効なtimestamp属性を持つ JSON ログの例です。
解析ルールを使用してログのタイムスタンプを設定する
取り込み時に解析ルールを使用して、ログに含まれる値で取り込みtimestampをオーバーライドできます。解析ルールは、単純な Grok 式を使用するか、 datetime Grok タイプとpatternを使用してログ内のカスタム タイムスタンプ形式を定義することにより、サポートされている時刻形式を抽出します。
式によって抽出された属性名はtimestampである必要があり、そのデータ型は文字列または Long である必要があります。データ型が指定されていない場合、タイムスタンプはデフォルトの文字列になります。マイクロ秒またはナノ秒の精度のエポック タイムスタンプの場合、タイムスタンプの精度がミリ秒に短縮される場合でも、 longデータ型を含める必要があります。
ログ内のタイムスタンプが Unix エポックまたは ISO8601 形式のタイムスタンプの場合は、デフォルトの Grok パターンを使用してそれらに一致させることができます。例えば:
- Unix エポック タイムスタンプを抽出するには、
NUMBER、NOTSPACE、DATA、またはGREEDYDATAなど、値に一致する任意の式を使用できます。 - ISO8601 形式のタイムスタンプを抽出するには、
TIMESTAMP_ISO8601Grok 式を使用する必要があります。
datetime Grok タイプを使用すると、サポートされていない形式のタイムスタンプを解析できます。これを行うには、ログのタイムスタンプ形式と一致するpatternを持つdatetime Grok タイプを含める必要があります。patternは、ここにある Java の単純な日付と時刻のパターンを使用する必要があります。以下は、Grok 式がサポートされていないタイムスタンプ形式をサポートされている形式に変換する方法を示す例です。
|
| グロク式 |
|---|---|---|
2023/11/17 23:55:25.674 | MM/dd/yyyy HH:mm:ss.SSS |
|
2023-11-17 23:55:25 | MM-dd-yyyy HH:mm:ss |
|
2023/11/17 09:55:25 AM | MM/dd/yyyy h:mm:ss a |
|
以下は、取り込み解析ルールを使用してログからtimestampを解析する方法の例です。