ELK日志缺失问题排查-多行日志聚合Logstash配置问题

elk,日志,缺失,问题,排查,多行,聚合,logstash,配置 · 浏览次数 : 305

小编点评

**推荐请求追踪日志收集流程分析** **收集流程概述:** 1. 线上机器日志被采集到Flume平台中。 2. Flume将日志数据写入Kafka平台。 3. Kafka数据通过Logstash进行处理。 4. Logstash将处理后的日志数据写入Elasticsearch平台。 **问题:** 部分日志无法在Kibana中查询到。 **分析:** 由于整个收集流程较长,且中间的各个组件也是由不同部门来负责的,其中任一环节数据都有可能丢失,所以排查起来比较困难。 **问题分析结果:** 1. Kafka数据可能在流处理过程中丢失。 2. Logstash配置可能存在错误。 3. Elasticsearch映射可能存在错误。 **排查建议:** 1. 确认Kafka数据是否在流处理过程中丢失。 2. 检查Logstash配置。 3. 检查Elasticsearch映射是否正确。 4. 尝试分析部分无法在Kibana中查询到的日志,以确定其原因。

正文

1. 背景

推荐系统的推荐请求追踪日志,通过ELK收集,方便遇到问题时,可以通过唯一标识sid来复现推荐过程

最近在碰到了几个bad case,需要通过sid来查询推荐日志,但发现部分无法在kibana查询到

2. 分析

推荐日志的整个收集流程如下:

flowchart LR 线上机器日志 --> 平台Flume --> Kafka --> Logstash --> ES

因为整个流程较长,且中间的各个组件也是由不同部门来负责的,其中任一环节数据都有可能丢失,所以排查起来比较困难

2.1 版本信息

Flume: 未知
Kafka: 2.4.0
ELK: 7.17

2.2 ELK排查-日志和配置

首先联系了DB的同学,主要负责ELK,他们首先查看了日志,确认无报错之后,要求先确认Kafka的数据是否有丢失
确认Logstash配置和ES Mapping没有问题

input {
    kafka {
        add_field => {"myid"=>"hdp_lbg_zhaopin_hrgrecservice_trace_all"}
        bootstrap_servers => "xxx.xxx.xxx.xxx:9092"
        client_id => "hdp_lbg_zhaopin-hdp_lbg_zhaopin_hrgrecservice_trace_all"
        group_id => "hdp_lbg_zhaopin_hrgrecservice_trace_topic"
        auto_offset_reset => "latest"
        consumer_threads => 1
        topics => ["hdp_lbg_zhaopin_hrgrecservice_trace_all"]
        codec => json
    }
}

filter {
  if [myid] == "hdp_lbg_zhaopin_hrgrecservice_trace_all" {
    json {
    source => "message"
  }
  
  mutate {
    convert => { "recOuts" => "string"}
    join => {"recOuts" => ","}
    add_field => {"context" => "%{traceContext}"}
    add_field => {"trace" => "%{traces}"}
    remove_field => ["message", "event", "traces", "traceContext"]
  }
  	
}
}

output {
  if [myid] == "hdp_lbg_zhaopin_hrgrecservice_trace_all" {
    elasticsearch {
        hosts => ["ip:port"]
        index => "hdp_lbg_zhaopin_hrgrecservice_trace_all-%{+YYYY_MM_dd}"
        user => 
        password => 
    }
    stdout { }
  }
}

2.2 Kafka排查-Kafka数据是否丢失

然后联系的大数据的同学,他们让我们把Kafka的数据写入Hive中,然后看缺失的数据是否能在Hive中查询到,这样做之后在Hive中查到了缺失的数据,确认Kafka的数据没有问题

缺失的数据是找到在机器上的一条日志,但不在Kibana中的数据即可,因为我们缺失率也是很高的,所以也很容易找到

如果缺失的条数很少,可以选取一段时间对比Hive和Kibana的数据

flowchart LR 线上机器日志 --> 平台Flume --> Kafka --> Hive

2.3 继续ELK排查-数据在哪个环节丢了

确认Kafka数据无误之后,再返回去找DB的同学查ELK问题,DB同学使用另外一个Logstash读取Kafka的数据,然后写入ES,同时开启本地输出,录制了一段时间之后,再在Logstash输出文件中寻找这段时间内缺失数据,发现都找不到,于是确认为Kafka到Logstash丢失数据

flowchart LR 线上机器日志 --> 平台Flume --> Kafka -.-> Logstash

2.4 继续-丢失的日志有何特点

虽然确定了是Kafka到Logstash丢失了数据,但还是无法确定具体原因,考虑过是不是某些日志过大,Logstash无法处理,于是看了单台机器的连续的十几条日志,发现丢失的日志大小有大有小,丢的间隔条数也是毫无规律

2.5 Kafka数据格式-一个消息有多个日志

在毫无头绪的情况下,想去看看Kafka内的数据,于是探查了几条,发现了一个奇怪的现象,Kafka的消息里面有多行日志,之间看起来像是空格拼接了起来,后来知道那是个换行符,如下:

线上机器日志符格式:
A
B
C

Kakfa消息格式:
A\nB
C

所以将探查的数据在Kibana中搜索,发现了规律,对于Kafka的每一条消息,只有第一个日志能写入Logstash,对于上面的数据,A和C能写入,而B不能

对于了别的Logstash集群的配置,发现了问题

我们的Logstash Kafka input配置中是codec => json,而其他的配的是codec => line,也就是说Logstash认为Kafka的一条消息就是一个JSON,拿过来直接转,转化的过程中应该把后面换行符拼接的不合法的部分给丢弃了,而使用codec => line的方式,Logstash会把Kafka的消息按照换行符分割成多个event

不过返回来看,为什么Kafka不是一行日志一条消息呢,在我们机器配置收集日志的Flume中,有个默认选项,“是否聚合”,选择是会将不同行的日志聚合到一起,这就是Kafka数据格式看起来很奇怪的原因,后续消费者,不管是Logstash,还是通过DDS写入Hive,还是自己写代码来消费,都要处理这个换行符

3. 总结

Flume将多行日志聚合成一条消息放入Kafka,Logstash在接收的时候需要配置codec => line再将一个消息转换为多行日志

与ELK日志缺失问题排查-多行日志聚合Logstash配置问题相似的内容:

ELK日志缺失问题排查-多行日志聚合Logstash配置问题

1. 背景 推荐系统的推荐请求追踪日志,通过ELK收集,方便遇到问题时,可以通过唯一标识sid来复现推荐过程 最近在碰到了几个bad case,需要通过sid来查询推荐日志,但发现部分无法在kibana查询到 2. 分析 推荐日志的整个收集流程如下: flowchart LR 线上机器日志 -->

ELK日志缺失问题排查-Logstash消费过慢问题

1. 背景 另外一个推荐系统的推荐请求追踪日志,通过ELK收集,方便遇到问题时,可以通过唯一标识sid来复现推荐过程 在一次上线之后,发现日志大量缺失,缺失率达90%,确认是由上线引起的,但因为当时没立即发现这个问题,所以没有通过回滚解决 上线的内容改动了推荐请求日志,数据格式未变,增加了单条日志的

[转帖]Redis cluster故障复盘,预案、工具、判断一样都不能少!

http://blog.itpub.net/31545813/viewspace-2924677/ 背景 最近从ELK日志分析发现: 有很多应用连接redis 超时; 监控平台出现”redis 集群不健康“告警; 结合之前的经验,我们一般的应处理手段为:重启连接redis超时的应用,原因有以下两点:

[转帖]新版 Elasticsearch 中的强悍插件 X-pack

https://zhuanlan.zhihu.com/p/36337697 3 人赞同了该文章 作者:Alan 岂安科技运维工程师努力踏上一条为后人留坑的运维之路。(逃 1 前言 Elk 日志可视化管理系是目前比较主流的一套日志管理工具。对日志查找,阅读、收集都非常方便。所以今天的正文来了,今天文章

使用docker搭建ELK分布式日志同步方案

ELK作为业界最常用日志同步方案,我们今天尝试一下使用docker快速搭建一套ELK方案。ELK使用国内加速源拉取的镜像比较旧,有条件的朋友可以拉取官网的源。elasticsearch作为日志储存库(数据库),kibana的作用通过elasticsearch的API接口调取其中数据作可视化分析,lo

[转帖]Kibana查询语言(KQL)

时间 2020-12-27 标签 html java 数据库 ide ui 翻译 日志 htm 对象 blog 栏目 HTML 繁體版 原文 https://www.cnblogs.com/-beyond/p/14159002.html 一.前言 如今大多数的公司都会使用ELK组合来对日志数据的收集

ELKF(elasticsearch、logstash、kibana、filebeat)搭建及收集nginx日志

1、elasticsearch 1.1、根目录下新建data文件夹 1.2、修改elasticsearch.yml文件,添加以下内容 path.data: /home/wwq/elk/elasticsearch-8.13.4/data path.logs: /home/wwq/elk/elastic

[转帖]比快更快的 ELK 8 安装使用指南-Elasticsearch,Kibana,Logstash

https://juejin.cn/post/7133907643386560519 携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第23天,点击查看活动详情 Elastic 8 的新特性 Elastic 8.0 版号称 比快更快 ,其新特性可参考 Elastic 官方博客:

ELK Stack - Elasticsearch · 搜索引擎 · 部署应用 · 内部结构 · 倒排索引 · 服务接入

ELK Stack, Elasticsearch, 搜索引擎, 全文检索, 特点与应用及场景, Linux部署, Docker 容器部署, 工具与插件, ES内部特征, 索引 Index, 文档数据 Doc, 分词器 analyzer, 倒排索引 inverted index, ES执行过程, ES...

[转帖]ELKStack入门篇(一)之ELK部署和使用

ELKStack入门篇(一)之ELK部署和使用 https://www.cnblogs.com/linuxk/p/9272965.html 一、ELKStack简介 1、ELK介绍 中文指南:https://www.gitbook.com/book/chenryn/elk-stack-guide-c