ログによる情報収集および検証はサポートの第一ステップです。
取得するログについてはサポート部門であらかじめ用意されているマニュアルなどを見るとおおよその見当はつきます。手順を踏まないと取得できないようなログについても、明確に説明すれば誰でも取得できるでしょう。あるいはあらかじめお客様に問題が発生したときに取得するべきログを知らせておけば、問題発生の報告とともにログが送られてくるので、2度手間を避けることができますし、あるいは、期限がくることにより問題発生時のログが削除されるということを避けることもできます。
しかしログのどこを見ればよいのかあるいは何を検証すればよいのか、となると決まった手順はなく、経験を通して身につけることが多いのではないでしょうか。
今回は取得したログについて何を見ればよいのかを考えて見ます。
比較(何もなくても比較している)
メッセージの捜索
ログの出力順番およびソート
大量ログの処理
検証 仮説をサポートする材料
ブランクや.にご注意
◇比較 ログの調査は比較調査
ログの調査は常に対象となるログを脇においた比較調査となります。例えば異常なメッセージがないかログを見るときも、異常であるか、異常でないかの判断は通常出るメッセージであるかないかによります。そのメッセージが他のお客様ではでないような異常なメッセージだとしても、問題が発生したお客様で、現象が発生したとき・発生しないときに関わらず出力されているメッセージであれば、異常メッセージということは難しいでしょう。ログを取得する際にはかならず異常時のログと正常時のログ(できれば2,3回分)を取得し、明示的に比較するようにします。
正常時のログが取得できなければ異常時のみのログを調査しますが、このときには頭の中にある正常時のログと比較することになります。この比較には次の問題があります。
異常に見えても正常なログについて判断がつかない 正常に見えても異常なログについて判断がつかない
比較対象のログがない場合には、上記の問題があるという前提で調査を進めます。ログに問題がなくてもそれは「ない」のではなく「発見できない」という可能性を考慮して、例えば正常時のログを何らかの方法で取得する、他の人に見てもらうという対応を取ります。
◇メッセージの検索 異常なメッセージの発見
ログ情報の調査でもっとも多いパターンが異常なメッセージの検索です。異常なメッセージはいくつかの役立ち方があります。
異常メッセージに問題の内容、対応方法が記述されている 異常メッセージに問題の内容が記述されており、対応方法が推測できる 異常メッセージは理解不能であるが、過去事例検索のキーワードとして利用できる
◇ログの出力順番およびソート 出力順番に異常
一見正常に見えるログの場合には個々のログデータのつながりを検証します。
ログデータ間の出力タイミングで時間が大幅にかかっている
例)通常2件のログが出力され、出力間隔は一分ほどのはずとします。 しかし現象発生時には出力間隔が1時間ありました。ログデータの出力シーケンスが異なる
例) ログのレコードしてはすべて同じですがその出力順番が異なります。
◇大量ログの処理 余計な情報の除去
大量のログ(例えば10Mbyteほどのログ)は人の目でチェックするには手間がかかります。またログの9割ほどがごみ情報で占められていることもあります。このような場合にはごみ情報を減らすことで、残されたログデータに注力できます。
以下のようなコマンドでログを減らすことができます。
cat * >> sort XXX 複数のファイルを一つのファイルに出力し、適当な列でソートします。 これによりごみデータが一箇所にまとまります。 grep XXX ごみデータであることを示すキーワードがあれば、そのキーワード以外をもつレコードをgrepします。
◇検証 仮説をサポートする材料
すでに発生した現象について仮説があるのならば、その仮説をサポートする情報を探します。例えば現象Aが発生したときには必ず「Bad error happen!」というメッセージが出ていることが分かっているのであれば、ログ調査はこのメッセージを探すことに注力されます。
◇ブランクや.にご注意
ログを比較する際に見逃しやすいのがブランクデータです。
例 AAA と AAA_ ( _はブランクをしめします )
一見、同じデータに見えますが、ブランクがつながっていることで発生する問題もあります。
テキストエディタで開いたときに制御文字がブランクに変換されてしまいます。これによりエディタ上は同一に見えるが、ファイルの内容としては異なるっていることがあります。bdiffやバイナリエディタなどのバイナリファイル比較ツールを使います。
一見文字の最後の"."に見せかけて、記号を示している場合があります。
例) You have to specify .
上記の例では、何かを指示しなければいけないのか、"."を指示すべきなのか両方に意味が取れます。