Prometheus简介
Prometheus是一个开源的系统监控和警报工具,广泛用于云原生环境和容器化应用的监控和性能分析。
Prometheus功能
Prometheus为系统监控提供了强大的工具和功能,支持多维数据分析、动态警报、自动服务发现等特性。
以下是Prometheus的主要功能:
1.多维数据模型
Prometheus使用多维数据模型来表示时间序列数据,每个时间序列都由一个唯一的标识符,包括:指标名称和一组标签标识。
2.数据采集和存储
Prometheus支持从各种数据源中采集指标数据,包括应用程序、操作系统、容器、服务发现和云平台等。
3.指标类型
Prometheus支持多种指标类型,包括计数器(Counter)、仪表(Gauge)、直方图(Histogram)和摘要(Summary)等数据。
4.数据查询
Prometheus提供了PromQL(Prometheus Query Language)查询语言,允许用户灵活地查询和聚合数据。
5.警报和通知
Prometheus可以设置警报规则,当指标数据达到预设的阈值时,可以触发警报通知。
6.云原生支持
Prometheus在云原生环境中得到广泛应用,与Kubernetes等容器编排平台集成紧密,能够自动发现和监控容器化应用。
Prometheus架构原理
下图是 Prometheus 的整体架构图:
从上图可以看出,Prometheus 生态系统包含了几个关键的组件:Prometheus server、Pushgateway、Alertmanager、Web UI 等。
1.Prometheus Server
最核心的组件是 Prometheus server,它负责收集和存储指标数据,支持表达式查询,和告警的生成。
Prometheus server会根据配置定期抓取目标的数据,并将数据存储在本地时间序列数据库中。
除此之外,Prometheus Server 还负责数据的压缩和清理。
2.PushGateway
PushGateway 允许短暂性的指标数据推送到 Prometheus,这对于一些无法被拉取的临时性任务非常有用,如批处理任务。
3.数据采集器
数据采集器是用于从各种数据源中收集指标数据的组件,Prometheus 支持许多内置的数据采集器,也允许用户编写自己的数据采集器。
4.PromQL
PromQL 是 Prometheus 的查询语言,允许用户使用类似 SQL 的语法来查询和聚合指标数据,用户可以使用 PromQL 进行数据分析、趋势观察、故障排除等操作。
5.WebUI
虽然 Prometheus 本身不提供可视化功能,但通常与其他可视化工具,比如: Grafana结合使用,将采集到的数据进行图表展示和仪表盘设计。
Prometheus使用示例
1.安装Prometheus
首先,你需要下载并安装 Prometheus,可以从官方网站或仓库获取二进制文件或容器镜像。
wget https://github.com/prometheus/prometheus/releases/download/v2.30.0/prometheus-2.30.0.linux-amd64.tar.gz tar xvfz prometheus-2.30.0.linux-amd64.tar.gz cd prometheus-2.30.0.linux-amd64
2.创建一个配置文件
prometheus.yml,内容如下:
global: scrape_interval: 15s scrape_configs: - job_name: 'sample-app' static_configs: - targets: ['localhost:8080']
3.启动Prometheus
安装完成后,运行 Prometheus Server。
./prometheus --config.file=prometheus.yml
4.定义指标数据
在示例应用的控制器中,定义一个简单的接口来生成示例的指标数据。
import io.micrometer.core.instrument.Counter; import io.micrometer.core.instrument.MeterRegistry; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class SampleController { private final Counter requestsCounter; public SampleController(MeterRegistry meterRegistry) { requestsCounter = meterRegistry.counter("sample_app_requests_total"); } @GetMapping("/hello") public String hello() { requestsCounter.increment(); return "Hello, Prometheus!"; } }
5.访问示例应用
启动示例应用,确保它运行在端口 8080。
访问 http://localhost:8080/hello 来增加示例应用的请求数。
访问 http://localhost:9090 来访问 Prometheus 的 Web UI。
Prometheus总结
总之,使用 Prometheus 需要配置数据采集、定义警报规则、编写查询语句和可视化数据等步骤。
通过合理的配置和使用,你可以实现对系统的实时监控、数据分析和警报通知,帮助你及时发现和解决问题。
mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!

后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》