ELK 搭建 TB 级海量日志监控系统,这个太强了!

码途极光者
• 阅读 1209

作者:非洲羚羊\
来源:www.cnblogs.com/dengbangpang/p/12961593.html

本文主要介绍怎么使用 ELK Stack 帮助我们打造一个支撑起日产 TB 级的日志监控系统。很多细节知识,一篇文章是不够的,本文主要介绍了核心知识点。

在企业级的微服务环境中,跑着成百上千个服务都算是比较小的规模了。在生产环境上,日志扮演着很重要的角色,排查异常需要日志,性能优化需要日志,业务排查需要业务等等。

然而在生产上跑着成百上千个服务,每个服务都只会简单的本地化存储,当需要日志协助排查问题时,很难找到日志所在的节点。也很难挖掘业务日志的数据价值。

那么将日志统一输出到一个地方集中管理,然后将日志处理化,把结果输出成运维、研发可用的数据是解决日志管理、协助运维的可行方案,也是企业迫切解决日志的需求。

我们的解决方案

ELK 搭建 TB 级海量日志监控系统,这个太强了!

通过上面的需求我们推出了日志监控系统,如上图:

  • 日志统一收集、过滤清洗。
  • 生成可视化界面、监控,告警,日志搜索。

功能流程概览

ELK 搭建 TB 级海量日志监控系统,这个太强了!

  • 在每个服务节点上埋点,实时采集相关日志。
  • 统一日志收集服务、过滤、清洗日志后生成可视化界面、告警功能。

我们的架构

ELK 搭建 TB 级海量日志监控系统,这个太强了!

日志文件采集端我们使用 FileBeat,运维通过我们的后台管理界面化配置,每个机器对应一个 FileBeat,每个 FileBeat日志对应的 Topic 可以是一对一、多对一,根据日常的日志量配置不同的策略。

除了采集业务服务日志外,我们还收集了 MySQL 的慢查询日志和错误日志,还有别的第三方服务日志,如:Nginx 等。

最后结合我们的自动化发布平台,自动发布并启动每一个 FileBeat 进程。

调用栈、链路、进程监控指标我们使用的代理方式:Elastic APM,这样对于业务侧的程序无需任何改动。

对于已经在运营中的业务系统来说,为了加入监控而需要改动代码,那是不可取的,也是无法接受的。

Elastic APM 可以帮我们收集 HTTP 接口的调用链路、内部方法调用栈、使用的SQL、进程的 CPU、内存使用指标等。

可能有人会有疑问,用了 Elastic APM,其它日志基本都可以不用采集了。还要用 FileBeat 干嘛?

是的,Elastic APM 采集的信息确实能帮我们定位 80% 以上的问题,但是它不是所有的语言都支持的比如:C。

其二、它无法帮你采集你想要的非 Error 日志和所谓的关键日志,比如:某个接口调用时出了错,你想看出错时间点的前后日志;还有打印业务相关方便做分析的日志。

其三、自定义的业务异常,该异常属于非系统异常,属于业务范畴,APM 会把这类异常当成系统异常上报。

如果你后面对系统异常做告警,那这些异常将会干扰告警的准确度,你也不能去过滤业务异常,因为自定义的业务异常种类也不少。

同时我们对 Agent 进行了二开。采集更详细的 GC、堆栈、内存、线程信息。

服务器采集我们采用普罗米修斯。

由于我们是 Saas 服务化,服务 N 多,很多的服务日志做不到统一规范化,这也跟历史遗留问题有关,一个与业务系统无关的系统去间接或直接地去对接已有的业务系统,为了适配自己而让其更改代码,那是推不动的。

牛逼的设计是让自己去兼容别人,把对方当成攻击自己的对象。很多日志是没有意义的,比如:开发过程中为了方便排查跟踪问题,在 if else 里打印只是有标志性的日志,代表是走了 if 代码块还是 else 代码块。

甚至有些服务还打印着 Debug 级别的日志。在成本、资源的有限条件下,所有所有的日志是不现实的,即使资源允许,一年下来将是一比很大的开销。

