CLS 监控告警:实时保障线上服务高可用性

作者:kingszhang

导语

日志服务CLS是腾讯云提供的一站式日志服务平台,提供了日志采集、存储、检索、图表分析、数据加工、日志投递、监控告警、仪表盘可视化等多项服务,协助用户解决业务运维、运营及审计等多种场景问题。

可观测性的意义

【服务的可用性】

对于任何一个线上服务来说,可用性都是一个重要的质量指标,用户能否用产品完成任务?效率如何?主观感受怎样?这实际上是从用户角度所看到的产品质量,是产品竞争力的核心,是产品可靠性、维修性和维修保障性的综合反映

99%的高可用意味着一年中服务只有3.56天不可用,而99.9%的高可用意味着一年中服务最多8小时不可用,99.99%的高可用则意味着一年中服务最多只有52分钟不可用。

更多线上服务,尤其是数据服务,其要求的可用性是5个9到6个9之间,也就是一年最多有5分钟不可用,那么如何完成这个巨大的挑战,如何巧妙地利用技术体系低成本做到这一点呢?

【微服务的问题排查】

对于很多比较老的线上服务,如果突然出现了线上问题,我们是可以登录机器查看日志的,但也面临着如下的棘手问题:

  • 如果访问量稍微大一点,日志很多怎么办?
  • 如果线上某个业务出了问题,如何通过日志一分钟内定位问题原因?
  • 如果服务调用链长,涉及很多服务,如何进行链路追踪?
  • 还有一个灵魂拷问,你怎么知道你的服务当前是否健康?怎么知道你的服务中的某个业务模块是否健康?

因此线上服务急需一种能力,能实时监控系统的状态,在系统发生异常时开发者能收到警告,而不是等待业务方反馈;当系统发生错误时,能帮助开发者更快更精准更快速地定位问题,也就是一种业务可观测型建设

微服务系统需要做到3-5-10,即系统发生问题时,3分钟定位问题原因,5分钟修复,10分钟上线。可观测性体系,要能主动发现99%以上的微服务问题,长期建设高质量高可靠性的系统。

业务日志监控体系

目前越来越多的用户选择将业务日志全部上报到腾讯云日志服务CLS内(包含全链路traceId),然后基于日志服务,制作各种业务监控大盘和获取告警信息。研发可以通过这套体系,获取全面的关于业务系统健康状况的信息。

在什么地方打印日志?

做好日志的打印是非常困难的,开发者必须明白哪些日志必须打印,而哪些日志是可以省略的。这里介绍几个非常非常重要的日志,这些日志都是必须要打印的。

以六边形架构为例,尽可能在所有的出站适配器和入站适配器的出入口处打印日志

用另外一张图更清晰的展示如下:

为什么打印这些日志?

【服务入口为什么打印日志】

  • 第一,对每一个请求都进行记录,当日志上报以后,可以根据请求的数量对系统的负载进行更好的监控;
  • 第二,对每一个响应都进行记录,当响应异常时,日志系统可以帮助开发者及时发现问题,而不必等待业务方的反馈;
  • 第三,一旦服务真正出现问题,可以通过服务入口处的日志在任何地方(开发环境/测试环境/线上环境)复现问题的场景。

【依赖的三方服务为什么需要打印日志】

  • 第一,任何第三方服务都是不可信任的,开发者必须面向失败编程,完整的记录三方服务的请求与响应,而不是依赖三方服务自己的日志信息;
  • 第二,当自己的服务出现问题而根据日志确实无法定位时(很极端的情况),就需要及时复现问题场景,但是如果复现是第三方服务响应的信息不一样,那复现必定是不成功的,但如果提前记录了第三方服务的响应,在开发环境复现时,就可以及时mock数据。

日志需要打印哪些值?

对于服务入口处和第三方依赖的日志,需要打印响应时间、返回状态码、当前操作人、调用的方法名、服务名、调用方IP、被调方IP、行号、日志级别、全链路ID、服务环境等等信息;对于普通的日志,主要注意全链路ID即可。

特别需要注意的是,全链路唯一ID必须在所有的请求中进行透传,一旦丢失,将会引起很多不必要的麻烦。

上报后的日志展示如下:

腾讯云日志服务CLS能力演示

