Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
23f91e4
feat(observability): 添加HTTP请求时延指标收集功能
JaD1ng Sep 19, 2025
d5dc444
feat(observability): 添加HTTP延迟注入功能并优化指标收集
JaD1ng Sep 19, 2025
c8ba099
refactor(metrics): 简化HTTP时延指标名称并更新健康检查脚本
JaD1ng Sep 19, 2025
334a81d
feat(prometheus_adapter): 新增prometheus_adapter实现指标查询功能
JaD1ng Sep 20, 2025
48b34b0
fix(prometheus_adapter): 更新默认Prometheus地址并完善文档
JaD1ng Sep 23, 2025
855c514
feat(告警): 实现告警规则同步功能并重构API层
JaD1ng Sep 23, 2025
54b8f4d
feat(prometheus_adapter): 实现告警规则增量更新功能
JaD1ng Sep 24, 2025
f6c1ad1
feat(observability): 修复Prometheus告警规则支持并优化规则同步机制
JaD1ng Sep 24, 2025
0b636a1
refactor(prometheus_adapter): 重构告警规则管理API和逻辑
JaD1ng Sep 25, 2025
40d41e8
feat(prometheus_adapter): 实现告警规则持久化与优雅关闭功能
JaD1ng Sep 25, 2025
271763e
feat(prometheus): 实现主动拉取告警的webhook服务
JaD1ng Sep 25, 2025
b6e76bd
feat(配置): 支持从多个默认路径加载配置文件
JaD1ng Sep 25, 2025
4bc9b15
feat(prometheus): 实现Alertmanager兼容API并重构告警处理
JaD1ng Sep 25, 2025
285412f
feat(prometheus_adapter): 添加获取绑定地址方法并优化端口配置逻辑
JaD1ng Sep 25, 2025
705363e
fix(prometheus_adapter): 更新告警webhook路径并添加REDACTED字段
JaD1ng Sep 28, 2025
6de1793
feat(告警规则): 添加删除规则模板和元信息的API接口
JaD1ng Sep 28, 2025
4c7dab9
refactor(prometheus_adapter): 合并并扩展告警规则测试脚本
JaD1ng Sep 28, 2025
4555e06
fix(prometheus_adapter): 改进服务进程管理和告警表达式生成
JaD1ng Sep 29, 2025
2166377
feat(部署): 重构部署任务管理功能
JaD1ng Sep 29, 2025
bdf837e
feat(deploy): 实现本地部署包支持及部署流程优化
JaD1ng Sep 29, 2025
20c690f
fix(alert_service): 修复表达式重复添加比较操作符的问题
JaD1ng Sep 29, 2025
41ba9ab
feat(grafana): 添加QPS监控面板并配置匿名访问
JaD1ng Oct 9, 2025
22df443
增加一些测试脚本
JaD1ng Oct 9, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 91 additions & 0 deletions cmd/prometheus_adapter/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package main

import (
"context"
"os"
"os/signal"
"syscall"
"time"

"github.com/fox-gonic/fox"
"github.com/qiniu/zeroops/internal/config"
prometheusadapter "github.com/qiniu/zeroops/internal/prometheus_adapter"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)

func main() {
// 配置日志
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr})

log.Info().Msg("Starting Prometheus Adapter server")

// 加载 Prometheus Adapter 配置
adapter, err := prometheusadapter.NewPrometheusAdapterServer(&config.Config{})
if err != nil {
log.Fatal().Err(err).Msg("Failed to create Prometheus Adapter server")
}

// 获取 Prometheus Adapter 内部配置的绑定地址
bindAddr := ":9999" // 默认端口
if adapter.GetBindAddr() != "" {
bindAddr = adapter.GetBindAddr()
}

// 如果有环境变量,优先使用环境变量的端口
if port := os.Getenv("ADAPTER_PORT"); port != "" {
bindAddr = ":" + port
}

// 更新配置(虽然已经创建了 adapter,但需要端口信息用于启动服务器)
cfg := &config.Config{
Server: config.ServerConfig{
BindAddr: bindAddr,
},
}
Comment on lines +24 to +45
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