所以我们采用了过滤、清洗、动态调整日志优先级采集等方案。首先把日志全量采集到 Kafka 集群中,设定一个很短的有效期。

我们目前设置的是一个小时,一个小时的数据量,我们的资源暂时还能接受。

Log Streams 是我们的日志过滤、清洗的流处理服务。为什么还要 ETL 过滤器呢?

因为我们的日志服务资源有限,但不对啊,原来的日志分散在各各服务的本地存储介质上也是需要资源的哈。

现在我们也只是汇集而已哈,收集上来后,原来在各服务上的资源就可以释放掉日志占用的部分资源了呀。

没错,这样算确实是把原来在各服务上的资源化分到了日志服务资源上来而已,并没有增加资源。

不过这只是理论上的,在线上的服务,资源扩大容易,收缩就没那么容易了,实施起来极其困难。

所以短时间内是不可能在各服务上使用的日志资源化分到日志服务上来的。这样的话,日志服务的资源就是当前所有服务日志使用资源的量。

随存储的时间越长,资源消耗越大。如果解决一个非业务或非解决不可的问题,在短时间内需要投入的成本大于解决当前问题所带来收益的话,我想,在资金有限的情况下,没有哪个领导、公司愿意采纳的方案。

所以从成本上考虑,我们在 Log Streams 服务引入了过滤器,过滤没有价值的日志数据,从而减少了日志服务使用的资源成本。

技术我们采用 Kafka Streams 作为 ETL 流处理。通过界面化配置实现动态过滤清洗的规则。

大概规则如下:

  • 界面化配置日志采集。默认 Error 级别的日志全量采集。
  • 以错误时间点为中心,在流处理中开窗,辐射上下可配的 N 时间点采集非 Error 级别日志,默认只采 info 级别。
  • 每个服务可配 100 个关键日志,默认关键日志全量采集。
  • 在慢 SQL 的基础上,按业务分类配置不同的耗时再次过滤。
  • 按业务需求实时统计业务 SQL,比如:高峰期阶段,统计一小时内同类业务 SQL 的查询频率。可为 DBA 提供优化数据库的依据,如按查询的 SQL 创建索引。
  • 高峰时段按业务类型的权重指标、日志等级指标、每个服务在一个时段内日志最大限制量指标、时间段指标等动态清洗过滤日志。
  • 根据不同的时间段动态收缩时间窗口。
  • 日志索引生成规则:按服务生成的日志文件规则生成对应的 index,比如:某个服务日志分为:debug、info、error、xx_keyword,那么生成的索引也是 debug、info、error、xx_keyword 加日期作后缀。这样做的目的是为研发以原习惯性地去使用日志。

⑦可视化界面我们主要使用 Grafana,它支持的众多数据源中,其中就有普罗米修斯和 Elasticsearch,与普罗米修斯可谓是无缝对接。而 Kibana 我们主要用于 APM 的可视分析。

日志可视化

ELK 搭建 TB 级海量日志监控系统,这个太强了!

ELK 搭建 TB 级海量日志监控系统,这个太强了!

ELK 搭建 TB 级海量日志监控系统,这个太强了!

ELK 搭建 TB 级海量日志监控系统,这个太强了!

ELK 搭建 TB 级海量日志监控系统,这个太强了!

ELK 搭建 TB 级海量日志监控系统,这个太强了!

近期热文推荐:

1.1,000+ 道 Java面试题及答案整理(2022最新版)

2.劲爆!Java 协程要来了。。。

3.Spring Boot 2.x 教程,太全了!

4.别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!

5.《Java开发手册(嵩山版)》最新发布,速速下载!

觉得不错,别忘了随手点赞+转发哦!

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
hive(06)、数据仓库Hive用户图形接口HWI的配置
       在之前的文中我们配置了一个hive监控的web界面的服务,主要用于查看当前HiveServer2服务链接的会话、服务日志、配置参数等信息,这个服务更像是一个hive提供的监控服务,本文我们将配置HWI(HiveWebInterface)hive用户图形接口,这是hive三种用户接口中的其中之一,可以在web界面上对hive服务进行操作
