Logstash系列之--实战演练

Logstash系列之--实战演练

实现如下功能,以此熟悉一些logstash的语法:

**1、接收本机514端口udp数据**
​
**2、只接收指定IP发过来的日志**
​
**3、过滤出现“色情”词语的日志**
​
**4、日志正则匹配抓取字段**
​
**5、解析sourceIp经纬度、国家省份城市**
​
**6、输出保存到Elasticsearch**
​
​

首先我们看看配置文件的结构:

input {
  ...    #输入
}
•
filter {
  ...   #数据处理转换
}
•
output {
  ...   #输出
}

下面我们开始实现以上功能:

测试syslong格式:

<13>Jan 13 16:09:47 localhost 1578902986 2020/01/13 Mon 16:09:46 ipt_log=ACCEPT IN=vEth0 OUT=enp2s0 MAC=82:4b:ad:48:b6:0e:00:10:f3:71:9b:93:08:00 SRC=172.16.7.170 DST=192.168.0.100 LEN=124 TOS=0x00 PREC=0x00 TTL=122 ID=17313 PROTO=UDP SPT=51424 DPT=54218 LEN=104"|nc -u 172.16.110.243 514

1、接收514端口的udp数据

input {
    udp {
        port => "514"
    }
​
}

2、只接收指定IP发过来的日志

​
filter {
    #过滤指定IP,如果上报IP在数组中,则丢弃
    if [host] in ["172.16.110.55","10.53.187.101"]{
        drop {}   
    }
​
}

3、过滤出现“色情”词语的日志

​
filter {  
    #关键字过滤,日志中出现色情和傻逼的都丢弃
    if[message]=~"色情|傻逼"{
        drop{}
     }
}

4、日志正则匹配抓取字段

Grok 正则捕获

filter {
     #抓取了日志中的时间、事件名称、IP和协议等字段
     grok {
        match => {
            "message" => ".*\>(?<logtime>.*)\slocalhost.*IN=(?<eventName>.*)\sOUT.*SRC=(?<sourceIp>.*)\sDST=(?<destIp>.*)\sLEN.*PROTO=(?<appproto>\w+)\sSPT=(?<sourcePort>\d+)\sDPT=(?<destPort>\d+)\s.*"
        }
    }
​
}
output {
  ...   #输出
}

5、解析sourceIp经纬度、国家省份城市(使用geoip插件)

filter{
    #地理位置
    geoip {
            source => "sourceIp"
            #用《find  / -name 名字》查找mmdb文件在linux的为止
            database => "/../../GeoLite2-City.mmdb"   
            add_field => ["src_country" , "%{[geoip][country_name]}"]
            add_field => ["src_province" , "%{[geoip][region_name]}"]
            add_field => ["src_city" , "%{[geoip][city_name]}"]
            add_field => ["src_latitude" , "%{[geoip][latitude]}"]
            add_field => ["src_longitude" , "%{[geoip][longitude]}"]
           }
}

6、输出保存到Elasticsearch

output {
   elasticsearch {
        hosts => "10.10.110.110"
        index => "syslog_%{+YYYYMMdd}"
    }
​
}

完整配置文件:

input {
    udp {
        port => "514"
    }
​
}
filter {
    #过滤指定IP,如果上报IP在数组中,则丢弃
    if [host] in ["172.16.110.55","10.53.187.101"]{
        drop {}   
    }
    
    #关键字过滤,日志中出现色情和傻逼的都丢弃
    if[message]=~"色情|傻逼"{
        drop{}
     }
     
     
     #抓取了日志中的时间、事件名称、IP和协议等字段
     grok {
        match => {
            "message" => ".*\>(?<logtime>.*)\slocalhost.*IN=(?<eventName>.*)\sOUT.*SRC=(?<sourceIp>.*)\sDST=(?<destIp>.*)\sLEN.*PROTO=(?<appproto>\w+)\sSPT=(?<sourcePort>\d+)\sDPT=(?<destPort>\d+)\s.*"
        }
    }
    
    #地理位置
    geoip {
            source => "sourceIp"
            #用《find  / -name 名字》查找mmdb文件在linux的为止
            database => "/../../GeoLite2-City.mmdb"   
            add_field => ["src_country" , "%{[geoip][country_name]}"]
            add_field => ["src_province" , "%{[geoip][region_name]}"]
            add_field => ["src_city" , "%{[geoip][city_name]}"]
            add_field => ["src_latitude" , "%{[geoip][latitude]}"]
            add_field => ["src_longitude" , "%{[geoip][longitude]}"]
           }
​
}
output {
    elasticsearch {
        hosts => "10.10.110.110"
        index => "syslog_%{+YYYYMMdd}"
    }
}

启动运行:

bin/logstash -f syslog.conf --config.reload.automatic

如果想删除某些字段

 {
    mutate {
         remove_field => ["src_longitude","appproto"]
   }
 }

说明:

上面用的这些都是很基础的,logstash还有很多各种各样的插件,想学好要去官网慢慢看!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值