欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ELK+springboot搭建分布式日志系统---细节以及扩展经验之谈

程序员文章站 2022-05-03 11:01:56
...

上篇主要介绍了怎么搭建服务的,这篇就主要讲怎么用得到的日志数据处理

使用的官网最新的6.6.*(版本不一的话配置的FILFER写法可能不一样)

第一个业务场景:记录系统日志+项目日志

logstash日志可参考如下:

input {
 beats {
   port => 5044
  }
}
filter {
  if [fields][logtype] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
    }
    syslog_pri { }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
  if [fields][logtype] == "json" {
    json {
      source => "message"
      target => "data"
    }
  }
}
output {
  if [fields][logtype] == "json"{
    elasticsearch {
      hosts => ["127.0.0.1:9200"]
      index => "json-%{+YYYY.MM.dd}"
    }
  }

  if [fields][logtype] == "syslog"{
    elasticsearch {
      hosts => ["127.0.0.1:9200"]
      index => "syslog-%{+YYYY.MM.dd}"
    }
  }

这里有几个知识点

一:input输入框的来源很多:kafka(下一章将讲到)+redis+各种官网支持的strem流,具体复杂的配置可以下一节讲到

二:input获取的是beat(类如filebeat)端口5044的socket请求,因为我们要将数据json化处理(更好的用于角标处理)。grok 语法用于替换,将原字段替换成新的,比如(这里我取了个他人写的文章实例):

55.3.244.1 GET /index.html 15824 0.043 这样的字符串,我要替换成json
grok {
match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
}

就会变成

client: 55.3.244.1
method: GET
request: /index.html
bytes: 15824
duration: 0.043

这里具体语法不是主要的,主要是要组装成我们需要的数据样式

三:filer拦截器处理能更好构建数据

  这里我将message用json格式,也可以添加额外的;logtype属性用于区分系统日志还是beat日志

四:output可以多输出源配置,最常见的是输出到ES上,其实还可以同时输出到日志文件上(可以在初期用于检查数据传输的结构是否正确),如配置(注意index指数类似ID的功能):

file {
      path => "/config-dir/test.log"
      flush_interval => 0
  }
  elasticsearch {
    hosts => ["127.0.0.1:9200"]
    index => "els-server-%{+YYYY.MM.dd}"
  }

五:配置出现问题经验

由于版本原因,官网文档有部分写的模糊(也可能是我英文不好的原因),我就给大家演示下我出现过的配置错误:

1比如input端口参数故意写错,logstash  -f logstash-test1.conf(这里是window启动bat和配置test1文件),cmd窗口出现:

ELK+springboot搭建分布式日志系统---细节以及扩展经验之谈

input类型没有为1的,提示明确告诉你咯(外国的软件设计上就这么牛),这是我改动的

input {
 1 {
   port => 5044
  }
}

还有就是格式问题,这里举个kafka的input例子(我出现的),先列个正确的写法():

topics => ["els-server"]
topics_pattern => "els-server.*"

然后随便改动下分区(改为ls-server.*),cmd启动

ELK+springboot搭建分布式日志系统---细节以及扩展经验之谈

你发现执行到这就完了,提示你设置分区,可见你的分区参数是错误

这还是好的,如果你参数配置错误,发现根本启动不了(仔细查看错误,也会告诉你哪一行配置错误),这种问题出现在版本不同很常见!

综上所述这么多,主要是还是想说:仔细看日志吧少年!

ELK+springboot搭建分布式日志系统---细节以及扩展经验之谈

 

ELK+springboot搭建分布式日志系统---细节以及扩展经验之谈

 

以为这么就完了,没呢,来了老弟!

ELK+springboot搭建分布式日志系统---细节以及扩展经验之谈

kibana的功能模块还是可以多学学的,哈哈哈,有帮助的话给点个赞