经验与实践

前两篇小说里大家介绍了nxlog的日志收集和转化《ELK系列~Nxlog日志收集加转载(解决log4日记换行导致json转换失利难点)》,前些天我们第一总计一下,在与log4和fluentd及elasticsearch合营工作时索要专注的多少个点,这多少个点也是大家平时境遇的坑,希望得以帮到大家!大家从日记发生端log4方始说。

  1. log4亟待留意的,编码与时光戳格式
  2. nxlog需求注意output里对情节处理
  3. fluentd要求留意类型和format的确定

1
log4生出日志,格式必须是utf-8,ansi编码对中文解析时有难题,紧要代表在fluentd到elasticsearch写多少时

      <datePattern value="yyyyMMdd&quot;Error.log&quot;" />
      <encoding value="utf-8" /> 
      <layout type="log4net.Layout.PatternLayout">
      </layout>
    </appender>

2
log4日志里,时间戳@timestamp,需要是UTC时间,格式为yyyy-MM-ddTHH:mm:ss.fff+0800

        private static string FormatStr(string level, string message, Exception ex)
        {
            var json = JsonConvert.SerializeObject(new
            {
                target_index = projectName,
                timestamp = DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fff+0800"),
                Level = level.ToString(),
                Message = message,
                StackTrace = ex?.StackTrace
            });
            json = json.Replace("target_index", "@target_index").Replace("timestamp", "@timestamp");
            return json;
        }

3
nxlog日志收集时,由于log4暴发的数量都是\r符号,所以在nxlog.conf里须要对output举办过滤,当然\n,使它成为两条音信,这样中央音信里就一贯不\r了,json解析时就不会有标题

<Output out>
    Module      om_tcp
    Host        192.168.200.214
    Port        24224

    Exec $raw_event =$raw_event + "\n";
</Output>

4
fluentd的配备里,类型需即使tcp,格式format需借使none

<source>
    @type tcp
    tag windows.log
    format none
    port 24224
    bind 0.0.0.0
  </source>
  <filter docker.**>
    type parser
    format json
    time_format %Y-%m-%dT%H:%M:%S.%L%Z
    key_name log
    reserve_data true
  </filter>
  <match **>
    @type stdout
  </match>

5
最终就是马到成功写入elasticsearch,通过kibana就可以查阅日志了

json 1

请把读书作为一种习惯!

请把积攒和小结变成一种学习的格局!

谢谢各位的翻阅!

 

相关文章

网站地图xml地图