Logstash 使用文档

微服务框架(二十八)

Posted by Tillend on April 13, 2019

  此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。

  本文为Logstash 使用文档

本系列文章中所使用的框架版本为Spring Boot 2.0.3-RELEASE,Spring 5.0.7-RELEASE,Dubbo 2.6.2。

Logstash

Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到存储库中。(ELK套件中存储库为ES)

Logstash 启动

pipelines目录下存放了logstash所有的数据处理管道配置文件,故会启动所有流水线

--config.reload.automatic参数,自动重载配置

1
nohup ./bin/logstash --config.reload.automatic -f ./pipelines/ &

!> 目前为nohup实现后台启动,后续可考虑统一至supervisor管理

Logstash input

为了接收到日志信息,需要配置input插件

tcp

若日志信息为json格式,则codecjson,文本为plain

1
2
3
4
5
6
7
input {
  tcp {
    host => "172.16.7.7"
    port => "5045"
    codec => "json"
  }
}

beat

1
2
3
4
5
6
7
input{
  beats {
    host => "172.16.7.7"
    port => "5044"
    add_field => ["log_channel", "nginx"]
  }
}

Logstash filter

Logstash filter插件在事件执行的中间过程进行相关的数据处理,通常根据事件的特征选择性地使用相应的过滤器。

Filter插件列表详见Logstash Filter

grok

简述

Grok可以将非结构化日志数据解析为结构化和可查询的内容。

此工具非常适用于syslog日志,apache和其他Web服务器日志,mysql日志,以及通常为人类而非计算机使用而编写的任何日志格式。

Logstash默认提供约120种模式。详见grok原生正则,亦可在patterns_dir参数使用自定义的正则模式串

工作原理

Grok的工作原理是将文本模式组合成与日志匹配的内容。grok模式的语法是 %{SYNTAX:SEMANTIC}

示例

1
55.3.244.1 GET /index.html 15824 0.043

上述HTTP日志可使用以下模式匹配

1
%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}

对应Logstash文件为

1
2
3
4
5
6
7
8
9
10
input {
  file {
    path => "/var/log/http.log"
  }
}
filter {
  grok {
    match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
  }
}

经过grok过滤后,日志事件解析为以下字段

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

json

  • skip_on_invalid_json:允许对无效json不进行过滤操作
  • source:进行json转换的字段
  • remove_field:删除字段(可用于剔除转换前的字段)
1
2
3
4
5
 json {
    skip_on_invalid_json => true
    source => "message"
    remove_field => ["message"]
 }

详细配置见Json filter plugin

geoip

geoip过滤器根据Maxmind geolite2数据库的数据,转换相应IP地址地理位置的信息。

1
2
3
geoip {
    source => "client_ip"
}

详细配置见Geoip filter plugin

FAQ

  1. 数据处理管道配置文件会在启动时自动merge,注意各pipeline中的操作会应用在所有流水线中