logの出力がちょっと厄介だったのでシェル芸で何とかしてみた。
text形式で吐き出せるものlogすべてに応用は効くと思います。
目次
1.使いどころ
2.準備
3.解析に使うコマンド
4.シェルを使うメリット
使いどころ
「何かトラブルが起きたようです!ログを解析してください!」
network engineerの皆さんならこんなオンコールがよく飛んでくるでしょう。
筐体からlogを出力して~、Windowsのclientに落として~、Excelやスプレットで~…
frieze…
ひどいときはメモ帳でもfriezeしちゃいますよね
不要なログを削ってどうにか開くようになった~…
改行…、連続するスペース…、紛れ込む「"」
固まるピボットやフィルタ
network engineerだからアプリとかbuildしないから低スぺでいいよね!
ざこざこPCを支給されている…
いやになっちゃいますよね…
まずは準備
まずはUNIXの環境にログデータを放りこみます。
僕はWindows10のWSLで「Ubuntu 20.04.5 LTS」を動かしてます。
cat 20221101.log |sed -e 's/"/ /g' | sed -e 's/ \+/ /g' | awk -F'[ ]' ' {print $0 }'
sed:文字列を全置換したり、削除したりしてくれる
#「"」を消す
sed -e 's/"/ /g'
#連続した空白を消す
sed -e 's/ \+/ /g'
awk:読み込んだデータを配列に格納して整理してくれる
#「 」を区切りにして配列に格納する $0はすべて出力
awk -F'[ ]' ' {print $0 }'
データの読み込み完了、データが配列に格納された状態になったで解析フェーズへ
解析フェーズ
配列に格納されたデータを検索
#配列 $19に格納されいるデータで「」に一致したものをすべて出力
cat 20221101.log |sed -e 's/"/ /g' | sed -e 's/ \+/ /g' | | awk -F'[ ]' ' {if ($19 == "dstip=1.1.1.1" ){print $0 }}'
#結果をソートして集計
cat 20221101.log |sed -e 's/"/ /g' | sed -e 's/ \+/ /g' | awk -F'[ ]' ' {print $1" "$3" "$7" "$8 }' | sort | uniq -c
こんな感じでawkのifでフィルタを作るイメージでデータ集計をしています。
正規表現をもっといい感じでやるとシュッとしたシェルになると思いますが、まずは動いて結果がでればいいのです。
シェルを使うメリット
1.Windosのアプリに比べて大きなデータを高速に処理できる
かなり大きめのデータの検索と調査も安定して行うことができる
10GBを越えるお化けみたいなログファイルもさくさくノーストレスで解析できる。
2.Unixコマンドを絡めて使えるので、自由度は無限大
今回利用したコマンドはunixで使ったコマンドのほんの一部、たくさんのコマンドがあります。
Excelのフィルタやピボットに比べて詳細に解析が可能です。
3.ある程度のスペックPCでも安定動く
Intel(R) i5-8265U,メモリ8Gとちょっと頼りないスペック
Windowsの他に、Ubuntuも立ち上がっている状態ではありますが
friezeなどは起きない
あとがき
今回はnetwork engineerがunixでログ解析してみました。
fortigateならfortianalyzer買えよという声が聞こえてきそうですが…
緊急度が高いときはありもので何とかしないといけないことが多し、network以外にも調べないといけない。
自分のスキルでやりたいことができると大きな武器になると思います。
環境
Fortigate 200E
Windows10
Ubuntu 20.04.5 LTS
参考文献
「1日1問、半年以内に習得 シェル・ワンライナー160本ノック」を読んでみて解析スピードが段違いに!?
WSLのやり方については別途解説しようかな…?