如何升级到 1.9.0
HertzBeat 1.9.0 升级指南
1.9.0 不是可以直接替换 jar 或镜像的平滑升级版本。运行环境、配置文件、权限规则、采集器加密协议、GreptimeDB 表结构和部分告警语义都发生了不兼容变化。请在开始升级前完整阅读本指南。
该指南仅适用于正式发布的 1.8.x 升级到正式发布的 1.9.0。 如果你使用 1.6.x / 1.7.x,请先按 1.7.0 升级指南 和对应版本文档逐级升级到 1.8.x,验证运行正常后再使用本指南。
其它请参考 版本更新指引
是否受影响:快速检查
| 你的部署或使用情况 | 必读章节 |
|---|---|
| 安装包部署 | 运行环境、Manager 配置、权限规则 |
| Docker / Docker Compose | Manager 配置、权限规则、Docker Compose |
| Helm 部署 | Helm 部署;Chart 未适配时不要只覆盖镜像 tag |
| 启用了 GreptimeDB | GreptimeDB;不处理会导致日志停止写入 |
| 部署了远程采集器 | 采集器;必须先于 Manager 1.9.0 完成升级 |
| 使用 SFTP、群晖、NVIDIA、Redis Sentinel 或 Push 式监控 | 监控任务 |
| 使用周期性阈值、静默或分组收敛 | 告警与通知 |
| 有调用 HertzBeat API 的脚本或第三方系统 | 接口调用方 |
在 ext-lib/ 放置过第三方依赖,或部署过模板市场服务 | 依赖与第三方组件、已移除的功能 |
| 自研插件 | 插件开发者 |
推荐执行顺序与维护窗口
Collector 与 GreptimeDB 之间没有固定的先后依赖,但二者都必须在启动 Manager 1.9.0 前准备完成。推荐按以下顺序执行:
- 根据上面的快速检查定位所有受影响章节,在测试环境完成演练;下载并准备 1.9.0 安装包、Java 25、新版
application.yml与sureness.yml,此时不要覆盖正在运行的 1.8.x 文件。 - 在任何生产数据修改、组件升级或文件替换前,备份下节列出的配置和部署文件,并记录当前各组件的版本。
- 在仍运行 1.8.x 时完成必须提前处理的动作:删除 Push 式监控及相关自定义模板、检查周期性阈值规则、修正无 host 监控的名称、清理重名公告、导出模板市场中的模板,并移除
ext-lib/中冲突的旧依赖。 - 有远程 Collector 时,先逐台滚动升级到 1.9.0。1.9.0 Collector 可以连接 1.8.x Manager,因此这一步通常不需要停止 Manager。
- 进入维护窗口:停止 Manager,并暂停所有直接或间接向该 GreptimeDB 写入 HertzBeat 产品日志的发送方。需要避免 Collector 持续重试时,也可以暂时停止 Collector。
- 在停止写入后,对元数据库与 GreptimeDB 创建一致性备份或快照。
- 启用了 GreptimeDB 时,按本指南的分阶段路径升级 GreptimeDB,并完成
hertzbeat_logs旧表重命名。 - 整包替换 Manager,合并新版配置和权限规则,然后启动 Manager 1.9.0。确认新日志表创建成功后,在外部写入保持暂停的情况下回灌并验证历史日志。
- 受控恢复一个发送方或发送一条测试日志,完成文末的升级后检查。确认正常后再恢复全部外部写入,并结束维护窗口。
Manager 从第 5 步停止到第 8 步启动完成期间不可用。Collector 可以提前滚动升级;GreptimeDB 升级、表重命名、Manager 切换和历史日志回灌期间必须停止产品日志写入。实际停机时间取决于 GreptimeDB 的分阶段升级、数据卷恢复和历史日志回灌速度。受控验证新日志写入成功后才能全面恢复发送方。
升级前备份
备份分为两个阶段。任何变更之前先保存:
- HertzBeat 与 Collector 文件:
define/、ext-lib/、config/,以及所有外置的application.yml、sureness.yml、证书和密钥文件。 - 容器部署文件:
.env、实际使用的 Compose 文件及其本地修改;Kubernetes 的 ConfigMap、Secret、values 文件和挂载声明。 - 当前 1.8.x 安装包或镜像 tag、所有 Collector 版本和 GreptimeDB 版本,确保回滚时仍能取得相同制品。
进入维护窗口并停止相关写入后,再创建以下一致性备份:
- 元数据库:H2 的完整
data/目录,或 MySQL / PostgreSQL 的一致性备份。 - 启用 GreptimeDB 时:完整数据目录、Docker volume 或外部存储快照。该备份必须能与升级前使用的 GreptimeDB 版本一起恢复。
升级完成前不要覆盖或删除这些备份。尤其是启用了 GreptimeDB、周期性告警规则或自定义 sureness.yml 的部署,建议先完整演练升级与回滚。
运行环境
Java 25
1.9.0 的 Java 运行时要求由 Java 17 提升到 Java 25。官方通用安装包与 1.8.x 一样不内置 JDK。
- 服务器默认 Java 已是 25:无需操作。
- 服务器默认 Java 不是 25(如 Java 8、11、17、21),且没有其他应用依赖旧版本:安装 Java 25 并把环境变量指向它。
- 服务器有其他应用依赖旧版本 Java:下载 Java 25,把解压后的目录改名为
java,放到 HertzBeat 解压目录下,启动脚本会优先使用它。
Docker 镜像基础层已切换到 eclipse-temurin:25-jdk,Docker 用户无需处理。
安装包目录结构
启动脚本的 classpath 改为显式的 lib/* 与 ext-lib/*,不再依赖 jar 的 manifest。请整包替换安装目录,不要只替换主 jar。
采集器镜像路径
采集器镜像的工作目录从 /opt/apache-hertzbeat-collector-<版本>-bin/ 改为固定的 /opt/hertzbeat-collector/。所有挂载 config/、logs/、ext-lib/ 的 volume 或 Kubernetes ConfigMap 路径需要同步修改。
Manager 配置:application.yml
JPA 实现从 EclipseLink 切换为 Hibernate
这是最容易被忽略、后果最直接的一处。沿用 1.8.x 的 application.yml 会导致主服务无法启动。 请按所用数据库把 spring.jpa 段整体替换。
1.8.x 的写法(需要删除):
spring:
jpa:
show-sql: false
database-platform: org.eclipse.persistence.platform.database.MySQLPlatform
database: h2
properties:
eclipselink:
logging:
level: SEVERE
1.9.0 的写法,H2:
spring:
jpa:
show-sql: false
database: h2
hibernate:
ddl-auto: update
properties:
hibernate:
dialect: org.hibernate.dialect.H2Dialect
format_sql: true
MySQL:
spring:
jpa:
show-sql: false
database: mysql
hibernate:
ddl-auto: update
properties:
hibernate:
dialect: org.hibernate.dialect.MySQLDialect
format_sql: true
PostgreSQL:
spring:
jpa:
show-sql: false
database: postgresql
hibernate:
ddl-auto: update
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQLDialect
format_sql: true
hibernate.ddl-auto: update 不能省略。1.9.0 新增的表和列(如 hzb_auth_token、通知接收人的 ntfy 字段)由 Hibernate 自动创建,省略后启动虽然成功,但相关功能会在运行时报 SQL 错误。
1.9.0 新增的 Flyway 数据库迁移会在启动时自动执行,无需手工干预,其中一项有可见影响:
- 它把
hzb_alert_define.expr扩展为大文本类型(PostgreSQLTEXT、MySQLLONGTEXT、H2CLOB),绑定大量监控的阈值表达式不再被截断。
Docker Compose 用 ./conf/application.yml 覆盖镜像内的配置文件,docker run 也常挂载 -v $(pwd)/application.yml:/opt/hertzbeat/config/application.yml。镜像升级不会更新这些挂载进去的文件