Linkerd|实现Kubernetes可观察性监测

在本文中,咱们将向您展现如何完成基本的Kubernetes可观察性任务:从运行在Kubernetes集群上的应用程序得到黄金指标或黄金信号。咱们不须要修改任何代码,也不须要进行任何配置,只要安装Linkerd(一个开源的超轻服务网格)就能够作到这一点。咱们将介绍什么是服务网格,术语可观察性是什么意思,以及这二者在Kubernetes上下文中是如何关联的。java

用服务网格监控Kubernetes应用程序

若是大家刚刚适应了Kubernetes。恭喜你!可是如今你须要干什么?任何Kubernetes使用者者的第一个可观察性任务之一是监视,您须要知道何时出现了问题,以便您能够快速地修复它们。web

Kubernetes可观察性是一个很是普遍的话题,网上有不少关于可观察性与监控、分布式跟踪与日志记录等之间的细微差异的讨论。在本文中,咱们将重点讨论一个基本问题:在不更改任何代码的状况下,从运行在集群上的应用程序得到黄金指标或黄金信号。咱们将安装一个Linkerd,一个开源的超轻量级服务网格。与大多数服务网格不一样,Linkerd只须要在集群上安装几分钟,不须要配置。数据库

虽然简单,但Linkerd包含了一个很是强大的度量管道。一旦安装完毕,它将经过观察集群上运行的全部组件之间的HTTP(或gRPC)和TCP通讯,自动检测并报告成功率、流量级别和响应延迟。微信

linkd能够自动为服务报告度量标准一般被引用为服务的黄金度量标准。app

什么是黄金度量标准?为何它们很重要?

若是您已经知道黄金参数是什么,请跳过这一节!curl

黄金指标或黄金信号是您须要了解应用程序是否按预期启动和运行的首要指标。这些度量为您提供了有关服务运行情况的粗略信号,而不须要知道服务的实际功能。tcp

Cindy Sridharan在她的关于监控和可观察性的博文中写道:当不直接驱动报警时,监控数据应该被优化,以提供系统总体健康情况的鸟瞰图。编辑器

谷歌SRE书定义的黄金指标为:分布式

  • 延迟——一种衡量服务速度快慢的方法。它是服务请求所花费的时间,一般以百分比来度量。第99百分位延迟为5ms意味着99%的请求在5ms或更短的时间内获得服务。
  • 流量——让你知道某项服务有多忙或需求有多复杂。一般用每秒对服务的请求数来衡量。
  • 错误-请求失败的数量。一般与总流量相结合来生成一个成功率——成功请求与遇到错误请求的比率。
  • 饱和-衡量你的系统的负载

经过观察服务的流量,Linkerd能够简单地提供延迟、流量和错误的测量——乐观地说,Linkerd以成功率的形式提供了这些数据。(第四个指标,饱和度,在监控讨论中常常被忽略,由于它须要了解服务的内部状况,一般跟踪其余指标,如流量和延迟。)微服务

有时这些指标也被称为服务的RED指标:

  • Rate——您的服务每秒正在处理的请求数。
  • Errors—每秒失败的请求数。
  • Duration——每一个请求所花费时间的分布

无论你怎么称呼它们,Linkerd的美妙之处在于,它不只记录这些指标的流量,并且汇总和报告它们,这样咱们就能够轻松地使用它们。(咱们将在下面看到。)这使咱们可以监控咱们的应用程序。一旦咱们可以监控咱们的应用程序,咱们就能够在出错时收到报警;研究其长期性能;并对其可靠性和性能进行测试和改进。

黄金指标:最简单的方法

安装:访问Kubernetes集群并安装Linkerd CLI

咱们假设您有一个正常运行的Kubernetes集群和一个指向它的kubectl命令。在本节中,咱们将带您浏览linkd入门指南的缩写版本,以便在这个集群上安装Linkerd和一个演示应用程序(咱们将得到最佳指标的应用程序)。

首先,安装Linkerd命令行(或者,直接从Linkerd release页面下载。):

curl -sL https://run.linkerd.io/install | sh
export PATH=$PATH:$HOME/.linkerd2/bin

