ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Graylog处理docker容器的多行日志之过程记录

2021-12-17 10:05:14  阅读:290  来源: 互联网

标签:opt bit gelf fluent Graylog conf docker logstash 日志


docker容器虽然支持gelf日志驱动,却不支持合并多行日志为1个message,详情见 log driver should support multiline · Issue #22920 · moby/moby · GitHub

,这导致在graylog查看java应用的报错日志时非常不方便。

 

解决思路:用logstash处理后再发给graylog。

1、docker安装logstash

将 /usr/share/logstash/conf.d/ 目录映射出来,方便编辑配置文件

mkdir -p  /opt/logstash/conf.d/

vi /opt/logstash/logstash.yml

logstash.yml内容如下:

path.config: /usr/share/logstash/conf.d/*.conf
path.logs: /var/log/logstash

 

vi /opt/logstash/conf.d/test.conf

input {
    file{
        path => "/usr/share/logstash/conf.d/test.log"
        start_position => "beginning"
        type=>"runtimelog"
                codec=> multiline {
                        pattern => "^%{TIMESTAMP_ISO8601} "
                        negate => true
                        what => "previous"
                }
	}
}

filter {}

output {
	stdout {
        	codec => rubydebug      
	}
}

 

docker run -d -p 5044:5044 -p 5045:5045 -p 12200:12200/udp --name logstash -v /opt/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml -v /opt/logstash/conf.d/:/usr/share/logstash/conf.d/ logstash:7.16.1

 

2、进入容器内安装插件

logstash-plugin install logstash-output-gelf
logstash-plugin install logstash-input-gelf

 安装完插件再添加相关conf

vi /opt/logstash/conf.d/app.conf

input {
    gelf {
	port =>12200
	host => "0.0.0.0"
        codec => multiline {
            pattern => "^%{TIMESTAMP_ISO8601} "
            negate => true
            what => "previous"
        }
    }
}

filter {}

output {
    gelf {
	host => "172.17.0.1"
        port => 12201
        protocol => "UDP"
    }
}


测试结果:input类型为file时,multiline编码正常,input类型为gelf时,无效...

参考链接:docker - logstash-5.x gelf input multiline codec doesn't work - Stack Overflow

 

既然logstash行不通,换成fluent-bit试试:

mkdir -p /opt/fluent-bit/

vi /opt/fluent-bit/fluent-bit.conf

[INPUT]
    name              forward
    Listen            0.0.0.0
    Port              24224
    Buffer_Chunk_Size 1M
    Buffer_Max_Size   6M
    #Multiline	      On
    #Parser_Firstline  multiline_pattern

[OUTPUT]
    Name                    gelf
    Match                   *
    Host                    172.17.0.1
    Port                    12201
    Mode                    udp
    Gelf_Short_Message_Key  log
docker run -d --name fluent -p 24224:24224 -p 24224:24224/udp -v /opt/fluent-bit/fluent-bit.conf:/fluent-bit/etc/fluent-bit.conf fluent/fluent-bit:1.8

很遗憾,fluent-bit的input类型为forward时,也不支持Multiline处理... unknown configuration property 'Multiline'. The following properties are allowed: unix_path, buffer_chunk_size, and buffer_max_size.

参考链接:logging - Does Fluent Bit Input plugin "forward" support multi-line logs processing? - Stack Overflow

标签:opt,bit,gelf,fluent,Graylog,conf,docker,logstash,日志
来源: https://www.cnblogs.com/sherlock-merlin/p/15692111.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有