RisingWave Demo:自动化检测服务器性能异常

文摘   科技   2024-07-09 16:09   北京  

对 DevOps 团队来说,检测大量服务器的性能异常并尽快响应一直是个挑战。他们设置了各种指标来监控服务器性能,但诊断性能问题复杂且耗时,因为诊断数据的量可能非常大。越来越多的人认为这个过程应该自动化。但怎么做呢?

流式系统在这种情况下可能很有帮助。它在接收到性能事件后实时监控指标,并基于 SQL 查询中定义的模式立即检测异常。一旦检测到性能问题,下游微服务可以触发一个动作来处理该问题。

CDN 服务器与 DevOps 之间的关系

在本教程中,您将学习如何使用 RisingWave 自动化地从系统性能指标流中检测异常。我们为本教程设置了一个演示集群,因此您可以轻松尝试。

1开始之前

  • 确保您的环境中安装了 Docker[1]Docker Compose[2]。请注意,Docker Compose 包含在 Windows 和 macOS 的 Docker Desktop 中。如果您使用 Docker Desktop,请确保在启动演示集群之前已经运行。

  • 确保您的环境中安装了 PostgreSQL[3]交互式终端 psql 。详细说明请参阅下载 PostgreSQL[4]

2启动演示集群

在演示集群中,我们打包了 RisingWave 和一个工作负载生成器。一旦集群启动,工作负载生成器将开始生成随机流量并将其输入到 Kafka。

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

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

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

cd risingwave/integration_tests/cdn-metrics
docker compose up -d

命令未找到?

Compose V2 中的默认命令行句法以 docker compose 开头。详见 Docker 文档[5]
如果您使用的是 Compose V1,请改用 docker-compose

将启动必要的 RisingWave 组件,包括 Frontend 节点、Compute 节点、Meta 节点和 MinIO。工作负载生成器将开始生成随机数据并将其输入到 Kafka topic。在这个演示集群中,物化视图的数据将存储在 MinIO 实例中。

3将 RisingWave 连接到数据流

让我们连接到 RisingWave,以便我们可以管理数据流并进行数据分析。

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

创建两个独立的数据源。第一个是跟踪网络接口卡(NICs)的指标,第二个是跟踪传输控制协议(TCP)性能的指标流。

