文章目录

  • logstash概述
  • logstash安装运行
  • logstash配置详解
  • 输入
  • 过滤
  • 输出
  • 案例
  • 举例1:使用Logstash展示标准输入、输出
  • 举例2:使用Logstash收集日志文件并输出到控制台
  • 举例3:使用Logstash收集日志文件并输出到es
  • 举例4:使用logstash输入 filebeat收集上的日志 并输出到控制台
  • 举例5:使用logstash输入 filebeat收集的日志 并解析字段 输出到es


logstash概述

LogStash是开源的服务器端数据处理管道,能够同时从多个来源采集数据、转换数据,然后将数据发送到喜欢的"存储库"

Logstash管道有两个必需的元素,输入和输出,以及一个可选元素filter。输入插件使用来自源的数据,过滤器插件根据您的指定修改数据,输出插件将数据写入目标。

logstash 入库mysql logstash api_beat

logstash安装运行

安装须知:要求jdk1.8+

logstash下载页面

解压安装包,运行./bin/logstash即可

logstash配置详解

logstash的配置有三部分,如下

input { #输入
   stdin { ... } #标准输入
 }
 filter { #过滤,对数据进行分割、截取等处理    
 ...
 }
 output { #输出
   stdout { ... } #标准输出
}
输入

采集各种样式、大小和来源的数据,数据往往以各种各样的形式,或分散或几种地存在于很多系统中。

logstash支持各种输入选择,可以在同一时间从众多常用来源捕捉事件,能够以连续的流式传输方式,轻松地从日志、指标、web应用、数据存储等采集数据

过滤

实时解析和转换数据

数据从源传输到es的过程中,logstash过滤器能够解析各个事件,识别已命名的字段已构建结构,并将它们转换成通用格式,以便更轻松、快速地分析和实现商业价值

输出

logstash提供众多输出选择,可以将数据发送到要指定的地方。

案例
举例1:使用Logstash展示标准输入、输出
./bin/logstash -e 'input { stdin { } } output { stdout {} }'
## 输入
你好
## 输出
{
    "@timestamp" => 2020-09-27T08:41:12.947Z,
          "host" => "wojiushiwo-2.local",
       "message" => "你好",
      "@version" => "1"
}
举例2:使用Logstash收集日志文件并输出到控制台
input {
        file {
                path => "/Users/wojiushiwo/Software/logstash-6.5.4/logs/a.log"
                start_position => "beginning"
        }
}
filter {
   mutate {
     split => {"message"=>"|"}
  }
}
output {
        stdout { codec => rubydebug }
}

配置文件的意思是 读取a.log文件,并按照分隔符|进行分隔,最后输出到控制台

备注:a.log中内容为2020-09-25 15:40:21|INFO|读取数据|参数:id=1003

{
      "@version" => "1",
       "message" => [
        [0] "2020-09-25 15:40:21",
        [1] "INFO",
        [2] "读取数据",
        [3] "参数:id=1003"
    ],
    "@timestamp" => 2020-09-27T08:44:58.808Z,
          "path" => "/Users/wojiushiwo/Software/logstash-6.5.4/logs/a.log",
          "host" => "wojiushiwo-2.local"
}
举例3:使用Logstash收集日志文件并输出到es
input {
        file {
                path => "/Users/wojiushiwo/Software/logstash-6.5.4/logs/a.log"
                start_position => "beginning"
        }
}
filter {
   mutate {
     split => {"message"=>"|"}
  }
}
output {
        elasticsearch { hosts => ["127.0.0.1:9200"] }
}

默认es 索引命名规则:logstash-日期

举例4:使用logstash输入 filebeat收集上的日志 并输出到控制台

filebeat_logstash.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /Users/wojiushiwo/Software/wojiushiwo/log/*.log
output.logstash:
  hosts: ["localhost:5044"]

logstash.conf

input {
        beats {
                port => "5044"
        }
}
output {
        stdout { codec => rubydebug }
}

启动filebeat、logstash即可。

举例5:使用logstash输入 filebeat收集的日志 并解析字段 输出到es

filebeat_logstash.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /Users/wojiushiwo/Software/wojiushiwo/log/*.log
output.logstash:
  hosts: ["localhost:5044"]

日志格式如 c.w.mapstruct.MapStructApplication : DAU|1737|浏览页面|2020-09-25 02:16:05

logstash.conf

input {
        beats {
                port => "5044"
        }
}
filter {
   mutate {
     split => {"message"=>"|"}
  }
 mutate {
        add_field => {
           "userId"=> "%{message[1]}"
           "visit"=> "%{message[2]}"
           "date"=> "%{message[3]}"
        }
}
mutate {
        convert => {
           "userId"=> "integer"
           "visit"=> "string"
           "date"=> "string"
        }
}
}
output {
        elasticsearch {
           hosts => [ "127.0.0.1:9200" ]
  }
}

从filebeat读入数据,根据分隔符|进行分隔,并解析每个字段即类型,输出至es

logstash 入库mysql logstash api_elasticsearch_02