面对业务日志的庞大监控诉求,腾讯云日志服务CLS拥有「百亿级日志,秒级分析」、「一分钟实时告警」等产品能力,提供日志一站式服务,轻松解决运维、运营等场景难题。

下面就让我们一起来看看CLS的核心功能演示。

日志检索功能

CLS的检索和分析可以使用Lucene和SQL语法,针对每一个字段进行搜索。也可以使用全文检索,这都是最基本的功能。我们对日志进行格式化之后,每个字段都可以单独检索,可以说是目前最灵活最为强大的和方便的检索工具之一

同时支持丰富的算数操作符:

详情请见:概述及语法规则

日志分析功能

日志服务最强大之处在于对于搜索出来的日志结果,可以使用SQL语句进行分析,CLS也可以做OLAP分析引擎使用。

如下图所示,分析了最近15分钟各个方法的平均耗时:

还可以切换成不同图表等来进行展示,并且可以保存为监控大盘:

支持众多的分析函数:

详情请见:检索分析

日志监控

上面说到,我们可以使用SQL语句配置一些图表,这些图表可以配置为一个专题的仪表盘,比如部分业务数据接出情况统计的看板:

制作仪表盘非常简单,只需要使用SQL和一些函数,会写SQL就会配置仪表盘。

我们可以针对每个接口的成功失败、错误码、接口QPS等制作看板。也可以上报tomcat、trpc框架,甚至用Nginx日志来做分析和指标看板。

监控告警

1. 配置告警

对于上述日志的分析结果,可以针对于某个指标配置监控和告警。

下图是选择了ERROR级别的日志,在近15分钟中进行聚合,如果聚合结构大于0,则触发告警。

下图是告警效果:

其中,告警策略是策略名称,触发条件是此接口一分钟内报错数量大于15就告警。当前数据是当前的报错数量。

下方的多维分析会展示出具体的报错原因和全链路ID,可以快速查看报错信息;也可以点击查询日志的链接,快速查看报错的详细信息。

如图,点击后可以查看详细的堆栈信息和全链路日志,快速定位问题。

2. 业务使用的场景举例

场景一

某次用户的服务突然发出告警,一分钟内失败数量达到40个以上。开发同学点击告警链接,然后使用SQL语句后快速分析得出报错集中在一台机器IP上,查看机器信息发现是宿主机故障,因此快速停止了该机器后,告警也随之解除。

如下图所示:

只花费1分钟,就定位到问题原因然后解决了问题。可以看到,如果没有日志服务,挨个上机器查看犹如大海捞针,可能一上午也无法定位具体原因!

场景二:

某用户业务告警突然发出电话告警。我们通过全链路日志快速分析后,得出问题原因是OLAP数据库性能瓶颈急需扩容,扩容后业务恢复了正常。从定位问题原因到解决问题只花费了不到10分钟

CLS在全链路场景的应用

在CLS中,只要拥有一个traceId,就可以借此一次性查询所有日志。

下图是一个全链路日志,它由多个服务产生,并最终聚合到CLS日志平台。CLS全链路日志主要用于日志的查看和聚合。

结语

在成本允许的前提下,除了业务监控,后续还可以增加JVM的监控, GC的监控,内存监控,Trpc线程池的监控。容器层还可以增加内存监控、CPU监控、网络IO监控。

业务监控和告警已经可以覆盖大部分场景了,剩下的这些在极特殊场景下才会发挥作用,如做全链路压测或性能压测时才可能需要查看线程监控信息。

对于分布式服务,保证服务质量需要关注的点有很多(如下图),一般的业务只需要做好其中几个点就可以保障服务的质量了。

很多质量问题都可以在开发上线阶段发现并且解决,下面附上一个开发注意的测试要点:

在需求上线后,对于新增的接口和业务,做好监控和告警,对于数据报表服务来说,如果上线后出现RT增加或者失败率增加的现象,需要及时排查,必要时回滚然后再查清原因。

在未来,CLS会继续打磨日志服务细节,不断精进监控告警能力,帮助用户在日志运维、运营、合规审计等业务方面实现跨越式发展,为线上服务的高可用性保驾护航,造福更多运维团队与开发团队。


以上就是将CLS监控告警相关功能的应用实践,感谢阅读!

一站式日志数据解决方案平台

加入「腾讯云日志服务CLS技术交流群」,掌握最新动态,获取更多资讯!

原文地址:https://cloud.tencent.com/developer/article/2058441

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340