
编者按:这篇文章首次出现在卷展栏.ioblog.CloudBees推出应用程序最干净、最漂亮的特性之一是,当你运行一个"实验"或推出一个新的时,你可以使用一个强大的杀戮开关特点:应该是什么出了问题,你可以很快恢复到功能的默认状态旗帜。如果您正在使用CloudBees部署实验来部署更改(可能是一个新特性、一个新外观甚至是一些新的API或后端),那么这确实可以增加信心,并使您能够更快地移动,因为您知道您可以随时退出时间。在这个帖子,我想向您展示如何将此功能连接到日志和错误收集服务,以便一旦他们发现问题(异常情况),就可以自动停止部署。如果您正在运行一个实验或推出一个更改,这样的服务尤其有用。在这个过程中,你真的想知道某件事是否发生了变化(恶化),然后对它做出反应(停止实验,部署新版本等等)。异常并首先检测它们,什么是异常?从视觉上看,它们很容易被发现,你可以把它们看作是离群值,它们远远超出了诺姆:我们在视觉上要有很好的直觉来发现异常值。然而,有时它是错误的;例如,如果我们要绘制移动应用程序中的错误图表,那么当我们第一次到达周末时,我们可能会注意到错误率的峰值。这可能看起来不寻常或令人担忧,但我们注意到同样的情况在周末一再发生,这意味着它可能没问题。有时,我知道有些季节性的变化是正常的。这是一门艺术,通常机器学习涉及到机器学习,你可以在这里多读一点幕后故事。谢天谢地,有很多工具可以构建这一功能,事实上,如果你在使用CloudWatch,亚马逊会免费提供它(好吧,你每次使用都要付费,但这不是预付费):在这种情况下,它使用至少15分钟的窗口来学习度量中的模式。强大的Kinesis工具有一些内置的机器学习功能(随机砍伐森林算法有一些很好的文档,可以帮助理解异常检测和无监督学习),可以一次查看多个指标,并了解什么是异常(然后可以使用这些功能来发出警报-实际上,亚马逊使用这本身用于网络监控)。流行的newrelic工具内置了对离群点检测的支持例子。在那里现在有那么多的工具(其中很多你可能已经在使用),那些曾经属于科学领域的东西现在都可以随时使用,并且都可以用来发出警报或采取行动,但在这篇文章中,我想展示一些工具,这些工具可以很好地与CloudBees展开实验一起工作,以及它们如何与CloudBees卷展相集成API.WebhooksOne接口几乎所有的监控、警报和分析工具都是Webhook。对于context-webhooks是可以设置的HTTPS端点,以便在满足条件时(例如检测到异常时),给定服务可以触发事件。Webhooks在整个互联网上工作得最好,尤其是在公共互联网上托管的SaaS服务之间(有一些技术可以在防火墙后面获得这些服务,如果您感兴趣的话,我以前已经写过了)。甚至还有一个徽标:BugSnag和Logz.io/LogglyBugSnag是一个处理错误跟踪的流行服务:您可以在部署代码的任何位置连接它以捕获未处理的错误。然后它分析这些数据,将它们汇总起来并报告这些错误。这对于计算的"边缘"来说尤其有用,在这里你可能无法访问日志:移动应用程序、浏览器等等,但在大多数情况下广泛部署技术.Logz.io以及https://www.loggly.com/将日志记录为服务:生成日志的任何内容都可以配置为将日志发送到像这样的服务,它可以分析和提取指标、报告和警惕。一这些工具的共同点是它们收集了大量的数据。正在使用的应用程序将生成大量日志,并且可能会生成许多错误!(即使在正常操作中,通常也会发生未经处理的情况-但这是正常的,这是正常的,不正常的是当日志或错误以某种非季节性的方式突然发生变化时)。这是非常有用的,因为数据积累使他们能够了解季节性,并发现真正值得升级的异常(无论是对人类还是API)。日志.io有能力利用"以前被称为"麋鹿堆栈发现异常。它还可以通过webhook(他们称之为自定义端点)设置,以便在出现问题时调用CloudBees Rollout。Loggly可以为您绘制异常图,当然,像Logz和BugSnag一样,可以从这些异常中生成警报(可以通过HTTPS发送到webhook端点)。BugSnag有一个有趣的特性,可以识别错误中存在"峰值"(即它在熟悉错误的背景噪音中非常突出)。这是通过webhook特性作为JSON中的一个字段提供的,该JSON将发布到网络钩子:在这个我们最感兴趣的是触发器类型成为"projectSpiking"事件-因为这将很好地与正在推出的特性(或正在运行的实验)相关。如果你对云蜜蜂的首次推出感兴趣的话,我们可以在第一次推出云蜜蜂的时候做一些有趣的事情可以通过一个丰富的API实现自动化,包括上面所示的Kill按钮。为了终止一个实验,它使用了一个相当简单的补丁httpapi调用,类似于这就是API顺便说一句,这里有大量的文献记载。实验API就是我展示的那个。如果您在使用API时打开了web控制台,您可能会注意到它会随着更改实时更新—非常很好。这个很好,我们可以将它与各种系统连接起来,我们只需要获取API密钥和AppId以及其他一些东西,但挑战在于,有了这些系统和工具,可能没有现成的或灵活的集成允许他们调用这个API直接。给像窃听器和工具日志.io上面提到的已经可以做webhook了,我们需要一些胶水来连接它们(和其他的)与CloudBees的补丁实验API推出。谢天谢地这是非常容易的-甚至更容易主办。为了帮助实现这一点,我做了一个小项目,你可以把它部署为Google云函数——云函数类似于AWS Lambda函数,是一种无服务器的模式,托管一些只在需要时调用的功能(当然,当它们不运行时,它们不使用资源或成本,您需要一个google云帐户和gcloud命令行):https://github.com/michaelneale/rollout.io-aneous-detectionTo使用这个-你克隆它然后运行:gcloud函数deployout_webhook--trigger http--runtime"python37"这将为您提供一个可以用于webhook的端点,复制它为您生成的URL,再加上一些参数格式:https://x。cloudfunctions.net/rollout逯webhook?secret=..&app_id=..&environment_name=..&flag_name=…要获取机密和应用程序id,请按照以下说明从CloudBees卷展控制台上的应用程序设置/集成选项卡获取。环境和标志名来自您正在运行的实验。一旦您有了带有参数的完整格式的URL,就可以将其用作webhook或应用程序的自定义端点,例如日志.io、BugSnag或CloudWatch,等等,如果你需要,您还可以使用kill峈experience函数(别忘了将其重新部署到google cloud函数)来定制查看JSON有效负载的逻辑(现在几乎所有webhook都使用JSON有效负载)。这对于查看BugSnag webhook的有效负载非常有用例子。希望如此,您会发现这一点很有用,并密切关注与不断增长的工具和服务集的现成集成,这些工具和服务可以监视您的系统,这只是一个开始!附加资源:签出功能标记的终极指南了解功能标记的五种最佳实践发现功能标志和功能分支之间的区别