LogsのData Partitionを使って、ログデータの整理整頓をしてみよう

所要時間:約 10分
Logs UI in NR1 with a storm of log lines

Great feature of Log Management with Logs in NR1 platform. So, to use it much more effectively, it's much better to arrange and clean up the up-coming log lines within Logs.

以下に、Data Partitionsの利用方法について記載させて頂きます。

Logsへのアクセス方法について

New Relic Oneにアクセス頂き、画面上部のメニューからLogsをクリックすることで、Logs UIが表示されます。

Logs menu in NR1 Main menus

Logs UIにアクセス頂くことで、ログラインを参照することができます。この際に、画面上部でログに対してクエリを掛ける文字列を指定することができます。(以下のUI部分に、任意の文字列を指定し、Query logsのボタンをクリックしてください。)

Logs - What to query with

例えば、以下の使い方ができます。

  • errorという文字列だったり、fatalといった文字列をそのまま記載することで、ログライン内に該当の文字列を含むものを抽出する
  • "属性名":"値"という記載を行うことで、指定カラム名が特定の値を持っているという条件を設定し、該当ログラインを抽出する
  • "属性名":-"値"という記載を行い、該当ログラインを除外して抽出する
  • (さまざまなログソースを利用していると、ソース毎に持っている属性カラムが異なってしまう状況が発生することも多々ありますが、その場合には、) has:"属性名"という記載を行うことで、指定した属性名のみを含むログラインだけを抽出する

これらの条件は、&にて条件を繋げていくことも可能です。詳細については、上記UIで表示されるポップアップを参照頂けると、より状況に即した記載方法のヒントをご確認頂けます。

Data partitionsの設定画面へのアクセス方法について

Logs UIの左ペインにLogsのメニューが表示されます。左ペインにて、Data partitionsをクリックします。

Logs Menu in Left Pane - small

クリックすると、Manage data partitioningのUIがスライドして表示されますので、右上にあるCreate partition ruleのボタンをクリックします。

Manage Data Partitioning UI

ボタンをクリックすると、partitionを設定するUIが表示されます。

Conditions To partition Log Lines

 以下の点に従って、partition設定を行ってください。

  • Partition Name: "Log_XXXX"というみなさまの環境で一意の名前を指定してください。後ほど触れますが、Logsのログラインに対して NRQLというクエリを適用する際に指定するFROM句で利用します。
  • Select the required retention for this partition: standardとsecondaryから選択します。
    • standard: (こちらを選択頂ければ、運用上問題はないかと思い破れます。) 契約上設定されているLogsのデータ保持期間が適用されます。
    • secondary: New Relicがデフォルトで持っている30日の保持期間が設定されます。保持期間は、standard >= secondaryという関係になります。
  • Description: 設定されているpartitionの説明を記載してください。先のUIのManage data partitioning UIで表示されます。管理しやすい表記にすると良いかと思います。(日本語の入力ができることを確認できました。)
  • Attribute: 任意の属性名を記載します。
  • Matching Criteria: EQUALSとLIKEから選択することができます。EQUALSは、AttributeとValueがイコールの関係の場合に利用し、LIKEは、Attributeの値がValueの文字列パターンに当てはまる場合に利用します。
  • Value: 先ほど指定していた属性名(Attribute)に対して、期待している値(Matching CriteriaがEQUALSの場合)、あるいは、期待している文字列パターン(Matching CriteriaがLIKEの場合)を記載します。
    • 利用例#1: New Relic Infrastructureが送ってくるログを指定したい場合、Attribute: agentName, Matching Criteria: EQUALS, Value: Infrastructureと指定します。
    • 利用例#2: hostという属性名にログを生成させるFQDNが設定されるような場合に、Attribute: host, Matching Criteria: LIKE, Value: .hogehoge.comと指定することで、www.hogehoge.comやabc.hogehoge.comといったFQDNのログのみを指定することができます。
  • Enable Rule: トグルスイッチを右側に移動させて、設定した条件を有効化します。

上記の設定を行い、左下のCreateボタンをクリックしてPartitionの条件を作成します。

作成するとLogs UIに戻りますので、左ペインの一番下にあるSelect partitionsをクリックし、当該partitionが作成されたことを確認してください。(以下のスクリーンショットは、Log_testが作成された例になります。)

checks to select partitions - small

Data partitionが作成された時点から、ログラインを受け取った際に条件に合致するものは、自動で作成されたpartitionにログラインが保管されていきます。

運用上のヒント

  • 上記のLog_testの例では、該当するログラインはLog_testに保管され、Logには保管されない
  • Select partitions内でチェックを入れたpartitionに保管されたログラインのみが、Logs UIに表示される(チェックはいつでも変更可能)
  • Manage data partitioning UIからpartitionの削除処理を行うことができるが、ログの保有期間は削除されず、かつ、削除対象のpartitionに保管されているログライン自体も削除の対象となる(一旦、特定のpartitionに保管されたログラインを他のpartitionに移すことはできない)
  • Logから新しいpartitionにログラインを保管する場合、LogsのデータをクエリするためのFROM句で指定するテーブル名(New Relic用語で、Logs Event名)を変更する必要があります

保管したデータをクエリして可視化する際の注意点

例えば、単位時間当たりにどれだけのログライン数が発生しているかを監視することで、突然ログライン数が急増した(e.g. 謎の大量のアクセスが行われている)場合や、ログライン数の急激な減少した(e.g. 何かしらの理由でサービスを提供できなくなり、エンドユーザのリクエストが届かなくなった)場合などを気づくことができます。(実際の運用であれば、WHERE句でより厳しい条件設定を行うようご検討ください。)

その際に、New Relic One上では、以下のようなクエリ(NRQL)を設定しておくことでリクエスト数の推移を可視化することができます。

SELECT count(*) FROM Log SINCE 1 day ago TIMESERIES 5 minutes

QueryBuilder for default Log Event

この様な運用をされていた場合、例えばFROM句では、新たなpartition名を指定する必要があります。(以下のスクリーンショットの例は、Log_testというpartitionを作成している場合の例になります。)

Logs Event Name in QueryBuilder

 もし、両方のpartitionを指定したい場合には、カンマを利用して複数のpartition名を指定することができます。

SELECT count(*) FROM Log, Log_test SINCE 1 day ago TIMESERIES 5 minute

Multi Logs Event Names with NRQL in QueryBuilder

この方法を利用して、複数に分けたpartitionを1つのクエリ上で可視化することができますね。単一のpartitionのみに対してクエリを掛けたいのであれば、適切なpartition名になっているかを確認し、必要であれば更新を行ってください。