1.Alertmanager逻辑和代码分析
2.prometheus的rules文件
3.初识Alertmanager
4.Prometheus
5.手把手教你实现Prometheus通过企业微信告警
6.技术干货|Prometheus告警及告警规则
Alertmanager逻辑和代码分析
构建一个全面的监控体系需要一系列关键功能。首先是数据采集,通常通过xxx_export实现,其次数据抓取由prometheus完成,数据存储则依托于prometheus或cortex。规则检测和生成告警则由prometheus或cortex.ruler承担,通达信主力风向源码告警处理则由alertmanager负责,最后,告警通知的实现则需要根据业务和管理体系进行个性化定制。
Alertmanager的核心功能之一是告警处理,包括聚合、抑制、屏蔽和路由。告警数据由prometheus或cortex.ruler产生,通常由一系列键值对组成,包括labels和annotations。labels代表了告警的关键信息,是后续处理的基础;而annotations则包含了用户自定义的附加信息,如告警概述、详述和当前值。
在接收到告警信息后,Alertmanager开始进行后续处理,kubeapiserver源码所有处理都基于labels。告警路由采用基于路由树的方式,类似服务器中的路由表,依据的是告警labels和路由labels。每个路由节点对应不同的接收人,而默认路由则是根路由。路由的匹配遵循配置文件中的顺序,通常建议按最长前缀匹配生成。
告警聚合是另一个关键功能,它能有效减少告警风暴,通过在路由之后配置特定的聚合labels,如按产品、集群、团队等进行聚合,可实现更有序的管理。
告警抑制指的是在发生高等级告警时自动抑制低等级告警的发送,直到高等级告警恢复。常见场景是磁盘使用率告警,当使用率超过一定阈值时,发送警告,达到更高阈值时则发送严重警告。sdio源码告警抑制基于labels,但支持的是全局而非特定路由的配置,且只支持静态labels。对于此设计的两个问题,即无法记录屏蔽的告警和屏蔽后即使告警恢复也无法发送通知,原生alertmanager存在局限性。为解决这些问题,进行了改造,使屏蔽的告警能够继续发送,但会添加特殊标记,以便记录和捕捉恢复情况。
告警发送是告警系统中的最后一个处理环节,通常基于webhook设计,以适应不同的公司需求。Alertmanager的核心组件包括API、Alerts接口、Inhibitor、Dispatcher等。API用于接收、验证和存储alert信息,Alerts接口用于维护当前报警的delve源码核心操作。Inhibitor和Dispatcher则负责抑制、屏蔽、集群通知、通知、重试等后续步骤,以及整合所有功能和维护运行时信息。
prometheus的rules文件
发送警报通知
Prometheus可以周期性的发送
关于警报状态的信息到Alertmanager实例,
然后Alertmanager调度来发送正确的通知。
该Alertmanager可以通过
-alertmanager.url命令行flag来配置。
初识Alertmanager
本文主要介绍Alertmanager的基本概念、主要功能、配置解析、路由规则、告警通知以及计划内维护暂停告警等内容。
Alertmanager是由Prometheus社区开发的一个独立组件,其主要作用是管理和路由警报通知,确保警报以可靠的方式发送到相应的接收者,进行去重和聚合等操作。Prometheus监控系统中的警报规则将警报发送到Alertmanager,而Alertmanager则负责处理并发送通知给接收者。
在设置警报和通知时,appinventer源码主要有以下步骤:首先,通过HTTP协议,Prometheus服务器将警报通知发送给Alertmanager;然后,Alertmanager根据接收者配置和规则,将警报通知发送到相应的接收者。配置文件中的主要部分包括五大块,灵活地自定义各种通知和路由规则。
路由规则的配置在Alertmanager配置文件中非常重要,它允许根据分组将告警发送给对应的人或小组,例如,可以根据job、alertname或其他标签进行分组。配置文件中包含顶级配置的route入口、分组字段group_by、子路由routes等。
告警通知可以通过多种方式实现,包括邮箱、待命通知系统和聊天平台等。在邮箱通知部分,需在邮箱中进行相应设置,包括开启SMTP协议、配置告警模板、添加接收者和分组等。配置完成后,可以观察到已存在告警邮件。同时,Alertmanager提供了模板功能,便于阅读自定义模板,通过添加告警模板、配置接收器和发送间隔来实现。
为了在计划内维护期间暂停告警通知,Alertmanager提供了暂停告警的功能。在维护期间,只需在Alertmanager界面中针对特定的告警分组进行操作,选择“+”然后点击“Silence”,填写相关信息并创建暂停告警的规则。完成设置后,该告警分组将不再显示在主界面,从而暂停了告警通知。
通过以上介绍,Alertmanager为Prometheus监控系统提供了强大的警报管理和通知功能,帮助监控系统更有效地处理和发送告警通知,确保关键问题能及时得到关注和处理。
Prometheus
Prometheusæ¯ä¸ä¸ªå¼æºç³»ç»çæ§åæ¥è¦å·¥å ·å ï¼å ·ææ´»è·ççæç³»ç»ãæ¯ä¸ä¸ªå¤ç»´æ°æ®æ¨¡åï¼å ¶ä¸çæ¶é´åºåæ°æ®ç±ææ å称åé®/å¼å¯¹è¯å«ãå®ä¸ä¾èµåå¸å¼åå¨ï¼å个æå¡å¨èç¹æ¯èªæ²»çãéè¿ä¸ä¸ªä¸é´ç½å ³æ¯ææ¨éæ¶é´åºåï¼å¯ä»¥éè¿æå¡åç°æéæé ç½®æ¥åç°ç®æ ï¼æ¯æå¤ç§æ¨¡å¼çå¾è¡¨å仪表çå¶ä½ãPrometheuså ·ä½æ¶æå¾å¦ä¸ï¼
Prometheus ç´æ¥æéè¿ä¸ä»æ¨éç½å ³ä»æ£æµçä½ä¸ä¸æåææ ï¼ç¨äºçæä½ä¸ã å®å°æææåçæ ·æ¬åå¨å¨æ¬å°ï¼å¹¶å¯¹è¿äºæ°æ®è¿è¡è§åï¼ä»¥ä»ç°ææ°æ®èååè®°å½æ°çæ¶é´åºåæçæè¦æ¥ã Grafana æå ¶ä» API 使ç¨è å¯ç¨äºå¯è§åæ¶éçæ°æ®ã
--config.file="prometheus.yml"Prometheusé ç½®æ件路å¾ã
--web.listen-address="0.0.0.0:"ç¨äºçå¬UIãAPIåé¥æµçå°åã
--web.config.file=""[EXPERIMENTAL] å¯ä»¥å¯ç¨TLSæ认è¯çé ç½®æ件çè·¯å¾ã
--web.read-timeout=5mè¶ æ¶è¯»å请æ±åå ³é空é²è¿æ¥ä¹åçæ大æç»æ¶é´ã
--web.max-connections=æ大åæ¶è¿æ¥æ°ã
--web.external-url=<URL>å¤é¨å¯è®¿é®Prometheusæå¨çURLï¼ä¾å¦ï¼å¦æPrometheuséè¿åå代çæä¾æå¡ï¼ãç¨äºçæè¿åå°Prometheusæ¬èº«çç¸å¯¹åç»å¯¹é¾æ¥ãå¦æURLæè·¯å¾é¨åï¼å®å°ç¨äºä¸ºPrometheusæå¡çææHTTP端ç¹æ·»å åç¼ãå¦æçç¥ï¼å°èªå¨æ´¾çç¸å ³çURLç»ä»¶ã
--web.route-prefix=<path>Web端ç¹çå é¨è·¯çº¿çåç¼ãé»è®¤ä¸º-web.external-urlçè·¯å¾ã
--web.user-assets=<path>éæèµæºç®å½çè·¯å¾ï¼ä½äº /userã
--web.enable-lifecycleéè¿HTTP请æ±å¯ç¨å ³éåéæ°å è½½ã
--web.enable-admin-apiå¯ç¨ç®¡çæ§å¶è¡å¨çAPI端ç¹ã
--web.console.templates="consoles"æ§å¶å°æ¨¡æ¿ç®å½çè·¯å¾ï¼ä½äº/consolesã
--web.console.libraries="console_libraries"æ§å¶å°åºç®å½çè·¯å¾ã
--storage.tsdb.path="data/"ææ åå¨çåºæ¬è·¯å¾ãä» ç¨äºserver模å¼ã
--storage.tsdb.retention.time= æ ·æ¬å¨å¨åä¸ä¿çå¤é¿æ¶é´ã设置æ¤æ å¿åï¼å®ä¼è¦çâstorage.tsdb.retentionâãå¦ææ¤æ å¿ãâstorage.tsdb.retentionâæâstorage.tsdb.retention.sizeâåæªè®¾ç½®ï¼åä¿çæ¶é´é»è®¤ä¸ºdãæ¯æçåä½ï¼yãwãdãhãmãsãmsãä» ç¨äºserver模å¼ã
--storage.tsdb.retention.size= ååå¨çæ大åèæ°ãéè¦ä¸ä¸ªåä½ï¼æ¯æçåä½ï¼BãKBãMBãGBãTBãPBãEBãä¾å¦ï¼âMBâãä» ç¨äºserver模å¼ã
--storage.tsdb.no-lockfileä¸å¨æ°æ®ç®å½ä¸å建éæ件ãä» ç¨äºserver模å¼ã
--storage.tsdb.allow-overlapping-blockså 许éå åï¼ä»èå¯ç¨åç´å缩ååç´æ¥è¯¢å并ãä» ç¨äºæå¡å¨æ¨¡å¼ã
--storage.agent.path="data-agent/"ææ åå¨çåºæ¬è·¯å¾ãä» ç¨äºagent模å¼ã
--storage.agent.wal-compressionå缩代çWALãä» ç¨äºagent模å¼ã
--storage.agent.retention.min-time=å½WAL被æªææ¶ï¼æ ·æ¬å¨è¢«å¼ºè¡å é¤ä¹åçæå°å¹´é¾ï¼ä» ç¨äºagent模å¼ã
--storage.agent.retention.max-time=å½WAL被æªææ¶ï¼æ ·æ¬å¨è¢«å¼ºè¡å é¤ä¹åçæ大年é¾ï¼ä» ç¨äºagent模å¼ã
--storage.agent.no-lockfileä¸å¨æ°æ®ç®å½ä¸å建éæ件ãä» ç¨äºagent模å¼ã
--storage.remote.flush-deadline=<duration>å¨å ³éæéæ°å è½½é ç½®æ¶çå¾ å·æ°æ ·æ¬çæ¶é´ã
--storage.remote.read-sample-limit=5e7å¨å个æ¥è¯¢ä¸éè¿è¿ç¨è¯»åæ¥å£è¿åçæå¤§æ ·æ¬æ»æ°ã 0 表示没æéå¶ã对äºæµå¼ååºç±»åï¼å°å¿½ç¥æ¤éå¶ãä» ç¨äºserver模å¼ã
--storage.remote.read-concurrent-limit=并åè¿ç¨è¯»åè°ç¨çæ大æ°éã 0 表示没æéå¶ãä» ç¨äºserver模å¼ã
--rules.alert.for-outage-tolerance=1h为æ¢å¤âforâè¦æ¥ç¶æè容å¿Prometheusä¸æçæé¿æ¶é´ãä» ç¨äºserver模å¼ã
--rules.alert.for-grace-period=mè¦æ¥åæ¢å¤âforâç¶æä¹é´çæçæç»æ¶é´ãè¿ä» éç¨äºé ç½®çâforâæ¶é´å¤§äºå®½éæçè¦æ¥ãä» ç¨äºserver模å¼ã
--rules.alert.resend-delay=1må¨å Alertmanager éæ°åéè¦æ¥ä¹åçå¾ çæçæ¶é´ãä» ç¨äºserver模å¼ã
--alertmanager.notification-queue-capacity=çå¾ Alertmanageréç¥çéå容éãä» ç¨äºserver模å¼ã
--query.lookback-delta=5må¨è¡¨è¾¾å¼è¯ä¼°åèåæé´ï¼æ£ç´¢ææ çæé¿å溯æç»æ¶é´ãä» ç¨äºserver模å¼ã
--query.timeout=2mæ¥è¯¢å¨ä¸æ¢ä¹åå¯è½éè¦çæé¿æ¶é´ãä» ç¨äºserver模å¼ã
--query.max-concurrency=并åæ§è¡çæ大æ¥è¯¢æ°ãä» ç¨äºserver模å¼ã
--query.max-samples=å个æ¥è¯¢å¯ä»¥å è½½å°å åä¸çæå¤§æ ·æ¬æ°ã请注æï¼å¦ææ¥è¯¢å°è¯å°æ¯è¿æ´å¤çæ ·æ¬å è½½å°å åä¸ï¼æ¥è¯¢å°å¤±è´¥ï¼å æ¤è¿ä¹éå¶äºæ¥è¯¢å¯ä»¥è¿åçæ ·æ¬æ°éãä» ç¨äºserver模å¼ã
--enable-feature=éå·åéçè¦å¯ç¨çåè½å称ãææé项ï¼agentãexemplar-storageãexpand-external-labelsãmemory-snapshot-on-shutdownãpromql-at-modifierãpromql-negative-offsetãremote-write-receiverãextra-scrape-metricsãnew-service-discovery-managerã
--log.level=infoåªè®°å½ç»å®ä¸¥éç¨åº¦æ以ä¸çä¿¡æ¯ãå ¶ä¸ä¹ä¸ï¼[debug, info, warn, error]ã
--log.format=logfmtæ¥å¿ä¿¡æ¯çè¾åºæ ¼å¼ãå ¶ä¸ä¹ä¸ï¼[logfmt, json]ã
éç¨å ä½ç¬¦å®ä¹å¦ä¸ï¼
å ¨å±é ç½®åºåï¼
scrape_configé¨åæå®äºä¸ç»æè¿°å¦ä½æåå®ä»¬çç®æ ååæ°ï¼ç®æ å¯ä»¥éè¿static_configsåæ°éæé ç½®æ使ç¨æ¯æçæå¡åç°æºå¶ä¹ä¸å¨æåç°ã
Prometheusèªèº«æ¯æbasicéªè¯åTLSï¼å°æ¥å¯è½ä¼æ¹åï¼ï¼ä¹å¯ä»¥éè¿nginxå¼å¯basicéªè¯ã
Exporterå°çæ§æ°æ®ééç端ç¹éè¿HTTPæå¡çå½¢å¼æ´é²ç»Prometheus Serverï¼Prometheus Serveréè¿è®¿é®è¯¥Exporteræä¾çEndpoint端ç¹ï¼å³å¯è·åå°éè¦ééççæ§æ°æ®ã
ä¸è¬æ¥è¯´å¯ä»¥å°Exporterå为2ç±»ï¼
Prometheus UIæä¾äºå¿«ééªè¯PromQL以å临æ¶å¯è§åæ¯æçè½åï¼èå¨å¤§å¤æ°åºæ¯ä¸å¼å ¥çæ§ç³»ç»é常è¿éè¦æ建å¯ä»¥é¿æ使ç¨ççæ§æ°æ®å¯è§åé¢æ¿ï¼Dashboardï¼ãè¿æ¶ç¨æ·å¯ä»¥èè使ç¨ç¬¬ä¸æ¹çå¯è§åå·¥å ·å¦Grafanaï¼Grafanaæ¯ä¸ä¸ªå¼æºçå¯è§åå¹³å°ï¼å¹¶ä¸æä¾äºå¯¹Prometheusçå®æ´æ¯æã
å¨Prometheus Serverä¸æ¯æåºäºPromQLå建åè¦è§åï¼å¦æ满足PromQLå®ä¹çè§åï¼åä¼äº§çä¸æ¡åè¦ï¼èåè¦çåç»å¤çæµç¨åç±AlertManagerè¿è¡ç®¡çãå¨AlertManagerä¸æ们å¯ä»¥ä¸é®ä»¶ï¼Slackççå ç½®çéç¥æ¹å¼è¿è¡éæï¼ä¹å¯ä»¥éè¿Webhookèªå®ä¹åè¦å¤çæ¹å¼ãAlertManagerå³Prometheusä½ç³»ä¸çåè¦å¤çä¸å¿ã
Alertmanager å¤ç客æ·ç«¯åºç¨ç¨åºï¼ä¾å¦ Prometheus æå¡å¨ï¼åéçè¦æ¥ã å®è´è´£å¯¹å®ä»¬è¿è¡éå¤æ°æ®å é¤ãåç»åè·¯ç±å°æ£ç¡®çæ¥æ¶å¨éæï¼ä¾å¦EmailãPagerDuty æ OpsGenieã å®è¿è´è´£è¦æ¥çéé³åæå¶ã
æ¥è¦å ¨å®¶æ¡¶ /feiyu/PrometheusAlert
手把手教你实现Prometheus通过企业微信告警
Prometheus,被誉为下一代的监控解决方案,特别适合管理和监控云上K8S集群。当与alertmanager配合使用,它能实时通过邮件或webhook发送告警通知,让运维人员得以轻松处理。本文将详细介绍如何通过企业微信实现告警发送,让运维工作更加便捷。
首先,了解Prometheus的基本架构,它包含一个服务端和告警管理器Alertmanager。服务端负责监控,通过拉取node-exporter的数据指标,当指标超出预设阈值时,Alertmanager负责处理告警规则,包括抑制、静默和通知。告警规则的设置通常涉及下载alertmanager安装包,配置文件管理和规则文件,如node_alerts.yml和pod_rules.yml,后者可通过科学上网获取更全面的规则示例。
安装AlertManager后,关键步骤是配置Prometheus告警规则,如在prometheus.yml中添加alertmanager服务器的配置,并确保prometheus的热重启功能启用。告警规则配置完成后,可以通过prometheus targets界面检查其效果,如监控节点和Pod的状态是否正常加载。
要实现企业微信告警通知,需要在企业后台创建应用,并记录相关身份信息。告警规则中包含抑制功能,可以避免同一实例、alertname下出现重复告警。告警状态分为Inactive、Pending和Firing,调整阈值后,Prometheus会实时发送告警。
总的来说,通过上述步骤,您就能成功地将Prometheus的告警通过企业微信发送,极大地提升了运维效率。如果你对技术交流有兴趣,可以加入我们的技术交流群,详情请在「运维之美」公众号回复「加群」。
技术干货|Prometheus告警及告警规则
深入理解Prometheus告警与规则处理
Prometheus的核心功能之一是告警管理,它通过AlertRule进行定期计算,当满足预设条件时,会向Alertmanager发送警报。告警规则由Prometheus在YAML文件中统一定义,涉及告警触发条件、告警组的使用以及Alertmanager的特性,如分组、抑制和静默等。
Alertmanager负责接收和处理告警,它能合并多条警报信息,消除重复,按服务集群或名称分组,并支持邮件、Slack等多种通知方式,以及Webhook集成。其配置文件允许设置告警通知的细节,如分组规则、抑制策略和静默条件。
告警规则由PromQL表达式定义,用户可以在Prometheus的Web界面查看和管理规则。规则文件可以组织在多个组内,每个组包含多个规则,通过evaluation_interval设置计算周期。模板化标签和annotations可以优化告警信息的呈现。
通过实践,例如定义主机监控告警,可以看到Prometheus如何在满足条件后触发告警,状态会从PENDING变为FIRING。告警状态可通过Prometheus的Alerts页面实时查看,这有助于快速响应和处理系统问题。
接下来,我们将探索如何利用Alertmanager对告警进行更深入的处理,包括告警通知的定制化和管理。这将全面展示Prometheus告警系统的强大功能和灵活应用。