大话WEB开发@IT·互联网

如何保障服务的高可用-提升可观测性

2024-06-14  本文已影响0人  SFLYQ

一 、简介

image.png

保障服务的高可用,必不可少的措施,就是需要对服务资源使用度量情况、运行异常、逻辑错误、请求链路、等各项度量指标、日志和链路了如指掌,并且通过对服务的实时监控和分析,配置指标预警值,对异常进行告警,通知到相关负责人,通过可观测性的提升,预防和及时发现问题,保障服务的可用性。

在可观测性的内容中,可以抽象出三大元素:日志(Logs)跟踪(Traces)指标(Metrics) ,这三大元素就是可观测性的三大支柱。

image.png

日志收集、链路追踪和度量指标都是遥测体系的重要组成部分,它们一起构成了观测系统运行状态和性能的关键数据基础。

下面梳理在从业过程中对于可观测性的相关架构和开源工具的实现原理的理解,这里点到为止,主要让大家了解有哪些技术点,想要了解更具体的内容,可以到搜索中查询,有很多好的详细的文章。

二、日志(Logs)

记录并汇集系统运行时产生的日志,包括但不限于错误信息警告调试信息以及应用行为细节,这些信息有助于进行问题排查性能分析系统审计

2.1 日志应用

其中用到的工具:

ELK
Elasticsearch: 分布式搜索与分析引擎(存储日志数据)。
Logstash: 数据收集、过滤与转发工具(Elastic Stack 一部分)。
Kibana: 数据可视化平台(Elastic Stack 一部分)
log-center: 自研 UDP 日志服务

2.2 日志架构

2.2.1 UDP 日志服务日志收集架构

image.png

Log-center 是自研的 upd 日志服务,应用服务将日志上报到日志服务,日志服务将日志写入到 kafka,然后再通过 logstash 从 kafka 同步到 ES,研发人员通过 kibana 查询 ES 日志。

kibana 功能还是很强大,除了日志查询,还支持 Visualize 统计图表,Dashboards 仪表板 添加 Panels 等等,具体可以搜索了解相关介绍。

2.2.2 Nginx 日志文件 收集架构

image.png

通过 logstash 将 nginx 日志采集上报到 ES,其他和上面一样。

三、跟踪(Traces)

在分布式系统中,尤其是微服部署,服务之间的链路调用错综复杂。链路追踪用于追踪一个请求在整个系统中的传递过程,记录每个服务调用的详细信息,如调用顺序、耗时、状态等,这对于解决分布式系统中的复杂问题和优化系统性能至关重要。

3.1 链路追踪应用

其中用到的工具:

Jaeger: 分布式追踪系统,用于微服务和云原生应用的性能监控与故障排查。
Kiali: 服务网格可视化与管理工具(Istio)。

3.2 关于 jeager

jeager 分布式追踪,链路组成:SpanTrace

一个 Span 表示 Jaeger 的逻辑工作单元,Span 具有操作名称,操作的开始时间,和持续时间。Span 可以嵌套并排序以建立因果关系模型。

一个 Trace 是通过系统的数据/执行路径,Trace 可被认为是由一组 Span 定义的有向无环图

3.2.1 jeager 链路逻辑图

image.png

3.2.2 jeager 架构图

收集器直接写入存储

image.png

收集器写入 Kafka 作为中间缓冲

image.png

3.2.3 jeager 组件说明

3.2.4 jeager 代码入侵

将微服务中的 gRPC 和 HTTP 代码中嵌入追踪相关的代码

存储 mysql ,中间件 redis、kafka ,相关的 client 包也都支持添加追踪的相关拦截的代码。

这样整个链路追踪就可以贯穿应用的各个关系层级,在 jeager ui 中就可以看到从请求发起到服务调用,以及存储操作,中间件操作的整个链路的调用关系。

四、指标(Metrics)

度量是系统运行时统计的各种量化数据,如 CPU 使用率、内存使用量、网络带宽、请求处理速率、错误率等,这些数据可用于实时监控系统性能、预测潜在问题、制定容量规划、掌握服务水平。

4.1 度量指标应用

其中用到的工具:

Grafana:多数据源的监控仪表板与分析工具。
Prometheus: 监控与警报工具,主要用于度量收集与分析

4.2 关于 Prometheus

它针对大规模的集群环境设计了拉取式的数据采集方式,你只需要在你的应用里面实现一个metrics接口,然后把这个接口告诉Prometheus就可以完成数据采集了。而且还内置了报警功能。

image.png

[图片上传失败...(image-f190fa-1718456055078)] ### 服务高可用秘籍:高性能 - 葵花宝典

4.2.2 Prometheus 组件简要

以上各组件共同构成了完整的 Prometheus 监控体系结构,能够实现高效地数据采集、存储、分析和报警功能。

4.2.3 Prometheus 中四种度量

4.2.4 Prometheus 应用

业务指标: 将业务中的一些核心指标、队列长度、异常情况、等业务度量输出,然后通过 grafana 配置面板进行展示和预警, grafana 的使用具体后面会介绍到。

业务应用服务的指标上报,基本都是使用 pull metric 的方式,通过应用服务项目代码接入 prometheus client ,应用服务启动后会同时起一个用于拉取指标的 http 服务,然后在内网中暴露访问端口,prometheus config 来配置抓取应用暴露的指标端点。

资源监控: 通过 exporter 将服务架构中使用到的 esc 、k8s node pod container 、mysql 、redis 、kafka 等,服务器资源,核心功能指标进行上报,同样使用 grafana 展示和预警。

4.3 关于 Grafana

Grafana 是一个监控仪表系统,它可以大大帮助我们简化监控的复杂度,我们只需要提供需要监控的数据,它就可以帮助生成各种可视化仪表,同时它还有报警功能,可以在系统出现问题时发出通知。

Grafana 支持许多不同的数据源,每个数据源都有一个特定的查询编辑器,每个数据源的查询语言和能力都是不同的,我们可以把来自多个数据源的数据组合到一个仪表板,但每一个面板被绑定到一个特定的数据源。

具体的 Web UI 的使用 AlertManager 告警的配置,这里就不介绍,想要了解的可以搜索,总结就是很强大。

image.png

4.3.1 Grafana 应用

我们将日志 ES、指标的 Promethues 加入到 grafana 数据源,然后增加 panel 可视化图表,通过 AlertManager 设置预警值,通过钉钉群通知进行告警通知,整体搭配起来使用是真的香。

ES 日志:可以对日志进行查询可视化展示和监控,比如:请求 qps、异常 5xx 数量、 程序 error 数量、 msyql 慢日志、等请求和程序异常情况的预警。

Promethues 度量: 对上报的业务指标度量进行监控和异常告警,如:队列消费异常、核心功能异常、服务资源、等。

五、未来展望

image.png

当前接入多个可观测性的工具系统,各系统自相对独立,排查问题只能通过唯一标识 uid 等信息,通过人工的串联信息,如果我们能够在多个系统中进行观测信息的串联,那就可以减去人工匹配的过程,达到事半功倍的效果。如:用户反馈问题或者异常告警,通过从请求异常/请求日志中获得链路的 trace-id,然后在链路追踪中查看用户当前这个请求的链路情况,以及可以查询当前请求所在时刻的服务器节点、 pod、container 资源情况,串联后可以提升人员对问题排查、性能优化分析的效率。

六、持续更新

如何保障服务的高可用系列

预告的文章待后续持续输出,有喜欢的朋友双击 点赞 收藏 👍 + 666🤙

系列收录在 Github《大话 WEB 开发》

上一篇 下一篇

猜你喜欢

热点阅读