美文网首页
influxdb-logger (Rails)

influxdb-logger (Rails)

作者: zhcalvin | 来源:发表于2019-02-25 18:30 被阅读30次

Logger for Influxdb in Rails

今天,公司需要把log记录放在influxdb里面记录。因为log量比较大,所以放在influxdb这种时间序列数据库里检索起来比较快捷。

项目的框架是Ruby on Rails,下面我们就来介绍Rails里面用influxdb记录log的方法。全程使用了公司改进的一个开源框架:rails-influxdb-logger,喜欢的欢迎来点赞。

支持版本

  • Rails 4 和 5

安装

首先添加这个gem:

gem 'influxdb-logger', '2.0.0'

接着执行:

$ bundle

或者这样安装:

$ gem install influxdb-logger

基础用法

config/environments/production.rb(test.rb, development.rb) 中

source-ruby
config.logger = InfluxdbLogger::Logger.new(influxdb_tags: ... tags: ... settings: ... batch_size: ..., interval: ...,  async: ...)

默认情况下, influxdb-logger 将记录 duration, db, format, location, message, message_type, method, params, path, severity, status, view 这一系列特定的字段

这就意味着我们的 influxdb-logger 使用配置的好处仅仅在于如何和influxdb交流:

source-ruby
config.logger = InfluxdbLogger::Logger.new(settings: {
  database: ENV['INFLUXDB_DB_NAME'],
  series: ENV['INFLUXDB_SERIES'],
  username: ENV['INFLUXDB_USER'],
  password: ENV['INFLUXDB_USER_PASSWORD']
})

高级用法

  • influxdb_tags[Array]: 规定了一系列tag-set。 如果我们需要经常检查关于特定的controlleraction的influxdb日志, 最好的方法就是利用influxdb_tags给这两个字段打上tags来加快请求速度:
source-ruby
config.logger = InfluxdbLogger::Logger.new(infludb_tags: [:controller, :action], settings: ...)

  • tags[Hash]: 如果其余的字段需要被发送到influxdb, 可以利用tags, 例如ip信息代理:
source-ruby
   config.logger = InfluxdbLogger::Logger.new(tags: {
     remote_ip: -> request { request.remote_ip }
   },  settings: ...)

通过的tags可以是一个组成任何ruby基础类型的Hash或者是一个lambda

  • settings: 它定义了influxdb-logger如何连接到influxdb数据库。 这里是关于它的详细文档:influxdb-ruby.
source-ruby
   InfluxdbLogger::Logger.new(settings: {
     host: 'influxdb',
     retry: 3,
     time_precision: 'ms',
     database: ENV['INFLUXDB_DB_NAME'],
     series: ENV['INFLUXDB_SERIES'],
     username: ENV['INFLUXDB_USER'],
     password: ENV['INFLUXDB_USER_PASSWORD']
   })

  • batch_size, interval: 由于logging在任何拥有庞大用户数据库的应用程序环境中都是一个高频次的工作。这两个参数使日志记录操作的分批处理成为可能。

例如,我们可以让logger记录1000次以上或者距离第一次记录超过1000ms的logging操作:

source-ruby
    InfluxdbLogger::Logger.new(batch_size: 1000, interval: 1000, settings: ...)

  • async: 决定logger是否被异步地写入到influxdb, 默认是false。阅读这里的代码以便了解它是如何工作的。
source-ruby
    InfluxdbLogger::Logger.new(async: false, settings: ...)

相关文章

网友评论

      本文标题:influxdb-logger (Rails)

      本文链接:https://www.haomeiwen.com/subject/uglgyqtx.html