一、背景介绍
在生产环境里,咱们得时刻盯着系统的运行情况,及时发现问题并处理。对于 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 的使用技巧,以更好地发挥这个平台的作用。
评论