写点什么

Prometheus 监控系统部署应用实战:从零到一

  • 2024-12-06
    北京
  • 本文字数:2561 字

    阅读完需:约 8 分钟

全面解析软件测试开发:人工智能测试、自动化测试、性能测试、测试左移、测试右移到DevOps如何驱动持续交付 

随着微服务架构和容器化技术的普及,监控系统的构建变得愈加复杂。为了确保系统的稳定性和性能,及时了解各类服务的健康状态和性能指标至关重要。在这方面,Prometheus 作为一款强大的开源监控系统,已经成为业界标准。它不仅能够采集和存储时间序列数据,还能通过强大的查询语言 PromQL 提供灵活的监控和报警功能。

本文将以实际应用为例,展示如何从零开始部署一个基于 Prometheus 的监控系统,监控应用程序和服务的各类性能指标。


1. 什么是 Prometheus?

Prometheus 是由 SoundCloud 开源的系统监控和报警工具,专为云原生环境和大规模分布式系统设计。其核心特点包括:

  • 高效的数据抓取机制:Prometheus 通过拉取(pull)模式定期从目标应用收集指标数据。

  • 时序数据库:用于存储来自不同来源的时序数据(如 CPU、内存使用率等),支持高效查询和聚合。

  • 灵活的查询语言 PromQL:提供强大的查询功能,支持复杂的数据聚合、计算和分析。

  • 集成告警系统:可以基于设定的规则触发报警,并通过多种渠道(如邮件、Slack、钉钉等)通知相关人员。

  • 可扩展性和丰富的生态:支持与其他工具(如 Grafana)集成,进行高效的可视化分析。

Prometheus 具有很好的灵活性和扩展性,能够满足不同规模、不同类型应用的监控需求。

2. 搭建 Prometheus 监控系统

2.1 环境准备

我们将使用 Docker 容器进行部署,以下是安装 Prometheus 和相关组件所需的环境要求:

  • 一台安装有 Docker 的 Linux 或 MacOS 主机。

  • Prometheus、Node Exporter 和 Grafana 的 Docker 镜像。

  • 你需要有一定的 Linux 操作经验,能熟练使用终端命令。

2.2 安装 Prometheus

  1. 拉取 Prometheus 镜像

在终端执行以下命令,拉取 Prometheus Docker 镜像:

docker pull prom/prometheus
复制代码
  1. 创建 Prometheus 配置文件

Prometheus 的配置文件 prometheus.yml 用于定义抓取哪些数据、抓取频率等。我们首先创建一个配置文件,并配置抓取本机(localhost)上的 node_exporter 服务,采集系统性能指标。

global:  scrape_interval: 15s  # 设置抓取间隔时间为 15 秒
scrape_configs: - job_name: 'node_exporter' static_configs: - targets: ['localhost:9100']
复制代码
  1. 启动 Prometheus 容器

将配置文件挂载到 Docker 容器中,启动 Prometheus:

docker run -d --name prometheus \  -p 9090:9090 \  -v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \  prom/prometheus
复制代码

启动后,Prometheus 将开始抓取数据,并监听在 9090 端口,你可以通过访问 http://localhost:9090 来查看 Prometheus Web 控制台。


3. 安装 Node Exporter 采集主机指标

为了收集主机的硬件和操作系统信息(如 CPU、内存、磁盘、网络等),我们需要安装 Node Exporter。Node Exporter 是 Prometheus 官方提供的一个监控工具,专门用于收集服务器层级的指标数据。

  1. 拉取 Node Exporter 镜像

docker pull prom/node-exporter
复制代码

启动 Node Exporter 容器

docker run -d --name=node_exporter -p 9100:9100 prom/node-exporter
复制代码

Node Exporter 将会监听在 9100 端口,Prometheus 会定期从这个端口拉取指标数据。

  1. 验证 Prometheus 采集数据

在 Prometheus 的 Web 控制台(http://localhost:9090/targets)中,检查是否能够看到 node_exporter 作为一个抓取目标。如果配置正确,node_exporter 将会显示在目标列表中,表示 Prometheus 正在成功采集主机的性能数据。


4. 配置告警规则

为确保能够及时发现系统性能问题,我们可以在 Prometheus 中配置告警规则。例如,当 CPU 使用率超过 80% 时触发告警。

  1. 创建告警规则

编辑一个告警规则文件 alert.rules,配置当 CPU 使用率超过 80% 时触发告警:

groups:  - name: node_alerts    rules:      - alert: HighCPUUsage        expr: avg(rate(node_cpu_seconds_total{mode="user"}[1m])) by (instance) > 0.8        for: 5m        labels:          severity: critical        annotations:          summary: "CPU usage is above 80% on {{ $labels.instance }}"
复制代码
  1. 配置 Prometheus 加载告警规则

在 prometheus.yml 中,加入以下配置来引用告警规则文件:

rule_files:  - "alert.rules"
复制代码
  1. 配置告警通知

Prometheus 本身并不提供发送告警通知的功能,我们需要配置 Alertmanager 来处理告警并通过邮件、Slack、钉钉等渠道发送通知。

可以通过 Docker 启动 Alertmanager:

docker run -d --name=alertmanager -p 9093:9093 prom/alertmanager
复制代码

配置 Prometheus 在告警触发时将告警发送到 Alertmanager,并在 Alertmanager 中配置通知渠道。


5. 数据可视化:Grafana 集成

Grafana 是一个流行的开源数据可视化工具,能够与 Prometheus 集成,提供强大的监控仪表盘功能。

5.1 安装 Grafana

  1. 拉取 Grafana 镜像

docker pull grafana/grafana
复制代码

启动 Grafana 容器

docker run -d --name=grafana -p 3000:3000 grafana/grafana
复制代码

Grafana 默认监听在 3000 端口,访问 http://localhost:3000 进入 Grafana 控制台。5.2 配置 Prometheus 数据源在 Grafana Web 控制台中,选择 "Add Data Source",然后选择 Prometheus 作为数据源,配置 Prometheus 的 URL 地址为 http://localhost:9090。5.3 创建 Dashboard 在 Grafana 中,你可以使用预设的模板或自定义仪表盘来展示 Prometheus 采集的监控数据。常见的监控指标有:

  • CPU 使用率

  • 内存使用情况

  • 网络流量

  • 磁盘使用率

Grafana 提供了丰富的图表类型,如折线图、柱状图等,可以灵活地定制监控面板。


6. 总结通过本文的介绍,我们已经成功地搭建了一个基于 Prometheus 的完整监控系统,涵盖了数据采集、告警配置、以及数据可视化。具体来说:

  • 我们安装并配置了 Prometheus,设置了目标数据源并开始收集数据。

  • 使用 Node Exporter 来采集系统级别的硬件和操作系统信息。

  • 配置了告警规则,当 CPU 使用率超过 80% 时自动触发告警。

  • 集成了 Grafana,用来展示 Prometheus 采集的监控数据并生成实时监控面板。

Prometheus 的高效性、灵活性和可扩展性使其成为现代 IT 基础设施监控的理想选择。通过与 Grafana 的集成,你可以轻松实现直观且可定制的监控仪表盘,帮助团队实时了解系统的健康状况,并快速响应潜在问题。


用户头像

社区:ceshiren.com 微信:ceshiren2023 2022-08-29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
Prometheus 监控系统部署应用实战:从零到一_测试_测吧(北京)科技有限公司_InfoQ写作社区