验证Kubernetes集群是否可以处理linkd;安装Linkerd;并验证安装:

linkerd check --pre
linkerd install | kubectl apply -f -
linkerd check

最后,安装Emojivoto演示应用程序,这是咱们但愿得到黄金指标的应用程序。若是仔细观察下面的命令,您将看到咱们其实是在向应用程序添加linkerd(咱们称之为注入),而后将应用程序部署到Kubernetes。(若是您想知道这是如何工做的,请查看咱们的文档https://linkerd.io/2/tasks/adding-your-service/)。

curl -sL https://run.linkerd.io/emojivoto.yml \
| linkerd inject - \
| kubectl apply -f -

嗯,就是这样。这就是您须要的全部工具,您的应用程序,并可以访问您的黄金指标!如今让咱们来看看他们。

在Grafana查看度量

想要看到全部这些有用的图表和仪表板吗?没有问题!运行linkd dashboard -show grafana并打开命令输出的连接。您将看到Linkerd的顶层仪表盘,其中包含它所收集的指标的整体和每一个名称空间的细分。向下滚动到咱们应用程序的命名空间(ns/emojivoto),观察如下图表:

经过linkd CLI查看指标

咱们还可使用linkd stat命令查看应用程序的指标。

全部这些数据也能够在Linkerd's dashboard中找到,你能够经过运行Linkerd dashboard来访问:

看看Grafana图表(或linkd仪表盘),你能够当即看到voting服务作得不是很好-它的成功率至关低!向咱们的应用程序中添加黄金指标能够当即让咱们看到应用程序中可能出现的问题。

真的这么简单吗?答案是确定的!咱们所须要作的就是安装Linkerd并将其注入到咱们的应用程序中。在底层,当linkd被添加到一个服务时,它会自动检测与服务的pod之间的任何HTTP和gRPC调用。因为它可以解析这些协议,它能够记录这些调用的响应类和延迟,并将它们聚合在一块儿,在这种状况下,将它们合并到一个名为Prometheus的时间序列数据库的小型内部实例中。当您经过Linkerd的仪表板和CLI查看黄金指标时,Linkerd会从这个内部的Prometheus实例中获取它们,在不修改应用程序代码的状况下为您提供全部这些指标。

Linkerd还能作什么?

咱们已经看到了如何使用Linkerd来得到黄金指标,这是得到系统可观察性的第一步,也就是说,得到复杂应用程序中正在发生的事情的高级视图。但指标只是个开始。当您继续您的监视和可观察性旅程时,您必定会遇到另外两个经常使用的工具:日志和分布式链路跟踪。

分布式跟踪涉及到检测应用程序,以便测量请求在服务中花费的时间长度。当咱们的应用程序使用许多相互通讯的微服务时,跟踪是一个很好的工具,能够用来调试缓慢的请求,并找出哪一个服务是瓶颈。Linkerd能够帮助分布式跟踪,尽管一个服务网格在分布式跟踪方面作的很少。

相似于分布式跟踪,Linkerd也提供了一个强大的动态请求跟踪工具tap。tap命令相似于用于微服务的tcpdump:它容许您查看发送到或来自特定服务的实时请求(示例)。Tap是在生产中调试Kubernetes服务的强大工具。

最后,应用程序日志固然是开发人员在怀疑某个特定进程不正常时首先要作的事情之一。当运行一个服务网格时,有时候查看网格内部发生了什么是颇有用的。虽然Linkerd不能为你提供应用程序日志,但Linkerd logs命令提供了一种简单的方法,至少能够查看Linkerd内部发生了什么。

最后

在这篇博文中,咱们讨论了如何轻松得到运行在Kubernetes集群上的应用程序和服务的最佳指标。这是你进行服务可观察之旅的第一步。但愿这篇博文中的信息可以帮助您启动并可靠的运行Kubernetes服务。

推荐

Kubernetes入门培训(内含PPT)

使用Kubernetes和Istio构建大规模集群

本文分享自微信公众号 - 云原生技术爱好者社区(programmer_java)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索