ログ解析環境についてなんとなく書いてみる

ふとログ解析環境についてなんとなく書いてみたくなったので書いてみる。

データサイエンティストブームなるものがあると思いますが、データサイエンティストって言ったときに、Hadoop/Hiveあたりを使ってデータをきれいに整理して分析しやすいように加工するデータエンジニア(某氏が命名)と加工されたデータを使って分析するアナリストの2種類いると思うんですよね。両方できればもちろん良いんですけどさすがにそれは難しいので分業が必要です。ただアナリストもHadoopの運用ができる必要性は低いと思いますがSQLは書けた方が良いとは思います。

ちなみに僕は仕事でログ解析周りを担当しており現状はアナリストではなくデータエンジニアですね。

KPIというか統計値は毎日レポーティングする仕組みは既にあるのですが新しい統計値を知りたいという要望もちょいちょいあります。

最近は自社サービスも安定して運用されているので統計周りもそれなりに関心を集めているようです。

ぶっちゃけ本サービスの方が不安定だったら統計どころじゃないと思いますのでそういう意味では今は良いフェーズだと思います。

ログ解析の作業内容としては以下のようなものがあげられると思います。

  • データ収集
  • ETL
  • レポーティング
  • データ分析

データ収集っていうのは例えばFluentdでApacheなどのアクセスログを収集することを言います。

ETLは収集したログをHadoopに突っ込んでHiveで解析できるようにするまでのフェーズを言います。Hadoop/Hiveとは限らないでしょうけどスケールするのはHadoopなのでHadoopにしときます。

レポーティングはBIツールとかでデータをビジュアライズすることを言います。

データ分析は集計もしくは機会学習などの高度な統計解析を行ってデータを分析して施策を検討、実行することを言います。ちなみに僕は今までログ解析周りで機会学習などの高度な統計解析を行ってる人と仕事したことは無いですね。

レポーティングとかデータ分析が花形っぽい気がしますが、ログ解析の作業の大半はデータ収集とETLという泥臭い作業になります。
データ分析も高度な統計的技法よりもまずは単純な集計とあとはデータを見る目やビジネスセンスが重要になってくると思います。

FluentdなりFlumeなりでログをHadoopに集めてHiveでETLまわして最後にMySQLに集計結果を格納してレポーティングしてデータ分析するっているのは割とよくあるパターンだと思うし僕も似たようなことやってます。


こういう状況のもと企画やマーケティングから新機能の効果を知りたいのでこれこれこういう統計値を知りたいというリクエストがあったとします。

こういう場合に一番ネックになるのは統計値を取るためにはどのデータを見ればいいのか調べることです。あるページのPVを知るためにはどのログのどれを見ればいいのか?ある機能にチェックをつけているユニークユーザを知るためにはどのストレージのどの項目を見ればいいのか?などを調べることがファーストステップになります。

すでに知っているデータ項目だったら大丈夫ですが、そうでないことも多いです。その場合は知ってそうな人、つまりアプリを書いた人に聞きます。アプリ書いた人も遠い記憶の彼方だったりするのでその人がソースを読んで教えてくれたりするのですが、こっちもある程度アプリのソースを読む必要があります。モデルの各項目がそのままRDBMSに格納されているとかだったらまだ分かりやすいのですが、JavaでいうMap的なものに値が格納されているケースもあります。

このデータの意味を理解するという部分はツールでどうにかなるものではないのでなかなか工数減らすのが難しい部分ですね。データ分析において一番理想的なのは統計値知りたい人が自分で調べることだと思うのですが、仮に企画の人がHiveQL書けたとしてもデータの意味を理解するのはまた別の話なのでここが一番ネックなのかなと思ってます。

とはいえ統計値知りたい人が自分で調べられるような環境を整備することが僕のひとつのゴールなのかなと思っています。難しいですが。。。

データの意味を理解したらあとはクエリ書いて統計値を出します。この部分は複雑なクエリでない場合はそんなに時間かからないです。

TSVファイルとかで集計結果を出力して終わりだったらもう作業は終了なのですが、日々集計してその推移をグラフでみたいとなるとバッチをちゃんと書いてデータをレポーティングツールにくわせることになります。僕の場合はレポーティングツールが独自の内製ソフトで割と便利なのですが、それでも画面追加はちょっと面倒です。この辺は有償のBIツールだとええ感じに画面追加出来るんでしょうか。。。

ちなみに僕はBIツール使ったこと無いです。かっちょいい画面が出てきたりiPadでも使えまっせ的なデモは見たことあるんですけど使っている人の運用とかどんな感じなんでしょうね。

個人的にはBIツールからHadoopというかHiveに直接つなぐっていうのはないような気がしています。

や、BIツールからHiveにJDBCでつなぐのって出来ることは出来ると思うんですよ。でもHiveのMapReduceジョブは実行時間かかるし、HiveServer不安定だし、Huahin Manager とか使わないとジョブの進捗状況わからんし、とかなるとアドホックにHiveQL投げたいならshibでいいのではという気がしています。

BIツールからつなぐのはRDBMSもしくはお金あるならNetezzaのようなDWHなのかなと。

図にするとこんな感じ

こういう構成にしてあとはいかに運用コストを下げていくかが重要なのかなと思っています。

その意味でいうとこの構成にHBaseが入るのはちょっと微妙かもしれません。

や、実は僕のところの環境では諸事情があって分析環境にHBaseがいるのですがHiveとの連携も一苦労だしHBaseの運用もなかなか大変です。

他の人がどういう環境なのか結構興味ありますが、どんなふうにやってるんでしょうねえ。