应用可观测性及常见技术选型

670 阅读4分钟

什么是可观测性:

随着微服务, 云原生等的技术快速发展,架构复杂性提高,在定位修复bug时,要考虑更多的问题。

原来的单体应用拆分成了一个个小的服务,每个服务可能网络环境不同, 资源配额不同,同时各个服务之间是否可以正常调用也必须考虑。

这时 应用的可观测性显的十分重要,目前应用的可观测性主要体现在以下三方面:

  • 指标(metrics)
    • 监测 系统cpu利用率, 网络吞吐量, 内存利用率等系统指标
    • 比如说应用在进行 大io 操作时,分配的内存可能不够,这时指标监控就显的特别重要
  • 日志(log)
    • 打印日志被认为是程序中最简单的工作之一, 可能一行代码就可以搞定,当然输出日志很容易,但面对上百个服务同时输出日志,分析和收集日志显的较为困难。
  • 链路追踪(trace)
    • 像dubbo服务的相互调用,bug可能出现在一个基础服务,但是其他服务在调用时可能会出现报错,这时如果要快速定位问题所在,链路追踪非常重要。就好比如, 队伍中每个人都向后面传话一样,传到最后话可能不对或者变了意思,链路追踪就是要看看 是哪个人出现了问题。

接下来,跟大家介绍一下构建完善的可观测性系统常见的技术选型。

下图是CNC Cloud Native Interactive Landscape 列出的著名的一些产品

深蓝色框的代表已经毕业的产品, 浅蓝色的代表正在CNCF正在孵化中的产品。


Metrics -指标监控

prometheus+grafana

官网:

prometheus.io/

grafana.com/

简单介绍一下:

Prometheus 一个开源的系统监控及报警工具,它前身是 SoundCloud的告警工具包。在2016年加入了 Cloud Native Computing Foundation,是继Kubernetes之后的第二个托管项目

Prometheus 从根本上存储的所有数据都是时间序列数据(Time Serie Data,简称时序数据)。时序数据是具有时间戳的数据流,该数据流属于某个度量指标(Metric)和该度量指标下的多个标签(Label)。除了提供存储功能,Prometheus 还可以利用查询表达式来执行非常灵活和复杂的查询

Grafana 是一个监控仪表系统,它是由 Grafana Labs 公司开源的的一个系统监测 (System Monitoring) 工具。它可以大大帮助你简化监控的复杂度,你只需要提供你需要监控的数据,它就可以帮你生成各种可视化仪表。同时它还有报警功能,可以在系统出现问题时通知你。

Prometheus可以说是数据源, Grafana 是 用 Prometheus 也就是数据源来的数据进行个性化显示的仪表盘系统。

那么数据源里的数据从何而来呢,这就需要 prometheus的exporter了,详见文档:、

prometheus.io/docs/instru…

大致界面


Log -日志

Kinbana+elasticsearch+fluentd

官网

免费且开放的搜索:Elasticsearch、ELK 和 Kibana 的开发者 | Elastic

Fluentd | Open Source Data Collector

通过上面 prometheus+ grafana 我们可以看的出,大致流程可能分三部分, 带入到本部分大致就是

  • 收集 (fluentd)
  • 存储 (elasticsearch)
  • 展示(Kinbana)

大致界面


Trace -链路追踪

SKYWALKING

官网:

skywalking.apache.org/

架构图:

整个架构,分成上、下、左、右四部分:

考虑到让描述更简单,我们舍弃掉 Metric 指标相关,而着重在 Tracing 链路相关功能。

  • 上部分 Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 数据,传递给服务器。
  • 下部分 SkyWalking OAP :负责接收 Agent 发送的 Tracing 数据信息,然后进行分析(Analysis Core) ,存储到外部存储器( Storage ),最终提供查询( Query )功能。
  • 右部分 Storage :Tracing 数据存储。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2 多种存储器。而我们目前采用的是 ES ,主要考虑是 SkyWalking 开发团队自己的生产环境采用 ES 为主。
  • 左部分 SkyWalking UI :负责提供控台,查看链路等等。

目前skywalking已经发展成 可观测性 一体化平台, 既能够在skywalking上同时实现指标监控,日志收集分析,链路追踪的功能。

但是底层依然是需要上面提到的技术的,所以建议大家用skywalking 的话 只用他的链路追踪版本—— Rocketbot UI。

Rocketbot UI和skywalking代理 下载地址如下:

skywalking.apache.org/downloads/#…

大致界面:

图片转载自:cloud.tencent.com/developer/a…

大家可以关注我的公众号,及时获取最新文章

image.png