Stella981 Stella981
3年前
CentOS 7安装部署ELK 6.2.4
一、ELK介绍ELK是三款开源软件的缩写,即:ElasticSearchLogstashKibana。这三个工具组合形成了一套实用、易用的监控架构,可抓取系统日志、apache日志、nginx日志、mysql日志等多种日志类型,目前很多公司用它来搭建可视化的集中式日志分析平台。ElasticSearch:是一个分布式的R
Stella981 Stella981
3年前
Clickhouse替代ES后,日志查询速度提升了38倍!
​作者介绍GavinZhu,携程软件技术专家,负责监控系统运维开发、ES系统运维及Clickhouse技术应用推广及运维工作。ElasticSearch是一种基于Lucene的分布式全文搜索引擎,携程用ES处理日志,目前服务器规模500,日均日志接入量大约200TB。随着日志量不断增加,一些问题逐渐暴露出来:一方面ES服务器越来越多,投入
Stella981 Stella981
3年前
Docker 搭建 ELK 集群步骤
前言本篇文章主要介绍在两台机器上使用Docker搭建ELK。正文环境CentOS7.7系统Dockerversion19.03.8dockercomposeversion1.23.2系统设置vim编辑/etc/secur
Stella981 Stella981
3年前
Kubernetes operator 模式开发实践
0\.前言近日我们在开发符合我们业务自身需求的微服务平台时,使用了Kubernetes的OperatorPattern来实现其中的运维系统,在本文,我们将实现过程中积累的主要知识点和技术细节做了一个整理。读者在阅读完本文之后,会对OperatorPattern有一个基本的了解,并能将该模式应用到自己的业务中去。除此
Wesley13 Wesley13
3年前
OSSIM 4.1安装详解
OSSIM4.1安装详解     在今年出版的畅销书《Unix/Linux网络日志分析与流量监控》一书中主要为大家介绍了开源安全运维利器OSSIM,很多同行对Ossim表示了极大关注,纷纷来信咨询如何部署和使用这套系统。下面就4.1版的安装方法进行详细说明,具体ossim的组成原理大家可参看教程。在安装之前首先确保网络环境能够连接互联(系统
Stella981 Stella981
3年前
Linux日志安全分析技巧
0x00前言我正在整理一个项目,收集和汇总了一些应急响应案例(不断更新中)。GitHub地址:https://github.com/Bypass007/EmergencyResponseNotes本文主要介绍Linux日志分析的技巧,更多详细信息请访问Github地址,欢迎Star。0x01日志简介Lin
Easter79 Easter79
3年前
TiDB 在银行核心金融领域的研究与两地三中心实践
作者介绍:于振华,北京银行软件开发部资深架构师,长期从事银行核心系统研发、规划,参与过多个核心信息系统建设工作,包括一、二代支付系统、第四代银行核心系统建设、分布式核心系统建设等企业级项目工作。当前主要研发方向集中在构建先进、高效、面向OLTP的银行交易系统,提升银行信息系统服务能力。!(http://uploadimages.jians
郑文 郑文
1年前
Netty+Nacos+Disruptor自研企业级API网关无密分享
NettyNacosDisruptor自研企业级API网关无密分享download》itzcw.com/9076/关于NettyNacosDisruptor自研企业级API网关的三个介绍一、什么是企业级API网关企业级API网关是一种用于管理、监控
京东云开发者 京东云开发者
11个月前
监控系统原理揭秘-数据运算篇
一、监控系统概览监控系统在现代技术环境中扮演着至关重要的角色。运营同学每天检查自己的活动数据,研发人员每天检查系统各项指标是否正常,这些工作都少不了监控系统的身影。通常来讲,监控系统包括数据采集、数据计算、数据存储、数据可视化及监控预警等功能。本文主要介绍