How to update to 1.9.0
HertzBeat 1.9.0 Upgrade Guide
1.9.0 is not a drop-in replacement for the 1.8.x jar or image. The runtime, the configuration file, the authorization rules, the collector credential format, the GreptimeDB table schema and several alerting semantics all changed incompatibly. Read this guide in full before you start.
This guide applies to an upgrade from a released 1.8.x to a released 1.9.0. On 1.6.x / 1.7.x, first upgrade step by step to 1.8.x using the 1.7.0 upgrade guide and the guides for the versions in between, verify that it runs, and only then use this guide.
Follow the HertzBeat New Version Upgrade
Am I Affected? Quick Check
| Your deployment or usage | Sections to read |
|---|---|
| Installation package | Runtime, Manager configuration, Authorization rules |
| Docker / Docker Compose | Manager configuration, Authorization rules, Docker Compose |
| Helm | Helm deployments; do not just override the image tag on a chart that has not been adapted |
| GreptimeDB enabled | GreptimeDB; skipping this stops log ingestion |
| Remote collectors deployed | Collectors; they must reach 1.9.0 before the manager does |
| SFTP, Synology, NVIDIA, Redis Sentinel or push style monitors | Monitors |
| Scheduled thresholds, silences or group convergence | Alerting and notification |
| Scripts or third-party systems calling the HertzBeat API | API consumers |
Third-party jars in ext-lib/, or the template marketplace deployed | Dependencies, Removed features |
| Your own plugins | Plugin developers |
Recommended Order and Maintenance Window
There is no fixed dependency between the collectors and GreptimeDB, but both must be ready before manager 1.9.0 starts. The recommended order:
- Use the quick check above to identify every applicable section and rehearse in a test environment. Download and stage the 1.9.0 package, Java 25 and the new
application.ymlandsureness.yml, without overwriting the running 1.8.x files yet. - Before changing production data, upgrading a component or replacing a file, back up the configuration and deployment files listed in the next section and record the current version of every component.
- While 1.8.x is still running, complete the actions that must happen in advance: delete push style monitors and their custom templates, review scheduled alert rules, rename hostless monitors where needed, clean up duplicate bulletin names, export templates from the marketplace, and remove conflicting old dependencies from
ext-lib/. - With remote collectors, upgrade them to 1.9.0 one by one first. A 1.9.0 collector works against a 1.8.x manager, so this step usually needs no manager downtime.
- Enter the maintenance window: stop the manager, and pause every sender that writes HertzBeat product logs to that GreptimeDB, directly or indirectly. Stop the collectors too if you want to avoid continuous retries.
- Now that writes have stopped, take consistent backups or snapshots of the metadata database and GreptimeDB.
- With GreptimeDB enabled, follow the staged upgrade path in this guide and rename the old
hertzbeat_logstable. - Replace the whole manager installation, merge the new configuration and authorization rules, then start manager 1.9.0. With external writes still paused, copy the log history back and verify it after the new table has been created.
- Resume one sender in a controlled manner, or send one test log, and work through the post-upgrade checks. Resume all external writers and close the window only after they pass.
The manager is unavailable from step 5 until it starts successfully in step 8. Collectors can be upgraded ahead of the window. Product log writes must stay stopped while GreptimeDB is upgraded, the table is renamed, the manager is switched over and the log history is copied back. The actual duration depends on the staged GreptimeDB upgrade, any volume restore and the history copy. Resume all senders only after a controlled new-log check succeeds.
Backups Before Upgrading
Backups happen in two stages. Before making any change, preserve:
- HertzBeat and collector files:
define/,ext-lib/,config/, plus any externally mountedapplication.yml,sureness.yml, certificates and key files. - Container deployment files:
.env, the compose file you actually use and any local edits to it; for Kubernetes, the ConfigMaps, Secrets, values files and mount declarations. - A record of the current 1.8.x package or image tag, every collector version and the GreptimeDB version, so the same artifacts can still be obtained if you need to roll back.
After entering the maintenance window and stopping the related writes, take these consistent backups:
- The metadata database: the complete
data/directory for H2, or a consistent dump of MySQL / PostgreSQL. - With GreptimeDB enabled: the complete data directory, Docker volume or external storage snapshot. This backup must be restorable together with the GreptimeDB version you were running before the upgrade.
Do not overwrite or delete these backups until the upgrade is complete. Rehearsing both the upgrade and the rollback is strongly recommended if you use GreptimeDB, scheduled alert rules or a customised sureness.yml.
Runtime
Java 25
1.9.0 raises the Java runtime requirement from Java 17 to Java 25. As in 1.8.x, the generic installation package does not bundle a JDK.
- The default Java on the server is already 25: nothing to do.
- The default Java is not 25 (for example 8, 11, 17 or 21) and no other application depends on it: install Java 25 and point the environment variable at it.
- Other applications depend on the older Java: download Java 25, rename the extracted folder to
javaand place it in the HertzBeat installation directory. The startup script prefers it.
The Docker images are now based on eclipse-temurin:25-jdk, so Docker users need no action.
Package layout
The startup scripts now put lib/* and ext-lib/* on the classpath explicitly instead of relying on the jar manifest. Replace the whole installation directory; do not swap only the main jar.
Collector image path
The collector image working directory moved from /opt/apache-hertzbeat-collector-<version>-bin/ to the fixed /opt/hertzbeat-collector/. Update every volume or Kubernetes ConfigMap mount that targets config/, logs/ or ext-lib/.