ElasticSearch和Kibana

ElasticSearch 是什么?

Elasticsearch是一款使用方便且相对简单的全文搜索引擎,它内部使用Java实现的Lucene。

在Kibana連携時,你可以认为它主要用于快速过滤和聚合想要可视化的数据,而不仅仅是进行搜索。

安装ElasticSearch

brew install elasticsearch

Kibana是什么

以下是ElasticSearch社提供的日志数据可视化工具。在网上,我们经常能找到使用像Apatch这样的系统日志的例子,但只要正确配置,我们也可以使用搜索查询日志或者网站行为日志。

Kibana的安装

作为ElasticSearch的插件进行安装

plugin -i elasticsearch/kibana

现在不一定要使用Kibana3,因为Kibana3已经作为标准安装了。查看package.json可以看到安装了3.0.0pre-milestone5版本。

暂且看一下到目前为止的Kibana。

请访问 http://localhost:9200/_plugin/kibana

虽然有人说我使用的版本有点旧,但不用在意,我还是可以继续使用的。

kibana1.png
kibana2.png

这样做的话,它会使用Elasticsearch自身的日志来展示一个示例仪表盘,所以如果你在使用ElasticSearch创建索引之类的操作,应该会有数据显示出来。

关于Kibana,官方信息几乎没有提供其他能做些什么的详情。感觉可以在演示和实际环境中使用WebUI进行自定义。

以下的页面对于Kibana上可显示的面板类型等内容做了很好的总结。

    http://blog.johtani.info/blog/2013/06/19/introduction-kibana3/

在这里也写了,定制后不要忘记保存!

什么是Fluentd?

从各种地方收集日志,将所需部分输出到所需位置的工具,以尽可能避免失败。

因为公式页面上的图表很清晰易懂,所以可以引用。

fluentd

基本的输入和输出设定方法请参考以下网址:
http://docs.fluentd.org/ja/articles/config-file
(如果链接无法打开,请将”ja”改为”en”阅读)

Fluentd (td-agent)的安装

brew install "http://toolbelt.treasuredata.com/brew/td-agent.rb"

虽然人们常常提到 Fluentd,但却总是同时出现 td-agent,所以你可能会想知道这两者的关系是什么。

td-agent是一种日志收集工具。

流利的分发包Fluentd稳定版

好像是这样的。
总之,嗯,就先用td-agent吧,想着它其实是fluentd,保险一点。

請參閱以下兩個連結以獲取詳細信息。

    • http://docs.fluentd.org/ja/articles/install-by-homebrew

 

    http://docs.fluentd.org/ja/articles/faq#what-are-the-differences-between-td-agent-and-fluentd

通过Fluentd将数据插入到Kibana可视化中。

使用Elasticsearch在Kibana上进行可视化的外国人通常使用Logstash来收集日志。然而,在日本,Fluentd很受欢迎。这是因为开发团队中有很多日本人,所以有丰富的日语文档和支持。

顺便提一下,Logstash之所以普遍的原因是,Kibana、Elasticsearch和Logstash都是由同一批人开发的。不过,我感觉这里的人们在制作演示时很认真,但对文档却有点随意(可能是因为他们通过支持来赚钱)。

其实我自己无所谓,但由于我有将通过TD分析的数据可视化的需求,所以决定跟随主流。

弹性搜索(ElasticSearch) + 可视化工具(Kibana) + 日志收集工具(Fluentd) 连接

有许多关于ElasticSearch+Kibana+Fluentd联合使用的文章,但是官方文档如下。

    http://docs.fluentd.org/ja/articles/free-alternative-to-splunk-by-fluentd

安装用于Fluentd和Elasticearch协同工作的Fluentd插件。

gem install fluentd fluent-plugin-elasticsearch

虽然文档中写着,但由于安装位置与fluentd启动时加载的gem空间可能不同,所以以下方式是推荐的。

/usr/local/bin/fluent-gem install fluentd  fluent-plugin-elasticsearch

我必须这样做,否则我会遇到以下错误。

config error file="/usr/local/etc/td-agent/td-agent.conf" error="Unknown output plugin 'elasticsearch'. Run 'gem search -rd fluent-plugin' to find plugins"

将日志数据从RailsApp发送的方法

在Ruby程序中,可以通过使用td-logger gem将数据发送到Treasure Data。默认情况下不使用td-agent,但也可以通过使用它来实现(文档中称为IndirectUpload)。有关这方面的设置,请参考http://docs.treasuredata.com/articles/rails。
如果您在使用Heroku并且想要使用td-agent,您需要在Heroku上作为单独的应用程序部署td-agent进程(http://docs.treasuredata.com/articles/heroku-rails)。

通过使用td-agent,可以同时将发送到TD的数据发送到ElasticSearch中。

适用于本地的td-agent.conf设置如下:(如果是Linux系统,最好使用/usr/local的前缀)

<source>
  type forward
  port 24224
</source>
<match td.*.*>
  type copy
  <store>
    type tdlog
    apikey [YOUR_API_KEY]
    auto_create_table
    buffer_type file
    buffer_path /usr/local/var/log/td-agent/buffer/td
    use_ssl true
  </store>
  <store>
    type elasticsearch
    logstash_format true
    include_tag_key true
    tag_key _key
    # id_key user_id
    # host localhost
    # port 9200
  </store>
  flush_interval 10s
</match>

在这种情况下,为了同时将数据传送到TD和ElasticSearch,我们正在使用copy输出插件。详细信息请参阅http://docs.fluentd.org/en/articles/out_copy。

在使用Elasticsearch时可以指定的参数

logstash_format: trueにすると、Kibanaが想定しているlogstash形式でログの時間情報を入れる

Timestampのインデックスの粒度を変えたい場合は、http://y-ken.hatenablog.com/entry/fluentd-elasticsearch-kibana-index-partitioning を参考にlogstash_dateformatも指定する

include_tag_key: matchで指定している部分のtag名をデータに含めるかどうか

tag_key: include_tag_keyの場合、その時のキーの名前は何にするかを指定

id_key: どのフィールドをelasticseachの_idとして使うのか指定。指定しないとランダムになる

host: elasticsearchのホスト(default: localhost)

port: elasticsearchのポート(default: 9200)

比起阅读解释,阅读以下代码能更快地理解细节。 可在以下链接找到代码:https://github.com/uken/fluent-plugin-elasticsearch/blob/master/lib/fluent/plugin/out_elasticsearch.rb

启动td-agent

ln -sfv /usr/local/opt/td-agent/homebrew.mxcl.td-agent.plist ~/Library/LaunchAgents/.
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.td-agent.plist

确认是否已启动。

ps aux | grep 'td-agent'

如果没有启动的话,

tail /usr/local/var/log/td-agent/td-agent.log

看看会比较好。

另外,以下链接可以供参考

将TD查询的结果放入另一个TD表中的方法。

bannerAds