ログ解析について



# ログを活用する前に
### 長期的に結果を出す前に必要なこと
* [収集]どのデータを集めるべきか、どのようにデータを格納するか
* [変換]データをどのように前処理し、分析しやすい形式にするか
* [保存]どういったデータが入っていて、どこに保存するか
* [分析]どのように基盤に入れたデータを分析し、活用してもらうか。データを入れるだけでなく、分析のために快適な環境を用意するにはどのようにすれば良いか
* [表示]どのようにデータを可視化し、結果を伝えられるか
* [運用]データを分析するための基盤を長期に渡って運用していくにはどのようにすれば良いか

# ログとは何か
###「ある時点での事実を残すもの」
## 例
* ユーザが商品を購入した際のログ
どの商品をいつ何円で買ったか
* 室温のログ
部屋に取りつけられた温度センサーにより記録、ある時点での室温と温度のデータ
* 音響測定データ
計測用のマクロフォンを利用して収集したある時点での音圧レベルのデータ

# ログデータ入門
### データの鮮度
ログデータを扱う際、データの鮮度によって2つの分け方をする

* hot data
　発生した直後のログデータ。発生してすぐに利用される。または、高頻度でアクセスされるログデータ
* cold data
　作成されてから利用されるまでにある一定の時間がかかるログデータのこと

## 鮮度の違いで何が変わるか
分析をする上で、鮮度の違いは、活用の方法を左右する

## hot dataとcold data
hot data

* 今この瞬間でトラフィックにどういう変化が起こっているか
* 特定のキャンペーンで、どの商品の注文が増えているか

cold data

* 蓄積された全体のデータを分析してマーケティングなどに活かす

##ログを抜き出す際の注意
ログを抜き出す際には、後でどのような分析に必要になるか考えるのではなく、ひとまず「どのようなログがあるか」だけ整理し、すべてcold dataとして後から使えるように保存しておく

# ログ解析のツールの組み合わせ（定番）

* Fluentd - ログを収集する
* Elasticsearch - 全文検索時エンジン+RestfullAPI
* Kibana - ログ解析&可視化　webページ


使われている例

* ソーシャルゲーム
*  アドテク
*  webサービス関連 
*  クラウド基盤のバックエンド

### 今回は実際のサービスを対象にログ解析する前に自分のパソコンのログを見てみる

# syslog入門

### 今回
自分のmacのログを見てみる

##システムログとは
デーモンなどが出力するシステムの動作記録、ユーザが操作した内容が記録されている

## 用途
システムに不具合が生じた場合や、セキュリティ障害などが起きた時の解決に重要

##Linuxシステムのログはどこにあるのか
主なログファイルは/var/log

```
@mymac~$ cd /var/log
@mymac/var/log$ ls
Accounts			authd.log.4.gz			daily.out			opendirectoryd.log.2		system.log			wifi.log.0.bz2
CDIS.custom			authd.log.5.gz			displaypolicyd.log		opendirectoryd.log.3		system.log.0.gz			wifi.log.1.bz2
CoreCapture			bluetooth.pklg			displaypolicyd.stdout.log	opendirectoryd.log.4		system.log.1.gz			wifi.log.10.bz2
DiagnosticMessages		com.apple.clouddocs.asl		emond				opendirectoryd.log.5		system.log.2.gz			wifi.log.2.bz2
SleepWakeStacks.bin		com.apple.revisiond		fax				opendirectoryd.log.6		system.log.3.gz			wifi.log.3.bz2
apache2				com.apple.xpc.launchd		fsck_hfs.log			opendirectoryd.log.7		system.log.4.gz			wifi.log.4.bz2
asl				commerce.log			install.log			opendirectoryd.log.8		system.log.5.gz			wifi.log.5.bz2
authd.log			corecaptured.log		module				opendirectoryd.log.9		system.log.6.gz			wifi.log.6.bz2
authd.log.0.gz			coreduetd.log			monthly.out			powermanagement			system.log.7.gz			wifi.log.7.bz2
authd.log.1.gz			coreduetd.log.0.gz		opendirectoryd.log		ppp				uucp				wifi.log.8.bz2
authd.log.2.gz			coreduetd.log.1.gz		opendirectoryd.log.0		sa				weekly.out			wifi.log.9.bz2
authd.log.3.gz			cups				opendirectoryd.log.1		secinitd.log.0.gz		wifi.log
```
## Linux主なシステムログファイルの種類
/var/log/boot.log	システム起動時のログ
/var/log/mail.log	メールシステムのログ
/var/log/cron	cronのログ
/var/log/secure	認証関連のログ
/var/log/dmesg	システム起動時のdmesgの内容
/var/log/lastlog	最終ログイン情報の記録
/var/log/wtmp	ログイン情報の記録
/var/log/anaconda.*	インストーラのログ
/var/log/messages	上記に含まれないログ

##ログを表示する
tailコマンドを使って自分のmacのインストールログを表示させてみる

