做喜报的网站,设计师的工作内容,网站改版要注意什么,中国建筑app免费下载logstash主用于日志实时数据收集、解析#xff0c;并将数据转发的工具#xff0c;内置的功能也相当强大。但#xff0c;同时意味着#xff0c;他可能接收到各种情况的数据。
此处#xff0c;我们主要讲解我实际使用中#xff0c;碰到的一个小问题#xff0c;换行(\n)。…logstash主用于日志实时数据收集、解析并将数据转发的工具内置的功能也相当强大。但同时意味着他可能接收到各种情况的数据。
此处我们主要讲解我实际使用中碰到的一个小问题换行(\n)。
logstash的换行处理可以有多种方式比如如imultiline,可以将多行合并之类的这种适合input 直接读取文件。
但有时你接收到的消息内容即某个字段的内容本身已经是换行的内容经过input的转换后加上了转义符换行变成\\n。
这里举例我实际碰到的环境kafkalogstashelasticsearch
kafka采集到的数据已经是一条完整的数据如
2023/08/10 09:15:26 main.go:20 E! 测试多行日志记录
第二行日志需要合并
第三行也要合并
logstash.conf配置如下
input {kafka {bootstrap_servers kafka.test.comtopics [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}} # 新增字段多字段字符串组合成新字段logdateremove_field [date,time]}
}output {elasticsearch {hosts [http://elasticsearch:9200]index testlog}
}
此时kibana上查看到的数据是在原本换行的地方变成\n。因为kafka在接到到换行的数据时会转成\n或\n\t。而logstash在接收到kafka的数据时会当成字符串自动加上转义符要正常显示换行需要把\\n 替换成\n。 网上找了一堆相关资料说的的方法是没错但就是没有效果如
filter {mutate {gsub [message,\\n,] # 显式的采用此种方法替换
}因为logstash会把“\\n”当成是有转义符处理即\n也即实际的换行。所以“\\n”其实替换的是实际的换行实际已经可以换行的数据替换成空字符。
如果要es中显示的\n变成实际换行显示需要以下配置
filter {mutate {gsub [message,\\\\n,\n] # 字符替换 将\\n 替换成 \n; \\\\n需要增加转义符。}最终es显示效果如下