複数サーバーをまたがるログ管理に挑戦:Fluentd #1「初期設定」

Pocket
LINEで送る
GREE にシェア
LinkedIn にシェア

仕事で、WEBシステムを運用していて、公開サーバーを管理していると、
LAMP系のシステムでの障害箇所No.1はダントツで「DataBase」であろう。

かくゆう、僕も同じくデータベース障害を何度も見てきた。
WEB-API-サービスを提供しているとある会社で、PostgreSQLを使っていた時の事。

とあるWEB会社での出来事

毎日のように、「データバキュームがキャパを超えてます」とか、「キャッシュデータを削除するバッチが、時間内に終了しません」とか、「セカンダリに動機が取れません」・・・などなど・・・

確かにSQLは便利で、モジュールを入れておくだけで固有の箱が設置され、管理も簡単なようなイメージがあるが、僕の中ではこんなブラックボックスなモジュールは無いと、当時から感じていました。

そして、自分でサービスを構築する段階で、SQLを使わずにデータ管理を行う方法を思いついた。
※単純にテキストデータで行うだけだが・・・

独自DBのメリット

しかし、この方法が良かった点は、

1.テキストデータなので、テストサイトなどへのコピーが簡単
2.管理も、対象のファイルを削除するだけ
3.コマンドラインを使わなくても、テキストエディタでデータ内容が確認できる

という風に、運用非常に楽になりました。
同時にサーバーのアクセス負荷だけを気にして構成を組んでいれば、サーバー障害はほぼなくなりました。

なんという天国状態でしょう。

要件定義というチャレンジ

でも、データ管理もそんなに甘いものではなく、最近のバズワードの「ビッグデータ」というぐらいのボリューミーなデータを扱うには、少し技術が必要になります。

もちろん、データ抽出は、awkやsedを使い、そんなに困ってはいないんですが、Mongo−DBのように、複数サーバーの冗長構成を、No-SQLで組むという事にトライしてみました。

その時、データ容量がカバーできるということで、複数サーバー(バランシング構成)において、データミラーリングができればいいという結論になり、どのようにしてリアルタイムにデータコピーを行うかという実験を繰り返していました。

別サーバーにおけるリアルタイムデータコピー

とりあえず、既存のNoSQLをいくつか実験したトコロ、
Mongo-DB:mem-cacheに頼っていて、現バージョンではダウンタイムが著しい事が判明したので、製品使用は厳しいと判断。
Hadoop:サーバー3台構成からスタートして、意外と制約も多く、そもそもテキスト管理するイメージがなかったので却下。

まあ、主要を試して、なんとなく気がついたんだが、まずテキストファイルという気楽な管理ができないと、SQLを使っているのと変わらないという点が引っかかったので、考え方を返ることにした。

Fluentdとの出会い

そこで、複数サーバーのapacheログを別のサーバー1台に集約できるfluentdというモジュールが最近人気があるという情報を入手。
インストールしてみて、そのモジュールの素晴らしさに気がついた。

apacheログだけではなく、データファイルやテキストファイルなどの状態をイベント監視して、書き込みがされたり、ファイルの容量が変動したりした場合に、個別のアクションが起こせるというツールであるという事が分かりました。

とっさにひらめいたのが、ログ・ファイルではなく、サーバーのデータベースのファイルをイベント監視して、別サーバーへ転送がかけられるといいのでは・・・

全く問題なく成功。

さらに素晴らしい機能があり、一定時間、コピーデータをプールしておけるという機能。

WEBサーバの落ちる要因第2位

同一タイミングや、1秒間内における大量のコネクションが発生すると、サーバーは簡単にダウンします。

fluentdの一定時間pool機能を使うと、1秒単位や5秒単位ぐらいのpool状態で、溜まったデータをまとめて一括コネクションで、アクションを起こせる。

もちろん、別サーバーへコネクションを転送することも可能だ。

全くのリアルタイムではないが、1秒〜5秒程度の同期であれば、WEBサーバーの実運用に置いては、ほぼリアルタイム同期に近い。

これはイケると思い、試せるだけの事を試し、実サービスに搭載してしまいました。

あまりにも使い勝手が良かったので、データベースのバランシング構成などの組み方も含めて、メモしたいと思います。

初期設定

本家より、モジュールのダウンロード

http://www.fluentd.org/

または、debianやubuntuであれば、

で簡単にインストールできるが、少し古いバージョンがインストールされるので、我慢できない人は、本家から入れましょう。

ちなみに、「td-agent」と「fluentd」は、同じモジュールと認識しておいてください。

インストールが完了したら、次回は簡単な設定を行って、データのイベント管理から、アクションまでを登録したいと思います。

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です