一、背景介绍

在生产环境里,咱们得时刻盯着系统的运行情况,及时发现问题并处理。对于 Erlang 系统来说,也是一样的道理。想象一下,要是你负责一个 Erlang 系统,但是却不知道系统各项指标的情况,那遇到问题可就抓瞎了。指标可视化和预警就像是咱们的眼睛和耳朵,能让我们清楚知道系统的健康状况,提前发现潜在问题。

比如说,一个电商平台用 Erlang 开发了订单处理系统。在促销活动期间,订单量会大幅增加,如果没有对系统指标进行监控和预警,可能就会出现系统崩溃、订单处理缓慢等问题,影响用户体验,甚至造成经济损失。所以,搭建一个有效的监控与告警平台是非常有必要的。

二、Prometheus 与 Grafana 简介

Prometheus

Prometheus 就像是一个勤劳的小管家,专门负责收集和存储系统的各种指标数据。它可以从不同的数据源获取数据,然后把这些数据存起来,方便后续的查询和分析。

举个例子,在一个 Erlang 系统中,Prometheus 可以收集系统的 CPU 使用率、内存使用率、网络流量等指标。它有自己的查询语言 PromQL,通过这个语言,我们可以对收集到的数据进行复杂的查询和分析。

%% 假设我们有一个简单的 Erlang 程序,使用 Prometheus 客户端库来暴露指标
%% 首先,我们需要引入 Prometheus 客户端库
%% 这里假设已经安装了 prometheus 库
%% 定义一个计数器指标,用于记录请求的数量
prometheus_counter:new([{name, requests_total}, {help, "Total number of requests"}]).

%% 当有请求到来时,增加计数器的值
prometheus_counter:inc(requests_total).

在这个示例中,我们定义了一个名为 requests_total 的计数器指标,用于记录请求的总数。每当有请求到来时,我们就增加这个计数器的值。Prometheus 会定期从这个程序中获取这个指标的值,并进行存储。

Grafana

Grafana 就像是一个展示高手,它可以把 Prometheus 收集到的数据以各种直观的图表和仪表盘的形式展示出来。我们可以根据自己的需求,定制不同的图表和仪表盘,让数据更加清晰易懂。

比如说,我们可以用 Grafana 制作一个 CPU 使用率的折线图,通过这个图我们可以直观地看到 CPU 使用率随时间的变化情况。如果 CPU 使用率突然升高,我们就可以及时发现并采取措施。

三、搭建监控与告警平台

安装 Prometheus

首先,我们要安装 Prometheus。可以从 Prometheus 的官方网站下载适合自己操作系统的安装包,然后解压并启动。

# 下载 Prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.37.0/prometheus-2.37.0.linux-amd64.tar.gz

# 解压安装包
tar -zxvf prometheus-2.37.0.linux-amd64.tar.gz

# 进入解压后的目录
cd prometheus-2.37.0.linux-amd64

# 启动 Prometheus
./prometheus --config.file=prometheus.yml

在这个示例中,我们从 Prometheus 的官方网站下载了安装包,然后解压并启动了 Prometheus。prometheus.yml 是 Prometheus 的配置文件,我们可以在这个文件中配置数据源、采集间隔等信息。

配置 Prometheus 采集 Erlang 系统指标

接下来,我们要配置 Prometheus 来采集 Erlang 系统的指标。可以使用 prometheus_erlang 这个库来暴露 Erlang 系统的指标。

%% 在 Erlang 项目中引入 prometheus_erlang 库
%% 假设已经在 rebar.config 中添加了依赖
%% 启动 Prometheus 服务器
prometheus_httpd:start([{port, 9091}]).

%% 注册一些常用的 Erlang 指标
prometheus_erlang:register_default_collectors().

在这个示例中,我们启动了一个 Prometheus HTTP 服务器,监听 9091 端口。然后注册了一些常用的 Erlang 指标,这样 Prometheus 就可以从这个端口获取这些指标了。

安装 Grafana

安装 Grafana 也很简单,可以从 Grafana 的官方网站下载适合自己操作系统的安装包,然后安装并启动。

