记一次logstash解析丢失全量字段message的情况

应用场景: kafka中存json数据,经logstash“丰富化”后,发送给es存储的过程,如果在input阶段就把数据转换为json,会造成后边处理数据的时候,无法获取全量字段(原始数据)。

input{
	 #异常登录json字符串数据
  kafka {
     group_id => "test-consumer-group"
     #如果数据在 input阶段 进行 json格式转换,后面在进行数据处理的时候将会失去 全量字段(原始信息)
     #codec => "json"
     topics => ["TOP001"]
     bootstrap_servers => ["esnode1:19092"]
     consumer_threads  => 1
     auto_offset_reset => "earliest"
     # type 是给 数据打一个标签,可以理解成 增加一个字段 type,
     #后面处理的时候可以 对type 进行判断 然后对数据做 具体的处理
     type => "alarm"
  }
}

filter{
    #在filter中 进行json转换  可以 保留全量字段(原始信息)
	json{
    	source => "message"
  	}
    if[type] == "alarm"{
        #如果data字段里 存的是 json数组 那么 可以用 split 一条event 变 多条event
	    split {
	      field => "[data]"
	    }
	    ruby {
	      code => 'event.set("sshIp", event.get("[data][sshIp]"))
	               event.set("loginDate", event.get("[data][loginDate]"))
	               event.set("logoutDate", event.get("[data][logoutDate]"))
	               event.set("userName", event.get("[data][userName]"))'
	    }
	
	    mutate {
	      #remove_field 中 只要不包含 message 字段,就可以保证 filter处理后的数据 默认 包含一个 全量字段 message
	      remove_field => ["@timestamp","@version","host","path","data","lookupResult","cmdDictRes"]
	      add_field => {"confirm" => "未确认"}
	      add_field => {"ignore" => "未忽略"}
	    }
  	}	
}

output{
	if[type] == "alarm" {
		#输出ruby处理的debug信息
    	stdout {codec => rubydebug}
	    elasticsearch{
	    	template_name => "alarm-template"
	      	hosts => ["xxx.xxx.xxx.xxx:9200"]
	      	document_type => "alarm"
	      	#动态索引 每天一个索引
	      	index => "<alarm-log-{now/d}>"
	    }
	}
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值