CREATE SOURCE nics_metrics (
    device_id VARCHAR,
    metric_name VARCHAR,
    aggregation VARCHAR,
    nic_name VARCHAR,
    report_time TIMESTAMP WITH TIME ZONE,
    bandwidth DOUBLE PRECISION,
    metric_value DOUBLE PRECISION
WITH (
    connector = 'kafka',
    topic = 'nics_metrics',
    properties.bootstrap.server = 'message_queue:29092',
    scan.startup.mode = 'earliest'
FORMAT PLAIN ENCODE JSON;

CREATE SOURCE tcp_metrics (
    device_id VARCHAR,
    metric_name VARCHAR,
    report_time TIMESTAMP WITH TIME ZONE,
    metric_value DOUBLE PRECISION
WITH (
    connector = 'kafka',
    topic = 'tcp_metrics',
    properties.bootstrap.server = 'message_queue:29092',
    scan.startup.mode = 'earliest'
FORMAT PLAIN ENCODE JSON;

4定义物化视图并查询结果

在本教程中,我们将创建几个不同的物化视图。第一个视图 high_util_tcp_metrics,将包括每个设备每三分钟所有指标的平均值。其他三个视图将派生自第一个视图,每个视图包含一个触发时间和不同的指标值。

为高利用率 TCP 指标设置物化视图

首先,我们将创建包含所有相关 TCP 值的物化视图。我们使用 tumble 函数将所有事件映射到1分钟的窗口,并计算每个设备在每个时间窗口内的平均指标值。接下来,分别计算平均 TCP 和 NIC 指标,然后在设备名称和时间窗口上进行连接。我们将保留测量接口传输的字节量的记录,其中平均利用率大于或等于 50。

请参考这个指南[6]了解 tumble 函数和聚合的解释。

CREATE MATERIALIZED VIEW high_util_tcp_metrics AS
SELECT
    tcp.device_id AS device_id,
    tcp.window_end AS window_end,
    tcp.metric_name AS metric_name,
    tcp.metric_value AS metric_value,
    nic.avg_util AS tcp_avg_bandwidth_util
FROM
    (
        SELECT
            device_id,
            window_end,
            metric_name,
            AVG(metric_value) AS metric_value
        FROM
            TUMBLE(
                tcp_metrics,
                report_time,
                INTERVAL '1' MINUTE
            )
        GROUP BY
            device_id,
            window_end,
            metric_name
    ) AS tcp
    JOIN (
        SELECT
            device_id,
            window_end,
            AVG((metric_value) / bandwidth) * 100 AS avg_util
        FROM
            TUMBLE(
                nics_metrics,
                report_time,
                INTERVAL '1' MINUTE
            )
        WHERE
            metric_name = 'tx_bytes'
            AND aggregation = 'avg'
        GROUP BY
            device_id,
            window_end
    ) AS nic ON tcp.device_id = nic.device_id
    AND tcp.window_end = nic.window_end
WHERE
    avg_util >= 50;

我们可以通过查询我们刚刚创建的视图来看到一个结果示例:

SELECT * FROM high_util_tcp_metrics;

这是一个示例结果。

             device_id            |        window_end         |   metric_name  | metrics_value | tcp_avg_bandwidth_util
----------------------------------+---------------------------+----------------+---------------+-----------------------
 eccbc87e4b5ce2fe28308fd9f2a7baf3 | 2022-08-17 18:02:00+00:00 | download_speed |   1126.3827   |      45.26712
 eccbc87e4b5ce2fe28308fd9f2a7baf3 | 2022-08-17 18:02:00+00:00 |  retrans_rate  |    0.19406    |      45.26712
 eccbc87e4b5ce2fe28308fd9f2a7baf3 | 2022-08-17 18:02:00+00:00 |      srtt      |   649.25184   |      45.26712


从物化视图中设置物化视图

RisingWave 支持基于物化视图创建物化视图。作为源使用的物化视图是上游物化视图,而基于其他物化视图创建的物化视图是下游物化视图。随着上游物化视图的值发生变化,下游物化视图将自动变化。

MV on MV 示例

以下三个物化视图使用 high_util_tcp_metrics 作为它们的源。生成的物化视图包括检测到的不同事件的异常。当某个事件的相应指标值高于或低于特定阈值时,就会检测到异常。

第一个物化视图查询重传超时。

CREATE MATERIALIZED VIEW retrans_incidents AS
SELECT
    device_id,
    window_end AS trigger_time,
    metric_value AS trigger_value
FROM
    high_util_tcp_metrics
WHERE
    metric_name = 'retrans_rate'
    AND metric_value > 0.15;CREATEMATERIALIZEDVIEW download_incidents AS
SELECT
    device_id,
    window_end AS trigger_time,
    metric_value AS trigger_value
FROM
    high_util_tcp_metrics
WHERE
    metric_name = 'download_speed'
AND metric_value < 200.0;

第二个物化视图查询慢速往返时间。

CREATE MATERIALIZED VIEW srtt_incidents AS
SELECT
    device_id,
    window_end AS trigger_time,
    metric_value AS trigger_value
FROM
    high_util_tcp_metrics
WHERE
    metric_name = 'srtt'
    AND metric_value > 500.0;

最后一个物化视图查询下载事件。

CREATE MATERIALIZED VIEW download_incidents AS
SELECT
    device_id,
    window_end AS trigger_time,
    metric_value AS trigger_value
FROM
    high_util_tcp_metrics
WHERE
    metric_name = 'download_speed'
    AND metric_value < 200.0;

现在我们可以显示检测到的异常。我们将以 srtt_incidents 为例进行展示,但您可以查询其他两个物化视图。请注意,您的结果会有所不同,因为工作负载生成器在流中随机生成数据。

SELECT * FROM srtt_incidents;

            device_id            |       trigger_time        | trigger_value
---------------------------------+---------------------------+---------------
cfcd208495d565ef66e7dff9f98764da | 2022-08-18 18:02:00+00:00 |   698.14387
e4da3b7fbbce2345d7772b0674a318d5 | 2022-08-18 18:09:00+00:00 |   973.03618

您可以几分钟后重新运行查询,看看结果是否有更新。

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

\q

可选:要移除容器和生成的数据,请使用以下命令。

docker compose down -v

5总结

在本教程中,我们学到了:

  • 如何使用 RisingWave 设置用于异常检测的流式处理管道。
  • 如何基于现有物化视图创建物化视图。
本 Demo 只是抛砖引玉,欢迎大家充分利用 RisingWave 的强大功能挖掘其在各个领域的更多应用。

参考资料

   [1]

Docker: https://docs.docker.com/get-docker/

   [2]

Docker Compose: https://docs.docker.com/compose/install/

   [3]

PostgreSQL: https://www.postgresql.org/docs/current/app-psql.html

   [4]

下载 PostgreSQL: https://www.postgresql.org/download/

   [5]

Docker 文档https://docs.docker.com/compose/migrate/#what-are-the-differences-between-compose-v1-and-compose-v2




   [6]

指南: https://zh-cn.risingwave.com/docs/current/sql-function-time-window/

  



关于 RisingWave 

RisingWave 是一款基于 Apache 2.0 协议开源的分布式流数据库,致力于为用户提供极致简单、高效的流数据处理与管理能力。RisingWave 采用存算分离架构,实现了高效的复杂查询、瞬时动态扩缩容以及快速故障恢复,并助力用户极大地简化流计算架构,轻松搭建稳定且高效的流计算应用。
RisingWave 始终聆听来自社区的声音,并积极回应用户的反馈。目前,RisingWave 已汇聚了 150+ 名开源贡献者和 3000+ 名社区成员。全球范围内,已有上百个 RisingWave 集群在生产环境中部署。

往期推荐

技术内幕

如何上手 RisingWave 👉 新手入门教程

RisingWave 中文用户文档上线,阅读更高效!

深入探索 RisingWave 中的高可用性与容错机制

深入理解 RisingWave 流处理引擎(三):触发机制

深入理解 RisingWave 流处理引擎(二):计算模型

深入理解 RisingWave 流处理引擎(一):总览

用户案例
视源股份(CVTE)IT 流计算应用历程
尘锋 SCRM 如何使用 RisingWave 实时打宽
RisingWave 在超百亿管理规模对冲基金公司中的应用
金融科技公司 Kaito 使用 RisingWave 实现实时智能化
龙腾出行如何通过 RisingWave 实现实时数据分析
RisingWave 助力乾象投资打造实时监控平台

RisingWave中文开源社区
RisingWave 是一款开源分布式 SQL 流数据库,致力于大幅降低流计算使用门槛与复杂度。RisingWave 已为全球超百家企业构建新一代流处理与分析平台。
 最新文章