关于告警:面向多告警源如何构建统一告警管理体系
本文介绍告警对立治理的最佳实际,以帮忙企业更好地解决异构监控零碎所带来的挑战和问题。 背景信息在云原生时代,企业IT基础设施的规模越来越大,越来越多的零碎和服务被部署在云环境中。为了监控这些简单的IT环境,企业通常会抉择应用异构监控零碎,例如Prometheus、Grafana、Zabbix等,以获取更全面的监控数据,以便更好地理解其IT基础设施的运行状况和性能体现。 然而,这种异构监控零碎也带来了一些问题,其中最显着的是告警信息的扩散。因为不同的监控零碎可能会产生不同的告警信息,这些信息可能会扩散在各个系统中,导致企业很难全面理解其IT零碎的告警情况。这使得响应告警变得更加艰难,同时也减少了人工治理的复杂性和工作量。 为了解决这些问题,企业须要一种更加对立和集中的告警治理计划,以确保告警信息可能及时达到正确的人员,以便他们可能疾速采取必要的措施来应答潜在的问题。 告警治理的痛点场景一:企业迁徙上云后,云上产品的告警不对立 在一个典型的云原生业务利用部署架构中,通常会应用到如下产品 ACK、ECS、RDS,利用通过Kubernetes部署在阿里云的ECS上并拜访云上的RDS。在这个架构中通常会用到如下监控产品来对系统进行监控。 通过CloudMonitor对阿里云基础设施ECS和RDS进行监控,当资源出现异常时进行告警。通过Prometheus对Kubernetes以及部署在kubernetes上的Pod进行监控,当Kubernetes出现异常时进行告警。通过ARMS对部署在Kubernetes上的利用进行监控,包含利用间接的调用链。当利用异样时进行告警。通过SLS对利用产生的日志进行监控,当日志出现异常时进行告警。在这样一个场景下因为用到了多个云产品对整个零碎进行监控会导致使用者须要在多个产品上反复配置联系人、告诉形式、值班等运维配置。且不同零碎之间的告警无奈产生有机联合,当一个问题呈现时不能疾速关联不同告警零碎中的相干告警。 场景二:多云、混合云架构下,异构监控零碎告警不对立 当企业的利用部署在多云环境或混合云环境下时,监控零碎产生的告警可能会更加扩散和简单,给企业的运维工作带来很大的挑战。因为不同的云平台和公有云架构之间的差别,监控数据的采集和解决形式也可能不同,因而,不同监控零碎产生的告警信息也可能体现出差异化,这会带来一系列的问题。 首先,不同监控零碎产生的告警信息扩散在不同的中央,运维人员须要消耗更多的工夫和精力去解决这些信息。其次,不同零碎产生的告警信息难以对立进行治理和剖析,使得问题的诊断和解决更加艰难。此外,因为不同零碎的告警信息可能存在反复或抵触,治理和解决这些信息也会变得更加简单。 场景三:自研监控零碎、自定义事件告警接入在利用开发运维过程中,随着零碎规模的扩充和复杂度的进步,各个角落中的胶水代码逐步增多。这些代码尽管是连贯不同模块和零碎的重要纽带,但一旦呈现问题,因为扩散在不同的中央,很难立刻发现和解决。这就使得企业难以保证系统的高可用性和稳定性。如何灵便的低成本的接入这部分代码产生的告警也成为企业应用运维的痛点之一。 对立告警治理在构建对立告警治理平台过程中,不同的监控系统对告警定义、解决流程都不一样,往往会存在上面问题: 不同零碎产生的告警格局不同,接入老本高。不同零碎间的告警接入后因为格局不对立,难以对立解决逻辑。不同告警零碎对于告警等级的定义不同。不同告警零碎对于告警主动复原的解决形式不同。有的告警零碎反对主动复原,有的不反对。ARMS告警治理[1]设计的集成、事件处理流、告诉策略等性能专门针对告警对立治理的场景,解决了对立治理过程中遇到的诸多问题。 ARMS告警治理如何接入不同格局的告警?传统告警通常包含如下一些内容,这种结构化的告警通常只实用于繁多告警源。当多个告警源的数据汇总到一起后通常会导致数据结构的抵触。因而ARMS应用了半结构化的数据来存储告警。 阿里云监控告警数据格式: Zabbix告警数据格式: Nagios告警数据格式: 半结构化的告警数据结构[ { "labels": { "alertname": "<requiredAlertNames>", "<labelnames>": "<labelvalues>", ... }, "annotations": { "<labelnames>": "<labelvalues>", }, "startsAt": "<rfc3339>", "endsAt": "<rfc3339>", "generatorURL": "<generator_url>" }, ...]labels(标签):告警元数据,一组标签惟一标识一个事件,所有标签均雷同的事件为同一个事件,反复上报会进行合并,例如:alertname: 告警名称。annotations(正文):正文是告警事件的附加形容,正文不属于元数据。例如:message: 告警内容。不同工夫点产生的同一个事件他们的标签是雷同的,然而正文能够是不同的。比方告警内容的正文可能不同,例如:“主机i-12b3ac3* CPU使用率继续三分钟大于75%,以后值82%”。startsAt(告警开始工夫):告警事件开始工夫。endsAt(告警完结工夫):告警事件完结工夫。generatorUrl(事件URL地址):告警事件URL地址。如上述代码所示,ARMS参考开源Prometheus告警定义[2],应用一个半结构化的数据结构来形容告警。通过高度可扩大的键值对来形容告警,这样就能够非常灵活的对告警内容进行扩大从而接入不同的数据源产生的告警。 任意JSON格局的自定义告警接入能力ARMS告警提供了任意一种JSON格局接入的能力(自定义集成[3])。只有告警数据结构满足JSON格局就能接入。如下图所示,自定义告警接入须要先将告警内的JSON数据上传到ARMS告警核心后,通过页面编辑字段映射的形式将告警内容中的要害信息映射到ARMS告警数据结构中。 ARMS定义了如alertname等关键字段,对于更多的扩大字段,用户能够在集成中通过新增扩大字段的形式进行配置。所有的扩大字段都能够使用到前面的告警解决逻辑中。以下图为例将原始告警报文中的hostname字段映射到扩大的hostname字段,hostip字段映射到扩大的hostip字段。 罕用监控工具告警快捷接入能力ARMS默认提供了云上云下多种监控零碎的告警接入能力,能够参考集成概述[4]进行疾速接入。 ARMS告警治理如何对立告警等级?ARMS中将告警分为P1、P2、P3、P4四个等级。通过配置映射表,将多个不同类型的等级归一到P1-P4四个等级。如下图所示,将L1、Critical、重大告警这三种不同形容的告警等级都映射为P1告警,这样就能够对立不同零碎中对于告警等级的不同定义。 ARMS告警治理对于不同格局的告警如何对立解决逻辑?因为ARMS告警采纳了半结构化的数据结构,能够通过标签来对立告警的解决逻辑。通常咱们须要至多2个标签来对立告警的解决逻辑。一个标签用来决定这个告警应该告诉给哪些人,比方业务标签(service,biz)。另一个标签用来决定这个告警利用通过什么样的形式进行告诉和降级。如下表所示,通常应用告警等级(severity)来定义告警解决的SLA。 ARMS设计了告诉策略和降级策略两种策略来满足不同等级的告警的解决要求,您能够参考告诉策略最佳实际[5]来进行配置。 标签设计准则当咱们在设计用于告警解决的业务标签时须要满足如下准则: 互斥准则:指防止对同一个资源应用两个或以上的标签键。例如:如果曾经应用了标签键service来标识业务,就不要再应用biz或业务等相似的标签键。个体详尽准则:指所有资源都必须绑定已布局的标签键及其对应的标签值。例如:某公司有3个业务,标签键是service,则应至多有3个标签值别离代表这3个业务。无限值准则:指为资源只保留外围标签值,删除多余的标签值。例如:某公司共有5个业务,那么应该有且仅有这5个业务的标签,方便管理。除了业务标签也能够定义其余的标签来进行告警的治理,比方应用环境标签来辨别开发和测试环境的告警。这些标签应该满足上述设计准则,这样能够简化告警治理配置的复杂度。 通过事件处理流给告警打标签(富化告警)当咱们设计好标签后如何对不同告警源的告警打标呢。在ARMS告警治理中设计了低代码形式的事件处理流[6],通过利落拽的配置形式能够实现给告警打标签的能力(富化告警)。 场景一:匹配特定条件后给告警打标签 某xx业务应用了自研监控零碎,通过自定义集成将自研的告警接入到ARMS告警治理中后,须要对这部分告警对立打上业务标签xx。事件处理流的配置如下: a. 登录ARMS控制台[7],在左侧导航栏抉择告警治理,而后单击新建解决流。 b. 在弹出的面板创立事件处理流,编辑触发条件匹配自定义集成的名称为“xx自研监控零碎”。 c. 增加设置业务标签动作,将"xx"设置为业务(service)标签值。 ...