Rails Rails Log 格式化 + Kids日志收集

zfjoy520 · 发布于 2016年3月23日 · 最后由 xworm 回复于 2016年3月24日 · 1243 次阅读
958

晚上无意间翻到了@taojay315 的关于日志收集的帖子(https://ruby-china.org/topics/27523),正好这段时间也在研究 知乎的Kids

所以就借了@taojay315的思想和代码,根据自己的想法,写了一个demo,见:https://github.com/zfjoy520/lograge_service_demo

lograge_service_demo

基于 lograge + kids + taojay315的一篇文章

Rails Log Process

写的一个即可以让Rails保持原生本机文件LOG不变, 又可以将 request / sql / exception 等日志发往kids的一个demo.

原作者在这里: https://ruby-china.org/taojay315

其中,对Rails原生的丑日志的重新格式化部分抄自: concise_logging: https://github.com/gshaw/concise_logging

并有所修改.

相关事项

  • Ruby 2.3.0
  • Rails 4.2.5
  • Kids: https://github.com/zhihu/kids
  • Kids安装及使用方式见: https://github.com/zhihu/kids/blob/master/README.zh_CN.md
  • Kids启动所需配置文件在: config/conf/kids_server.conf
  • Kids连接配置文件在: config/settings/kids.yml
  • 配置文件加载用到了: hashie 中的 Hashie::Mash
  • 不太喜欢将一大堆配置文件都放在 config 目录下, 所以在 config 目录下新建了一个 settings 目录(config/settings)
  • 里面的 *.yml 都将加载到 ::Settings::Xxx 中
  • 相关的 initializer 文件在: config/initializers/settings.rb

开始吧

安装Kids

下载 Kids源码发布包(文件名为 kids-VERSION.tar.gz),运行:

tar xzf kids-VERSION.tar.gz
cd kids-VERSION
./configure
make && make install

Kids 编译好后,运行:

$ kids -c lograge_service_demo/config/conf/kids_server.conf 

kids 使用 redis 协议,打开一个rails console:

2.3.0 :xxx > r = Redis.new(port: 3388)
2.3.0 :xxx > r.psubscribe('*') do |on|
2.3.0 :xxx >   on.pmessage do |pattern, channel, message|
2.3.0 :xxx >     puts "pattern: #{pattern}, channel: #{channel}, message: #{message}"
2.3.0 :xxx >   end
2.3.0 :xxx > end

可以观察日志的收集情况

启动web server

因为在 lib/lograge_service/railtie.rb 中指定了 development 环境不生效, 所以需要以 production 来跑

$ puma -p 3000 -e production -t 32:32 -w 1

额外的代码

只需要在 config/application.rb 中引入 lib/lograge_service 即可:

# [config/application.rb]
...

require File.expand_path('../../lib/lograge_service', __FILE__)

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)

module LogrageServiceDemo
  class Application < Rails::Application
     ...

代码写得不好, 轻拍

共收到 7 条回复
2973

最近正要研究这方面的东西,先收藏,不过看头像感觉好熟悉,请问是猴哥吗?

958

@small_fish__ 不是哈。_^

7102

Fluentd +1

958

fluentd、logstash 这些都看过,虽然比较成熟,但过于复杂,看重kids的轻量级

7733

Fluentd +1

3035

最近正好在看日志处理的 concise_logging 的依赖设定简直是个神坑 "rails", "~> 4.1" rails5下装出来是最老的 0.0.1 版本 😂😂

作者好像也没更新了 pull requests 里面躺着两个也不管 正好这会儿就看到这个,先来学习一下

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册