Skip to main content

使用 RisingWave 监控 RisingWave 指标

概览

RisingWave 使用 Prometheus 来收集系统指标。Prometheus 是一个强大的监控平台,提供了从应用程序检测到查询指标的端到端解决方案。然而,Prometheus 的本地存储仅限于单节点的持久性和可扩展性。为了将数据从本地存储复制到远程存储系统,我们可以使用一个代理服务,将数据以 JSON 格式发送到 Kafka。然后 RisingWave 可以从 Kafka 读取、存储并对数据执行复杂查询。

Prometheus 收集了许多 RisingWave 系统指标。跟踪这些指标最方便的方法是使用实时数据看板。幸运的是,由于 RisingWave 兼容 Postgres,我们可以使用 Grafana 通过创建数据看板来可视化随时间变化的指标。

在本教程中,您将学习如何使用 RisingWave 作为指标存储来监控其运行时指标,并使用 Grafana 进行可视化。

开始之前

  • 确保您的环境中安装了 DockerDocker Compose。请注意,Docker Compose 包含在 Windows 和 macOS 的 Docker Desktop 中。如果您使用 Docker Desktop,请确保在启动演示集群之前已经运行。
  • 确保 PostgreSQL 交互式终端 psql 已安装在您的环境中。有关详细说明,请参阅 下载 PostgreSQL

第 1 步:启动演示集群

在演示集群中,我们打包了 RisingWave、Prometheus 和 Grafana。Prometheus 已设置为从 RisingWave 收集指标。

首先,将 risingwave 仓库克隆到环境中。

git clone https://github.com/risingwavelabs/risingwave.git

导航到 integration_tests/prometheus 目录,并从 docker compose 文件启动演示集群。

cd risingwave/integration_tests/prometheus
docker compose up -d
命令未找到?

Compose V2 中的默认命令行句法以 docker compose 开头。详见 Docker 文档

如果您使用的是 Compose V1,请改用 docker-compose

必要的 RisingWave 组件、Prometheus 和 Grafana 将被启动。Prometheus 将开始从 RisingWave 收集数据并将它们写入 Kafka topic。在这个演示集群中,从 Kafka topic 摄取的数据将存储在 MinIO 实例中。

连接到 RisingWave 以管理数据流并执行数据分析。

psql -h localhost -p 4566 -d dev -U root

第 2 步:将 RisingWave 连接到数据流

在 Prometheus 和 Kafka 之间,我们使用 Prometheus-kafka-adapter,一个代理服务,将指标转换为 JSON,然后发送到 Kafka topic。

这是一个样本 JSON:

{
"labels": {
"__name__": "prometheus_template_text_expansions_total",
"instance": "prometheus-0:9500",
"job": "prometheus"
},
"name": "prometheus_template_text_expansions_total",
"timestamp": "2022-10-26T01:46:37Z",
"value": "0"
}

一旦 Kafka topic准备好,我们就可以准备 RisingWave SQL 管道。以下 SQL 语句将 Kafka topic注册到 RisingWave。

CREATE SOURCE prometheus (
labels STRUCT <
__name__ VARCHAR,
instance VARCHAR,
job VARCHAR
>,
name VARCHAR,
timestamp TIMESTAMP WITH TIME ZONE,
value VARCHAR
) WITH (
connector = 'kafka',
topic = 'prometheus',
properties.bootstrap.server = 'message_queue:29092',
scan.startup.mode = 'earliest'
) FORMAT PLAIN ENCODE JSON;

我们已将 RisingWave 连接到流,但 RisingWave 尚未开始消费数据。要处理数据,我们需要定义物化视图。创建物化视图后,RisingWave 将开始从指定的偏移量消费数据。

第 3 步:创建物化视图

创建一个物化视图,跟踪每 30 秒的平均指标值。我们将把流分割成 30 秒的窗口,并计算每个窗口的平均指标值。这里我们使用 tumble window 功能来支持窗口切片。

CREATE MATERIALIZED VIEW metric_avg_30s AS
SELECT
name AS metric_name,
window_start AS metric_time,
avg(value :: decimal) AS metric_value
FROM
tumble(
prometheus,
timestamp,
interval '30 s'
)
GROUP BY
name,
window_start
ORDER BY
window_start;

这是一个示例结果。

SELECT * FROM metric_avg_30s LIMIT 5;
SELECT * FROM metric_avg_30s LIMIT 5;

metric_name | metric_time | metric_value
-----------------------------------------+---------------------------+--------------------------------
frontend_latency_local_execution_bucket | 2023-12-13 10:00:00+00:00 | 0
etcd_snap_fsync_duration_seconds_sum | 2023-12-13 10:00:00+00:00 | 0
prometheus_api_remote_read_queries | 2023-12-13 10:00:00+00:00 | 0
etcd_server_leader_changes_seen_total | 2023-12-13 10:00:00+00:00 | 1
process_virtual_memory_bytes | 2023-12-13 10:00:00+00:00 | 4224736530.7317073170731707317

第 4 步:在 Grafana 中添加 RisingWave 作为数据源

尝试跟踪特定指标随时间变化而不使用数据看板是困难的,所以我们将使用 Grafana 来可视化指标,以便更容易地进行。

Grafana 已经在演示集群中打包并运行。要访问 Grafana,请在您的网络浏览器中输入 127.0.0.1:3001。由于 RisingWave 兼容 Postgres,RisingWave 可以直接使用内置的 Postgres 连接器 连接到 Grafana。

要将 RisingWave 添加为 Postgres 数据源:

  1. 转到 配置 > 数据源
  2. 点击 添加数据源 并选择 PostgreSQL。
  3. 指定数据库连接参数。
  4. 点击 保存 & 测试
将 Grafana 连接到 RisingWave

这个示例使用 RisingWave 的“root”用户进行测试。在生产环境中,建议在使用 Grafana 查询数据库时使用专用的只读用户。要做到这一点,请使用以下 SQL 查询:

CREATE USER grafanareader WITH PASSWORD 'password';
GRANT SELECT ON MATERIALIZED VIEW metric_avg_30s TO grafanareader;

第 5 步:通过 Grafana 可视化 RisingWave 指标

最后,我们可以通过创建数据面板来可视化物化视图跟踪的指标。

创建面板的步骤如下:

  1. 在 Grafana 中,前往 Dashboards > New dashboard
  2. 点击 Add a new panel
  3. 指定时间范围、数据源和查询,以可视化 RisingWave 指标。
在 Grafana 中创建数据看板

完成后,运行以下命令以断开 RisingWave 的连接。

\q

可选操作:使用以下命令删除容器和生成的数据。

docker compose down -v

总结:

在这个演示中,我们学到了:

  • 如何设置 RisingWave → Prometheus → Kafka → RisingWave 的数据流。
  • 如何通过 Grafana 可视化 RisingWave 计算出的结果。