初めての分析基盤構築 〜分析基盤って何？よく使われる製品まとめ〜

# 分析基盤って何？
アプリケーションログやセンサーデータ、アクセスログなどを解析することを目的としたシステムのことです。
私は基本的には普通のアプリケーションエンジニアなのですが、最近ウチのデータを使って何か出来ないか？
みたいな質問を受けることが多く、調査・実装を行って溜まった知見をここに記します。

この記事では分析の流れとよく使用されるクラウドサービスやソフトウェアを紹介します。

# 分析の流れ

分析基盤を構築する理由は様々ですが、データを集めて経営やマーケティングなどのビジネスの指針とすることが多いと思います。そのために必要な作業は大まかに分解すると以下のとおりです。

* データを集める
* データの解析をする
* 解析済みデータを保存する
* 解析済みデータを見える化する

では、ソフトウェアの紹介をする前に分析システムを構築する上でよく使われる用語と解析手法の大まかな分類・特徴を説明しようと思います。

### 1. 分析システムでよく使われる用語

* データレイク

様々なアプリケーションから吐き出されるログファイルなどの生データを貯めておくところ。

* ETL

Extract(抽出)/Transform(変換)/Load(搭載)の略語
目的となるデータを持っているサーバやファイルからデータを抽出し、変換して解析を行う場所(下記のデータウェアハウスであることが多い)へデータを登録する作業・処理のこと。

* データウェアハウス

データレイクやアプリケーション上のRDBなどからデータを取得し、扱いやすい状態で保存しておき、集計・解析を行うところ。高負荷であることからデータベースクラスタやそれに準じる製品であることが多い。

* データマート

組織の一部で使われる資料としての意味合いの強い集計済みデータを保存しておくところ。


* ダッシュボード

解析したデータをビジュアル化見える化するためのソフトウェア。

### 2. いろいろな解析の種類

解析の種類は色々ありますが、現状あるもの大まかに分けると3種類に大別できます。

#### 2-1. 集計(記述統計)

  単純な合計値やカウントなどによる集計。一番簡単かつ解析の結果もわかりやすい。

#### 2-2. 統計解析(推測統計)

回帰分析やクラスタリングなどの未来を推測するための統計。ある程度統計もしくは数学を理解している人がいないと構築が難しい。また、ビジュアライズする際にも表現する方法が難しくなってくる。

#### 2-3. AI解析

ディープラーニングやニューラルネットワークなどの高度な推測統計を扱った解析。理解するための難易度も上がるが、結果をビジュアライズするための表現方法もさらに難易度が上がるらしい。
AIと言われるレベルの統計解析システムを構築したことがないので、伝聞。

(正直AIと推測統計の分水嶺がどこにあるのかよくわかっていない。ベイズ統計以降にあるのはわかるのだが、わからん。SVMは統計？AI？きっとはっきりとした境界線はないと思っている)

### 3. ソフトウェアやサービスの紹介

さて、サービスの紹介に入るわけですが、今回は使用される立ち位置ごとに分けようと思います。今回は以下の通りに分別します。

* データ収集サービス
* データレイク
* ETLツール
* データウェアハウス
* データマート
* ダッシュボード

#### 3-1. データ収集サービス
#####3-1-1. OSS製品
######3-1-1-1. syslogd
Linuxに標準的に備えてあるログを集積するためのデーモンです。
UDPで通信を行うため、確実にデータを貯めたい場合には向きませんが、処理が軽量なため、IoTなどのリソースが少ない機器上での動作には向いています。

#####3-1-1-2. Fluentd
Ruby製のOSSです。サーバにagentをインストールすることによって、Fluentサーバに対してログを送信することが出来ます。

難点としては、ログを各種サーバから送るので、サーバの責務が複数になってしまうことです。

######3-1-1-3. Apache Kafka
Apacheのソフトウェアです。本来データ収集のみに使うものではないですが、pull型(Kafkaがデータをリクエストする形)でログの収集を行えるので、重宝されることが多いです。

#####3-1-2. クラウドサービス
######3-1-2-1. Kinesis
AWS上のサービスです。
このクラウドサービス専用のエージェントを使用して、ストリームを投げると
ファイルにしてくれます。

#### 3-2. データレイク
分散化してデータを置ければ良いので、今回は名前の紹介だけにとどめておきます。
ネットワーク接続できるストレージがあるだけでも負荷が大きくなければ問題ないかもしれません。
* S3(AWS)
* Hadoop(HDFS)
* Filestore(GCP)

#### 3-3. ETLツール
#####3-3-1. Glue
AWS上のETLバッチプログラムを作成するための
Apache SparkのスクリプトとPythonが使えます。

#####3-3-2. Athena
S3上のファイルの中のデータをSQLで読み出すことができるサービスです。
ログファイルのデータなどを分析基盤だけでなくアプリケーション側でも使いたい場合に便利です。

#####3-3-3. BigQuery
BigQueryはメインの機能としては、データウェアハウスの意味が強いですが、ETLプログラムとしても使用することが出来ます。

#####3-3-4. 各種プログラムによるバッチ
PHPやPython、Rubyなどのフレームワークからバッチを起動してデータウェアハウスなどにデータを入れ込むことも可能です。

#### 3-4. データウェアハウス
##### 3-4-1. Redshift
AWS上のサービスです。起動している時間分だけ料金が発生します。
BigQueryと比べると初期費用が高めですが、ある程度処理を行うことが見込まれているシステムに分析システムを導入する場合は、これが使えます。
AWSを使うことが完全に決定している場合は、これ一択です。
##### 3-4-2. BigQuery
ETLツールの項でも少し説明しましたが、BigQueryはデータウェアハウスとして扱うための機能をひとまとめにしているクラウドサービスです。
他社製品では、データ分析をフルマネージできるこういったサービスはないので、分析専用にシステムを構築する場合はGCPを選択し、BigQueryを使用することをおすすめします。

##### 3-4-3. Apache Spark
Apacheのソフトウェアです。リアルタイム分析を行う際に使われるデータウェアハウス製品です。
オンプレミスでリアルタイム分析を行いたい場合には、これ一択です。

##### 3-4-4. Hadoop
こちらもApacheのソフトウェアです。リアルタイム分析が出来ないですが、分散処理を行えるプラットフォームになっています。

#### 3-5. データマート
正直なところ、ダッシュボードが対応しているのであれば、なんでも良い。どちらかというとダッシュボードに依存する。

#### 3-6. ダッシュボード
##### 3-6-1. Elasticsearch + Kibana
Elasticsearchはもともと全文検索用のアプリケーションですが、解析結果を読み込ませることで、見える化することが可能です。
Elasticsearchを使っている場合は、Kibanaを使うのがおすすめです。ただし、Kibana単体を使うのは非常に面倒(できるかどうか怪しいレベルで)なので、Elasticsearchが必要ないのであれば、選択肢に挙げないほうが良いかもしれません。

##### 3-6-2. Redash

簡易なダッシュボードツールです。SQLを受け付けるデータソースであれば、何でも扱うことが出来ます。とりあえずであればRedashをおすすめします。


というわけで、分析システムに使える製品を紹介しました。現場からは以上です。