logstash日志换行处理小解

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

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

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

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

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

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

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

logstash.conf配置如下:

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。

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

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

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

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

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

最终es显示效果如下:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要自定义 Spring Boot 应用程序的日志格式并将其发送到 Logstash,可以按照以下步骤操作: 1. 在 Spring Boot 应用程序的 `application.properties` 或 `application.yml` 文件中添加以下配置: ```properties logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n ``` 在这里,我们使用了 `%d` 来记录日期和时间,`%thread` 记录线程名,`%-5level` 记录日志级别,`%logger{36}` 记录 Logger 名称(最多 36 个字符),`%msg` 记录日志消息,`%n` 记录换行符。 2. 在 `pom.xml` 文件中添加以下依赖项: ```xml <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>6.6</version> </dependency> ``` 这个依赖项包含了 Logback 的 LogstashEncoder,它可以将日志格式化为 Logstash 支持的 JSON 格式。 3. 在 `logback-spring.xml` 文件中添加以下配置: ```xml <configuration> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="net.logstash.logback.encoder.LogstashEncoder" /> </appender> <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}</file> <encoder class="net.logstash.logback.encoder.LogstashEncoder" /> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}.%d{yyyy-MM-dd}.gz</fileNamePattern> </rollingPolicy> </appender> <root level="INFO"> <appender-ref ref="console" /> <appender-ref ref="file" /> </root> </configuration> ``` 这个配置使用 LogstashEncoder 作为编码器,将日志格式化为 Logstash 支持的 JSON 格式。我们还配置了一个文件附加程序,将日志写入文件,并使用时间轮换策略对日志进行滚动。 4. 重新启动应用程序并检查日志输出,确保它们符合您的预期格式,并且可以正确地传输到 Logstash

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值