ElasticSearchについて勉強をしました。繰り返しになりますが、ElasticSearchの特徴は「RESTfulで全てがJSON」です。するとJSONデータであれば何でも食わせて全文検索が出来るわけですね。Cluster機能によって保持データを分散させることで可用性も確保出来ます。高い可用性が必要で、全文検索したいもの...ログだ!そこでfluentdですfluentdはイベントログ収集のためのオープンソースソフトウェアで、インプットされたイベントログをJSONに変換してアウトプットします。いうことで、このような構成にしてみました。ELBをかましてみました。やってみる準備Web1、Web2ではApacheをインストールしておきます。httpdLog1、Log2ではElasticSearchをインストールし、Clusterの設定をしておきます。Subnetに所属しているためwgetで外部接続は出来ません。NATインスタンスを立てるなりWebサーバでwgetしてからscpでコピーするなりの手段が必要です。ElasticSearchのインストールとCluster設定は以下の通り。ELBでは、Log1とLog2に9200/tcpで振り分けを行います。fluentdのセットアップfluentdのセットアップはWeb1、Web2で行います。Packageに書いてる通りにcurlからshを実行します。インストールされるパッケージの名前は「td-agent」です。sh試験的にtd-agentを起動してみます。running...試しにサンプルメッセージを送ってみます。http://localhost:8888/debug.testログを確認すると...ちゃんとPOSTされていることがわかります。Pluginがあります!td-agentに付属しているfluent-gemと言うコマンドを使ってセットアップします。fluent-plugin-elasticsearch-0.1.4...td-agent.confを編集し、Apacheのaccess_logをLogサーバに送信するよう設定します。td-agentの詳細は公式サイト参照。Fluentd)を参考にしました。ELBのFQDNを記述しています。httpd</match>apacheのログフォルダはUser:root、Group:rootのパーミッション:700になっているため、ユーザーtd-agentの権限ではログファイルが参照できません。このためログフォルダのパーミッションを変更します。/var/log/httpd設定後、サービスを再起動します。restart動作確認Web1、Web2にcurlでアクセスします。ClusterのMaster)の/var/log/elasticsearch/elasticsearch.logを確認すると、index,type(mapping)がcreateされたことが分かります。(dynamic)それでは、Log1のElasticSearchのデータを確認してみます。{"host":"172.31.1.223","user":null,"method":"GET","path":"/hoge","code":404,"size":280,"referer":null,"agent":"curl/7.29.0"}}]}}ちゃんとaccess_logが登録されています。次にLog2のElasticSearchのデータを確認します。{"host":"172.31.1.223","user":null,"method":"GET","path":"/hoge","code":404,"size":280,"referer":null,"agent":"curl/7.29.0"}}]}}こちらもLog1と同等にaccess_logが登録されています。ログが分散されて保存されていますね!感想これが出来ると、今度は可読性の高いログ参照ソフトウェアが欲しくなります。