# stern と jq のあいまに jl どうぞ {{tag: jl, perl, log, stern, jq}} pod のログは stern で読んでいる人が多いと思います。私は `stern pods -o json` していることが多いです。 JSON でログを出すとあれこれするのに jq に突っ込みたくなるのが人情だと思います。 fluentd の出力なんかもそうなんですが、JSON in JSON なログに悩まされるのが第一歩ですね。そこで {{cpan: jl}} というコマンドを少し前に書いたのですが、このたび JSON in JSON の解決だけじゃなくて、JSONログを閲覧するのにいい感じな機能をだいたい盛り込みまくり終わったのでお知らせします。 この記事のタイトルの通り、stern と jq のあいまに {{cpan: jl}} を挟むことで、あなたの人生が変わります。 $ stern somepods -o json | jl -xxxx | jq . [[https://github.com/bayashi/App-jl/blob/master/README.pod README]] にざっとどんな感じか書いてありますが、以下のようなことをします。 * JSON in JSON は再帰的にハッシュに展開 * タブか改行を分割してリストに展開 * `[INFO]` みたいなラベルのような括弧書きをリストに展開 * unixtimestamp のようなものを local datetime に変換(gmtimeもできる) 便利! 何がおいしいかというと、長い文字列を読むより構造化されている方が人間にも見た目でわかりやすいというのと、jq なんかでハンドリングしやすい点。例えばログレベルで集計したりするのにログレベルが個別の要素になっていると楽。 もちろんそういう操作は jq 単独であったり他のコマンドを駆使してできるのだけど、一般的なログの場合、そもそもログ文字列の構造がいろいろ不定だったりしてつらい場面が多いけど、jl なら何も考えなくてもあっさり勝てる。jq の中でパイプしているほど人生は長くない。 そんなわけでさんざん JSON JSONと言っておきながら、human readableという路線では出力を yaml にしてしまうこともできたりします。クオーテーションマークが気に入らない人とか YAML の方がすっきり見やすいかもしれない(あと処理しにくいけど)。だらだらログ流しておくには YAML がおすすめ。 {{cpan: App::jl}}