opentsdb本身不存储数据,仅是hbase上层时序查询引擎;90%收不到指标因hbase未运行、zookeeper连不通或zookeeper.quorum/table.name配置错误,需先确认hbase和zookeeper就绪互通,并启用hbase.regionserver.thrift.framed=true、严格同步时间、匹配表名namespace。

OpenTSDB 本身不存数据,它只是 HBase 的上层查询引擎;装了 OpenTSDB 却收不到指标,90% 是因为 HBase 没跑起来、ZooKeeper 连不通,或配置项写错——不是 OpenTSDB 有问题,是底座没搭稳。
确认 HBase 和 ZooKeeper 已就绪且互通
OpenTSDB 启动卡在 Failed to connect to HBase 或静默无监听(netstat -tlnp | grep 4242 看不到进程),先别碰 tsdb.conf,回头检查底层依赖:
- 用
echo "status" | hbase shell -n确认 HBase master/regionserver 已 ready;若报错,检查HBASE_HOME和JAVA_HOME是否指向同一套 JDK(Java 8/11 不混用) - RegionServer 必须启用
hbase.regionserver.thrift.framed=true(默认 false),否则 OpenTSDB async client 无法通信;改完hbase-site.xml要重启 RegionServer -
zookeeper.quorum必须填 ZooKeeper 集群真实地址(如zk1:2181,zk2:2181,zk3:2181),不能写localhost;所有节点需运行chronyd或ntpd保证时间同步,偏差 >1s 会导致 HBase session 失效 - 用
telnet zk1 2181+stats命令验证 ZooKeeper 可达且健康
正确创建 HBase 表并关闭压缩(避免 LZO 依赖)
OpenTSDB 默认建表脚本启用 LZO 压缩,但多数环境没装 LZO codec,直接执行 create_table.sh 会失败或表不可写:
- 进入
opentsdb/src/目录,编辑create_table.sh,在开头显式设置:COMPRESSION=NONE和HBASE_HOME=/path/to/hbase - 确保
HBASE_HOME指向实际 HBase 安装路径,并且该路径下bin/hbase可执行 - 执行
env COMPRESSION=NONE HBASE_HOME=/opt/hbase ./create_table.sh;成功后进hbase shell执行list,应看到tsdb、tsdb-uid等 4 张表 - 如果用的是 HBase 2.4.x,注意表名默认带 namespace(如
default:tsdb),后续tsdb.conf中的table.name必须匹配,否则写入静默丢弃
tsdb.conf 里最关键的两个配置项
zookeeper.quorum 和 table.name 配错,OpenTSDB 会完全不启动(无报错、无端口监听),这是最常踩的坑:
-
tsd.storage.hbase.zk_quorum:必须和 HBase 的hbase.zookeeper.quorum完全一致,IP 一个都不能少,端口不能省略(如zk1:2181,zk2:2181) -
tsd.storage.hbase.table:值必须与create_table.sh实际创建的表名一致;HBase 2.4+ 默认使用 namespace,所以通常填default:tsdb而非仅tsdb -
tsd.core.auto_create_metrics建议设为true,否则写入未预定义 metric 会直接拒绝(如sys.cpu.user) -
tsd.network.port默认 4242,确保防火墙放行(firewall-cmd --add-port=4242/tcp --permanent)
启动前务必验证 Java/HBase 客户端 ABI 兼容性
启动时抛 NoClassDefFoundError: org/apache/hadoop/hbase/client/AsyncConnectionBuilder,大概率是 Java 版本与 HBase 客户端二进制不兼容:
- OpenTSDB 2.4.1 官方预编译包已绑定 HBase 2.4.9 客户端,推荐直接下载
opentsdb-2.4.1.tar.gz,不要自己mvn package - 若必须自编译,
pom.xml中必须锁定hbase-client版本(如2.4.9),并用mvn clean package -DskipTests -Dhbase.version=2.4.9 - 启动脚本中
JAVA_HOME和HBASE_HOME必须指向同一套 JDK + HBase;HBase 若用 Java 11 编译,OpenTSDB 就不能用 Java 8 启动 - 首次启动前,先运行
./build/tsdb mkmetric --force sys.cpu.user测试写入通路;失败时重点看日志里是否含Unsupported major.minor version(Java 版本错)或ClassNotFoundException(jar 包缺失)
最易被忽略的是:HBase 表名带 namespace、ZooKeeper 地址少写一个 IP、RegionServer 没开 thrift.framed —— 这三处任一出错,OpenTSDB 都不会报明确错误,只会“假装没启动”。建议每次改完配置,都重走一遍 create_table.sh → tsdb mkmetric → 日志检查 链路。











