Rails centralized logging with fluentd

  • 20 Jun 2013
  • Posted inrailsloggingfluentdkibana

据我了解的Ruby/Rails stack中,有以下几种管理日志的方式:

  • Rails默认log,啥都不管
  • 仍是log碎片,定期rotate
  • 提供logging的中心服务器
  • 不用本地logging,直接使用ssas服务

目前有较多的针对应用层的日志服务,有开源也有收费的,大致做法都是在本地安装一个gem或者服务,直接在应用中把exception/logging等分发到互联网服务(如,SAAS)中。这类服务大都提供强大的报表和分析工具,能够对日志进行集中处理。很方便但是不便宜,而且我觉得日志管理属于应用之外范畴,应该在系统级别支撑更为妥当。这类有代表的服务如Splunk,Loggly, Papertrail等。

因此,我比较赞成使用中心服务器,在系统层面对集群日志集中管理。也有不少提供该类服务的工具和解决方案,目前我使用下来,最容易也是最透明的管理方式: Rails提供Syslog日志,用JSON存储的日志收集服务 Fluentd ,配合 ElasticSearch 文本搜索引擎,和一个简洁有效的Web界面 - Kibana

安装配置步骤如下

  1. 配置Rails用syslog

    gem 'SyslogLogger' 

    production.rb 加入下面代码:

    require 'syslog/logger'
    
    config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new)

    注意这个Gem后续版本已经更改了Module是Class的名字,源码在: https://github.com/ngmoco/syslog_logger

  2. 中心服务安装Fluentd,ElasticSearch和Kibana

    • 安装Fluentd: 官网提供了不同的发行包和安装方式,我建议使用Gem安装。参考: http://docs.fluentd.org/articles/install-by-gem

    • 安装ElasticSearch, 下载地址 ,这是Java写的服务,解压之后直接运行:

      ./bin/elasticsearch -f
    • 安装ElasticSearch for Fluentd的插件

      gem install fluent-plugin-elasticsearch
    • 安装Kibana,参考: http://kibana.org/intro.html

    • 配置Fluentd并且启动服务

      fluentd --setup ./fluent

      编辑 ./fluent/fluent.conf 文件

      <source>
        type syslog
        port 42185
        tag syslog
      </source>
      
      <source>
        type forward
      </source>
      
      <match syslog.**>
        type elasticsearch
        logstash_format true
        flush_interval 10s # for testing
      </match>

      启动服务

      fluentd -c ./fluent/fluent.conf -vv &

让unix服务器转发syslog日志很简单,只要在 /etc/rsyslog.conf 里面加入一行代码:

	*.* @127.0.0.1:42185

完成上述三步,即可在网页访问5601端口看到Kibana的日志搜索界面。Kibana本身是基于Sinatra的一个开源项目,目前还没有加入认证等模块。为了方便访问,我直接通过Nginx反向代理,在开发环境改了Hosts,通过一个不存在的域名进行访问。

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章