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
暂时还未找到中文数据入库的解决方法。