opentsdb中文问题

原创
2017/02/21 16:54
阅读数 1.2K

opentsdb使用的ISO-8859-1编码,写死在代码里。

1、不修改源码

按以下顺序发送3条数据,在ISO-8859-1编码方式下,中文在存储时全都变成?号,所以1和2是不同的metric,3和2就变成相同的metric了:

中文test  ->  ??test

中文1test  ->   ??1test

测试1test  ->   ??1test

opentsdb日志报错:

Caused by: java.lang.IllegalStateException: id=[0, 1, 100] => name=测试1test, already mapped to 中文1test

{"metric":"中文test","timestamp":1487636556848,"value":1,"tags":{"ip":"10.0.0.0","id":"1"}}

{"errors":[],"failed":0,"success":1}

{"metric":"中文1test","timestamp":1487636557848,"value":1,"tags":{"ip":"10.0.0.0","id":"1"}}

{"errors":[],"failed":0,"success":1}

{"metric":"测试1test","timestamp":1487636557848,"value":1,"tags":{"ip":"10.0.0.0","id":"1"}}

java.io.IOException: Server returned HTTP response code: 500

 

 

2、修改源码,强行置成置成中文方式
通过改源码,将ISO-8859-1改为UTF-8。 在源码目录下执行:

perl -pi -e 's|ISO-8859-1|UTF-8|g' `find ./ -type f`

并重新编译,中文数据暂时可以入库。

但是,metric,tagk,tagv 枚举值每个都只能到127个(中文和英文都相同),当枚举值个数超过127个时,就开始报错:
java.lang.IllegalStateException: id=[0, 0, 0, -55] => name=199, already mapped to 126


暂时还未找到中文数据入库的解决方法。

展开阅读全文
加载中
点击加入讨论🔥(2) 发布并加入讨论🔥
打赏
2 评论
0 收藏
1
分享
返回顶部
顶部