Fluentd + Sinatra日志文件收集实战

 

Fluentd + Sinatra日志文件收集实战

安装fluentd有很多方法,非常简单,请自行查询
首先创建sinatra应用,我们要做的就是通过fluentd将日志写入到文件,并进行切割:内容如下

require 'sinatra'
require 'fluent-logger'

get '/' do
Fluent::Logger::FluentLogger.open(nil, :host=>'localhost', :port=>24224)
Fluent::Logger.post(“my.test", params)  
end

下面我们来配置fluentd,初始化配置文件,控制台执行:fluentd —setup config
则会生成config/fluentd.conf,我们先将日志输出到控制台,修改文件内容如下

<source>
  type forward
  port 24224
</source>
<match dsp.test>
  type stdout
</match>

启动fluentd,执行 fluentd -c config/fluentd.conf 查看启动日志,确保启动正常,此时访问我们的程序,就可以看到日志文件在flaunted
的控制台输出了,配置详情下面会做详细解释,下面我们看看如何将日志输出到文件,修改配置文件

<source>
  type forward
  port 24224
</source>
<match my.test>
  type file
  path /path/access_log
  time_slice_format %Y%m%d%H%M
  time_slice_wait 10m
  time_format %Y%m%dT%H%M%S
  compress gzip
  utc
  delimiter #SPACE or COMMA. "\t"(TAB) is used by default
</match>

重新启动fluentd, ctrl+c停止运行,再次访问http://localhost:4567/?from=usera&to=userb
发现日志文件创建成功了,并且没分钟会创建一个新的文件,文件的内容是
时间戳 + tag(这里是my.test) + {"from":"usera","to":"userb”}


输出到文件,time_slice_format用于日志切割,注意match dsp.test 这里的dap.test要与Fluent::Logger.post("dsp.test", params) 中的对应 
<source></source>和<match></match>两个标示中分别定义日志的输入和输出

source/type  日志文件输入类型,它能够从各种日志源上收集日志
包括:tcp, udp, http, tail, unix, scribe, multiprocess, syslog,等等
match/type   日志文件输出类型,包括控制台,文件,HDFS,mongo, s3等

文件输出格式, delimiter制定分隔符:
time[delimiter]tag[delimiter]record\n
例子:
2014-06-08T23:59:40[TAB]file.server.logs[TAB]{"field1":"value1","field2":"value2"}\n

默认格式:时间戳 + tag标示 + 记录内容,其中时间戳和tag标示由fluentd默认提供,也可以通过如下配置控制是否输出到文件
默认是开启的
output_tag false
output_time false

time_slice_wait 10m
延时10分钟等待日志到,假设日志切割一小时划分,有一条日志再1:59创建,但是到达Fluentd节点的事件再2:00-2:10,那么Fluentd会将这个日志
一同记录到1:00-1:59这个时间段的文件中,避免临界的日志记错到其他时间段
time_slice_format %Y%m%d%H%M%S

用于日志文件切割
%y%m%d每日创建一个新的日志文件
%y%m%d%H每小时创建一个新的日志文件
%y%m%d%H%M每分钟创建一个新的日志文件

  compress gzip
使用gzip压缩日志,默认不开启

 通过match的模式匹配,可以创建不同的日志文件,假设要统计更新用户信息,和查看用户信息两个日志
 可以这样配置文件
<source>
  type forward
  port 24224
</source>
<match user.update>
  type file
  path /path/update_user_log
  ..
</match>

<match user.show>
  type file
  path /path/show_user_log
  ..
</match>

并在相应的action中发送post请求,制定模式
Fluent::Logger.post(“user.update", params)
Fluent::Logger.post(“user.show", params)

 

更多精彩内容清关注微信订阅号: Ruby程序员

你可能感兴趣的:(Logger,Fluentd,日志收集)