大数据领域Kafka的监控与报警系统搭建
关键词:大数据、Kafka、监控系统、报警系统、搭建
摘要:本文聚焦于大数据领域中Kafka的监控与报警系统搭建。首先介绍了搭建此系统的背景,包括目的、预期读者、文档结构和相关术语。接着阐述了Kafka监控与报警的核心概念及它们之间的联系,以清晰的文本示意图和Mermaid流程图呈现。详细讲解了核心算法原理,并用Python代码进行具体操作步骤的说明。通过数学模型和公式深入剖析系统运行逻辑,并举例说明。在项目实战部分,从开发环境搭建、源代码实现到代码解读进行了全面阐述。探讨了该监控与报警系统的实际应用场景,推荐了相关的学习资源、开发工具框架和论文著作。最后总结了Kafka监控与报警系统的未来发展趋势与挑战,并给出常见问题解答和扩展阅读参考资料。
1. 背景介绍
1.1 目的和范围
在大数据时代,Kafka作为一款高性能、分布式的消息队列系统,被广泛应用于数据采集、流处理等场景。然而,随着Kafka集群规模的不断扩大和业务的日益复杂,对Kafka进行有效的监控和及时的报警显得尤为重要。搭建Kafka的监控与报警系统的目的在于实时掌握Kafka集群的运行状态,及时发现潜在的问题并发出警报,确保Kafka服务的稳定性和可靠性。
本文章的范围涵盖了Kafka监控与报警系统的各个方面,包括核心概念、算法原理、数学模型、项目实战、实际应用场景等,旨在为读者提供一个全面的指导,帮助他们搭建适合自己业务需求的Kafka监控与报警系统。
1.2 预期读者
本文的预期读者主要包括大数据领域的开发者、运维人员、系统架构师等。对于正在使用Kafka进行数据处理的技术人员,本文可以帮助他们更好地监控和管理Kafka集群;对于有兴趣了解Kafka监控与报警技术的初学者,本文提供了一个系统的学习资源。
1.3 文档结构概述
本文将按照以下结构进行组织:首先介绍Kafka监控与报警的核心概念和它们之间的联系;接着详细讲解核心算法原理和具体操作步骤,并使用Python代码进行实现;然后通过数学模型和公式深入分析系统的运行逻辑,并举例说明;在项目实战部分,将介绍开发环境的搭建、源代码的详细实现和代码解读;探讨该系统的实际应用场景;推荐相关的学习资源、开发工具框架和论文著作;最后总结Kafka监控与报警系统的未来发展趋势与挑战,并给出常见问题解答和扩展阅读参考资料。
1.4 术语表
1.4.1 核心术语定义
- Kafka:一种高性能、分布式的消息队列系统,用于处理大量的实时数据流。
- 监控系统:对Kafka集群的各项指标进行实时监测和数据收集的系统。
- 报警系统:根据监控系统收集的数据,当某些指标超过预设阈值时,及时发出警报的系统。
- Broker:Kafka集群中的服务器节点,负责存储和处理消息。
- Topic:Kafka中的主题,用于对消息进行分类。
- Partition:Topic的分区,用于实现消息的分布式存储和处理。
1.4.2 相关概念解释
- Kafka Metrics:Kafka提供的一系列指标,用于描述Kafka集群的运行状态,如消息生产速率、消息消费速率、分区副本状态等。
- JMX(Java Management Extensions):Java平台的管理和监控扩展,Kafka通过JMX暴露其内部的运行指标。
- Prometheus:一款开源的监控系统和时间序列数据库,用于收集和存储Kafka的监控指标。
- Grafana:一款开源的可视化工具,用于将Prometheus收集的监控数据以图表的形式展示出来。
- Alertmanager:Prometheus的报警管理组件,用于接收和处理Prometheus发出的报警信息。
1.4.3 缩略词列表
- KPI:关键绩效指标(Key Performance Indicator)
- CPU:中央处理器(Central Processing Unit)
- RAM:随机存取存储器(Random Access Memory)
- IOPS:每秒输入输出操作次数(Input/Output Operations Per Second)
2. 核心概念与联系
核心概念原理
Kafka监控
Kafka监控主要是对Kafka集群的各项指标进行实时监测和数据收集。这些指标可以分为以下几类:
- Broker级指标:如Broker的CPU使用率、内存使用率、网络带宽、磁盘I/O等,这些指标反映了Broker节点的硬件资源使用情况。
- Topic级指标:如Topic的消息生产速率、消息消费速率、消息积压量等,这些指标反映了Topic的流量情况。
- Partition级指标:如Partition的副本数量、副本同步状态、Leader选举情况等,这些指标反映了Partition的健康状况。
Kafka通过JMX暴露其内部的运行指标,监控系统可以通过JMX协议获取这些指标。
Kafka报警
Kafka报警是根据监控系统收集的数据,当某些指标超过预设阈值时,及时发出警报。报警系统通常包括以下几个部分:
- 规则定义:定义报警规则,即哪些指标在什么条件下触发报警。
- 报警触发:当监控指标满足报警规则时,触发报警。
- 报警通知:将报警信息发送给相关人员,通知方式可以是邮件、短信、即时通讯工具等。
架构的文本示意图
+----------------------+ | Kafka Cluster | | (Multiple Brokers) | +----------------------+ | | JMX Metrics v +----------------------+ | Prometheus Server | | (Data Collection) | +----------------------+ | | Time Series Data v +----------------------+ | Grafana Server | | (Data Visualization) | +----------------------+ | | Alerts v +----------------------+ | Alertmanager | | (Alert Management) | +----------------------+ | | Notification v +----------------------+ | Notification Targets | | (Email, SMS, etc.) | +----------------------+Mermaid流程图
3. 核心算法原理 & 具体操作步骤
核心算法原理
数据收集算法
Prometheus通过定期拉取Kafka的JMX指标来收集监控数据。Prometheus使用HTTP协议向Kafka的JMX Exporter发送请求,JMX Exporter将Kafka的JMX指标转换为Prometheus可以识别的格式返回给Prometheus。Prometheus将这些指标存储在本地的时间序列数据库中。
报警规则评估算法
Prometheus根据预设的报警规则对收集到的监控数据进行评估。报警规则通常使用PromQL(Prometheus Query Language)编写,PromQL是一种用于查询和分析时间序列数据的语言。当监控数据满足报警规则时,Prometheus将触发报警,并将报警信息发送给Alertmanager。
报警通知算法
Alertmanager负责接收和处理Prometheus发出的报警信息。Alertmanager可以对报警信息进行分组、抑制、静默等处理,然后将报警信息发送给指定的通知目标,如邮件、短信、即时通讯工具等。
具体操作步骤
步骤1:安装和配置JMX Exporter
JMX Exporter是一个用于将Kafka的JMX指标转换为Prometheus可以识别的格式的工具。以下是安装和配置JMX Exporter的步骤:
- 下载JMX Exporter的JAR文件:
wgethttps://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.16.1/jmx_prometheus_javaagent-0.16.1.jar- 创建JMX Exporter的配置文件
kafka-jmx-exporter-config.yaml:
lowercaseOutputName:truelowercaseOutputLabelNames:truerules:-pattern:'kafka.server<type=BrokerTopicMetrics, name=(CumulativeBytesIn|CumulativeBytesOut)><>Value'name:kafka_broker_topic_metrics_$1- 在Kafka的启动脚本中添加JMX Exporter的配置:
exportKAFKA_OPTS="-javaagent:/path/to/jmx_prometheus_javaagent-0.16.1.jar=8080:/path/to/kafka-jmx-exporter-config.yaml"步骤2:安装和配置Prometheus
Prometheus是一个开源的监控系统和时间序列数据库。以下是安装和配置Prometheus的步骤:
- 下载Prometheus:
wgethttps://github.com/prometheus/prometheus/releases/download/v2.37.0/prometheus-2.37.0.linux-amd64.tar.gztarxvf prometheus-2.37.0.linux-amd64.tar.gzcdprometheus-2.37.0.linux-amd64- 创建Prometheus的配置文件
prometheus.yml:
global:scrape_interval:15sscrape_configs:-job_name:'kafka'static_configs:-targets:['localhost:8080']- 启动Prometheus:
./prometheus --config.file=prometheus.yml步骤3:安装和配置Grafana
Grafana是一个开源的可视化工具,用于将Prometheus收集的监控数据以图表的形式展示出来。以下是安装和配置Grafana的步骤:
- 下载和安装Grafana:
wgethttps://dl.grafana.com/oss/release/grafana-9.1.6.linux-amd64.tar.gztarxvf grafana-9.1.6.linux-amd64.tar.gzcdgrafana-9.1.6- 启动Grafana:
./bin/grafana-server web- 配置Grafana数据源:
打开浏览器,访问http://localhost:3000,使用默认用户名和密码(admin/admin)登录Grafana。在Grafana中添加Prometheus作为数据源。
步骤4:安装和配置Alertmanager
Alertmanager是Prometheus的报警管理组件,用于接收和处理Prometheus发出的报警信息。以下是安装和配置Alertmanager的步骤:
- 下载Alertmanager:
wgethttps://github.com/prometheus/alertmanager/releases/download/v0.24.0/alertmanager-0.24.0.linux-amd64.tar.gztarxvf alertmanager-0.24.0.linux-amd64.tar.gzcdalertmanager-0.24.0.linux-amd64- 创建Alertmanager的配置文件
alertmanager.yml:
global:smtp_smarthost:'smtp.gmail.com:587'smtp_from:'your_email@gmail.com'smtp_auth_username:'your_email@gmail.com'smtp_auth_password:'your_email_password'route:receiver:'email'receivers:-name:'email'email_configs:-to:'recipient_email@example.com'- 启动Alertmanager:
./alertmanager --config.file=alertmanager.yml步骤5:配置Prometheus报警规则
在Prometheus的配置文件prometheus.yml中添加报警规则:
rule_files:-'alert.rules'创建报警规则文件alert.rules:
groups:-name:kafka_alertsrules:-alert:KafkaHighMessageRateexpr:sum(rate(kafka_broker_topic_metrics_CumulativeBytesIn[5m]))>1000000for:5mlabels:severity:criticalannotations:summary:"Kafka high message rate"description:"The Kafka message rate is above 1MB/s for 5 minutes."Python代码实现
以下是一个使用Python脚本从Prometheus查询Kafka监控指标的示例:
importrequests# Prometheus API地址prometheus_url='http://localhost:9090/api/v1/query'# 查询Kafka消息生产速率query='sum(rate(kafka_broker_topic_metrics_CumulativeBytesIn[5m]))'# 发送查询请求response=requests.get(prometheus_url,params={'query':query})# 解析响应ifresponse.status_code==200:data=response.json()ifdata['status']=='success':result=data['data']['result']ifresult:value=result[0]['value'][1]print(f"Kafka message production rate:{value}bytes/s")else:print("No data found.")else:print(f"Query failed:{data['error']}")else:print(f"Request failed:{response.status_code}")4. 数学模型和公式 & 详细讲解 & 举例说明
数学模型和公式
消息生产速率
消息生产速率是指单位时间内Kafka中生产的消息数量或字节数。可以使用以下公式计算:
Message Production Rate=Total Messages ProducedTime Interval \text{Message Production Rate} = \frac{\text{Total Messages Produced}}{\text{Time Interval}}Message Production Rate=Time IntervalTotal Messages Produced
在Prometheus中,可以使用rate函数计算消息生产速率,例如:
rate(kafka_broker_topic_metrics_CumulativeBytesIn[5m])这个查询表示计算过去5分钟内Kafka消息生产的字节数的速率。
消息消费速率
消息消费速率是指单位时间内Kafka中消费的消息数量或字节数。可以使用以下公式计算:
Message Consumption Rate=Total Messages ConsumedTime Interval \text{Message Consumption Rate} = \frac{\text{Total Messages Consumed}}{\text{Time Interval}}Message Consumption Rate=Time IntervalTotal Messages Consumed
在Prometheus中,可以使用rate函数计算消息消费速率,例如:
rate(kafka_broker_topic_metrics_CumulativeBytesOut[5m])这个查询表示计算过去5分钟内Kafka消息消费的字节数的速率。
消息积压量
消息积压量是指Kafka中未被消费的消息数量或字节数。可以使用以下公式计算:
Message Backlog=Total Messages Produced−Total Messages Consumed \text{Message Backlog} = \text{Total Messages Produced} - \text{Total Messages Consumed}Message Backlog=Total Messages Produced−Total Messages Consumed
在Prometheus中,可以使用以下查询计算消息积压量:
kafka_broker_topic_metrics_CumulativeBytesIn - kafka_broker_topic_metrics_CumulativeBytesOut详细讲解
以上公式和查询的核心思想是通过计算一段时间内的消息生产和消费的变化量来得到消息生产速率、消费速率和积压量。rate函数是Prometheus中用于计算时间序列数据的变化率的函数,它可以帮助我们计算出单位时间内的消息生产和消费的速率。
举例说明
假设在过去5分钟内,Kafka的kafka_broker_topic_metrics_CumulativeBytesIn指标从1000000字节增加到了1500000字节,kafka_broker_topic_metrics_CumulativeBytesOut指标从800000字节增加到了1200000字节。
消息生产速率:
使用rate(kafka_broker_topic_metrics_CumulativeBytesIn[5m])计算,消息生产速率为:
1500000−10000005×60=500000300≈1666.67 bytes/s \frac{1500000 - 1000000}{5 \times 60} = \frac{500000}{300} \approx 1666.67 \text{ bytes/s}5×601500000−1000000=300500000≈1666.67bytes/s消息消费速率:
使用rate(kafka_broker_topic_metrics_CumulativeBytesOut[5m])计算,消息消费速率为:
1200000−8000005×60=400000300≈1333.33 bytes/s \frac{1200000 - 800000}{5 \times 60} = \frac{400000}{300} \approx 1333.33 \text{ bytes/s}5×601200000−800000=300400000≈1333.33bytes/s消息积压量:
使用kafka_broker_topic_metrics_CumulativeBytesIn - kafka_broker_topic_metrics_CumulativeBytesOut计算,消息积压量为:
(1500000−1000000)−(1200000−800000)=500000−400000=100000 bytes (1500000 - 1000000) - (1200000 - 800000) = 500000 - 400000 = 100000 \text{ bytes}(1500000−1000000)−(1200000−800000)=500000−400000=100000bytes
5. 项目实战:代码实际案例和详细解释说明
5.1 开发环境搭建
硬件环境
- 服务器:至少需要一台服务器用于运行Kafka、Prometheus、Grafana和Alertmanager。建议使用配置较高的服务器,如CPU 4核以上、内存8GB以上、磁盘容量500GB以上。
- 网络:服务器之间需要有稳定的网络连接,建议使用千兆以太网。
软件环境
- 操作系统:建议使用Linux系统,如CentOS 7或Ubuntu 20.04。
- Java:Kafka和JMX Exporter需要Java环境,建议使用Java 8或以上版本。
- Python:用于编写监控脚本,建议使用Python 3.6或以上版本。
安装和配置步骤
按照前面章节介绍的步骤安装和配置JMX Exporter、Prometheus、Grafana和Alertmanager。
5.2 源代码详细实现和代码解读
监控脚本实现
以下是一个使用Python脚本定期从Prometheus查询Kafka监控指标并发送报警邮件的示例:
importrequestsimportsmtplibfromemail.mime.textimportMIMEText# Prometheus API地址prometheus_url='http://localhost:9090/api/v1/query'# 邮件配置smtp_server='smtp.gmail.com'smtp_port=587smtp_username='your_email@gmail.com'smtp_password='your_email_password'sender_email='your_email@gmail.com'receiver_email='recipient_email@example.com'# 查询Kafka消息生产速率query='sum(rate(kafka_broker_topic_metrics_CumulativeBytesIn[5m]))'defget_metric_value(query):response=requests.get(prometheus_url,params={'query':query})ifresponse.status_code==200:data=response.json()ifdata['status']=='success':result=data['data']['result']ifresult:value=float(result[0]['value'][1])returnvaluereturnNonedefsend_email(subject,message):msg=MIMEText(message)msg['Subject']=subject msg['From']=sender_email msg['To']=receiver_email server=smtplib.SMTP(smtp_server,smtp_port)server.starttls()server.login(smtp_username,smtp_password)server.sendmail(sender_email,receiver_email,msg.as_string())server.quit()# 获取监控指标值value=get_metric_value(query)# 检查是否超过阈值ifvalueisnotNoneandvalue>1000000:subject="Kafka High Message Rate Alert"message=f"The Kafka message production rate is{value}bytes/s, which is above the threshold of 1MB/s."send_email(subject,message)代码解读
get_metric_value函数:该函数用于从Prometheus查询指定的监控指标值。它发送一个HTTP请求到Prometheus的API,并解析响应结果,返回监控指标的值。send_email函数:该函数用于发送报警邮件。它使用smtplib库连接到SMTP服务器,并发送邮件。- 主程序:主程序首先调用
get_metric_value函数获取Kafka消息生产速率,然后检查该值是否超过阈值。如果超过阈值,则调用send_email函数发送报警邮件。
5.3 代码解读与分析
优点
- 灵活性:使用Python脚本可以灵活地定义监控指标和报警规则,根据不同的业务需求进行定制。
- 可扩展性:可以方便地添加更多的监控指标和报警通知方式,如短信、即时通讯工具等。
- 易于维护:Python代码易于理解和维护,开发人员可以根据需要进行修改和扩展。
缺点
- 性能问题:如果监控指标较多,频繁地从Prometheus查询数据可能会影响性能。可以考虑使用Prometheus的缓存机制或异步查询来优化性能。
- 可靠性问题:如果Python脚本出现异常或崩溃,可能会导致监控和报警功能失效。可以使用监控工具对Python脚本进行监控,确保其稳定运行。
6. 实际应用场景
数据采集与传输
在大数据领域,Kafka常用于数据采集和传输。通过监控Kafka的消息生产和消费速率,可以及时发现数据采集和传输过程中的问题,如数据源故障、网络延迟等。当消息生产速率突然下降或消息积压量过大时,系统可以及时发出警报,通知运维人员进行处理。
流处理
Kafka与流处理框架(如Flink、Spark Streaming等)结合使用,实现实时数据处理。监控Kafka的Topic和Partition状态,可以确保流处理任务的正常运行。当Partition的副本同步状态异常或Leader选举失败时,系统可以及时发出警报,避免数据丢失或处理延迟。
日志收集与分析
Kafka可以用于收集和传输系统日志。通过监控Kafka的日志消息生产和消费情况,可以及时发现系统中的异常行为和潜在的安全威胁。当日志消息生产速率突然增加或出现大量错误日志时,系统可以及时发出警报,通知安全人员进行处理。
7. 工具和资源推荐
7.1 学习资源推荐
7.1.1 书籍推荐
- 《Kafka: The Definitive Guide》:这本书详细介绍了Kafka的原理、架构和使用方法,是学习Kafka的经典书籍。
- 《Learning Prometheus》:这本书介绍了Prometheus的基本概念、安装配置和使用方法,是学习Prometheus的入门书籍。
- 《Grafana: Up and Running》:这本书介绍了Grafana的可视化功能和使用方法,帮助读者快速上手Grafana。
7.1.2 在线课程
- Coursera上的“Big Data with Kafka”课程:该课程介绍了Kafka的基本概念、架构和使用方法,通过实际案例帮助学员掌握Kafka的应用。
- Udemy上的“Prometheus and Grafana: Monitoring and Alerting”课程:该课程介绍了Prometheus和Grafana的安装配置和使用方法,帮助学员搭建自己的监控和报警系统。
7.1.3 技术博客和网站
- Kafka官方文档:https://kafka.apache.org/documentation/ ,提供了Kafka的详细文档和教程。
- Prometheus官方文档:https://prometheus.io/docs/introduction/overview/ ,提供了Prometheus的详细文档和教程。
- Grafana官方文档:https://grafana.com/docs/grafana/latest/ ,提供了Grafana的详细文档和教程。
7.2 开发工具框架推荐
7.2.1 IDE和编辑器
- PyCharm:一款专业的Python IDE,提供了丰富的代码编辑、调试和测试功能。
- Visual Studio Code:一款轻量级的代码编辑器,支持多种编程语言,具有丰富的插件生态系统。
7.2.2 调试和性能分析工具
- jstack:Java自带的线程分析工具,用于分析Java程序的线程状态。
- VisualVM:一款Java性能分析工具,用于监控Java程序的CPU、内存、线程等性能指标。
7.2.3 相关框架和库
- Kafka Python:一个用于与Kafka进行交互的Python库,提供了简单易用的API。
- Prometheus Client Python:一个用于在Python应用程序中暴露监控指标的库,方便与Prometheus集成。
7.3 相关论文著作推荐
7.3.1 经典论文
- “Kafka: A Distributed Messaging System for Log Processing”:这篇论文介绍了Kafka的设计思想和架构,是Kafka的经典论文。
- “Prometheus: Design and Implementation”:这篇论文介绍了Prometheus的设计和实现原理,对理解Prometheus的工作机制有很大帮助。
7.3.2 最新研究成果
- 关注顶级学术会议(如SIGMOD、VLDB等)上关于大数据监控和报警的研究论文,了解最新的研究成果和技术趋势。
7.3.3 应用案例分析
- 各大互联网公司的技术博客(如阿里巴巴、腾讯、字节跳动等)会分享他们在大数据监控和报警方面的应用案例和实践经验,可以参考学习。
8. 总结:未来发展趋势与挑战
未来发展趋势
智能化监控
随着人工智能和机器学习技术的发展,未来的Kafka监控与报警系统将更加智能化。系统可以通过分析历史数据和实时数据,自动学习和预测Kafka集群的运行状态,提前发现潜在的问题并发出预警。
分布式监控
随着Kafka集群规模的不断扩大,分布式监控将成为未来的发展趋势。分布式监控系统可以将监控任务分散到多个节点上,提高监控的效率和可靠性。
可视化和交互性增强
未来的监控与报警系统将提供更加丰富的可视化功能和交互性。用户可以通过可视化界面直观地了解Kafka集群的运行状态,进行实时监控和数据分析。
挑战
数据量巨大
Kafka集群产生的监控数据量非常巨大,如何高效地存储和处理这些数据是一个挑战。需要采用分布式存储系统和高效的数据处理算法来解决这个问题。
复杂性增加
随着Kafka集群的规模和复杂度不断增加,监控和报警系统的配置和管理也变得更加复杂。需要开发更加智能化的配置管理工具来简化系统的配置和管理。
安全问题
监控和报警系统涉及到大量的敏感数据,如Kafka集群的运行状态、用户信息等。如何保障这些数据的安全是一个重要的挑战。需要采用加密技术、访问控制等手段来保障数据的安全。
9. 附录:常见问题与解答
问题1:为什么Prometheus无法获取Kafka的监控指标?
解答:可能有以下几个原因:
- JMX Exporter未正确配置或未启动。检查JMX Exporter的配置文件和启动脚本,确保其正常运行。
- Prometheus的配置文件中
targets地址配置错误。检查Prometheus的配置文件,确保targets地址指向JMX Exporter的地址。 - 网络问题。检查服务器之间的网络连接,确保Prometheus可以访问JMX Exporter。
问题2:为什么报警邮件无法发送?
解答:可能有以下几个原因:
- 邮件配置错误。检查Alertmanager或Python脚本中的邮件配置,确保SMTP服务器地址、端口、用户名、密码等信息正确。
- 邮件服务器限制。某些邮件服务器可能会对发送的邮件进行限制,如设置了发送频率限制、IP地址限制等。可以联系邮件服务器管理员解决。
- 防火墙问题。检查服务器的防火墙设置,确保允许SMTP端口的通信。
问题3:如何优化监控系统的性能?
解答:可以从以下几个方面进行优化:
- 减少监控指标数量。只监控必要的指标,避免监控过多的指标导致性能下降。
- 调整Prometheus的采集间隔。根据实际情况调整Prometheus的采集间隔,避免过于频繁的采集导致性能问题。
- 使用Prometheus的缓存机制。Prometheus支持缓存机制,可以减少对Kafka的JMX Exporter的访问次数,提高性能。
10. 扩展阅读 & 参考资料
扩展阅读
- 《Streaming Systems: The What, Where, When, and How of Large-Scale Data Processing》:这本书介绍了流式数据处理的原理、架构和应用,对深入理解Kafka在流式数据处理中的应用有很大帮助。
- 《Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems》:这本书介绍了数据密集型应用的设计原则和方法,对设计Kafka监控与报警系统有一定的参考价值。
参考资料
- Kafka官方文档:https://kafka.apache.org/documentation/
- Prometheus官方文档:https://prometheus.io/docs/introduction/overview/
- Grafana官方文档:https://grafana.com/docs/grafana/latest/
- Alertmanager官方文档:https://prometheus.io/docs/alerting/latest/alertmanager/