CubicLouve

Spring_MTの技術ブログです。https://github.com/SpringMT (http://spring-mt.tumblr.com/ からの移転)

ログについてのまとめ

ログとは

時系列順になっているデータのこと。

全てが過去に発生する。

データログ - Wikipedia

ログ取得の目的

  • 記録・履歴(点)
    • 事象単体が意味を持つ場合に、時刻を含めてそのときの状況のデータを記録する
      • エラーログ
      • クラッシュログ
  • 変化量を捉える(線)
    • 時系列順に連続して観察したい場合に、時刻を含めてその時の状況のデータを記録し、その後に連続性を確認する
    • 連続性を確認するために、グラフなどで可視化する必要がある場合が多い

ログの設計

ログは出そうと思えばいくらでもだせる。

(それこそメソッド呼び出し単位で)

全部を出すと必要なデータが埋もれてしまう。

なので、ログの目的を明確化し、必要なログだけを出すようにする。

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、ユーザーエージェント、MySQLIPアドレス
What 何を ログレベル メッセージ 理由とか 実行コマンド

ログレベル

多くのアプリケーションで、アプリケーションの状態や処理内容を開発者に通知するためのログに重要度(ログレベル)を設定する。

(分析用のログにはないこともある)

ここでは代表的なログレベルについて記載する。

ログレベル 概要 説明 出力先 運用時の対応
fatal 致命的なエラー コンソール, ファイル 即時対応が必要
error エラー コンソール, ファイル 営業時間内のみ対応
warn 警告 コンソール, ファイル 次回リリースまでに対応
info 情報 コンソール, ファイル 対応不要
debug デバッグ情報 ファイル 出力しない

設定されたログレベルによって、ログの出力をコントロールできるようにしておく。(開発環境ではdebugまで出力するが、本番環境ではinfoまでしか出力しないようにするとか)

ログのフォーマット

ログの管理

ローテーションと保存期間

一つのファイルにログを書き続けると、一ファイルあたりの容量が増えていくのであとで加工しにくい(ログの肥大化)。

一定の容量や期間でログをまとめて別ファイルにして管理するようにする。

また一定期間を過ぎたログを削除もしくバックアップサーバー等に転送することで、サーバーのディスク容量があふれるのを防ぐ

logrotateなどがその役割を担ってくれている。

ログの活用

流量の監視

ログの送信方法

大量に送る場合の負荷

参照

dev.classmethod.jp

techblog.yahoo.co.jp

8.2.1 ログの運用

www.ipa.go.jp