logstash实战

     创建logstash-test.conf配置文件

input {
  file {
    path => "/root/logstash/service-logs/info.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}

filter {
  grok{
    match => {
      "message" => "(?<log_time>(%{YEAR}-%{MONTHNUM}-%{MONTHDAY})%{SPACE}%{TIME}) %{DATA:log_level} %{DATA:class_name} %{DATA:thread} %{GREEDYDATA:content}"
    }
  }
}

output {
  stdout {
    codec => rubydebug
  }

  elasticsearch {
    hosts => ["192.168.21.128:9200"]
  }
}

日志内容切分

  只需要在logstash的filter中使用grok语法即可完成日志内容切割。

自定义模板

       使用Logstash采集日志的时候,如果没有指定索引库或模板,则会使用ElasticSearch默认自带的名字为”logstash”的模板,默认应用于Logstash写入数据到ElasticSearch使用。但是我们希望使用自定义的索引模板。首先创建一个template_mylog的模板,配置这几个字段:log_time、thread、log_level、class_name、content

PUT _template/template_mylog
{       
        "index_patterns" : [
            "mylog-*"
        ],
        "order" : 10,
          "settings": {  
              "index.number_of_shards": 3,  
              "number_of_replicas": 1
          },  
      "mappings" : {  
          "properties" : {  
             "log_level" : { "type" : "keyword" },
             "thread" : { "type" : "keyword" },
             "class_name" : { "type" : "keyword" },
              "content" : { "type" : "keyword" },
             "log_time" : {   "type" : "date","format" : "yyyy-MM-dd HH:mm:ss.SSS"}
          }  
         
      }  
  }

  一个是index_patterns,该配置表明自动创建的索引开头以mylog-的索引库都会采用该模板;而order表示顺序级别,在有相同的索引模板中,该值越大,优先级越高。只需在output中的添加如下配置

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

写入多个索引库

  logstash采集日志的时候,有多种不同的日志并且需要采集到不同的索引库中,这时就可以通过标记来进行写入。比如采集/home/logs目录下的日志定义一个标记为tag1,采集/home/logs2目录下的日志定义一个标记为tag2,那么在写入ElasticSearch的时候只需要根据该标记区分写入即可。

    file {
        path => ["/home/logs/mylog-1.log"]
        type => "tag1"
        start_position => "beginning"
        sincedb_path => "/dev/null"
    }
    file {
        path => ["/home/logs2/*.txt"]
        type => "tag2"
        start_position => "beginning"
        sincedb_path => "/dev/null"
    }

logstash output配置示例

    if [type] == "tag"{
      elasticsearch {
         hosts => ["127.0.0.1:9200"]
         index => "mylog-%{+YYYY.MM.dd}"
      }
    }

    if [type] == "tag2"{
      elasticsearch {
         hosts => ["127.0.0.1:9200"]
         index => "mylog-%{+YYYY.MM}"
      }
    }

多行内容合并

  在采集日志的时候,经常会遇到异常日志,并且异常日志并非为一行内容,如果我们按照原有的方式采集,在ElasticSearch中显示的是一行一行的内容。Logstash中支持多行日志合并,使用multiline.pattern、multiline.negate和multiline.what来实现配置实现。

  

 

  

 

posted on 2023-05-13 16:29  溪水静幽  阅读(48)  评论(0)    收藏  举报