Skip to content

v0.0.13 破坏性更新说明 #9

@dushixiang

Description

@dushixiang

情况说明

在 v0.0.12 及之前的版本,使用的是 pg 数据库存储时序数据,后台启动多个定时任务将原始数据取样为多个时间维度进行存储,在运行了一段时间之后,我发现这种方式数据取样的不准确,并且开发成本很高,最后还是决定使用 VictoriaMetrics 来存储时序数据。

VictoriaMetrics 的优秀不必多说,贴一个 gemini 3 pro 的回答。

维度 VictoriaMetrics (VM) Prometheus InfluxDB (1.x/2.x OSS)
推荐指数 🌟🌟🌟🌟🌟 (首选) 🌟🌟🌟 (标准但较重) 🌟🌟 (慎选)
内存占用 极低 (同负载下约为 Prom 的 1/5) 高 (受时间序列数量影响大) 高 (受索引和基数影响大)
磁盘占用 极低 (压缩率极高,约为 Prom 的 1/10) 中等 中等
CPU 消耗 低 (优化的 Go 代码,写入性能极强) 中高 (特别是压缩数据时) 中 (查询复杂时消耗大)
高基数支持 优秀 (百万级 Series 依然流畅) 差 (容易 OOM 内存溢出) 差 (索引构建会吃光内存)
协议兼容 兼容 PromQL、Influx 协议 原生 PromQL InfluxQL / Flux
部署模式 单一二进制文件 (极简) 单一二进制文件 单一二进制文件

更新方式

  1. 在 docker-compose.yaml 中增加 victoriametrics ,完整配置参考

https://github.com/dushixiang/pika/blob/main/docker-compose.postgresql.yml

  1. 在 config.yaml 中增加 VictoriaMetrics 配置,完整配置参考

https://github.com/dushixiang/pika/blob/main/config.postgresql.yaml

  1. 执行 docker compose pull && docker compose up -d 进行更新。

数据迁移

  • 如果你想要将之前采集到的历史数据迁移到到 VictoriaMetrics ,需要执行以下命令
docker compose exec pika /app/pika migrate_v0_0_13
  • 如果你不想保留之前的数据,只需要将旧的数据库表删除即可。

创建一个 drop_tables.sql 文件:

DROP TABLE IF EXISTS cpu_metrics CASCADE;
DROP TABLE IF EXISTS memory_metrics CASCADE;
DROP TABLE IF EXISTS disk_metrics CASCADE;
DROP TABLE IF EXISTS network_metrics CASCADE;
DROP TABLE IF EXISTS network_connection_metrics CASCADE;
DROP TABLE IF EXISTS disk_io_metrics CASCADE;
DROP TABLE IF EXISTS gpu_metrics CASCADE;
DROP TABLE IF EXISTS temperature_metrics CASCADE;
DROP TABLE IF EXISTS monitor_metrics CASCADE;
DROP TABLE IF EXISTS cpu_metrics_aggs CASCADE;
DROP TABLE IF EXISTS memory_metrics_aggs CASCADE;
DROP TABLE IF EXISTS disk_metrics_aggs CASCADE;
DROP TABLE IF EXISTS network_metrics_aggs CASCADE;
DROP TABLE IF EXISTS network_connection_metrics_aggs CASCADE;
DROP TABLE IF EXISTS disk_io_metrics_aggs CASCADE;
DROP TABLE IF EXISTS gpu_metrics_aggs CASCADE;
DROP TABLE IF EXISTS temperature_metrics_aggs CASCADE;
DROP TABLE IF EXISTS monitor_metrics_aggs CASCADE;
DROP TABLE IF EXISTS aggregation_progress CASCADE;
DROP TABLE IF EXISTS monitor_stats CASCADE;

然后执行:

docker-compose exec -T postgresql psql -U pika pika < drop_tables.sql

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions