はじめに

この記事はMicroAd Advent Calendar 2017の4日目の記事です。

本稿では、4年目システムディレクターの僕がこれまでに「エンジニアだったら当たり前だけど、ディレクターも最低限これくらいはできるようにしておくと仕事捗るなあ」と思ったことを2点まとめていきます。

どこにどんなデータがあるのか把握すること

まずは、どこにどんなデータがあるのか把握することです。

僕の会社でもHadoopやMySQL、ElasticSearch、Redisなど、いろいろなデータソースがあります。僕はこれらからいろいろなデータを出せるようにしています。

結果、システム理解に大きくつながり、すごく捗っています。

実現可否の判断

例えば、ビジネス的にやりたいことがシステム的に実現可能か、実現できないなら何を追加開発すれば実現できるのか、おおよその開発項目、工程を大枠でイメージできるようになりました。

「あそこにあのログあるな。こっちにはこのログあるな。後はここにフラグつければ、判断処理追加して。。。イケる!」みたいな。

システムディレクターだとビジネスロジックの理解は深いと思うので、組み合わせると最強だと思います。

information_schemaのcolumnsテーブルを検索

MySQL限定ですが、こういうカラムがどっかにあるはずなのにテーブルやDBが多すぎて全部覗いていくのは骨が折れるという時に使えるクエリを紹介します。

カラム名に「_id」が含まれているカラムを持つテーブルを全DBから検索するSQLです。

use information_schema;
select column_name, table_schema, table_name from columns where column_name like "%\_id";

ログファイルを見ること

次はログファイルを見ることです。

サーバのログファイルを直接見れるようにしたら、仕事がだいぶ捗りました。

未加工の状態の方が嬉しい時もある

分析に使うログやビジネスロジックで使ったアプリログは、サーバの容量の制限や処理パフォーマンス等を考慮して情報が削られたり、丸められたりします。

そのため、新機能開発のための事前調査などで、「ちょっとここのデータの全体の割合が欲しい」「ここのデータをもう少し細かい粒度で、しかも今日分のものが急ぎで欲しい」という場合に、欲しい情報が十分な形で見られないケースが多いです。

このような場合は、データソースに入っていない未加工のログファイルを直接参照することで欲しい情報がをすぐに得られたりします。

僕は以下のlinuxコマンドを覚えるだけで容易に見れるようになりました。

コマンド ざっくり概要
ssh サーバにログインする。
cd /hoge/log /hoge/logディレクトリに移動する。
ls -la 今いるディレクトリのファイル、ディレクトリ一覧。
less hoge.log hoge.logを開く。ただし編集不可。圧縮済みファイルの中身を解凍せずに覗ける。
wc -l hoge.log hoge.logの行数を出力する。
grep 'abc' hoge.log hoge.logから'abc'という文字列が含まれる行だけを抽出する。

これに「 |(パイプ)」「*(アスタリスク)」を組み合わせたりして、未加工済みのログから欲しい情報を得ることができるようになりました。

例:apacheのaccessログで特定のUAをサンプリングしたい時

# ここではaccess.log.1の件数を見ています。
Udai928@wordpress:/var/log/apache2$ wc -l access.log.1
2099 access.log.1

# ここではaccess.log.1に文字列'Fire'が含まれている行を取り出し、「|」でwc -l をつなげて行数を見ています。
Udai928@wordpress:/var/log/apache2$ grep 'Fire' access.log.1 | wc -l
1

# 上記で1行あることがわかったので、中身を見てみました。
Udai928@wordpress:/var/log/apache2$ grep 'Fire' access.log.1
169.53.184.23 - - [01/Dec/2017:10:58:37 +0000] "GET / HTTP/1.0" 200 37036 "-" "Mozilla/5.0(WindowsNT6.1;rv:31.0)Gecko/20100101Firefox/31.0"

# UAがFireFoxのログは2099件中1件しか無いことがわかりました。

終わりに

本稿が「仕事が捗らないなあ。。。」とお思いの世のシステムディレクターのみなさんの参考に少しでもなれば幸いです。