logstash配置

3 篇文章 0 订阅
3 篇文章 0 订阅

input

  • 文件输入
file {
    type => "nginxaccess"
    #路径
    path => "/usr/local/nginx/logs/access.log"
    #开始位置
    start_position => "beginning"
  }

filter

过滤器插件-grok

1. 安装
bin/logstash-plugin install logstash-filter-grok

2. 使用

匹配模式 message是每段读进来的日志,IP、HTTPDATE、WORD、NOTSPACE、NUMBER都是patterns/grok-patterns中定义好的正则格式名称,对照日志进行编写,(?:%{USER:ident}|-)这种形式是条件判断,相当于程序里面的二目运算。如果有双引号”“或者[]号,需要在前面加\进行转义。

举例

55.3.244.1 GET /index.html 15824 0.043
grok {
    #自定义规则路径
    #patterns_dir => "/home/es/logstash-6.2.3/patterns/nginx_pattern"

    "message"=>{"%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}"}
}

下面是自己写的自定义nginx的access.log的匹配规则

vim /home/es/logstash-6.2.3/patterns/nginx_pattern
URI1 (%{URIPROTO}://)?(?:%{USER}(?::[^@]*)?@)?(?:%{URIHOST})?(?:%{URIPATHPARAM})?
NGINXACCESS %{IP:clientIp} - - \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}\" %{NUMBER:status} %{NUMBER:bytes} \"(?:%{URI1:http_referrer}|-)\" \"(%{GREEDYDATA:user_agent}|-)\"
3. 过滤规则
  • 查看grok自带的过滤规则
cat /home/es/logstash-6.2.3/vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns/grok-patterns
4. 在线匹配工具
https://grokdebug.herokuapp.com/

过滤器插件-urldecode

1. 安装
bin/logstash-plugin install logstash-filter-urldecode
2. 使用

把所有字段进行urldecode(显示中文)

urldecode {
    all_fields => true
}

针对单独的字段转化,比如message字段是url编码

urldecode {
    field => "message"
}

输入

https://www.test.com/s?word=%e5%b0%8f%e7%b1%b3&key=%e8%8b%b9%e6%9e%9c

输出

{
      "@version" => "1",
          "host" => "iZbp108a551s2at4tguz7bZ",
    "@timestamp" => 2018-03-29T07:38:45.166Z,
       "message" => "https://www.test.com/s?word=小米&key=苹果"
}

过滤器插件-kv

1. 安装
bin/logstash-plugin install logstash-filter-kv
2. 使用

将取得的URL、request字段取出来进行key-value值匹配,使用字段分隔符”&?”,值键分隔符”=”,则会自动将字段和值采集出来。

kv {
    field_split => "&?"
}

官方插件使用介绍

https://www.elastic.co/guide/en/logstash/current/filter-plugins.html

我自己的过滤配置

filter { 
    grok {
        patterns_dir => "/home/es/logstash-6.2.3/patterns/nginx_pattern"
        match => {"message"=>"%{NGINXACCESS}"}
    }
    geoip {
        source => "clientIp"
    }
    urldecode {
        field => "request"
    }
    kv {
        source => "request"
        field_split => "&?"
    }

 }

output

  • 输出到elasticsearch
elasticsearch {
    #elasticsearch的ip:prot
    hosts => ["127.0.0.1:9200"]
    #index
    index=>"nginx"
    #type
    document_type => "log"
}

logstash的坑:

不能重复读一份完全相同的文件! 在使用logstash采集日志时,如果我们采用file为input类型,采用不能反复对一份文件进行测试!第一次会成功,之后就会失败!
如果要对同一份文件进行采集,记得改名!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值