前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >用ELK搭建TB级微服务海量日志监控系统

用ELK搭建TB级微服务海量日志监控系统

作者头像
用户4283147
发布于 2022-10-27 06:50:50
发布于 2022-10-27 06:50:50
5550
举报
文章被收录于专栏:对线JAVA面试对线JAVA面试

本文主要介绍怎么使用 ELK Stack 帮助我们打造一个支撑起日产 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 的可视分析。

日志可视化

我们的日志可视化如下图:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 对线JAVA面试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
从零搭建一个基于 ELK 的日志、指标收集与监控系统
在需要私有化部署的系统中,大部分系统仅提供系统本身的业务功能,例如用户管理、财务管理、客户管理等。但是系统本身仍然需要进行日志的采集、应用指标的收集,例如请求速率、主机磁盘、内存使用量的收集等。同时方便的分布式系统日志的查看、指标的监控和告警也是系统稳定运行的一个重要保证。
问问计算机
2021/05/08
1.3K0
从零搭建一个基于 ELK 的日志、指标收集与监控系统
企业级运维监控系统体系化建设指南
监控系统的本质是通过发现故障、解决故障、预防故障来为了保障业务的稳定。而要想在企业内实现监控系统的体系化建设落地,需要从以下三个方面着手建设,分别是监控技术体系、监控指标体系、监控管理体系。
嘉为蓝鲸
2022/09/27
1.4K0
企业级运维监控系统体系化建设指南
搞定Prometheus普罗米修斯监控系统
AAA公司是一家电商网站,由于公司的业务快速发展,公司要求对现有机器进行为业务监控,责成运维部门来实施这个项目。
全栈程序员站长
2022/09/09
6K0
搞定Prometheus普罗米修斯监控系统
接近完美的监控系统—普罗米修斯
普罗米修斯(Prometheus)是一个SoundCloud公司开源的监控系统。当年,由于SoundCloud公司生产了太多的服务,传统的监控已经无法满足监控需求,于是他们在2012年决定着手开发新的监控系统,即普罗米修斯。
全栈程序员站长
2022/09/09
6.3K0
接近完美的监控系统—普罗米修斯
十二、可观测性——监控与日志
在 Kubernetes 中,监控和日志属于生态的一部分,它并不是核心组件,因此大部分的能力依赖上层的云厂商的适配。Kubernetes 定义了介入的接口标准和规范,任何符合接口标准的组件都可以快速集成。
Yuyy
2022/09/21
7280
十二、可观测性——监控与日志
这些技术轮子,让监控落地成为现实!
先帝创业未半而中道崩殂,今监控天下三分。如下图所示,监控的天下被划分为基于 Tracing(调用链)监控、基于Metrics(指标)监控、基于Logging(日志) 的监控。
一猿小讲
2019/11/13
1.1K0
常见监控分为哪几类?
你们之中很多人多多少少都接触过监控,但是你所知道的监控,到底属于哪一类呢?这期我们就从下面这张图开始聊起。如图所示,可以清晰的看出,监控的世界可以被划分为基于 Logging 的监控、基于 Tracing 的监控、基于 Metrics 的监控。
一猿小讲
2019/09/25
1.4K0
常见监控分为哪几类?
监控系统选型,这篇不可不读!
目前我所经历的几家公司,监控系统都是自研的。其实业界有很多优秀的开源产品可供选择,能满足绝大部分的监控需求,如果能从中选择一款满足企业当下的诉求,显然最省时省力。
码哥字节
2020/09/24
2.8K0
监控系统选型,这篇不可不读!
这么多监控组件,总有一款适合你
监控是分布式系统的必备组件,能够起到提前预警、问题排查、评估决策等功效,乃行走江湖、居家必备之良品。
xjjdog
2019/09/24
4.5K0
这么多监控组件,总有一款适合你
ELK日志监控分析系统的探索与实践(二):利用Metricbeat监控服务器系统资源指标
在ELK日志监控分析系统的探索与实践(一)中,我们介绍了利用ELK+Filebeat监控Springboot项目的日志,本篇则是重点介绍如何利用ELk+Metricbeat监控服务器系统CPU、内存、磁盘等系统指标。
大刚测试开发实战
2022/11/14
8090
ELK日志监控分析系统的探索与实践(二):利用Metricbeat监控服务器系统资源指标
腾讯云多Kubernetes的多维度监控实践
本次内容根据2017年11月4日 K8S Geek Gathering 沙龙深圳站腾讯云高级工程师王天夫的演讲内容整理而成。 本次分享的主要内容涉及腾讯云容器的顶层整体设计,包括产品功能,及提供的
腾讯云开发者社区
2017/11/15
3.4K0
腾讯云多Kubernetes的多维度监控实践
promethus与监控系统
随着容器技术的迅速发展,Kubernetes已然成为大家追捧的容器集群管理系统。Prometheus 作为生态圈 Cloud Native Computing Foundation(简称:CNCF)中的重要一员,其活跃度仅次于 Kubernetes, 现已广泛用于 Kubernetes 集群的监控系统中。
机智的程序员小熊
2019/12/12
1.8K0
promethus与监控系统
聊聊 Prometheus 监控
某某某公司是一家电商网站,由于公司的业务快速发展,公司要求对现有机器进行业务监控,责成运维部门来实施这个项目。
码猿技术专栏
2023/05/01
8070
聊聊 Prometheus 监控
监控系统-Prometheus(普罗米修斯)(三)Grafana可视化图形工具
Github地址:https://github.com/grafana/grafana 官网地址:https://grafana.com 官网文档地址:http://docs.grafana.org/ 下载地址:https://grafana.com/grafana/download
全栈程序员站长
2022/09/09
2K0
监控系统-Prometheus(普罗米修斯)(三)Grafana可视化图形工具
ELK日志监控分析系统的探索与实践(一):利用Filebeat监控Springboot日志
由于公司项目较多,所部署服务产生的日志也较多,以往查看服务器日志只能通过xshell、putty等SSH工具分别连接每台服务器,然后进入到各个服务器,执行Linux命令查看日志,这样可能会带来以下问题:
大刚测试开发实战
2022/11/14
2.3K1
ELK日志监控分析系统的探索与实践(一):利用Filebeat监控Springboot日志
全链路监控的起源&解决方案
APM(Application Performance Management)的核心思想是什么? 在应用服务各节点相互调用的时候,从中记录并传递一个应用级别的标记,这个标记可以用来关联各个服务节点之间的关系。比如两个应用服务节点之间使用HTTP作为传输协议的话,那么这些标记就会被加入到HTTP头中。可见如何传递这些标记是与应用服务节点之间使用的通讯协议有关的,常用的协议就相对容易加入这些内容,一些按需定制的可能就相对困难些,这一点也直接决定了实现分布式追踪系统的难度。它通过探针自动收集所需的指标,并进行分布式追踪。通过这些调用链路以及指标,APM会感知应用间关系和服务间关系,并进行相应的指标统计。如何衡量一个大规模集群的跟踪系统的优劣?它应该满足低损耗、应用透明的、大范围部署这三个需求的。
小傅哥
2020/07/14
2.3K0
全链路监控的起源&解决方案
普罗米修斯
Prometheus(普罗米修斯)是一套开源的监控系统,其基本原理是通过 HTTP 协议周期性抓取被监控组件的状态,不需要任何 SDK 或者其他的集成过程,其架构如图:
六个核弹
2022/12/23
2.8K0
普罗米修斯
5 款顶级 Kubernetes 日志监控工具
Kubernetes在容器编排市场中占主导地位,推动企业向微服务演进。微服务的每个实例都会生成大量日志事件,这些事件很快就变得难以管理。但更复杂的是当出现问题时,由于服务之间复杂的交互作用,以及可能的故障模式,导致很难找到根本原因。潜在的问题使得Kubernetes日志管理工具变得十分重要。
民工哥
2020/11/17
1.2K0
5 款顶级 Kubernetes 日志监控工具
监控系统开篇
监控系统是运维工作中不可或缺的一部分,它可以帮助我们监控系统的健康状况、运行状态和性能指标等,及时发现和解决问题,确保系统的可靠性和稳定性。SRE对监控系统最基本的需求就是:监控是SRE的第三只眼,使得可以在系统出问题时我们能及时感知到。
五分钟学SRE
2023/11/19
6070
监控系统开篇
软件测试|简单易学的性能监控体系prometheus+grafana搭建教程
普罗米修斯是用 go 语言编写的软件并且利用了 go 语言的交叉编译特性编译成了纯二进制文件, 运行的时候不需要额外安装依赖。 直接从官网上下载就可以。 下载地址: https://prometheus.io/download/ 这里面除了普罗米修斯的主程序意外, 一些 额外的组件,比如 pushgateway, alertmanager 以及各种官方 exporter 的下载包都可以在这里找到。 由于我们现在部署普罗米修斯都是容器化部署的, 所以这里我选择用 docker 进行部署。
霍格沃兹测试开发Muller老师
2023/02/08
1K0
推荐阅读
相关推荐
从零搭建一个基于 ELK 的日志、指标收集与监控系统
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档