# 下载 Grafana
wget https://dl.grafana.com/oss/release/grafana-9.3.6.linux-amd64.tar.gz

# 解压安装包
tar -zxvf grafana-9.3.6.linux-amd64.tar.gz

# 进入解压后的目录
cd grafana-9.3.6

# 启动 Grafana
./bin/grafana-server

在这个示例中,我们从 Grafana 的官方网站下载了安装包,然后解压并启动了 Grafana。

配置 Grafana 连接 Prometheus

启动 Grafana 后,我们需要配置 Grafana 连接到 Prometheus。打开 Grafana 的网页界面,在数据源设置中添加 Prometheus 数据源,填写 Prometheus 的地址和端口。

创建 Grafana 仪表盘

在 Grafana 中,我们可以创建各种仪表盘来展示系统指标。比如,我们可以创建一个 CPU 使用率的仪表盘,通过 PromQL 查询 Prometheus 中的 CPU 使用率数据,并以折线图的形式展示出来。

%% 查询 CPU 使用率
rate(node_cpu_seconds_total{mode="idle"}[5m])

在这个示例中,我们使用 PromQL 查询了最近 5 分钟内 CPU 空闲时间的变化率,通过这个变化率可以计算出 CPU 的使用率。

配置告警规则

在 Grafana 中,我们还可以配置告警规则。当系统指标达到一定的阈值时,Grafana 会发送告警通知。比如,当 CPU 使用率超过 80% 时,发送邮件通知。

# 配置告警规则
groups:
  - name: cpu_usage_alert
    rules:
      - alert: HighCPUUsage
        expr: 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "High CPU usage on {{ $labels.instance }}"
          description: "CPU usage on {{ $labels.instance }} has been above 80% for 5 minutes."

在这个示例中,我们配置了一个告警规则,当 CPU 使用率超过 80% 且持续 5 分钟时,触发告警。

四、应用场景

电商系统

在电商系统中,我们可以使用这个监控与告警平台来监控订单处理系统的性能。比如,监控订单处理的响应时间、并发处理能力等指标。当订单量突然增加时,如果系统的响应时间变长,或者并发处理能力达到瓶颈,我们可以及时发现并采取措施,比如增加服务器资源。

游戏服务器

对于游戏服务器来说,我们可以监控服务器的负载、玩家在线人数等指标。当玩家在线人数突然增加时,如果服务器负载过高,可能会导致游戏卡顿甚至崩溃。通过监控与告警平台,我们可以提前发现问题并进行处理。

五、技术优缺点

优点

  • 强大的指标收集能力:Prometheus 可以收集各种系统指标,并且支持分布式部署,能够处理大规模的指标数据。
  • 直观的可视化展示:Grafana 提供了丰富的图表和仪表盘模板,能够将指标数据以直观的方式展示出来,方便我们进行分析和决策。
  • 灵活的告警配置:可以根据不同的需求配置各种告警规则,及时发现系统问题。

缺点

  • 学习成本较高:Prometheus 的查询语言 PromQL 和 Grafana 的配置需要一定的学习成本。
  • 数据存储有限:Prometheus 的数据存储是基于本地磁盘的,对于大规模的指标数据存储可能会有一定的限制。

六、注意事项

  • 数据采集频率:要根据系统的实际情况合理设置数据采集频率,过高的采集频率会增加系统的负担,过低的采集频率可能会导致数据不及时。
  • 告警阈值设置:告警阈值的设置要合理,过高的阈值可能会导致问题不能及时发现,过低的阈值可能会产生大量的误告警。
  • 系统资源占用:Prometheus 和 Grafana 都会占用一定的系统资源,要确保服务器有足够的资源来运行这些服务。

七、文章总结

通过集成 Prometheus 和 Grafana,我们可以搭建一个有效的 Erlang 系统监控与告警平台,解决生产环境中指标可视化与预警的问题。这个平台可以帮助我们及时发现系统问题,提高系统的稳定性和可靠性。在搭建过程中,我们需要注意数据采集频率、告警阈值设置和系统资源占用等问题。同时,要不断学习和掌握 Prometheus 和 Grafana 的使用技巧,以更好地发挥这个平台的作用。