opentsdb特殊字符问题

Opentsdb对特殊字符规范如下:

The following rules apply to metric and tag values:
Strings are case sensitive, i.e. “Sys.Cpu.User” will be stored separately from “sys.cpu.user”
Spaces are not allowed
Only the following characters are allowed: a to z, A to Z, 0 to 9, -, _, ., / or Unicode letters (as per the specification)

代码实现如下:
public final class net.opentsdb.core.Tags
  /**
   * Ensures that a given string is a valid metric name or tag name/value.
   * @param what A human readable description of what's being validated.
   * @param s The string to validate.
   * @throws IllegalArgumentException if the string isn't valid.
   */
  public static void validateString(final String what, final String s) {
    if (s == null) {
      throw new IllegalArgumentException("Invalid " + what + ": null");
    } else if ("".equals(s)) {
      throw new IllegalArgumentException("Invalid " + what + ": empty string");
    }
    final int n = s.length();
    for (int i = 0; i < n; i++) {
      final char c = s.charAt(i);
      if (!(('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') 
          || ('0' <= c && c <= '9') || c == '-' || c == '_' || c == '.' 
          || c == '/' || Character.isLetter(c) || isAllowSpecialChars(c))) {
        throw new IllegalArgumentException("Invalid " + what
            + " (\"" + s + "\"): illegal character: " + c);
      }
    }
  }
解决办法
  1. 从上述代码里可以看到Opentsdb支持自定义允许的特殊字符,isAllowSpecialChars
public final class net.opentsdb.core.TSDB

    if (config.getString("tsd.core.tag.allow_specialchars") != null) {
      Tags.setAllowSpecialChars(config.getString("tsd.core.tag.allow_specialchars"));
    }

所以只需要在opentsdb的配置文件里加上该属性配置就可以,例如 tsd.core.tag.allow_specialchars = : 就将“:”设置为允许的字符了。
很奇怪的在于opentsdb的官方文档里没有列出该配置属性 OpenTSDB Configuration

2、写入opentsdb之前进行数据转换。

    private static String convert(String in) {
        return in == null ? null : in.toLowerCase().replaceAll("[^-_a-z0-9.\\u4e00-\\u9fa5]", "_");
    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
OpenTSDB是一个基于Java的开源时间序列数据库,用于存储和分析大规模的时间序列数据。它是由StumbleUpon开发的,旨在解决海量数据的存储和查询问题OpenTSDB的主要特点包括: 1. 高性能:OpenTSDB使用HBase作为底层存储引擎,具有良好的水平扩展性和高吞吐量,可以处理大规模的数据。 2. 灵活的数据模型:OpenTSDB支持灵活的标签(tag)和指标(metric)的数据模型,可以方便地对数据进行组织和查询。 3. 强大的查询功能:OpenTSDB提供了丰富的查询功能,包括按时间范围、标签过滤、聚合等,可以满足各种复杂的查询需求。 4. 可扩展性:OpenTSDB支持水平扩展,可以通过添加更多的节点来增加存储容量和查询吞吐量。 5. 社区支持:OpenTSDB拥有活跃的开源社区,提供了丰富的文档和示例代码,方便用户学习和使用。 如果你想在Java中使用OpenTSDB,可以通过以下步骤进行: 1. 引入OpenTSDB的Java客户端库:你可以在Maven或Gradle中添加OpenTSDB的依赖,然后进行编译和打包。 2. 配置连接信息:在Java代码中,你需要配置OpenTSDB的连接信息,包括服务器地址、端口号等。 3. 创建数据点:使用Java客户端库,你可以创建时间序列数据点,并设置相应的标签和指标。 4. 写入数据:通过Java客户端库提供的API,你可以将数据点写入OpenTSDB中。 5. 查询数据:使用Java客户端库提供的查询API,你可以执行各种查询操作,获取所需的时间序列数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值