ログについてのまとめ
ログとは
時系列順になっているデータのこと。
全てが過去に発生する。
ログ取得の目的
- 記録・履歴(点)
- 事象単体が意味を持つ場合に、時刻を含めてそのときの状況のデータを記録する
- 例
- エラーログ
- クラッシュログ
- 変化量を捉える(線)
- 時系列順に連続して観察したい場合に、時刻を含めてその時の状況のデータを記録し、その後に連続性を確認する
- 連続性を確認するために、グラフなどで可視化する必要がある場合が多い
- 例
- ロードアベレージ
- 株価チャート
- 行動ログ
ログの設計
ログは出そうと思えばいくらでもだせる。
(それこそメソッド呼び出し単位で)
全部を出すと必要なデータが埋もれてしまう。
なので、ログの目的を明確化し、必要なログだけを出すようにする。
name | Who 誰が | Whom 誰に対して | Where どこに 最終的な出力場所 | What 何を | When いつ 出力するタイミング | Why なぜ | HOW to どのように 出力方法 | How many どれくらいの量 | How much コスト感 |
---|---|---|---|---|---|---|---|---|---|
アクセスログ | Web サーバー | 開発者 | Hadoop | アクセスログ | アクセスするたびに | ユーザー調査のため | fluentd | 100 logs / sec | |
アプリログ | |||||||||
分析ログ |
ログの内容
ログの内容の基本的なもの。
情報は出力しすぎるとコストになるので出力する情報が必要か検討する。
名前 | 説明 | 詳細 |
---|---|---|
When いつ | 出力日時 | yyyy-MM-ddTHH:mm:ss.ffffff、単位、出力時刻のタイムゾーン等を決めておく |
Where どこで | 出力された場所 | アプリ名 ホスト、サーバーのIPアドレス プロセスID ログを出力したコードのパスや行数 |
Who 誰が | クライアントのIPアドレス、ユーザーID、ユーザーエージェント、MySQLのIPアドレス | |
What 何を | ログレベル メッセージ 理由とか 実行コマンド |
ログレベル
多くのアプリケーションで、アプリケーションの状態や処理内容を開発者に通知するためのログに重要度(ログレベル)を設定する。
(分析用のログにはないこともある)
ここでは代表的なログレベルについて記載する。
ログレベル | 概要 | 説明 | 出力先 | 運用時の対応 |
---|---|---|---|---|
fatal | 致命的なエラー | コンソール, ファイル | 即時対応が必要 | |
error | エラー | コンソール, ファイル | 営業時間内のみ対応 | |
warn | 警告 | コンソール, ファイル | 次回リリースまでに対応 | |
info | 情報 | コンソール, ファイル | 対応不要 | |
debug | デバッグ情報 | ファイル | 出力しない |
設定されたログレベルによって、ログの出力をコントロールできるようにしておく。(開発環境ではdebugまで出力するが、本番環境ではinfoまでしか出力しないようにするとか)
ログのフォーマット
ltsv
ログの管理
ローテーションと保存期間
一つのファイルにログを書き続けると、一ファイルあたりの容量が増えていくのであとで加工しにくい(ログの肥大化)。
一定の容量や期間でログをまとめて別ファイルにして管理するようにする。
また一定期間を過ぎたログを削除もしくバックアップサーバー等に転送することで、サーバーのディスク容量があふれるのを防ぐ
logrotateなどがその役割を担ってくれている。
ログの活用
流量の監視
ログの送信方法
大量に送る場合の負荷