4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LogをNew Relicに移しても、今まで通りgrepもしたいのよ

Posted at

New Relic用grepコマンド

はじめに

大量のログを保存して瞬時に検索が出来たり、ダッシュボードを作成してログから抽出した様々なメトリックスを可視化出来るようなサービスがいろいろあります。
そんなサービスのひとつ、New Relicを触る機会がありました。

大量のログを入れてみましたが、検索はめちゃめちゃ高速です。
対象のサーバーにログインして、対象の日付のログファイルを探して、grepして・・・なんてしなくても、全てのログをまとめて検索できてしまいます。

しかし、便利なのですが、うーん、Webのかっこいい画面で検索してログを見るのも、ま、いいのはいいのですが、やっぱり、コンソールでgrepをパイプでつないでごにょごにょしたいのです。

ということで、New Relicにため込んだログをgrepするコマンドを作りました。
題して、nrgrep (ヌルグレップ)です。

ソースから見たい人はこちらです。

インストール

Pythonで書いたので、PyPIに置いておきました。

pipでインストールできます。

pip install newrelic-grep

事前準備

APIを使用するので、USERのAPI KEYとアカウントIDが必要です。
それぞれを取得して、環境変数に入れておきます。
.bash_profileなどに書いておくといいでしょう。
New Relicは1週間しか使っておらず、お作法がよくわからないので、とりあえず、NR_API_KEYNR_ACCOUNT_IDにしました。

export NR_API_KEY=NRAK-4KCST5......
export NR_ACCOUNT_ID=1234567

という感じです。

使い方

基本的な使い方

grepコマンドのような雰囲気で使えます。
logindを含むログを検索してみます。

nrgrep logind
結果
Mar 15 22:01:36 ns1 systemd-logind: New session c55 of user root.
Mar 15 22:01:36 ns1 systemd-logind: Removed session c55.
Mar 15 22:20:49 ns1 systemd-logind: New session 16952719 of user root.

おお、いい感じです。

期間の指定

デフォルトでは3日前から検索するようにしてありますが、期間も指定できます。

2023年3月15日 22:15:00~2023年3月15日 22:25:00の間で検索してみましょう。

nrgrep --since 20230315221500 --until 20230315222500 logind
結果
Mar 15 22:20:49 ns1 systemd-logind: New session 16952719 of user root.

絞り込むことが出来ました。

秒まで書くのも面倒なので、省略して月日のみや月日時などでも検索できます。

nrgrep --since 2023031522 --until 2023031523 logind

のようにした場合、2023/3/15 22:00~23:00の間で検索します。

行数の指定

デフォルトでは全て抽出するようになっていますが-lオプションで取り出す行数を指定できます。

nrgrep -l 2 logind

正規表現での検索

-eオプションを付けることで、正規表現で検索できます。

nrgrep -e 'Started.*Getty'
結果
Mar 15 22:08:32 ns1 systemd: Started Console Getty.
Mar 15 22:08:32 ns1 systemd: Started Getty on tty2.
Mar 15 23:08:33 ns1 systemd: Started Getty on tty2.
Mar 15 23:08:33 ns1 systemd: Started Console Getty.

Attributeの表示

New Relicでは自動、または、ルールを作成することで、ログの中の有益な情報をAttributeと呼ばれるものに切り出すことができます。
このAttribute情報をログの左側に表示します。
-aオプションでAttribute名を指定します。
複数記述することが可能です。

logというキーワードで検索し、logtypetimestampというAttributeを表示してみます。

nrgrep -a logtype -a timestamp log
結果
newrelic-cli:1678885235732:Log installation completed
newrelic-cli:1678885236973:Done executing and validating with progress for recipe name logs-integration.
linux_messages:1678885296242:Mar 15 22:01:36 ns1 systemd-logind: New session c55 of user root.
linux_messages:1678885296257:Mar 15 22:01:36 ns1 systemd-logind: Removed session c55.
linux_messages:1678886449540:Mar 15 22:20:49 ns1 systemd-logind: New session 16952719 of user root.

logtypeとしてnewrelic-clilinux_messagesが表示されました。また、その横にtimestampが表示されています。

Attributeで検索

Attributeで検索することも出来ます。
-qオプションでAttribute名:抽出する値という形式で指定します。
複数指定した場合はAND検索されます。

ここでは、logというキーワードで、logtypelinux_messagesのものを検索します。

nrgrep -a logtype -a timestamp -q logtype:linux_messages log
結果
linux_messages:1678885296242:Mar 15 22:01:36 ns1 systemd-logind: New session c55 of user root.
linux_messages:1678885296257:Mar 15 22:01:36 ns1 systemd-logind: Removed session c55.
linux_messages:1678886449540:Mar 15 22:20:49 ns1 systemd-logind: New session 16952719 of user root.

応用編

おしゃれなGUIではなくいつも通りのgrepコマンドと変わらないはずなので、パイプでつないだり今までのノウハウがそのまま生かせます。

logというキーワードで検索してlogtypeの種類毎に結果の行数を集計して多い順に並べてみましょう。

nrgrep -a logtype log | awk -F: '{print $1}' | sort | uniq -c | sort -nr
結果
 69 linux_messages
 14 newrelic-cli

いい感じです。

まとめ

New Relicにログを保存するのは便利なのですが、今まで通りgrepは使いたい。
そんな方向けのコマンドの紹介でした。

ソースも公開していますので、フォークして都合のいいように改造するもよし、改造したソースをプルリクしていただくのも歓迎です。

それでは、楽しいログライフを。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?