提问要多花一点心思哦

如何用一个正则过滤"IP地址:端口号" 和 "IP地址"

Logstash | 作者 sailershen | 发布于2019年07月16日 | 阅读数:4254

数据里有的是192.168.1.1,有的是192.168.1.1:8000
如何用一个正则过滤出这两种情况?
 
 
已邀请:

rochy - rochy_he

赞同来自: sailershen

(\d+\.){3}\d+(:\d+)?

Ombres

赞同来自: sailershen

grok可以使用它自带的一些patterns,可以参考以下链接
https://github.com/logstash-pl ... terns
 
至于你上面的问题可以使用下面的语句
%{IPORHOST:ip}(:%{POSINT:port})?

sailershen

赞同来自:

谢谢 @rochy
再进一步请教,对于192.168.1.1:8000,在grok里我需要的结果是:
{
"ipaddr" : "192.168.1.1",
"port" : "8000"
}

对于192.168.1.1,需要的结果是:
{
"ipaddr" : "192.168.1.1"
}
或者得到这样的结果也可以:
{
"ipaddr" : "192.168.1.1",
"port" : "0"
}
在grok里需要用一个正则表达式得到以上结果,如何实现?谢谢
 

sailershen

赞同来自:

以上问题解决了,用Ombres老师提供的表达式:
%{IPORHOST:ip}(:%{POSINT:port})?

输出的2种结果:
有端口号:
{
"port": "8000",
"ip": "192.168.1.1"
}
没有端口号:
{
"ip": "192.168.1.1"
}

谢谢Ombres老师的指导!
 
 

要回复问题请先登录注册