ログ分析で使うLinux関連コマンドについて
現在ハニーポットを運用してログをみたりして色々調べたりしております。
んで、なるべくKibanaのWebコンソールに頼らずにログファイルをみているのですが、やっぱりかなりみにくいですね。
JSONだと、まぁ見やすいといえば見やすいですが。。。
というわけで、あまり業務としてもやっていないログ分析を行う上でのログ整形技術を身につけるべく、Linuxのコマンド(おもにawk)との戦闘を開始しました。
ログ分析で主に使用するコマンドとオプション
まずは、ログ分析で活用されるコマンドをまとめてみようと思います。
- awk(テキスト処理に強いプログラミング言語、ではあるがまぁシェル芸人御用達コマンドですね)
- sed, tr(文字列置換)
- grep(文字列探索)
- sort, uniq(出力の整形)
- jq(女子クォー生コマンド by USP友の会)
基本的に、bashなどのシェルで使われるコマンドとawkがあればたいていのことはできると思います。
ただ、他のコマンドを使ってやるとその方が加工が早くなるなどのメリットがあるので、使い分けは必要かと。
また、jqはJSONファイルを対象としているコマンドとなります。デフォルトでは入っていないので別途インストールが必要になります。
とまぁ、こんな感じですが、私自身もコマンドを使いこなせているかと言われれば全くと胸を張って言えてしまうため、まずはawkの基本を覚えようかと。
awkの基本
一番今後使っていくであろうコマンドについて。
まずはコマンドの基本形をちゃんと覚えておきましょう。
awk 'pattern {action} pattern {action} ......'
- patternだけあってもいいし、actionだけあってもいい
- デフォルトの区切り文字は空白
例として、カンマで区切られた項目のうち1番目の項目をランキングする
<コマンド>
awk -F, '{print $1}' | sort | uniq -c | sort -nr
上のコマンドについて説明をば。
- -Fで「この区切り文字で各行の値を分割する」という意味。今回はカンマを指定
- '{print $1}'で画面出力を行う。$Xで分割した値のうち何番目を表示するかを選択。今回は1番目
- | sort | uniq -c | sort -nrで重複排除、同じ値をカウント、カウント数による降順ランキングを生成
特に"|sort | uniq -c | sort -nr"の一連のコマンドについてはログ分析では非常に使う機会が多いと思うので、覚えておいて損はないと思う。
で、このコマンドはログ分析における基本中の基本コマンドになると思われるのでは、と。あとは、表示したい項目をもう少し綺麗に整形したりするためにもう少しコマンドやオプションを使っていくというようになる。
で、こんな感じのログ分析に使えるコマンド関連については以下の書籍を参考にしました。
awk実践入門
https://www.amazon.co.jp/AWK%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80-%E4%B8%AD%E5%B3%B6%E9%9B%85%E5%BC%98-ebook/dp/B00YA3VS2C/ref=pd_sim_351_2?_encoding=UTF8&psc=1&refRID=7B28BMQKAWSD8T1S804S
そして、一番勉強になるのはシェル芸勉強会の資料です。
ぶっちゃけ上の本読むより、シェル芸勉強会の資料とtwitterの投稿を見た方が勉強になります。
変態的なコマンドもありますが、「こんな風に書くこともできるんだー!」と感動します。
昨日も勉強会があり、その資料が初心者向けであったので、ぜひこれは読むべきかと。。
ぶっちゃけアセンブリ見ている方が私にとっては精神衛生上いいようですw