使用logstash进行ip映射(主机名或系统名)

需求场景

当使用elasticsearch进行日志数据可视化的时候,往往会遇到需要IP地址无法human-reading的情况。这时,我们需要将IP地址进行一定的格式转换,将其转换为主机名(hostname)或者系统名(application/service name)。

以WAF的日志为例,里面的dst_ip记录了被攻击的主机ip,scr_ip记录了发起攻击的系统的ip:
在这里插入图片描述
可视化后,如果以dst_ip进行聚合,我们无法清楚的看到是哪个系统遭受了攻击
在这里插入图片描述
因此,我们需要将IP到系统名进行一个映射。实际的生产工作中,我们一定还会在其他的地方遇到类似的需求。

解决方案

如果只有一两个值的情况,我们可以用script field和plainless的方式来解决。但如果我们有大量的记录,每次都通过脚本的方式进行转换会为集群带来大量的负担,并且会需要更长的处理时间,因此,我们需要在数据写入的时候就进行IP地址的转换。

logstash上提供了一个dns_filter_plugin,可以进行dns的查找。其中有几个重要的参数:

  • resolve, 是指将A记录(主机名),CNAME记录(服务名)等域名转换为IP地址
  • reverse,是指反向映射,将IP地址映射为域名
  • hostsfile, 包含映射关系的hosts文件
  • action, 需要执行的操作,提供的操作类型是replace和append。replace是现场替换,直接将field里的value进行替换。append是附加,会将field里的value转换为数组,并且附加到数组的末尾。

测试示例

我们可以快速的通过logstash的其他plugin,一起来验证dns是否可以完成我们的需求。

  • input: 使用generate plugin
  • filter:使用dns plugin
  • output: 使用stdout plugin

新建一个conf文件:

input{
   

  generator {
   
    message => "192.168.135.105"
    count => 1
  }

}

filter {
   
	dns {
   
	  action => "replace"
	  reverse => [ "message" ] ## 我们使用reverse,是因为我们需要根据IP,知道系统
	  hostsfile => ["/Users/Lex/Applications/myhosts"]
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值