既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
在可观测性的内容中,可以抽象出三大元素:日志(Logs)、跟踪(Traces)、指标(Metrics),这三大元素就是可观测性的三大支柱。
日志收集、链路追踪和度量指标都是遥测体系的重要组成部分,它们一起构成了观测系统运行状态和性能的关键数据基础。
下面梳理在从业过程中对于可观测性的相关架构和开源工具的实现原理的理解,这里点到为止,主要让大家了解有哪些技术点,想要了解更具体的内容,可以到搜索中查询,有很多好的详细的文章。
二、日志(Logs)
记录并汇集系统运行时产生的日志,包括但不限于错误信息、警告、调试信息以及应用行为细节,这些信息有助于进行问题排查、性能分析和系统审计。
2.1 日志应用
- nginx-err:nginx-log + logstash + es + kibana
- go-error:log-center + kafka + logstash + es +kibana
其中用到的工具:
ELK
**Elasticsearch:**分布式搜索与分析引擎(存储日志数据)。
**Logstash:**数据收集、过滤与转发工具(Elastic Stack一部分)。
**Kibana:**数据可视化平台(Elastic Stack一部分)
**log-center:**自研 UDP 日志服务
2.2 日志架构
2.2.1 UDP日志服务日志收集架构
Log-center 是自研的 upd 日志服务,应用服务将日志上报到日志服务,日志服务将日志写入到 kafka,然后再通过 logstash 从 kafka 同步到 ES,研发人员通过 kibana 查询 ES 日志。
kibana 功能还是很强大,除了日志查询,还支持 Visualize 统计图表,Dashboards 仪表板 添加 Panels 等等,具体可以搜索了解相关介绍。
2.2.2 Nginx 日志文件收集架构
通过 logstash 将 nginx 日志采集上报到 ES,其他和上面一样。
三、跟踪(Traces)
在分布式系统中,尤其是微服部署,服务之间的链路调用错综复杂。链路追踪用于追踪一个请求在整个系统中的传递过程,记录每个服务调用的详细信息,如调用顺序、耗时、状态等,这对于解决分布式系统中的复杂问题和优化系统性能至关重要。
3.1 链路追踪应用
- php apm
- go jeager trace
- kiali istio mesh
其中用到的工具:
**Jaeger:**分布式追踪系统,用于微服务和云原生应用的性能监控与故障排查。
**Kiali:**服务网格可视化与管理工具(Istio)。
3.2 关于 jeager
jeager 分布式追踪,链路组成:Span,Trace。
一个 Span 表示 Jaeger 的逻辑工作单元,Span 具有操作名称,操作的开始时间,和持续时间。Span 可以嵌套并排序以建立因果关系模型。
一个 Trace 是通过系统的数据/执行路径,Trace 可被认为是由一组 Span 定义的有向无环图。
3.2.1 jeager 链路逻辑图
3.2.2 jeager 架构图
收集器直接写入存储
收集器写入 Kafka 作为中间缓冲
3.2.3 jeager 组件说明
- Jaeger Client 为不同语言实现了符合 OpenTracing 标准的 SDK。应用程序通过 API 写入数据,client library 把 trace 信息按照应用程序指定的采样策略传递给 jaeger-agent。
- Agent 它是一个监听在 UDP 端口上接收 span 数据的网络守护进程,它会将数据批量发送给 collector。它被设计成一个基础组件,部署到所有的宿主机上。Agent 将 client library 和 collector 解耦,为 client library 屏蔽了路由和发现 collector 的细节。
- Collector 接收 jaeger-agent 发送来的数据,然后将数据写入后端存储。Collector 被设计成无状态的组件,因此您可以同时运行任意数量的 jaeger-collector。
- Data Store 后端存储被设计成一个可插拔的组件,支持将数据写入 cassandra、elastic search。
- Query 接收查询请求,然后从后端存储系统中检索 trace 并通过 UI 进行展示。
3.2.4 jeager 代码入侵
将微服务中的 gRPC和 HTTP 代码中嵌入追踪相关的代码
- 在 HTTP 服务中集成 Jaeger,早期的做法可能需要在每个请求处理器中显式创建一个新的 Span,并设置父 Span(如果存在)。例如,在 Node.js 中,使用
opentracing
库和jaeger-client
时,需要在中间件中注入追踪逻辑,初始化 Span 并将其绑定到请求上下文中。 - 在 gRPC 服务中,同样需要在每个服务方法的前后创建 Span,通常也需要设置相应的父 Span。gRPC 社区为此提供了拦截器(Interceptor)机制,可以避免直接在业务逻辑中添加追踪代码。通过编写一个 gRPC 拦截器,可以在不修改原有业务逻辑代码的情况下注入 Jaeger 的追踪行为。
存储 mysql ,中间件 redis、kafka ,相关的 client 包也都支持添加追踪的相关拦截的代码。
这样整个链路追踪就可以贯穿应用的各个关系层级,在 jeager ui 中就可以看到从请求发起到服务调用,以及存储操作,中间件操作的整个链路的调用关系。
四、指标(Metrics)
度量是系统运行时统计的各种量化数据,如CPU使用率、内存使用量、网络带宽、请求处理速率、错误率等,这些数据可用于实时监控系统性能、预测潜在问题、制定容量规划、掌握服务水平。
4.1 度量指标应用
- k8s:k8s-ServiceMonitor + promethus + grafana
- Kafka:kafka-exporter + promethus + grafana
- esc: ecs-exporter + promethus + grafana
- mysql:mysql-exporter + promethus + grafana
- redis:redis-exporter + promethus + grafana
- …
其中用到的工具:
Grafana:多数据源的监控仪表板与分析工具。
**Prometheus:**监控与警报工具,主要用于度量收集与分析
4.2 关于 Prometheus
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新