```
@mymac/var/log$ sudo tail -f install.log
	        "zzzz031-63213",
	        "031-49592"
	    );
	}
Jun 30 13:53:37 shoushiichiba-no-MacBook-Air softwareupdate_notify_agent[81250]: appstoreupdateagent notified
Jun 30 13:53:37 shoushiichiba-no-MacBook-Air softwareupdate_notify_agent[81250]: AssertionMgr: Cancel com.apple.softwareupdate.NotifyAgentAssertion assertion for pid 81250
Jun 30 13:53:37 shoushiichiba-no-MacBook-Air softwareupdated[535]: Removing client SUUpdateServiceClient pid=81250, uid=501, installAuth=NO rights=(), transactions=0 (/System/Library/CoreServices/Software Update.app/Contents/Resources/softwareupdate_notify_agent)
Jul  1 09:31:38 shoushiichiba-no-MacBook-Air installd[439]: ___CacheDeleteRegisterLegacyCallbacks_block_invoke475:449 com.apple.installd.CacheDelete has periodic property in CacheDelete.plist, but a NULL callback
Jul  1 09:31:39 shoushiichiba-no-MacBook-Air installd[439]: ___CacheDeleteRegisterLegacyCallbacks_block_invoke475:449 com.apple.installd.CacheDelete has periodic property in CacheDelete.plist, but a NULL callback
Jul  1 09:32:09 --- last message repeated 3 times ---
```
## ログの出力について
Linuxのログは、主にsyslogという仕組みを使ってログを収集、出力を行う。

特徴

* TCPによるログのネットワーク転送 
* TLS/SSLによる暗号化
* MySQL、PostgreSQLへのログの保存
* ログのフィルタリング
* ロギング以外にも様々な通知方法(メール、SNMPTrap)

## システムログを見てみる。syslogを表示する

```
@mymac~$ syslog
```

## syslogのファシリティとプライオリティ
syslogはログの分類と重要度が定義されている。

* ファシリティ(facility)ーログの分類
* プライオリティ(priority)ーログの重要度

###ファシリティ（分類)	説明
auth	- 認証サービスのメッセージ
authpriv	- 認証サービス
cron	- cronのメッセージ
daemon	- デーモンのメッセージ
kern	- カーネルのメッセージ
lpr	- プリンタサービスのメッセージ
mail	 - メールサービスのメッセージ
news	- ニュースサービスのメッセージ
syslog	- syslogのメッセージ
user	- ユーザープロセスのメッセージ
uucp	- uucp転送を行うプログラムのメッセージ
local0~7	- 任意に使用できるファシリティ

###プライオリティ（重要度)
プライオリティ	- 説明
debug	- デバッグ情報
info	- 情報
notice	- 通知
warn	- 警告
err	- 一般的なエラー
crit	- 致命的なエラー
alert	- 緊急に対処すべきエラー
emerg	- 緊急事態

###ファシリティとプライオリティを意識してもう一度

```
@mymac~$ syslog
```

## syslogを検索してみる
```
syslog -k Sender eq kernel
```



## syslogの設定を見てみる

/etc/asl.conf には、次の規則で、何を、どこへ、書き込むかが定義されている。
{ファシリティ}.{レベル}         {書き込み先}

```
@mymac~$ cat /etc/asl.conf
##
# configuration file for syslogd and aslmanager
##

# aslmanager logs
> /var/log/asl/Logs/aslmanager external style=lcl-b ttl=2

# authpriv messages are root/admin readable
? [= Facility authpriv] access 0 80

# remoteauth critical, alert, and emergency messages are root/admin readable
? [= Facility remoteauth] [<= Level critical] access 0 80

# broadcast emergency messages
? [= Level emergency] broadcast

# save kernel [PID 0] and launchd [PID 1] messages
? [<= PID 1] store

# ignore "internal" facility
? [= Facility internal] ignore

# save everything from emergency to notice
? [<= Level notice] store

# Rules for /var/log/system.log
> system.log mode=0640 format=bsd rotate=seq compress file_max=5M all_max=50M
? [= Sender kernel] file system.log
? [<= Level notice] file system.log
? [= Facility auth] [<= Level info] file system.log
? [= Facility authpriv] [<= Level info] file system.log

# Facility com.apple.alf.logging gets saved in appfirewall.log
? [= Facility com.apple.alf.logging] file appfirewall.log file_max=5M all_max=50M
```
##自分のmacのシステムログに直接書き込んでみる

```
@mymac~$ logger  test-test
```

```
@mymac~$ syslog
```

```
Jul  1 12:01:38 shoushiichiba-no-MacBook-Air mymac[83126] <Notice>:  test-test
Jul  1 12:01:53 shoushiichiba-no-MacBook-Air syslogd[47] <Notice>: ASL Sender Statistics
```
ユーザとプライオリティを設定して出力

```
@mymac~$ logger -t Test -p  local5.notice helloworld
```
```
@mymac~$ syslog
```
```
Jul  1 12:05:29 shoushiichiba-no-MacBook-Air Test[83128] <Notice>: helloworld
```

# 今日やったこと
・ログとは
・ログ解析ツールの紹介
・自分のmacのシステムログを見てみる
・syslogを使ってみる







#次回、webサービスでログの解析一通りの流れを行ってみる
### 次回構築する環境について
* Vagrant 1.5.2
* Ubuntu 14.04 LTS (Trusty Tahr)
* tg-agent 1.1.18(Fluentd 0.10.45)
* Elasticsearch 1.2.1
* openjdk-7-jre-headless