Fluentd日志处理-tail拉取

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Fluentd日志处理-tail拉取相关的知识,希望对你有一定的参考价值。

利用tail内置插件来获取日志

tail插件相当于tail -f,它会不断的获取更新的日志,

<source>
    @type     tail
    path      /log-dir/*-app.log
    pos_file  /log-dir/app.log.pos
    tagidaas
    refresh_interval 10s
    read_from_head true
    path_key path
    <parse>
            @type json      #把日志格式直接解析为json格式
    </parse>
</source>
<source>
  @type     tail
  path      /log-dir/*-debug.log
  pos_file  /log-dir/debug.log.pos
  tagdebug
  multiline_flush_interval 2s
  read_from_head true
  path_key path
    <parse>
            @type   multiline               #multiline 相当于logstash的multiline 
            format_firstline /^(?<level>(INFO|WARN|ERROR)+)/
            format1 /(?<level>[a-zA-Z]+)s*[(?<date>[0-9/-: ,]+)] (?<logger>[a-zA-Z.]+):(?<message>[dDs]+)/
    </parse>
</source>
<source>
    @type     tail
    path      /log-dir/*-requests.log
    pos_file  /log-dir/request.log.pos
    tagrequest
    refresh_interval 10s
    read_from_head true
    path_key path
    <parse>
        @type regexp
        expression /(?<message>.*)/
    </parse>
</source>

第一个filter是为日志添加字段,tag和宿主机的名字,这个可能需要调docker,直接取只会取到docker的ID

<filter *>
    @type record_transformer             
    <record>
        tag ${tag}
        hostname "#{Socket.gethostname}"
    </record>
</filter>
    <filter request>
    @type    grep                         #排除掉一些不需要的日志
    <exclude>
        key message
        pattern /.*healthcheck.*|.*prometheusMetrics.*|.*(v1+/)+(configurations)+(/+versions).*/
    </exclude>
</filter>
<filter request>
    @type parser
    key_name message
    reserve_data yes
    <parse>   
        @type regexp
        expression  /(?<ip>[^|]+)|(?<date>[^|]+)|(?<statusCode>[^|]+)|(?<contentLength>[^|]+)|(?<reqURI>[^|]+)|(?<referer>[^|]+)|(?<userAgent>[^|]+)|(?<reqId>[^|]+)|(?<internalIp>[^|]+)|(?<reqHost>[^|]+)|(?<reqOrigin>[^|]+)|(?<reqTime>[^|]+) |.*|(?<requestMethod>[w]+)/
    </parse>
</filter>
<match idaas>
    @type rewrite_tag_filter        #重写tag,匹配的重写tag为app.token,不匹配的重写标app.idaas
    <rule>
        key     thread_name
        pattern /token/
        tag     app.token
    </rule>
    <rule>
         key     thread_name
         pattern /token/
         tag     app.idaas
         invert  true
    </rule>
</match>

上面已经把idaas进行分流处理,这里我们把app.token进行一次过滤,然后和app.idaas一起输入到ES中

<filter app.token>
    @type parser
    key_name thread_name
    reserve_data yes
    <parse>
        @type regexp
        expression /(?<thread_name>[A-Za-z0-9.-_=/? ]+.)/
    </parse>
</filter>
<match request>
    @type elasticsearch
    host elasticsearchlog-lb.elasticsearch-log
    index_name    s3-fluentd-request
    type_name     s3-fluentd-request
    flush_interval 2s
    include_timestamp true
    ssl_verify    false
</match>
<match debug>
    @type elasticsearch
    host elasticsearchlog-lb.elasticsearch-log
    index_name    s3-fluentd-debug
    type_name     s3-fluentd-debug
    flush_interval 2s
    include_timestamp true
    ssl_verify    false
</match>
<match app.*>
    @type elasticsearch
    host elasticsearchlog-lb.elasticsearch-log
    index_name    s3-fluentd-idaas
    type_name     s3-fluentd-idaas
    flush_interval 2s
    include_timestamp true
    ssl_verify    false
</match>

以上是关于Fluentd日志处理-tail拉取的主要内容,如果未能解决你的问题,请参考以下文章

fluentd日志处理-安装配置

用于多行的 Docker Fluentd 日志记录驱动程序

Fluentd日志处理-插件使用和调试问题

是否可以使用 fluentd 的 redis_store 输出插件来处理大量日志?

ELK系列~对fluentd参数的理解

详解三款日志采集工具--Logstash,Fluentd, Logtail比较