タダです.
New Relic Logs の parse rule
を検証する機会があり,備忘録としてこの記事にまとめていきます.
parse rule
とは
parse rule
は New Relic に取り込んだログを構造化し,検索性を上げる機能です.ログの構造化には Grok が使われており,自分は ruby のサンプルとデバッガを使っていきました.New Relic にそのままのログを取り込んで使おうとすると見づらく扱いにくい場合や検索する時の検索しづらいことがあると思います.こう言った場合に parse rule
が生かされます.具体的に検証したログ例と parse rule
を適用した結果を見ていきましょう.
試したログと parse rule
について
試したログは以前の記事に書いた Rails のログを使います.ただし,JSON のログは JSON message is not parsed というドキュメントがあり,試しに構造化してみようとしましたが,後述する JSON 化する前のログと同様のことが難しかったです
試した Rails ログ
I, [2021-12-30T06:07:00.072382 #21473] INFO -- : {"method":"GET","path":"/","format":"html","controller":"Rails::WelcomeController","action":"index","status":200,"duration":11.43,"view":4.07,"db":0.0,"user_id":1,"sql_queries":"'User Load (3.87) SELECT \"users\".* FROM \"users\" WHERE \"users\".\"id\" = ? ORDER BY \"users\".\"id\" ASC LIMIT ?'","sql_queries_count":1}
試した parse rule
[?:DFEWI], \[%{TIMESTAMP_ISO8601:timestamp} #%{POSINT:pid}\] *%{LOGLEVEL:severity} -- : \{%{GREEDYDATA:detail}\}
parse rule を適用した結果
ログ詳細部分が detail
のカラムに構造化できましたが,各要素のカラムにすることまで到達できませんでした...
では,JSON にしていない下記のようなログはどう構造化できたのかをみていきます.
試した Rails ログ
I, [2021-12-31T03:16:07.407114 #13948] INFO -- : method=GET path=/ format=html controller=Rails::WelcomeController action=index status=200 duration=11.57 view=3.38 db=0.00 user_id=1 sql_queries='User Load (4.44) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ?' sql_queries_count=1
試した parse rule
[?:DFEWI], \[%{TIMESTAMP_ISO8601:timestamp} #%{POSINT:pid}\] *%{LOGLEVEL:severity} -- : (?:method=%{WORD:method}) (?:path=%{NOTSPACE:request}) (?:format=%{WORD:extention}) (?:controller=%{GREEDYDATA:controller}) (?:action=%{WORD:action}) (?:status=%{NUMBER:status}) (?:duration=%{NUMBER:duration}) (?:view=%{NUMBER:view}) (?:db=%{NUMBER:db}) (?:user_id=%{NUMBER:user_id})
parse rule を適用した結果
parse rule
で適用した method
,controller
,user_id
などをカラムに追加してログの中から抽出できました.
また,例えば user_id
を検索したいときも検索条件に加えて他の関連ログを収集できました.parse rule
を適用する前と比べて調査がやりやすくなったと思います.
まとめ
parse rule
を検証する機会があったのでやったことをまとめてみました.構造化できたログは扱いやすい形になったので,便利な機能だと思いました.