日期和时间

查询数据时,OpenTSDB 支持多种日期和时间格式。通过 GUI,CliQuery 工具或 HTTP API 提交的查询支持以下格式。每个查询都需要一个“开始时间”和一个可选的“结束时间”。如果未指定结束时间,则将使用运行 TSD 的系统上的当前时间。

Relative

如果您不知道要请求的确切时间戳,可以提交过去的时间(相对于运行 TSD 的系统上的时间)。相对时间遵循格式<amount><time unit>-ago,其中<amount>是时间单位数,<time unit>是时间单位,例如小时,天数等。例如,如果我们提供1h-ago开始时间 ,而忽略了* 结束时间*,我们的查询将返回从 1 小时前开始的数据到当前时间。可能的时间单位包括:

  • ms-毫秒

  • s-秒

  • m-分钟

  • h-小时

  • d-天(24 小时)

  • w-周(7 天)

  • n-月(30 天)

  • y-年(365 天)

Note

相对时间不代表 leap 秒,leap 年或时区。他们只是从当前时间计算过去的秒数。

Unix 绝对时间

在内部,所有数据都与 Unix(或 POSIX)样式的时间戳关联。 Unix 时间定义为自 1970 年 1 月 1 日 UTC 时间 00:00:00 以来经过的秒数。时间戳表示为正整数,例如1364410924,表示ISO 8601:2013-03-27T19:02:04Z。由于在 OpenTSDB 中存储数据的调用需要 Unix 时间戳,因此在查询中支持该格式是有意义的。因此,您可以在查询中为开始或结束时间提供一个整数。

使用 Unix 时间戳的查询还可以通过简单地附加三个数字来支持毫秒精度。例如,提供开始时间1364410924000和结束时间1364410924250将返回 250 毫秒内的数据。毫秒时间戳也可以提供一个与1364410924.250一样的秒与毫秒分开的时间段。任何具有 13(或 14)个字符的整数都将被视为毫秒时间戳。 10 个字符或更少的字符表示秒。毫秒只能以 3 位数的精度提供。如果您的工具输出的数字超过 3 位,则必须截断或舍入该值。

绝对格式化时间

由于计算头脑中的 Unix 时间非常困难,因此 OpenTSDB 还支持人类可读的绝对日期和时间。支持的格式包括:

  • yyyy/MM/dd-HH:mm:ss

  • yyyy/MM/dd HH:mm:ss

  • yyyy/MM/dd-HH:mm

  • yyyy/MM/dd HH:mm

  • yyyy/MM/dd

yyyy以四位数表示年份,例如2013MM代表一年中的月份,从一月的01到十二月的12dd代表从01开始的月份。 HH以 24 小时格式表示一天中的小时,从0023开始。 mm表示从0059的分钟,而ss表示从0059的秒。所有月份,天,小时,分钟和秒都是单位数字,必须以 0 开头,例如该月的第 5 天必须指定为05。如果没有时间提供数据,系统将假定为当天的午夜。

示例包括2013/01/23-12:50:422013/01/23。格式化时间从运行 TSD 的主机的默认时区转换为 UTC。 HTTP API 查询可以接受用户提供的时区来覆盖本地时区。

Note

使用 CliQuery 工具时,必须使用用短划线分隔日期和时间的格式。这是因为命令行是在空格上分割的,因此如果在时间戳记中放置空格,它将无法正确解析执行。

Time Zones

转换人类可读的时间戳时,OpenTSDB 将从运行 TSD 的系统上配置的时区转换为 UTC。虽然许多服务器都配置为 UTC,但我们建议所有运行 OpenTSDB 的系统都使用 UTC,但有时会使用本地时区。

通过查询字符串对 HTTP API 的查询可以使用适用于运行 TSD 的系统的本地化设置的格式,指定带有时区标识字符串的tz参数。例如,我们可以指定tz=America/Los_Angeles将时间戳从洛杉矶本地时间转换为 UTC。

或者,如果您无法更改系统时区,则可以通过配置文件tsd.core.timezone属性提供替代。