logstash日志换行处理小解

logstash主用于日志实时数据收集、解析,并将数据转发的工具,内置的功能也相当强大。但,同时意味着,他可能接收到各种情况的数据。

此处,我们主要讲解我实际使用中,碰到的一个小问题,换行(\n)。

logstash的换行处理,可以有多种方式,比如如imultiline,可以将多行合并之类的,这种适合input 直接读取文件。

但有时,你接收到的消息内容,即某个字段的内容,本身已经是换行的内容,经过input的转换后,加上了转义符,换行变成\\n。

这里举例我实际碰到的环境:kafka+logstash+elasticsearch

kafka采集到的数据,已经是一条完整的数据,如:

html 复制代码
2023/08/10 09:15:26 main.go:20 E! 测试多行日志记录
第二行日志,需要合并
第三行也要合并

logstash.conf配置如下:

bash 复制代码
input {
	kafka {
		bootstrap_servers => "kafka.test.com"
		topics => ["test"]
	}
}

filter {
	json {
		source => "message" #原mesage字段为json格式的字符串,转换成json数据
	}
	grok{
        match => ["message", "%{DATE:date} %{TIME:time} %{DATA:logclass}: %{DATA:loglevel}! %{GREEDYDATA:msg}"] 
    }
	mutate {
		add_field => {"logdate" => "%{date} %{time}"} # 新增字段,多字段字符串组合成新字段logdate
		remove_field => ["date","time"]
	}
}

output {
	elasticsearch {
		hosts => ["http://elasticsearch:9200"]
		index => "testlog"
	}
}

此时kibana上查看到的数据是在原本换行的地方变成\n。因为kafka在接到到换行的数据时会转成\n或\n\t。而logstash在接收到kafka的数据时,会当成字符串,自动加上转义符,要正常显示换行,需要把\\n 替换成\n。

网上找了一堆相关资料,说的的方法是没错,但就是没有效果,如

html 复制代码
filter {
 mutate {
          gsub => ["message","\\n",""] 
          # 显式的采用此种方法替换
}

因为logstash会把"\\n"当成是有转义符处理,即\n,也即实际的换行。所以"\\n"其实替换的是实际的换行,实际已经可以换行的数据,替换成空字符。

如果要es中显示的\n,变成实际换行显示,需要以下配置:

html 复制代码
filter {
 mutate {
    gsub => ["message","\\\\n","\n"] 
    # 字符替换 ,将\\n 替换成 \n; "\\\\n"需要增加转义符。
          
}

最终es显示效果如下:

相关推荐
Elasticsearch7 小时前
跳过编写告警规则:NGINX OTel 集成中内置 6 个现成的 ES|QL 模板
elasticsearch
Elasticsearch15 小时前
缩小 AI 差距:下一代知识访问如何为政府解锁任务成果
elasticsearch
Elastic 中国社区官方博客16 小时前
Elasticsearch:搜索教程 - 语义搜索(三)
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
西邮彭于晏1 天前
图文详解:Git分支创建、合并与冲突解决|新手零门槛完整教程
大数据·git·elasticsearch
Elastic 中国社区官方博客1 天前
Elastic 和 OpenAI 合作,将前沿智能引入非结构化企业数据
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai
Elastic 中国社区官方博客1 天前
Elasticsearch:搜索教程 - 全文搜索(一)
大数据·python·elasticsearch·搜索引擎·全文检索
西邮彭于晏1 天前
Git 标签(Tag)与版本发布完整指南|附全场景命令速查表
大数据·git·elasticsearch
Elasticsearch1 天前
Elasticsearch:搜索教程 - 语义搜索(三)
elasticsearch
Elasticsearch2 天前
Elasticsearch:搜索教程 - 向量搜索(二)
elasticsearch
Devin~Y2 天前
从本地生活电商到 AI RAG:互联网大厂 Java 面试场景完整实战
java·spring boot·redis·elasticsearch·spring cloud·kafka·rag