ログを活用する前に
長期的に結果を出す前に必要なこと
- [収集]どのデータを集めるべきか、どのようにデータを格納するか
- [変換]データをどのように前処理し、分析しやすい形式にするか
- [保存]どういったデータが入っていて、どこに保存するか
- [分析]どのように基盤に入れたデータを分析し、活用してもらうか。データを入れるだけでなく、分析のために快適な環境を用意するにはどのようにすれば良いか
- [表示]どのようにデータを可視化し、結果を伝えられるか
- [運用]データを分析するための基盤を長期に渡って運用していくにはどのようにすれば良いか
ログとは何か
###「ある時点での事実を残すもの」
例
- ユーザが商品を購入した際のログ
どの商品をいつ何円で買ったか - 室温のログ
部屋に取りつけられた温度センサーにより記録、ある時点での室温と温度のデータ - 音響測定データ
計測用のマクロフォンを利用して収集したある時点での音圧レベルのデータ
ログデータ入門
データの鮮度
ログデータを扱う際、データの鮮度によって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