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

2015年3月24日

Fruentd サーバー 特集

仕事で、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であれば、 $ apt-get install td-agent で簡単にインストールできるが、少し古いバージョンがインストールされるので、我慢できない人は、本家から入れましょう。 ちなみに、「td-agent」と「fluentd」は、同じモジュールと認識しておいてください。 インストールが完了したら、次回は簡単な設定を行って、データのイベント管理から、アクションまでを登録したいと思います。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。