DevOps 自动化实践 —— Incident 工作流


作为 DevOps 不免遇到各种 alert 和 incident,怎么高效可靠地办理这些意外事件成了 DevOps 作业流程中不可避免的话题。本篇文章为大家介绍咱们的 incident 作业流,s ; = V | * }和一些实践过程中总结的经历。

Incident 来历

Incident 的来历有许多,例如客服团队人工上报、监控体系发出的 alertf y V K 等。咱们绝大多数 incis o Qdent 都源自后者,而 alert 则分别来自白盒、黑盒、基础设施的监控。

白盒监控

所谓白盒监控,要点在于重视运用内部的目标,例如每秒请求数。力求在P C q ` z用户可察觉的意外产生前,将它们扼杀在源头。

咱们采用的是 Prometheus + Alertmanager 的组合。Pr, Q q wometheus6 r ; m [ $ 经过 exporters 收集各个运用内部的目标,计算告警规矩表达式,并x , 5 O将契合规矩的告警发送给 Alertmanager。

Node Exporter      <---+
Kube-state-metrics <---|   +------z ! [ ; 0 f E l N------+
Nginx e1 ) A B G  hxpori 0 O U T t I Lter     <-------+ Prometheus |
Redis exporter     &- 2 5 S &lt;---|   +------+x 3 w x 7-----+
...                <---+          |
|
+------+   |   +-------+
|      ^   v   v       |
| Evaluate alert rules |
+----------+* v @ z F 1-----------+
|
Send] K % 2 M  alerts if     |
any condio l - Stion hits |
|
+-------v------+
| Alertmanager |
+-------+------+
|
v
+--+--+
|  ?  |
+-----+

咱们在之前的文章中有梳理过t R ^ Prometheus 协作 Alertmanager 的具体用法,本文不再打开相关内容。

黑盒监控

黑盒监控更多重视的是「正在产生的事件」,例如某运用M h d P呼应时间过高。它们常常与用户的人物共同,与用户可观察到的现象共同。尽可能在意外产生时,可以及时上报问题,而不是等待用户的反应。

曾经咱们选用的是 StatusCake 作为探针,守时向咱们的服务发起请求,若呈现超时、拒绝连接、呼应未包括特定内容等问题则触发告警。但后来偶尔一次被咱们发现,部分监控意外D , * 1停止超越一个小时,此刻服务宕机彻底没有任何告o 5 @ D U H w U警,StatusCake 官方也没有及时奉告这一问题U C E E ! I # ^ N,后续跟 StatusCake Support 确认是 bug:

Hi there,

We’ve since resolved this issue and we have c( E @ I *redited a half month’s credit to your account to be deducted from the next subscription cost. The issue at the time was related to an error on a single testi= L $ * Sng server.

My apologies for the inconvenience here and won’t see that happen again!

Kind rP p H vegards,

StatusCake Team

咱们不确定此前是否) F R X 0有过相似事件咱们没有发现,加上用户交互体会较差等要素,咱们决议彻底抛弃 StatusCake 转向@ : @ Pingdom。

                 +---------+
| PW & cingdom |
+---+--+--+
|  |
Continuously sending |  | Send alerts if
requests to probe    |  | the services are
the blG 3 L . t /ack box        |  | considered down
+------+  |
|         |
+------v---+    +v----+
| Services |    |  ?  |
+----------+    +-----+
DevOps 自动化实践 —— Incident 工作流

从图中可以看到咱们创建了很多的监控项,尽可能多地覆盖每个项目、每个环境、每个独立组件,让 Pingdom 协助咱们时c S w S刻重视着各项服务的状况。

关于守时使命的r % } e E 7监控咱们选用了 Cronitor,在之前的文章有过具体介绍。

以上这些监控项G m 8 h [ R咱们悉数运用 Terraform 代码化办理。一起,咱们强烈建议运用第三方服务作为黑盒监控,而不是根据 AWS、Azure 之类的云服务自主搭建。例如 StatusCake 就在协助文档中 明确表示 有很多协! o n作供应商,肯定不必 AWS 或许 Azure 的节点,以避免单点毛病问题。咱们以为黑s : & ! Y O % ~ V盒监控是 incident 作业流中十分重要的一环,需要尽最大可能避免因为云服务商呈现大规模毛病而导致监控失效。尽管这种i T I [可能性十分十分之小,# r 8 . X A g $ #但不是没有产生过,例如当年 AWS S3 呈现毛病导致无法更新 sv ~ U 7tat, S ] L ) W $ 7 Eus dashboard,因为警告图标就存放在宕机的服务上。

基础设施监控

除了运用的白盒监控、服务的黑盒监控之外,基础设施监控也是比较重要的一环。咱们的首要云服务供给商是 Az E + K IWS,运用了 RDS、SQS、ElastiCacI % F i f . h .he 等 AWS managed 的服务,因而也_ ^ F 6 R ,需要重视它们的目标和告警信息。这部分咱们采用的是 AWS 官方的 Amazon CloudWT v n H M + 1 B 1atch。

限于v K ; 8 = *篇幅,基础设施的告警通常比较少见,此处不再具体打开。

Incident 告诉

InciA D / Y u r j Qdent 产生后,相关信息应当告诉到 DevOps。咱们目前规定了两个首要途径作为 Incident 的「出口」。

Slack

作为我司内部的即时交流东西,Slack 一起承当了很1 ( O X 7 Z E多的音讯告诉作业,包括 GitLab、Cronitor 等。咱们为告T ) K Z H J O警信息创建了一个单独的 channel 叫做 #ops-alertsx # y B W j * G Q

DevOps 团队成员将该频道的 Notification Preferences 改为 EveryH [ u ( g ^ * T new messages,或是在全局 Preferences -&h V L } & [ zgt; NotificaV . H 9 b P 9 3 ctions -> My keywordsC q D O * X . C 中装备好例如 failedwarning 之类的关键字,即可确保告诉音讯可以及时送达 iPhone、iMac 等终端。

DevOps 自动化实践 —— Incident 工作流
DevOps 自动化实践 —— Incident 工作流

On-call

国内 on-call 作业机制好像不太普遍,简单来说,便是随时做好接听「告警告诉电话」的准备。

尽管 D– G LevOps 工程师会尽可能Q H 6 ; &重视 SlY k I A 8 v r { Yack 告诉,但还有些时分不一定可以及时收到告警信息,例如:

  • 非作业时间,
  • 漏看音讯,
  • 正在处理其它问题等。

如果产生比较紧迫的告警,例如 production down,需要H 6 # l F X立刻被处理。所以咱们装备了 on-call,由 DevOps 工程师轮番值班,根据 on-call schedule,将优先级较高的 incident 经过文字转语音(TTS)拨打电话告诉到人。

别的,DevOps 团队还会把告警的电话号码参加 iPhone 联系人,并打开 Emergb ) 5ency Bypass,这样就不必忧虑误触静音开关或是勿扰模式9 = 0接不到电话了。

DevOps 自动化实践 —— Incident 工作流

连接来历与告诉并规划作业流

Opsgenie 是一款 Atlassian 旗下的 incident 办理产品。它供给了很多的 integrations,从 AWS CloudWatch、Pingdom? 1 E 之类的监控体系,到 Slack、RingCentral 等通讯东西。这使得它几乎能从X T ( v任何来历接纳 alert、创建 incident,又能把这些 incident 以各种各样的方法告诉到负责人员。

例如在上文中提到的几款产品:

DevOps 自动化实践 —— Incident 工作流

别的,在工程师收到告警告诉后,应当第一时间 acknowledge,表示已知悉:

DevOps 自动化实践 —— Incident 工作流

如果没有在特守时间内 acknowledge,该报警信息将会被 escalate,将告诉信息发送给更高等级的负责人。

OpsH # x { ] I Z 4genie 还供给了一个明晰的 dashboard。它可以在 DevOps 收到告诉后,供给具体的 inD 6 4 9 D v ^ ycident 信息;别的因为多个来历的 alP ~ } . G – Oei } ! Grt 汇总在同一页面,这会协助 DevOps 了解此刻U $ V a _ U Y h J整个体系的宏观状况,有助于排查问题的根本原因。

DevOps 自动化实践 —— Incident 工作流

咱们还对不同来历、tag 的e v = alert 标记了不同的优先级,例如 P1 和 P3。在上图中的两个 Wat3 h m Uchdog 告警均为 P3 优先级。P1 优先级的 incident 将会 On-call 告诉,其它优先级t b W ] | {则经过 Slack 音讯。

+--------------+  +0 = ; p 4 o---------+  +------------+
| Alertmanager |  | Pingdom |  | CloudWatch |
+------+-------+  +---+-----+  +---------+--+
|              |                  |
|              |                  |
+-----------v  v  v-------] E o  W--------+
+-----+------+
|            |
|  Opsgenie  |
|            |
+----+--+----+
|  |
P1|  |P3
Alerts|  |Alerts
|  |
+. [ 0 ? J Z y ?---------+     |  |     +-------+
| On-call | <---+  +---> | Slack |
+2 ` , F )---------+              +-----D N @ p % p--+

总结

以上便是咱们的 incident 作业流,欢迎与咱们共享你的经历。


请重视咱们的微信大众号「rY y (ightcapital」

DevOps 自动化实践 —— Incident 工作流

发表评论

提供最优质的资源集合

立即查看 了解详情