前言
在使用logstash进行日志处理时,发现经常会出现某一个topic消费异常的报错。Record is corrupt (stored crc = 2000910049, computed crc = 1912358942)}
在logstash出现这个报错后,相应的topic就会无法正常消费,kibana上也无法正常查询到相关时间点之后的日志,重启logstash后才会恢复异常。
一、处理方式
日志采集流程:
fluent-bit ——> kafka ——> logstash ——> es ——> kibana
处理方案:
通过网上调研,没有找到相应的处理方法。但是发现通过手动重启logstash就可以恢复对应的日志采集。但是总不能一直看logstash日志看有没有报错吧。
于是,便通过已有的方式采集logstash容器日志并通过日志告警插件进行告警。
二、详细配置
告警详情
如下:
[ERROR][logstash.inputs.kafka ][main][cb3a80073c6ad1403c54fc6cdce0a1c7d4352eb8afa38e0ff9519c07e83e96ce] Unable to poll Kafka consumer {:kafka_error_message=>org.apache.kafka.common.KafkaException: Received exception when fetching the next record from {kafka-topic}-0. If needed, please seek past the record to continue consumption., :cause=>org.apache.kafka.common.KafkaException: Record batch for partition {kafka-topic}-0 at offset 9213518 is invalid, cause: Record is corrupt (stored crc = 1008539063, computed crc = 2600267767)}
fluent-bit配置
input配置如下:
[INPUT]
Name tail
Tag logstash_log
Path /var/log/containers/*logstash*.log
Parser logstash_parser
Mem_Buf_Limit 10MB
[FILTER]
Name record_modifier
Match logstash_log
output配置如下:
[OUTPUT]
Name kafka
Match logstash_log
Brokers kafka-headless.monitoring.svc.cluster.local:9092
Timestamp_Key logstash_local_time
Tag_Key logstash_log
Include_Tag_Key On
Topics logstash_log
对应的parser配置如下:
[PARSER]
Name logstash_parser
Format regex
Regex ^(.*) \[(?<logstash_local_time>[^\]]*)\]\[(?<level>[^\]]*)\]\[(?<org_log>[^\]]*)\]\[(?<main>[^\]]*)\]\[(?<key>[^\]]*)\] (?<messages>.+)$
Time_Key logstash_local_time
Time_Format %d/%b/%Y:%H:%M:%S %z
(fluent-bit本地debug调试可参考: fluent-bit本地dubug调试)
至此,已能事实监控到logstash采集异常,但是没有真正处理问题。
尝试方案
发现是由于消费kafka上特定topic异常,怀疑是topic消息增加太快,导致消费速度跟不上。所以尝试将topic增加为3分区(原先只有partition 0)并持续观察消费情况以及logstash异常情况。