Serverless可观察性的最佳实践

原文: https://medium.com/adobetech/...

WRITTEN BY数据库

Ran Ribenzaft服务器

Co-Founder & CTO @epsagon | AWS Serverless Hero | Entrepreneur, passionate about serverless and microservices.微信

翻译:祝坤荣(时序)框架

如今看起来每一个工程师都熟悉serverless这个词,但离在生产环境大规模使用还很远。意思是,实际上,大部分人在使用serverless时仍是没有经验的,而且因为这个缘由,不少最佳实践仍是缺失的。less

在这篇文章里,咱们会深刻可观察性,它是每一个工程和运维团队在移动到生产环境的核心组件。咱们会讨论每一个重要的基础:度量,日志和分布式追踪,并提供serverless在真实世界的最佳实践的例子。运维

file

可观察性中的度量

传统简单直接作监控的套路就是去看度量数据。 度量, 尤为是度量中体现的趋势, 能够展现出咱们系统的基本统计状况,好比:socket

• CPU或内存的使用峰值
• 流量和请求的趋势
• 咱们使用的跨服务的延迟状况
file
Google SRE图书中指出了监控分布式系统的4个黄金指标是延迟,流量,错误和饱和度。尽管看起来很简单,它仍然须要一些经验和时间来进行正确的监控。这个流程包括:分布式

• 从环境,应用,资源和服务上收集全部度量指标。这包括,好比,咱们的k8s集群,云资源,Java和Node.js应用,咱们的Redis集群。想要记录这些度量信息每一个实体都须要一套不一样的处理方法。
• 将度量信息传给一个统一平台,它要处理正确的量级,聚合全部度量指标,展现正确的数据(好比,用百分位替代平均值)。
• 最终,咱们须要为每一个应用或环境建一个仪表盘,而且为其中重要的定义合适的报警。函数

在serverless化后,CPU和内存变得不那么相关了;不要只盯着调用和错误的基本图表。多看和观察你的function有的每一个动做。你调用的任何API都须要被监控。微服务

可观察性中的日志

度量指标只能告诉咱们’好或坏’。他们不会提供任何信息和一种方式来告诉咱们为何一个应用不工做了。

要定位问题的种类,咱们须要理解咱们代码或服务的流程。要达到这个目的咱们要打印包括全部从开始到详细异常的日志(到一个文件,socket或服务)。

file
Elastic中的日志

每一个工程师都熟悉定位问题或bug的场景和要找到正确日志时持续升高的压力。这些问题都是因为日志的一些缺陷和固有的问题:

• 它们基本上是手动的。日过你没有记录一些事情,它不会出现(而后你补了日志,部署你的代码,而且等着问题再次出现)。
• 一般,它们没有上下文。这表示你要找到你想要找的日志,你须要对发生在你代码或服务的事件的相关日志进行搜索。
• 在众多服务中有不少的日志,这很难在它们之间进行导航。

想要从日志中获得有效的信息:

• 在你的日志行中填加元数据;例如,服务/函数function名称,场景,请求ID等。
• 在你使用的代码中自动化日志事件的处理。咱们会在下面追踪章节讨论这个。
• 保证在你的服务中用正确的方式索引日志,而后你可使用工具来进行分析。使用工具分析日志(用元数据和维度)能够帮助你理解你应用中的复杂趋势。
• 记录自定义的度量指标。这也适用于以前的基础指标,但它能够帮你发现业务核心指标。好比,上周用户注册的数量。

可观察性中的分布式追踪

追踪是可观察性中的重要基础,它在微服务和serverless中度量和日志中扮演重要角色。追踪的目的是收集一次操做的数据,这样咱们能够在不一样的服务中看到流程。
file

在一个运行微服务和serverless的现代应用中,咱们须要对追踪的“分布式”部分有更多的关注。追踪里最流行的标准是OpenTracing(或新的OpenTelemetry)。分布式追踪描述了一个框架来收集关于事件的数据(好比,一个DB查询,咱们会收集主机名,表名,持续时间,操做等),这叫作spans与上下文。它也描述了在你的服务中注入和抽取“追踪ID”。

有效在代码中抓取追踪的一种推荐的方式是进行加强instrument(https://epsagon.com/blog/inst...,因此每一个调用不须要手动。Instrumentation加强修改了一些调用;好比,每次你调用HTTP,它会路由到一个中间件,由其保存追踪信息。

因为追踪是被一种结构化的方式捕捉的,它让咱们能够对日志问一些更有意思的问题;好比,你能够查找全部“insert”操做超过300ms的事件,其被打了一个特定customer ID的标签。

file

追踪捕捉告终构化数据

要牢记如下几个关键问题:
• 加强和追踪你的应用是一个很是长的过程,须要长时间维护。若是你选择本身实现不会快速获胜。
• 咱们只讨论了追踪收集的部分。下一步是传送它们到一些服务。Jaeger(https://www.jaegertracing.io/)多是展示和搜索追踪信息的主流服务。
若是要从追踪中获得最大的收获:
• 用标签来充实你的追踪。标签让大家能够在你的复杂系统中精肯定位事件,按维度进行分析,好比,userId=X的一个特定事件有多少次,用了多久。好的标签能够是user ID,商品ID,事件类型,或任何你系统中特定的信息。
• 由于追踪给日志加入了上下文因此它在问题定位中扮演了核心组件。要作到那样,请考虑下载追踪里记录payload。好比,每个对DB的调用,增长查询信息;每个HTTP调用,填加request/reponse的header和body信息。
• 要在没有任何上下文信息里在成吨的日志或图表里搜索是很难的。经过使用追踪你能够可视化这些在你系统中的复杂服务和事务。

file
可视化追踪和payload信息是一个故障排查的强大工具(Epsagon)

总结

可观察性在每一个现代应用中扮演了很重要的部分。它须要不少规划,繁重的维护来应用最佳实践。将每一个基础部分分离到不一样的工具可让工程团队有很大的生产力,强化他们的合做。当选择一个工具来整合一切事物时这很重要。

另外,自动化你的流程以便它们不会对平常工程的工做流产生影响很重要。选一个受控的解决方案能够有很大的优点,就像你从云供应商选择数据库,消息队列,或服务器。

在Epsagon(https://epsagon.com/),咱们在创建一个针对serverless和微服务的追踪和监控的定制方案。你过你有兴趣能够联系咱们。

file
本文来自祝坤荣(时序)的微信公众号「麦芽面包,id「darkjune_think」
转载请注明。微信扫一扫关注公众号。
交流Email: zhukunrong@yeah.net

相关文章
相关标签/搜索