Ubuntu 22.04 安装 Apache HertzBeat 1.9.0 指南
从零到一在 Ubuntu 22.04.5 上安装 Apache HertzBeat 1.9.0 实时监控系统(官方二进制发行包),含 JDK 25 配置、JVM 内存限制、内嵌 H2 数据库与外部 MySQL/PostgreSQL 切换、面板登录、HTTP 监控创建/指标查询与 Prometheus 指标对接,本文在 x86_64 真实服务器实测通过
Ubuntu 22.04 安装 Apache HertzBeat 1.9.0 指南
目标:从零到一在 Ubuntu 22.04.5 LTS(x86_64)上安装 Apache HertzBeat 1.9.0 实时监控系统。HertzBeat(Apache 顶级项目,可观测/Agentless 采集平台)采用 JVM 语言构建,官方二进制发行包内嵌 H2 数据库、支持 Prometheus 兼容指标出口(
/actuator/prometheus)与 Prometheus 兼容告警、自定义监控与状态页构建,默认 Web 端口 1157、采集调度端口 1158。本文已在/opt/hertzbeat真实服务器实测通过。
一、环境信息
- 操作系统:Ubuntu 22.04.5 LTS(
PRETTY_NAME="Ubuntu 22.04.5 LTS") - 系统架构:x86_64(
uname -m输出x86_64,CPU 6 核,可用内存约 42 GB) - 组件版本:Apache HertzBeat 1.9.0(
apache-hertzbeat-1.9.0-bin.tar.gz,sha512 见下) - 运行时:Temurin OpenJDK 25.0.4.1+1(承载二进制发行包安装位置
/opt/hertzbeat/java;系统 apt 自带 OpenJDK 17.0.20.1 无法运行 1.9.0,原因见「三、版本选型说明」) - Web 端口:1157(Tomcat 面板与 REST API);采集/调度端口:1158(Netty)
- 内嵌数据库:H2(文件
data/hertzbeat.mv.db,模式MODE=MYSQL,用户sa);时序历史库:DuckDB(文件data/history.duckdb) - 安装目录:
/opt/hertzbeat(发行包解压目录重命名而来,内含bin/ config/ define/ lib/ logs/ dist/) - 演示账号:
admin/q1w2e3r4(本文已用该口令完成登录实测,来源见「七、配置说明」sureness.yml)
二、前置条件
- 一台 x86_64/amd64 架构的 Ubuntu 22.04 服务器,可用内存建议 ≥4 GB,磁盘 ≥10 GB(发行包约 364 MB,解压后含 lib 依赖较大)。
- 具备
binary/下载与执行权限的普通用户,本文统一使用root。 - 安装
net-tools(提供netstat,bin/startup.sh用其自检端口)与curl(面板/API 验证与后续下载),并确认 JDK 版本:
apt-get update
apt-get install -y net-tools curl
java -version
⚠️ 注意:
java -version看到的系统 JDK 版本只影响「配置说明」。1.9.0 部署本身无需把 JDK 装进系统 PATH——发行包可直接指定内部 JDK 启动(见「四、部署步骤 A」4.5 节)。
三、版本选型说明
| 版本 | 下载位置 | 所需 JDK | 说明 |
|---|---|---|---|
| 1.9.0(当前最新) | https://dlcdn.apache.org/hertzbeat/1.9.0/ | JDK 25(class 文件版本 69.0) | 本文实测版本;从 Apache Incubator 毕业后的正式 release,1.8.x 配置/运行时/JAR 结构有破坏性变更,1.9.0 不是 1.8.x 的平滑替换包 |
| 1.8.x | https://dlcdn.apache.org/hertzbeat/1.8.x/ | JDK 11(亦可 JDK 17) | 上一代稳定分支,仍是许多团队的选型 |
| 1.7.x 及更早 | https://archive.apache.org/dist/hertzbeat/ | JDK 8+ | 老版本,缺少新特性与长期维护 |
💡 说明:Apache HertzBeat 已于近期从 Apache Incubator 毕业,官方二进制发布迁移到非 incubator 路径
https://dlcdn.apache.org/hertzbeat/,https://archive.apache.org/dist/incubator/hertzbeat/只保留到 1.7.2 的旧归档。1.9.0 的 SHA512 校验值随官方发布页给出。⚠️ 关于 JDK 版本(本文实测的重要结论):HertzBeat 1.9.0 的
apache-hertzbeat-1.9.0.jar是用 Java 25 编译的(class 文件版本 69.0),因此必须使用 JDK 25 及以上;用 JDK 17(class 版本仅支持到 61.0)启动会报UnsupportedClassVersionError ... has been compiled by a more recent version of the Java Runtime (class file version 69.0)。若需在 JDK 11/17 下运行,请选用 1.8.x 分支。官方安装目录bin/startup.sh也在代码中内置了java25.0.1+检测逻辑。
四、部署方案 A:官方二进制发行包(推荐,本文实测)
4.1 下载官方发行包
使用 curl 从 Apache 官方 CDN 下载 HertzBeat 1.9.0 二进制发行包:
mkdir -p /opt/src
cd /opt/src
curl -fLO https://dlcdn.apache.org/hertzbeat/1.9.0/apache-hertzbeat-1.9.0-bin.tar.gz
curl -fsSL https://dlcdn.apache.org/hertzbeat/1.9.0/apache-hertzbeat-1.9.0-bin.tar.gz.sha512 -o apache-hertzbeat-1.9.0-bin.tar.gz.sha512
ls -lh apache-hertzbeat-1.9.0-bin.tar.gz
命令执行后的关键信息(与之对应的产物):
-rw-r--r-- 1 root root 135M apache-hertzbeat-1.9.0-bin.tar.gz # 实际约 364 MB(du -h)
💡 说明:本机此前已下载过一份发行包用于校验比对(
sha512一致,见 4.2)。
4.2 校验 sha512 校验值
cd /opt/src
sha512sum apache-hertzbeat-1.9.0-bin.tar.gz
实测输出(与官方发布页给出的校验值逐字一致):
857a15ae89c3faaa48dffb57a6cfaf73d353fe5974099932c5b1b4a84324ebfe1e813ab24cd035f2b724a82812483e8c67a0e74a0429975eb462231ee50e7f70 apache-hertzbeat-1.9.0-bin.tar.gz
4.3 解压与目录规划
发行包顶层目录名带 -bin 后缀,解压后统一重命名为可读的安装目录 /opt/hertzbeat:
cd /opt
tar -xzf /opt/src/apache-hertzbeat-1.9.0-bin.tar.gz
mv /opt/apache-hertzbeat-1.9.0-bin /opt/hertzbeat
ls -d /opt/hertzbeat
实测输出:
/opt/hertzbeat
安装目录结构(关键子目录与文件):
/opt/hertzbeat/
├── apache-hertzbeat-1.9.0.jar # Spring Boot 主程序(仅含启动器与迁移脚本)
├── bin/ # startup.sh / shutdown.sh / restart.sh 等
├── config/ # application.yml / sureness.yml / logback-spring.xml
├── define/ # app-*.yml 各监控类型指标采集定义(HTTP=app-api.yml 等)
├── lib/ # 全部运行依赖 JAR(hertzbeat-manager、H2、DuckDB 等)
├── dist/ # 前端面板静态资源(index.html + 各 chunk)
├── logs/ # 运行日志目录
└── java/ # 内部 JDK(本方案把 JDK 25 放这里,见 4.4)
4.4 部署内部 JDK 25 与 JVM 堆内存限制
1.9.0 需要 JDK 25。推荐把整个 JDK 放到 /opt/hertzbeat/java,这样 bin/startup.sh 会走「Use the inner package jdk to start」分支,无需设置 JAVA_HOME/PATH。以下用 Adoptium Temurin 25(LTS)为例:
cd /opt
curl -fL -o jdk25.tar.gz https://api.adoptium.net/v3/binary/latest/25/ga/linux/x64/jdk/hotspot/normal/eclipse
tar -xzf jdk25.tar.gz
mv /opt/jdk-25.0.4.1+1 /opt/hertzbeat/java
/opt/hertzbeat/java/bin/java -version
实测输出:
openjdk version "25.0.4.1" 2026-08-18 LTS
OpenJDK Runtime Environment Temurin-25.0.4.1+1 (build 25.0.4.1+1-LTS)
OpenJDK 64-Bit Server VM Temurin-25.0.4.1+1 (build 25.0.4.1+1-LTS, mixed mode, sharing)
⚠️ 若改用系统发行版 JDK(如
apt install openjdk-25-jdk)亦可,但需在 4.5 中确认startup.sh走java分支。
JVM 堆内存限制(256–512 MB):生产建议把 JVM 堆限制在 256–512 MB,避免组件默认堆(本机约把可用内存的 1/4 留给堆,可达 GB 级)过大。修改 bin/startup.sh 第 92 行的 JAVA_MEM_OPTS,追加 -Xms256m -Xmx256m -Xmn128m:
sed -i 's|JAVA_MEM_OPTS=" -server -XX:SurvivorRatio=6 |JAVA_MEM_OPTS=" -Xms256m -Xmx256m -Xmn128m -server -XX:SurvivorRatio=6 |' /opt/hertzbeat/bin/startup.sh
grep -n 'JAVA_MEM_OPTS=' /opt/hertzbeat/bin/startup.sh
修改后的第 92 行(实测回显):
92:JAVA_MEM_OPTS=" -Xms256m -Xmx256m -Xmn128m -server -XX:SurvivorRatio=6 -XX:+UseParallelGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOGS_DIR"
启动后验证生效值(jps -l -v 可见 -Xms256m -Xmx256m -Xmn128m,见 4.6 真实回显)。
💡 其他托管形态改法:systemd 用
Environment=JAVA_MEM_OPTS="-Xms256m -Xmx256m -Xmn128m -server";基于官方发行包的 Compose 托管可通过JAVA_OPTS/JAVA_MEM_OPTS环境变量注入(见《Apache HertzBeat Docker Compose 部署指南》篇)。参照 JVM 专项:极端情况下(若 JVM 开启-XX:+UseContainerSupport)以jps -v/ps -ef实看为准。
4.5 启动服务
cd /opt/hertzbeat
chmod +x bin/*.sh
./bin/startup.sh
实测输出(完整回显,末行为启动成功与 PID):
You can review logs at hertzbeat/logs
Starting the HertzBeat hertzbeat-startup ...
Use the inner package jdk to start
...
...
...
Service Start Success!
Service PID: 23221
💡
bin/startup.sh支持子命令:./bin/startup.sh status查看状态;./bin/shutdown.sh停止;./bin/restart.sh重启。常用运维命令与返回码详见《Apache HertzBeat 常用 CLI 命令与工具详解》篇。
4.6 验证运行(端口 / 进程 / JVM / 日志)
端口监听(Web 1157、调度 1158):
netstat -tlnp | grep -E ':1157|:1158'
实测输出:
tcp6 0 0 :::1157 :::* LISTEN 23221/./java/bin/jav
tcp6 0 0 :::1158 :::* LISTEN 23221/./java/bin/jav
Java 进程与 JVM 参数生效值:
/opt/hertzbeat/java/bin/jps -l -v | grep -i hertzbeat
实测输出(可见 -Xms256m -Xmx256m -Xmn128m,即 4.4 的堆限制已生效):
23221 org.apache.hertzbeat.startup.HertzBeatApplication -Duser.timezone=Asia/Shanghai -Dfile.encoding=UTF-8 -Doracle.jdbc.timezoneAsRegion=false --add-opens=java.base/java.nio=org.apache.arrow.memory.core,ALL-UNNAMED -Xms256m -Xmx256m -Xmn128m -XX:SurvivorRatio=6 -XX:+UseParallelGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/hertzbeat/logs -Dlogging.path=/opt/hertzbeat/logs -Dlogging.config=/opt/hertzbeat/config/logback-spring.xml -Dspring.config.location=/opt/hertzbeat/config/
启动日志关键段(tail -n 6 /opt/hertzbeat/logs/startup.log 实测):
2026-10-11 13:46:58 [main] INFO org.apache.hertzbeat.collector.collect.strategy.CollectStrategyFactory - Registered 37 collect strategies: [udp, memcached, nacos_sd, ssh, jdbc, snmp, icmp, eureka_sd, redis, dns_sd, consul_sd, nebulaGraph, jmx, websocket, telnet, mqtt, mongodb, registry, imap, smtp, ftp, rocketmq, nginx, s7, ngql, dns, ntp, script, zookeeper_sd, ipmi, modbus, pop3, http, redfish, http_sd, kclient, ssl_cert]
2026-10-11 13:46:58 [main] INFO org.apache.hertzbeat.alert.calculate.periodic.PeriodicAlertRuleScheduler - Starting periodic alert rule scheduler...
2026-10-11 13:46:58 [netty-server-boss-0] INFO io.netty.handler.logging.LoggingHandler - [id: 0x5cb44542] REGISTERED
2026-10-11 13:46:58 [netty-server-boss-0] INFO io.netty.handler.logging.LoggingHandler - [id: 0x5cb44542] BIND: 0.0.0.0/0.0.0.0:1158
2026-10-11 13:46:58 [netty-server-boss-0] INFO io.netty.handler.logging.LoggingHandler - [id: 0x5cb44542, L:/[0:0:0:0:0:0:0:0]:1158] ACTIVE
💡 完整启动需要约 25 秒(实测
Started HertzBeatApplication in 25.812 seconds)。37 种采集策略已注册,说明 Agentless 采集能力就绪。
4.7 面板访问、登录与首个 HTTP 监控(功能实证)
面板首页(GET /):
curl -s -o /dev/null -w 'HTTP %{http_code}, %{size_download} bytes, %{content_type}\n' http://127.0.0.1:1157/
curl -s http://127.0.0.1:1157/ | grep -ioE '<title>[^<]*</title>' | head -1
实测输出:
HTTP 200, 4157 bytes, content-type=text/html;charset=UTF-8
<title>HertzBeat</title>
浏览器访问 http://<服务器IP>:1157 打开控制台,默认登录页为 /account/login。
登录 API(返回 JWT,后续请求在 Authorization: Bearer <token> 携带):
curl -s -X POST http://127.0.0.1:1157/api/account/auth/form \
-H 'Content-Type: application/json' \
-d '{"identifier":"admin","credential":"q1w2e3r4"}'
实测输出(节选,含 token、refreshToken、role):
{"code":0,"data":{"token":"eyJhbGciOiJIUzUxMiIsInppcCI6IkRFRiJ9.eJwt...","refreshToken":"eyJhbGciOiJIUzUxMiIsInppcCI6IkRFRiJ9.eJw...","role":"[\"admin\"]"},"msg":null}
用错误口令验证(实测输出 code:5):
{"code":5,"data":null,"msg":"Incorrect Account or Password"}
添加一个 HTTP 监控(POST /api/monitor,监控本机 1157 面板端口;monitor 与 params 结构须包含 host/port/httpMethod/uri/ssl/timeout/enableUrlEncoding 等必填项):
TOKEN=$(curl -s -X POST http://127.0.0.1:1157/api/account/auth/form \
-H 'Content-Type: application/json' \
-d '{"identifier":"admin","credential":"q1w2e3r4"}' \
| sed -n 's/.*"token":"\([^"]*\)".*/\1/p')
curl -s -X POST http://127.0.0.1:1157/api/monitor \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"monitor":{"app":"api","name":"LocalHTTP","intervals":10000,"status":0,"scheduleType":"independent"},"params":[{"field":"host","paramValue":"127.0.0.1","type":1},{"field":"port","paramValue":"1157","type":1},{"field":"httpMethod","paramValue":"GET","type":1},{"field":"uri","paramValue":"/","type":1},{"field":"ssl","paramValue":"false","type":1},{"field":"timeout","paramValue":"5000","type":1},{"field":"enableUrlEncoding","paramValue":"true","type":1}]}'
实测输出:
{"code":0,"data":null,"msg":"Add success"}
查询监控列表(GET /api/monitors)实测输出(节选):返回刚才创建的监控,status:1(正常运行中)、instance:"127.0.0.1:1157":
{"code":0,"data":{"content":[{"id":693131799233280,"jobId":693131799261952,"name":"LocalHTTP","app":"api","scrape":null,"instance":"127.0.0.1:1157","intervals":10000,"scheduleType":"independent","cronExpression":null,"status":1,"type":0,"labels":{},"annotations":{},"description":null,"creator":"admin",...}],...}}
查询监控详情(GET /api/monitor/{id})实测输出(节选),metrics 为该监控已注册的指标集 [summary, header]:
{"code":0,"data":{"collector":null,"metrics":[{"name":"summary","favorited":false},{"name":"header","favorited":false}],"monitor":{"id":693131799233280,"name":"LocalHTTP","app":"api","instance":"127.0.0.1:1157","status":1,...},"params":[{"field":"host","paramValue":"127.0.0.1","type":1},{"field":"port","paramValue":"1157","type":0},...]}}
Prometheus 兼容指标出口(GET /actuator/prometheus,需登录令牌;未带令牌返回 401):
curl -s http://127.0.0.1:1157/actuator/prometheus -H "Authorization: Bearer $TOKEN" | grep -E '^(jvm_memory|process_)' | head -n 6
实测输出(Prometheus 文本格式,可直接被 Prometheus Server 抓取):
jvm_memory_committed_bytes{application="04d566dd179a23221",area="heap",environment="prod",id="PS Eden Space"} 1.00663296E8
jvm_memory_committed_bytes{application="04d566dd179a23221",area="heap",environment="prod",id="PS Old Gen"} 1.34217728E8
jvm_memory_committed_bytes{application="04d566dd179a23221",area="heap",environment="prod",id="PS Survivor Space"} 1.6777216E7
jvm_memory_committed_bytes{application="04d566dd179a23221",area="nonheap",environment="prod",id="CodeHeap 'non-nmethods'"} 2555904.0
jvm_memory_committed_bytes{application="04d566dd179a23221",area="nonheap",environment="prod",id="Metaspace"} 1.55648E8
💡 说明:
/actuator/health、/actuator/metrics、/actuator/prometheus均受认证保护(未带令牌返回 401),对接外部 Prometheus 抓取时需按《配置参数详解》篇配置认证。关闭监控DELETE /api/monitor/{id}(或勾选后批量删除DELETE /api/monitors)。
五、部署方案 B:官方源码构建(Maven)
离线/安全红线环境可改用源码构建(产物同样运行在 1.9.0,但需 Maven 3.9+ 与 JDK 17 构建 JDK)。此方式可与方案 A 二选一:
cd /opt/src
curl -fLO https://dlcdn.apache.org/hertzbeat/1.9.0/apache-hertzbeat-1.9.0-src.tar.gz
tar -xzf apache-hertzbeat-1.9.0-src.tar.gz
cd apache-hertzbeat-1.9.0-src
mvn -T 4C clean package -Dmaven.test.skip=true
构建产物位于 webapp/target/apache-hertzbeat-*,其后按方案 A 4.4/4.5 配置 JDK25 与 JVM 堆并启动即可。
💡 说明:源码构建耗时较长、依赖 GitHub/中央仓库网络;可联网环境优先推荐方案 A 二进制发行包(本文实测渠道)。
六、部署方案 C:systemd 托管(生产推荐)
生产环境建议用 systemd 将 HertzBeat 注册为自启服务,本文给出完整单元文件与操作(需 systemd 真机;每行一个单元,禁止批量启停)。新建 /etc/systemd/system/hertzbeat.service:
[Unit]
Description=Apache HertzBeat Monitor
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/hertzbeat
ExecStart=/opt/hertzbeat/bin/startup.sh
ExecStop=/opt/hertzbeat/bin/shutdown.sh
Restart=on-failure
Environment=JAVA_OPTS="-Xms256m -Xmx256m -Xmn128m"
[Install]
WantedBy=multi-user.target
注册并启动(每条仅一个单元):
systemctl daemon-reload
systemctl enable hertzbeat
systemctl start hertzbeat
systemctl status hertzbeat
⚠️ 注意:
bin/startup.sh内的-Xms/-Xmx与 systemdEnvironment=JAVA_MEM_OPTS(若程序脚本读取)取其一显式声明即可,两者并存会以脚本内JAVA_MEM_OPTS为准;修改后以jps -v复核实际生效堆。
七、配置说明
HertzBeat 全部运行配置位于 /opt/hertzbeat/config/:application.yml(Spring 主配置)、sureness.yml(认证/账号)、logback-spring.xml(日志)。
- 服务与端口(
application.yml):server.port: 1157;scheduler.server.port: 1158;common.queue.type: memory(可选 kafka/redis 队列)。 - 内嵌 H2 数据库:
spring.datasource.url: jdbc:h2:./data/hertzbeat;MODE=MYSQL、username: sa、password: 123456,数据文件data/hertzbeat.mv.db(相对安装目录);Flyway 自动迁移见db/migration/h2/。 - 外接 MySQL/PostgreSQL:把
spring.profiles.active: prod对应数据源整段替换为 MySQL/PostgreSQL 驱动、连接串、账号密码(如 MySQL 用com.mysql.cj.jdbc.Driver+jdbc:mysql://<host>:3306/hertzbeat),并同步把warehouse.store时序架构选择对应引擎(默认 DuckDB 落盘历史指标)。 - 历史时序数据:默认
warehouse.store.duckdb.enabled: true、store-path: data/history.duckdb、expire-time: 90d;如需 VictoriaMetrics/QuestDB/GreptimeDB/TDengine 等,将其enabled置true并填连接串。 - 实时监控数据:
warehouse.real-time.memory.enabled: true(内存),可切换 redis。 - 认证(sureness.yml):启用
digest/basic/jwt三种认证;账号存于account:段(见下)。默认示例账号admin口令hertzbeat,本文按规范改为q1w2e3r4。 - 自定义监控/状态页:监控指标模板位于
define/app-*.yml;状态页(Status Page)通过在控制台「状态页」绑定监控并配关联组件构建,数据落库HZB_STATUS_PAGE_*。
演示账号修改位置(实测修改点):config/sureness.yml 的账号段:
account:
- appId: admin
credential: q1w2e3r4
role: [admin]
⚠️ 说明:1.9.0 不在 manager REST 层暴露「改密」接口(
AccountController仅有登录/刷新),改密即改该credential字段并重启生效(本机实测:改后旧口令登录返回code:5 Incorrect Account or Password,新口令q1w2e3r4正常登录)。
八、多方案对比与选择建议
| 方案 | 版本 | 是否需联网 | 安装方式 | 服务托管 | 监听端口 | 优点/缺点 |
|---|---|---|---|---|---|---|
| A 二进制发行包 | 1.9.0 | 需(下载) | tar.gz 解压 + 内部 JDK | 手动/可选 systemd | 1157/1158 | 开箱即用、最快;社区官方渠道(本文之路) |
| B 源码构建 | 1.9.0 | 需(Maven 中央仓库/GitHub) | Maven package | 手动/systemd | 1157/1158 | 可定制编译;耗时、依赖网络 |
| C systemd 托管 | 1.9.0 | 不必 | 叠加在 A/B 之上 | systemd 自启 | 1157/1158 | 生产自启/崩溃自动拉起;需 systemd 真机 |
💡 内网隔离选 A/B(下载后离线部署),可联网且需要自启/看门狗选 A+systemd。
九、注意事项
- JDK 必须是 25+(1.9.0 为 Java 25 编译);用 JDK 11/17 会报
UnsupportedClassVersionError,请改用 1.8.x 分支。 - 默认端口:1157 面板/API、1158 调度、OTLP/gRPC 14317;开防火墙时放行 1157(及若用 14317 采集链路)。
- 内嵌 H2 仅适合单机/小规模:生产多副本或高写入建议外接 MySQL/PostgreSQL + 上卷时序库(见《配置参数详解》篇数据存储段)。
- JVM 堆限制 256–512 MB:本文按 §JVM 专项将堆压到
-Xms256m -Xmx256m,修改文件bin/startup.sh第 92 行JAVA_MEM_OPTS,并以jps -v复核。 - 账号口令:示例
admin/q1w2e3r4,生产务必更换口令并妥善保管(sureness.yml)。
十、常见问题(FAQ)
Q1:./bin/startup.sh 报 netstat: command not found,但仍能听到 1157?
没有安装 net-tools 时,startup.sh 的自检(按端口判断是否已启动)会失败并刷屏,但 Java 进程仍通过 nohup 后台启动。解决:apt-get install -y net-tools,之后 ./bin/startup.sh 才能打印 Service Start Success!。
Q2:启动抛 UnsupportedClassVersionError: has been compiled by a more recent version of the Java Runtime (class file version 69.0)?
JDK 版本过低。1.9.0 需 JDK 25(class 69.0);把内部 JDK 放进 /opt/hertzbeat/java 并重跑 ./bin/startup.sh 即可(本文解法,详见四、4.4)。
Q3:面板能开但登录失败/改口令后旧口令还能进?
HertzBeat 1.9.0 无 manager「改密」REST 接口,改密即改 config/sureness.yml 的 account.credential 并重启(本文已实测:改后旧口令返回 Incorrect Account or Password)。另外请确认 TOKEN 请求头是 Authorization: Bearer <token>(不带 Bearer 会被拒绝)。
Q4:/actuator/prometheus 返回 401?
这些 Prometheus/健康指标端点受 sureness 保护,抓取/浏览需带 Authorization: Bearer <token>;要对接外部 Prometheus 请在《配置参数详解》篇按需调整认证或配置抓取令牌。
Q5:如何让监控产生历史/实时指标数据?
POST /api/monitor 创建成功后按 intervals(ms) 周期自动采集,实例 status:1 即正常。实时数据默认存内存(warehouse.real-time.memory.enabled: true),历史数据默认落 DuckDB(warehouse.store.duckdb)。采集查询走 GET /api/monitor/{id}/metrics/{metric}。
Q6:没有 systemd 的环境下如何让服务常驻?
bin/startup.sh 通过 nohup 把 Java 进程 detach 到后台,本身就是常驻方案;如需崩溃自启再叠加 systemd(方案 C)或进程守护工具。
十一、卸载方式
# 1) 停止服务(若 systemd 托管则先停服务)
cd /opt/hertzbeat && ./bin/shutdown.sh
# 或 systemctl disable --now hertzbeat
# 2) 删除安装目录(含内嵌 H2、DuckDB 数据与日志,请确认已备份)
rm -rf /opt/hertzbeat
# 3) 清理下载的发行包与校验文件
rm -rf /opt/src/apache-hertzbeat-1.9.0-bin.tar.gz*
⚠️ 卸载即删除
/opt/hertzbeat/data/(内嵌 H2hertzbeat.mv.db与 DuckDBhistory.duckdb),请先按《常用 CLI 命令与工具详解》篇导出监控与配置后再清理。
十二、参考链接
- Apache HertzBeat 官网:https://hertzbeat.apache.org/
- 官方二进制下载页:https://dlcdn.apache.org/hertzbeat/1.9.0/
- GitHub 仓库与 Release v1.9.0:https://github.com/apache/hertzbeat/releases/tag/v1.9.0
- 官方安装/启动文档:https://hertzbeat.apache.org/docs/start/install/
- JDK(Temurin)下载:https://adoptium.net/temurin/releases/?version=25