Blog ブログ

ログを扱うソフトウェア達

はじめの挨拶
明けましておめでとうございます。
プログラマの田中でございます。

皆様。
今年の目標、決められましたでしょうか?
ちゃんと設定しておかないと、日々アレやコレやと過ごしていくうちに
「今年1年何も出来なかった…」のいやーな振り返りが待っています。
「社内プロジェクトを2つ立ち上げる!」「京都の八つ橋を食い尽くす!」等。何でも良いので、目標を設定しておくだけで、活力のある1年を過ごせると思います。
また、1年間でざっくり目標掲げてしまっても同じ悲劇を生みますので、1つのプロジェクトと考えマイルストーンなり設定すると面白くなるのでは。

今年はそのような作戦で、目標達成に挑みたいと思います。


題目について
そんなわけで、2015年一発目です。

題しまして、「ログを扱うソフトウェア達」になります。
何か題名だけはカッコ良い感じになりました。
ログファイル単体でも、必要な情報を引っ張ってくる事は可能なのですが、見るログの種類って1つだけじゃないですよね。ましてや、複数サーバからログを収集する必要がある場合、1台1台見ていくわけにもいかないですよね。
こういったものを解消するために、ログを一括管理するためのソフトウェアが世の中には存在致します。

昔から存在するsyslogというログメッセージのやりとりを行う、プロトコルが存在します。
今回は、このsyslogを利用した内容で行わせていただきます。

syslogを触ってみよう
まず、syslogメッセージを受信するために、syslogdプロセスが立ち上がっている必要があります。
UNIX系OSであれば、だいたいインストールされておりデーモンが起動しているかと思います。

$ ps aux | grep syslogd                                                                                                         
root               16   0.0  0.0  2472432   1844   ??  Ss    9:23PM   0:00.93 /usr/sbin/syslogd 

このsyslogdが、規定のプロトコルで送られてきたデータを、規定のログファイルへ書き込む役割を果たしてくれます。
今回は手軽に、コマンドたたいてsyslogdへ要求を投げてみましょう。

# logger HelloWorld

これだけで、syslogdを経由しログが所定箇所に書き込まれた事になります。
(ファシリティ指定する場合は # logger -p Alert HelloWorld)

それでは、書き込まれた内容を確認してみましょう。
Macの場合、Console.appを利用すると、GUIでログが閲覧可能なので見やすいかと思います。(CUI派の方はコチラ => /var/log/system.log)
検索で「HelloWorld」と入力すると、下記のような出力が見つかると思います。

1/5/15 01:58:42.668 xxxx-xxxx[584]: HelloWorld

loggerコマンドで送った要求が、正常に処理されている事が確認出来ました。
メッセージを適当に変更して、loggerを再度実行すれば反映されている事が確認出来ると思います。
syslogで書き込まれたログ

さて、書き込まれたログを見てみると普段使っているツール類やシステムのログも表示されている事が確認出来ます。

1/5/15 02:14:13.364 Google Chrome Helper[601]: CoreText CopyFontsForRequest received mig IPC error (FFFFFFFFFFFFFECC) from font server

これらのように、syslogというプロトコル, syslogdというソフトウェアを介する事で、様々なソフトウェアやサービスからのログを集約する事が可能になっています。
Apacheのアクセスログをまとめたり、Slow Queryをまとめたり。
今まであちこち見ていた、フォーマットも異なったログがまとまる事が可能になりました。
(ただまとめただけでは見にくいだけですが、話の都合上割愛…)

上記内容により、ログをソフトウェア介して利用する事でのメリットになります。

  1. あっちこっちのログを見にいく必要がなくなる
  2. フォーマットが統一されている事での見やすさ
  3. ツールの作成も行いやすくなる

3. につきまして
KPIやマスタメンテといったログを扱うツールを作成する際に、ログが全てJSONやYAMLといったフォーマットで統一されていたら作成しやすいものです。

ネットワーク経由での書き込み
先程の内容では、ローカル内で完結した内容なりました。
この仕組みですが、ネットワーク越しでも利用可能になります。複数台のサーバの情報を一つのサーバにまとめるにもってこいですね。

ログを送る方法ですが
514ポートに対して、「UDP」で送信するのみになります。
少し注意必要なのが、 UDPで送信するという点です。
高速にログをポイポイ投げれますが、当然UDPなので取りこぼしも発生します。
障害発生時に、該当のログが残ってないとなると大問題ですね。

用途に応じて使い分ける事になりますが、rsyslogを利用する選択肢もあります。
rsyslogでは、ポイポイ投げるのがUDP, TCPと選択可能になります。
TCPで行う場合、信頼性は増しますが、当然UDPより遅くなります。
用途に応じて選択していただくのが良いかと思います。

最後に
今回、syslogを利用した紹介となりました。
FluentdやKafka, logstash等、ログを扱うソフトウェアは色々存在しています。
今後も、少しづつ紹介していけたらと思います。

次回は、実装に関する内容を行いたいと思います。
それでは、素敵なログライフを。