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

zfjoy520 · 2016年03月23日 · 最后由 xworm 回复于 2016年03月24日 · 3544 次阅读

晚上无意间翻到了@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
     ...

代码写得不好,轻拍

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

Fluentd +1

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

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

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

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