Top takeaways
New Relic Oneにて提供しているLogsによって、みなさまの環境のログを一元的に管理することが可能です。こちらによって、いちいち対象のサーバーにリモートログインして、ログファイルを漁るという作業を行わないで済むので、みなさまの日々の運用を効率化することができます。
日々の運用の中で、問題が発生しているであろう箇所をある程度絞り込んで、複数のサーバを回りながら、大量にあるログファイルから特定のログラインを特定する作業は、楽しいものではないですよね?New Relic OneのひとつのUIの中で、既にログが集められれて、そのUI上でログラインを絞るという作業ができれば、どれだけ運用負荷を下げることができるかは、実際に試されたことがある方であれば、その簡易さに無くてはならない機能になるかと思います。
一方で、さまざまなログを一元的に集約していくと、UI上でログラインのグループ分けをしたいという、ご要望がでてくるのではないかと思います。インフラのログ、アプリのログ、別監視ツールのログなど、単一UI上でそれぞれの情報を効率的に運用に活用できると更なる利便性を得ることができます。
実は、Logsの中で、この用にログラインをグループ分けするData Partitionsという機能を提供しています。この機能を活用して、ログラインをより効果的に管理して頂けますと幸いです。
以下に、Data Partitionsの利用方法について記載させて頂きます。
Logsへのアクセス方法について
New Relic Oneにアクセス頂き、画面上部のメニューからLogsをクリックすることで、Logs UIが表示されます。
Logs UIにアクセス頂くことで、ログラインを参照することができます。この際に、画面上部でログに対してクエリを掛ける文字列を指定することができます。(以下のUI部分に、任意の文字列を指定し、Query logsのボタンをクリックしてください。)
例えば、以下の使い方ができます。
- errorという文字列だったり、fatalといった文字列をそのまま記載することで、ログライン内に該当の文字列を含むものを抽出する
- "属性名":"値"という記載を行うことで、指定カラム名が特定の値を持っているという条件を設定し、該当ログラインを抽出する
- "属性名":-"値"という記載を行い、該当ログラインを除外して抽出する
- (さまざまなログソースを利用していると、ソース毎に持っている属性カラムが異なってしまう状況が発生することも多々ありますが、その場合には、) has:"属性名"という記載を行うことで、指定した属性名のみを含むログラインだけを抽出する
これらの条件は、&にて条件を繋げていくことも可能です。詳細については、上記UIで表示されるポップアップを参照頂けると、より状況に即した記載方法のヒントをご確認頂けます。
Data partitionsの設定画面へのアクセス方法について
Logs UIの左ペインにLogsのメニューが表示されます。左ペインにて、Data partitionsをクリックします。
クリックすると、Manage data partitioningのUIがスライドして表示されますので、右上にあるCreate partition ruleのボタンをクリックします。
ボタンをクリックすると、partitionを設定するUIが表示されます。
以下の点に従って、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が作成された例になります。)
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
この様な運用をされていた場合、例えばFROM句では、新たなpartition名を指定する必要があります。(以下のスクリーンショットの例は、Log_testというpartitionを作成している場合の例になります。)
もし、両方のpartitionを指定したい場合には、カンマを利用して複数のpartition名を指定することができます。
SELECT count(*) FROM Log, Log_test SINCE 1 day ago TIMESERIES 5 minute
この方法を利用して、複数に分けたpartitionを1つのクエリ上で可視化することができますね。単一のpartitionのみに対してクエリを掛けたいのであれば、適切なpartition名になっているかを確認し、必要であれば更新を行ってください。
次のステップ
如何だったでしょうか?LogsのData Partitionを活用して、より柔軟に、かつ、効果的にログラインの管理を実現することができれば幸いでございます。
全体を改めてまとめると、
- Logsの機能により、一元的なログラインの管理を行える
- Data Partition機能により、ログラインをグループ分けして保管することができる
- 保管したログラインに対してクエリを掛ける場合、partition名にきをつける
になります。この点を踏まえて、適切なログラインを分けることで、日々のログ管理の煩わしさを減らしていくことができますね。また、ここまで整理整頓できてくると、ログの可視化もスムーズに行うことができますので、高速に流れていくログの文字列を目視するという苦行から、数値化したりグラフ化することで、より変化を把握するという運用への容易に切り替えていける環境が整ってきますね。
今後、収集したログをグラフ化するためのトピックをお届けできればと思います。次回以降のblog postをお待ち頂けますと幸いです。
本ブログに掲載されている見解は著者に所属するものであり、必ずしも New Relic 株式会社の公式見解であるわけではありません。また、本ブログには、外部サイトにアクセスするリンクが含まれる場合があります。それらリンク先の内容について、New Relic がいかなる保証も提供することはありません。