这里的配置加载和使用方式比较混乱,可能会导致潜在的 bug。

  1. 在第24行,NewPrometheusAdapterServer 使用了一个空的 config.Config{} 进行初始化,这意味着 adapter 实例内部没有获取到任何有效的配置信息。
  2. 在第41行,又创建了一个新的 cfg 变量,它只包含了 bindAddr,并且仅用于第67行的 router.Run()

这种分离的配置处理方式,使得 adapter 实例在创建时无法获取到完整的配置,如果后续 adapter 的其他方法需要依赖配置,就会出问题。建议重构此处的逻辑,确保配置只加载一次,并在初始化时就传递给所有需要它的组件。


// 创建路由
router := fox.New()

// 启动 API
if err := adapter.UseApi(router); err != nil {
log.Fatal().Err(err).Msg("Failed to setup API routes")
}

// 设置信号处理
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)

// 创建一个用于优雅关闭的context
ctx, cancel := context.WithCancel(context.Background())
defer cancel()

// 在goroutine中启动服务器
serverErr := make(chan error, 1)
go func() {
log.Info().Msgf("Starting Prometheus Adapter on %s", cfg.Server.BindAddr)
if err := router.Run(cfg.Server.BindAddr); err != nil {
serverErr <- err
}
}()

// 等待信号或服务器错误
select {
case sig := <-sigChan:
log.Info().Msgf("Received signal %s, shutting down...", sig)

// 创建超时context
shutdownCtx, shutdownCancel := context.WithTimeout(ctx, 10*time.Second)
defer shutdownCancel()

// 调用adapter的Shutdown方法
if err := adapter.Close(shutdownCtx); err != nil {
log.Error().Err(err).Msg("Error during shutdown")
}

log.Info().Msg("Shutdown complete")

case err := <-serverErr:
log.Fatal().Err(err).Msg("Server error")
}
}
55 changes: 55 additions & 0 deletions docs/deploy/schema.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
-- Deploy模块数据库架构
-- 部署相关的主机、实例和版本历史表

-- 创建hosts表:主机信息
CREATE TABLE hosts (
id SERIAL PRIMARY KEY,
name VARCHAR(255) UNIQUE,
ip_address VARCHAR(45) UNIQUE,
is_stopped BOOLEAN
);

-- 创建instances表:服务实例信息
CREATE TABLE instances (
id VARCHAR(255) NOT NULL PRIMARY KEY, -- VARCHAR类型主键,非自增,不为空
service_name VARCHAR(255),
service_version VARCHAR(255),
host_id VARCHAR(255),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

数据库列类型不匹配。
instances 表中的 host_id 列定义为 VARCHAR(255),但它似乎是作为外键关联到 hosts 表的 id 列。而 hosts.id 列的类型是 SERIAL,即自增整数(integer)。

为了保证数据完整性和查询性能,建议将 host_id 的类型修改为 INTEGERBIGINT,并添加外键约束。

-- 建议的修改
CREATE TABLE instances (
    ...
    host_id INTEGER,
    ...
    FOREIGN KEY (host_id) REFERENCES hosts(id)
);

host_ip_address VARCHAR(45),
ip_address VARCHAR(45),
port INT,
status VARCHAR(50),
is_stopped BOOLEAN,
-- 保留ip_address和port的组合唯一约束
CONSTRAINT unique_ip_port UNIQUE (ip_address, port)
);

-- 1. 创建service_name和service_version的联合索引
CREATE INDEX idx_instances_service_name_version
ON instances (service_name, service_version);

-- 2. 创建service_name和ip_address的联合索引
CREATE INDEX idx_instances_service_name_ip
ON instances (service_name, ip_address);

-- 3. 创建version_histories表:版本历史记录
CREATE TABLE version_histories (
id SERIAL PRIMARY KEY,
instance_id VARCHAR(255),
service_name VARCHAR(255),
service_version VARCHAR(255),
status VARCHAR(50)
);

-- 初始化主机数据
-- 插入 jfcs1021 主机数据
INSERT INTO hosts (name, ip_address, is_stopped)
VALUES ('jfcs1021', '10.210.10.33', false);

-- 插入 jfcs1022 主机数据
INSERT INTO hosts (name, ip_address, is_stopped)
VALUES ('jfcs1022', '10.210.10.30', false);

-- 插入 jfcs1023 主机数据
INSERT INTO hosts (name, ip_address, is_stopped)
VALUES ('jfcs1023', '10.210.10.31', false);
Loading