fluentd経由でmongoDBにログを突っ込んだりしているのですが、可視化したいなーっていう流れがあるので、最高にナウい感じの fluentd + elasticsearch + kibana をセットアップしてみました。
まずは試しなのでVagrantを使って仮想環境でセットアップしてみました。
kibanaってjsで動いてるのかー。
環境
Mac OSX 10.9
ゲストOS CentOS 6.5
Elasticsearch
Elasticsearchは言わずと知れた全文検索エンジンですね。国産全文検索エンジンにGroongaというものがありますが、世界的にはElasticsearchがナウいとのことです。
yumからインストールしたいので、リポジトリを追加します。
$ sudo vim /etc/yum.repos.d/elasticsearch.repo [elasticsearch-1.1] name=Elasticsearch repository for 1.1.x packages baseurl=http://packages.elasticsearch.org/elasticsearch/1.1/centos gpgcheck=1 gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch enabled=1
インストールします。javaが必要なので同時にインストールしますね。
$ sudo yum install elasticsearch java-1.7.0-openjdk-devel.x86_64 # 起動、自動起動ON $ sudo service elasticsearch start $ sudo chkconfig elastic search on
curl叩いてステータス200のjsonが返ってくればインストール成功。
$ curl localhost:9200 { "status" : 200, "name" : "Hugh Jones", "version" : { "number" : "1.1.2", "build_hash" : "e511f7b28b77c4d99175905fac65bffbf4c80cf7", "build_timestamp" : "2014-05-22T12:27:39Z", "build_snapshot" : false, "lucene_version" : "4.7" }, "tagline" : "You Know, for Search" }
kibana
つづいてkibanaをインストールします。kibanaはjsで動いているWEBアプリケーションなので、今回は既に動いていたのでapache上で動かすことにします。
ダウンロードしてapache公開ディレクトリに設置。
$ curl -L -O https://download.elasticsearch.org/kibana/kibana/kibana-3.1.0.tar.gz $ tar zxvf kibana-3.1.0.tar.gz $ mv kibana-3.1.0 /var/www/html/kibana
elasticsearchにアクセスするアドレスを設定。クライアントのブラウザから見えるアドレスでないければならないので、通常はグローバルIPで指定することになると思います。今回はVagrantなので、クライアントからの19200番を9200番に転送してるので下記のような設定。
$ vim config.js elasticsearch: "http://localhost:19200”,
あとiptablesなどのファイアウォールで9200番を通すのを忘れずに。
kibanaにアクセスしてみます。
http://localhost:10080/kibana
アドレス指定がうまくいってないと下記のようなエラーが出ます。
Error Could not contact Elasticsearch at http://localhost:9200. Please ensure that Elasticsearch is reachable from your system.
うまくいくとこう。
fluentd
インストールは以前にやっているので割愛。
fluentdでapacheログを収集する
elasticsearchに流し込む用のpluginをインストールします。
$ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-elasticsearch
エラーが発生してしまった。下記エントリによると、gccとlibcurl-develがいるっぽい。
http://qiita.com/tokida/items/2aa7dae82aa969f10420
Building native extensions. This could take a while... ERROR: Error installing fluent-plugin-elasticsearch: ERROR: Failed to build gem native extension.
インストールして再度やりなおし。今度はうまくいった。
$ sudo yum install gcc libcurl-devel $ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-elasticsearch
td-agentの設定ファイルに追記。
elasticsearchに流し込むだけならstoreの後者だけでいいんですが、mongo転送もいかしておきたかったので、type copyを使って両方処理させてます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<match apache.access> type copy <store> type mongo host localhost port 27017 database dbname collection apache_logs user USERNAME password PASSWORD flush_interval 10s </store> <store> type elasticsearch host localhost port 9200 type_name access_log logstash_format true logstash_prefix apache_access logstash_dateformat %Y%m buffer_type memory buffer_chunk_limit 10m buffer_queue_limit 10 flush_interval 1s retry_limit 16 retry_wait 1s </store> </match> |
これで再度kibanaを開いて、Sample Dashboard をクリックするとこのように表示されました!できたあああ!
原田 敦
最新記事 by 原田 敦 (全て見る)
- Ruby on Rails 4、N+1問題にメソッドのメモ化で対策する - 2014年9月27日
- CircleCIとRaspberry Piを使ってロマサガCIを作る - 2014年9月23日
- Railsで一括登録処理をしたいのでGitLabのソースコードを参考にする - 2014年9月20日