スイーツ(笑)と呼ばないで!!
| |||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||
11/24/05:00 [PR] |
11/25/13:53 メールログの解析(本日のOJTより)たまに、メールが届かないんだけど、とかって連絡があり調査をしたりすることがある。
今日は、そんな連絡を受けた部下とのOJTの一コマを紹介。 部下:「yamada@abc.comというメールアドレスに今朝7時に一斉送信されたメールが届かないらしいんですよね」 私:「なるほど。じゃ、エラーログを確認してみよう。サーバーにSSHでログインしてみて」 部下:「ログインしました」 私:「まず、ログはデフォルトだと/var/logの中にあるね。今回はmailの話なので/var/log/maillogを開いてみて」 部下: 「えっと、ファイルを開くのはcatコマンドですよね」 私:「そうだね、それで開けるけどそのままだと大量に表示されてしまうので、メールが届かないユーザーのemailアドレスで絞り込んでみよう」 $sudo cat maillog|grep yamada@abc.com 私: 「catコマンドでmaillogのファイルを開いた後で、パイプ(|の記号)でつないで、grepすれば良いね。」 部下: 「なるほど。結果を見ると確かにErrorとなっていますね。この人だけエラーになっているのでしょうか?」 私:「そういう時は、Errorという文字列でgrepしてみると良いね」 $sudo cat maillog|grep Error 部下:「なるほど….わっ! たくさん出てきましたね。何件くらいあるのでしょうか。」 私: 「そういう時は、wcコマンド(ワードカウント)に-l(ライン)というオプションをつけて実行すると良いね。そうすると行数を表示することができる。」 $sudo cat maillog|grep Error|wc -l 部下: 「なるほど。これで件数がわかるんですね。とてもたくさんありますね。あ、でもこれって同じ人宛のもありますよね。重複を排除したいですが、全部日時もバラバラだし整理するの無理ですよね。。」 私:「そういう時は、まずメールアドレスの部分だけを切り出すと良いね。そういう時に使えるのはcutコマンドだね。maillogはスペース区切りで項目がならんでいるから、-d(デリミタ)オプションにスペースを指定するね。そして、スペース区切りで7番目がメールアドレスだから-f(フィールド)オプションに7を与えれば良いね。」 $sudo cat maillog|grep Error|cut -d’ ‘ -f7 部下:「おお!!メールアドレスだけが表示されるようになりましたね。あとはこの時系列でならんでいるメールアドレスしかも重複ありのをどうすれば良いか。。。」 私:「そんな時はsort(並べ替え)コマンドを使うと良いね。これはアルファベット順で並べ替えてくれるよ。そして並べ替えた上で、uniq(ユニーク)コマンドを使えば、重複を排除したリストが手に入るね。先にcutコマンドでメールアドレスだけにして、sortで並べ替えているからこそuniqが有効に使えるんだね」 $sudo cat maillog|grep Error|cut -d’ ‘ -f7|sort|uniq 部下:「なるほどー。これで先方にエラーになっているメールアドレスのリストをお送りできますね。あれ、これ見ると@abc.comの人ばかりがエラーになっているようですね。@abc.comの人でエラーになっていない人っていますかね。。」 私:「そういう時は、grepで-vオプションを使うと良いね。これを使うと"含まない”という反対の絞り込みができるよ。つまり、-v Errorと書けばよいね。あとは、@abc.comを含むgrepを入れてあげれば良いね。」 $sudo cat maillog|grep -v Error|grep abc.com|cut -d’ ‘ -f7|sort|uniq 部下:「なるほど! お、この結果を見るとabc.comでもメールがエラーにならずきちんと送られている人がいますね。逆に、abc.com以外でエラーになっている人はいるのでしょうか。」 私:「それは、今度はabc.comの前に-vをつけて、Errorの前の-vを外してあげれば、abc.com以外でErrorのものが抽出できるね。」 $sudo cat maillog|grep Error|grep -v abc.com|cut -d’ ‘ -f7|sort|uniq 部下:「なるほど。そうやって応用すれば良いんですね。あれ?1件だけありますね。残念。。。あ、でもこれabc.COMとcomの部分が大文字になっていますね。これは登録したユーザーが間違っていますね」 私:「そうだね。ただ、それでもメールは届いたりするので間違いとは言えないね。そういう場合には大文字小文字を区別しない-i(ignore case)オプションをつけると良いね。」 $sudo cat maillog|grep Error|grep -i -v abc.com|cut -d’ ‘ -f7|sort|uniq 部下:「本当ですね。それだとabc.com以外でエラーになっているものの結果は無しとなりますね。ただ、0とは表示されないんですね。」 私:「人数を見たい場合は、最初の頃に教えたwc -lを使えば良いね」 ◎abc.com以外でエラーになっている人数 $sudo cat maillog|grep Error|grep -i -v abc.com|cut -d’ ‘ -f7|sort|uniq|wc -l 0人 ◎abc.comでエラーになっている人数 $sudo cat maillog|grep Error|grep -i abc.com|cut -d’ ‘ -f7|sort|uniq|wc -l 123人 ◎abc.comでエラーになっていない人数 $sudo cat maillog|grep -v Error|grep -i abc.com|cut -d’ ‘ -f7|sort|uniq|wc -l 3,123人 私:「ということで、ここまでのメールログの解析から、 abc.com以外のドメイン宛のメールは全て正しく送信されている。 abc.comのドメイン宛のメールでも正しく送信されているものがある。 ということがわかるね。それぞれのリストや人数も把握できるね。 例えば、人数ではなく件数を出したいなら、途中で追加したsortとuniqを削れば良いね。 こうやって、コマンドをいろいろと組み合わせると、解析不可能に思える膨大なログの中から真実を突き止めることができね。これはapacheのログの解析とかにも使える技術なのでいろいろ勉強してみると良いと思うよ。」 部下:「しかし、linuxのコマンドって、こんなことできるんですねー。感動しました!!」 というようなOJTを必要に応じて部下にやっていたりします。 実案件で困っている時は部下も必死ですので、その困っている状況をさっと解決できる技術を目の当たりにすれば勉強しようというモチベーションも少しは上がるのかもしれません。 今回登場したコマンドはコマンドリファレンスを見れば全部載ってますし、オプションも--helpというオプションつけて各コマンドを実行すればすぐに確認できますね。ただ、リアルに直面している問題に対してどう組み合わせるかというところは、やっぱり先輩についてOJTで教えてもらうのが一番手っ取り早いかもしれません。その上で復習をしっかりとね。 今日も偉そうに自画自賛してしまいました(笑) それでは、またいつか会いましょう^^ PR
|
|
|