[Go言語]ハンズオンで学ぶログ解析ツール

こんにちは。KOUKIです。

今日は、ログ解析ツールをハンズオン形式で解説したいと思います。

ツールといっても簡単な奴ですが^^;

完成系イメージ

以下のようなログがあるとします。

これを読み込んで、次の形式で出力します。

作ってみよう!

データの読み込み

最初にログデータを読み込む機能を作ります。

読み込む方法はいくつかあると思いますが、今回は、bufioパッケージのNewScannerを使います。

bufio.NewScannerでterminalから送られたデータをインスタンス化しています。

実行結果は、以下の通りです。

取得データを加工する

次に取得データを加工してみましょう。

取得データをstrings.Fieldsに渡すと、stringのスライスに格納してくれます。

いい感じですね。

この読み込み処理はツールの肝なので、データが渡されなかった場合は、エラーを返すようにしましょう。

読み込みデータ数が2未満の場合は、エラーを返すようにしました。

いい感じでデータが取得できたので、domainとvisit数に分けてみましょう。

スライスには、[“earngoprogramming.com 10”]の形式でデータが格納されるのでインデックスアクセス(fields[0])ができるようです。

ドメインの統合

ログ上のドメインは重複している場合があります。

これを一つのドメインにするために、重複したドメインは統合しましょう。

sum変数は、ドメイン名とvisit数を保持するための変数です。これはMapでできています。

Mapは格納したデータの順番を保持しないので、順番を保持できるdomainsスライスを用意しています。(terminal上に出力する際、結果がバラバラになる)

実行してみましょう。

ログ解析結果の表示

次にログ解析結果を表示させましょう。

プログラムを実行してみましょう。

OKですね。

エラーハンドリング

ツール自体の作成は終わったのですが、最後にエラーハンドリングをしたものを載せておきます。

おわりに

いかがだったでしょうか。

ログの解析といっても簡単なツールでしたが、ところどころ難しく感じる場面もあったかと思います。

しかし、一つ一つ処理を分解していけば、プログラムの流れは簡単に把握できると思います。

それでは、また!

関連記事

オススメ書籍