障害问题的看法 (Shàng’ài wèntí de kànfǎ)

简要概述

    • 最近、障害が頻発した

 

    障害について独自の理論やベストプラクティスを考えた

似乎已经有了系统化的理论。

目标定义

我们决定将目标设定为“最小化与障碍相关的业务损害”。

障碍相关的话题,
监控、冗余、指标、日志、健康检查…

这类话题为何会被提起,是因为最终目的是为了最小化与障碍相关的商业损失。

目标和各种因素之间的关系

我考虑了导致障碍的原因。

外界因素导致系统受损 (可通过冗余等方式控制受损程度)
-> 发现损害发生 (通过警报等)
-> 检查损害 (日志、度量等)
-> 减轻损害 (采取措施等)
-> 损害超过阈值
-> 发生故障

我尝试写了一篇关于这个关系的文章。

screenshot 2019-03-11 17.23.34.png

如果将观测系统视为监视系统的上级,整体上可以这样理解:

screenshot 2019-03-11 17.25.37.png

换句话说,监视系统被加入了反馈循环。

也许可以用这个模型来定义一个良好的系统,其在设定了适当扰动并附加了成本的情况下,最小化故障发生率。

应该在哪里进行投资?

根据预期的干扰程度,最佳投资选项会有所不同。

预计的干扰

    • ハードウェアの故障

 

    • インフラのバグ

 

    • アプリケーションのバグ

 

    • リソース

 

    アクセス過多

这是一个关于是微观还是宏观的问题。

举例来说,HTTP的健康检查能同时确认多个因素,例如不是由内存不足、硬件故障或网络设置错误等引起的。然而,它无法预测前兆(例如内存逐渐增加)等。每种检查方法都有各自的性质。

    • 前兆を補足できるか?

 

    同時にチェック可能な範囲

自动还是监视。

硬件故障可以自动处理,但程序错误无法自动修复。如果自动处理成本较高,那么可以通过监控来处理吗?

我所考虑的最强最佳实践-

0. 用户的反应

我們需要意識到默認情況下有著對用戶反應進行監控的功能存在。

尽可能广泛地进行监视

如果我们以自动贩卖机作为例子,我们需要定期监视它是否能在投入硬币后提供美味的饮料。通过这样做,我们可以及时发现2次及之后的监视不足之处。

还可以加入其他流行的监视方式,如资源监视和HTTP状态监视等(流行的监视方式应该反映了流行的干扰分布)。

如果在0或1情况下发生障碍,应进行再发防止。

鉴于过去的事件有可能会在未来再次发生,为了预防再次发生,可以采取以下三种方法。

3. 加强监控,以捕捉前兆迹象。

在进行修正之后,为了即使修正存在缺陷,也能够通过监视来进行补充。
如果发生了由于内存不足引起的故障,就需要在修复内存不足问题之后,监视内存是否存在不足的可能。

为什么两倍数量会更好,我无法逻辑地解释,但总觉得是这样。
以两倍的成本,可以将修正错误的概率乘以2再平方。

4. 没有征兆的事物,让其产生征兆。

比如说,硬件故障很难捕捉到前兆,所以通过冗余化,使部分故障不会成为障碍而成为障碍的前兆。
对于程序逻辑等方面,可以在出现错误之前添加警告,或者即使出现错误也能勉强正常运行。

具體討論

自己研究的笔记。

ELK 企鹅

能够进行度量、可视化和警报的工具套件。
比如Elasticsearch和Kibana等工具的套件。

由于正在流通的docker-compose无法正常工作,因此我没有尝试过。

Grafana + Prometheus + cAdvisor + Node Exporter

Grafana + Prometheus + cAdvisor + Node Exporter(请提供一个选择的中文表达)

这个组件可以对度量、可视化和警报进行测量。
很好用。
这个Rails组件也很不错。
https://github.com/discourse/prometheus_exporter

    • Grafana: いろいろなdata sourceのデータ(prometheusのデータなど)を見やすく可視化するツール。アラートも飛ばせる

 

    • prometheus: メトリクスを読み書き保存できるサーバー。

 

    • cadvisor: prometheusにdockerのメトリクスを送るやつ

 

    • node exporter: prometheusにマシンのメトリクスを送るやつ

 

    prometheus_exporter: prometheusにrailsのメトリクスを送るやつ

https://app.bugsnag.com可以用中文表达为:

可以免费收集和可视化Rails的错误日志。
还可以发送警报。
是直接通过API从Rails发送的。
因为没有使用fluentd等工具,所以集成很容易。

请提供以下中文的同义词句子:

https://uptimerobot.com/

可以免费进行健康检查,还能发送警报。

杂感

我觉得这种方式本身就像是算法。
在外扰分布未知的情况下,如何以低成本使用在线算法构建一个对外扰具有强韧性的系统,这是一个问题。

因为我们本来就是通过充满自制感的操作流程进行运营的,所以我认为障碍发生是因为这个原因。我稍微调查了一下Kubernetes,但是要记住的东西非常多,所以我放弃了。我在考虑如何在不改变整个操作流程的情况下,以最小成本降低障碍发生率。这篇文章让我想起了这个问题。通过监控来构建反馈环路,以及最佳实践对我来说是一个新的发现。

广告
将在 10 秒后关闭
bannerAds