uid

UIDUtil 提供了各种功能来搜索或修改tsdb-uid表中的信息。这包括度量,标签名称和标签值以及 UID 元数据,时间序列元数据和树定义或数据的 UID 分配。

通过命令行使用 UIDUtil:

uid <subcommands> [arguments]

通用 CLI 参数

UIDUtil 特定的参数包括:

Lookup

lookup 命令是uid的默认命令,用于查找分配给名称的 UID 或给定类型的分配给 UID 的名称。

Command Format

<kind> <name>
<kind> <UID>

Example Command

./tsdb uid tagk host

Example Response

tagk host: [0, 0, 1]

grep

grep 子命令对给定的 UID 类型执行正则表达式搜索,并返回与表达式匹配的所有 UID 名称的列表。 grep 命令所需的字段包括:

NameData TypeDescriptionDefaultExample
kindString要搜索的 UID 的类型。必须是metricstagktagv之一 tagk
expressionString要搜索的正则表达式 disk.*write

Command Format

grep <kind> '<expression>'

Example Command

./tsdb uid grep metrics 'disk.*write'

Example Response

metrics iostat.disk.msec_write: [0, 3, -67]
metrics iostat.disk.write_merged: [0, 3, -69]
metrics iostat.disk.write_requests: [0, 3, -70]
metrics iostat.disk.write_sectors: [0, 3, -68]

assign

此子命令用于将 ID 分配给度量,标记名或标记值的新唯一名称。提供一个或多个值列表以分配 UID,然后将返回分配列表。

NameData TypeDescriptionExample
kindString名称代表的 UID 的类型。必须是metricstagktagv之一tagk
nameString一个或多个要分配 UID 的名称。名称不能用引号引起来,并且不能包含空格。owner

Command Format

assign <kind> <name> [<name>...]

Example Command

./tsdb uid assign metrics disk.d0 disk.d1 disk.d2 disk.d3

Example Response

rename

更改已分配的 UID 的名称。如果给定类型的 UID 不存在,将返回错误。

Note

更改 UID 名称后,必须刷新缓存(请参阅/api/dropcaches)或重新启动所有 TSD,以使更改生效。 TSD 不会定期重新加载 UIDMap。

NameData TypeDescriptionExample
kindString名称代表的 UID 的类型。必须是metricstagktagv之一tagk
nameString现有的 UID 名称owner
newnameString新名称 UID 名称server_owner

Command Format

rename <kind> <name> <newname>

Example Command

./tsdb uid rename metrics disk.d0 disk.d0.bytes_read

delete

tsdb-uid表中删除 UID 的 Map。确保所有源不再使用 UID 写入数据,并且已经过去了足够的时间,以便用户不会查询使用 UID 的数据。

Note

删除 UID 之后,它可能仍保留在运行的 TSD 服务器的缓存中。确保删除条目后刷新其缓存。

Warning

删除 UID 不会删除与 UID 相关联的基础数据(我们正在对此进行努力)。对于 Metrics 而言,这是安全的,不会影响查询。但是对于标签名称和值,如果查询扫描包含旧 UID 的数据,则查询将失败并出现异常,因为它无法再找到名称 Map。

NameData TypeDescriptionExample
kindString名称代表的 UID 的类型。必须是metricstagktagv之一tagk
nameString现有的 UID 名称owner

Command Format

delete <kind> <name>

Example Command

./tsdb uid delete disk.d0

fsck

UID FSCK 命令将扫描整个 UID 表以查找与名称和 UIDMap 有关的错误。默认情况下,运行将扫描表中的每一列并记录发现的任何错误。在 2.1 版中,可以通过传递“修复”标志来修复表中的错误。扫描期间将跳过 UIDMeta 对象。可能的错误包括:

ErrorDescriptionFix
Metrics 的最大 ID 为 42,但仅找到 41 个条目。也许 1 个 ID 被删除了?这表明一个或多个 UID 未用于 Map 条目。如果删除了 UID,则此消息是正常的。如果未删除 UID,则这可能表示由于 TSD 自动分配数据而浪费了 UID,而 TSD 的数据 Importing 速度过快。尝试尽可能提前分配 UID。无需修复
我们发现 Metrics 的 ID 为 42,但最大 ID 只有 41!将来的 ID 可能会被双重分配!如果发生这种情况,通常是由于损坏所致,并指示最大 ID 行未正确更新。将最大 ID 行设置为最大检测值
Metrics 的最大 ID 无效:应为 8 个字节表示最大 ID 行中的损坏。尚未解决。
正向 MetricsMap 缺少反向 Map:foo-> 000001如果 TSD 在写入反向 Map 之前崩溃,则可能会发生这种情况,并且由于它们无法查找名称,只会阻止查询使用 UID 针对时间序列执行。解决方法是恢复丢失的反向 Map。
正向 MetricsMap 栏-> 000001 与反向 Map 不同:000001-> foo反向 Map 指向的名称与正向 Map 的名称不同,这种情况很少发生。它将与另一条消息配对。取决于第二条消息
前导 MetricsMap 栏不一致-> 000001 与栏-> foo/foo-> 000001使用正向/反向未命中匹配,可能会将 UID 分配给同一类型的多个名称。如果发生这种情况,则两个不同名称的数据已被写入同一时间序列,并且该数据实际上已损坏。解决方法是删除 Map 到同一 UID 的所有名称的前向 Map。然后,为 UID 提供一个新名称,该名称是带有“ fsck”前缀的先前名称的点分隔连接。例如。在上面的示例中,我们将使用新名称“ fsck.bar.foo”。此名称可用于访问损坏的时间序列中的数据。下次为错误名称写入数据时,将为每个名称分配新的 UID,并创建新的时间序列。
复制前向 MetricsMap 栏-> 000002 和 null-> foo在这种情况下,UID 的使用不止一次,但是反向 Map 不正确。反向 Map 将被恢复,在这种情况下:000002-> bar
反向 MetricsMap 缺少正向 Map:bar-> 000002找到了反向图,但没有向前图。 UID 可能已被删除。删除反向 Map
不一致的反向 MetricsMap000003-> foo vs 000001-> foo/foo-> 000001如果孤立的反向 Map 指向已解析的正向 Map,则会发生此错误。删除反向 Map

Options

  • 修复-尝试根据上表修复错误

  • delete_unknown-删除 UID 表中不属于 OpenTSDB 的所有列

Command Format

fsck [fix] [delete_unknown]

Example Command

./tsdb uid fsck fix

Example Response

INFO  [main] UidManager: ----------------------------------
INFO  [main] UidManager: -    Running fsck in FIX mode    -
INFO  [main] UidManager: -      Remove Unknowns: false    -
INFO  [main] UidManager: ----------------------------------
INFO  [main] UidManager: Maximum ID for metrics: 2
INFO  [main] UidManager: Maximum ID for tagk: 4
INFO  [main] UidManager: Maximum ID for tagv: 2
ERROR [main] UidManager: Forward tagk mapping is missing reverse mapping: bar -> 000004
INFO  [main] UidManager: FIX: Restoring tagk reverse mapping: 000004 -> bar
ERROR [main] UidManager: Inconsistent reverse tagk mapping 000003 -> bar vs 000004 -> bar / bar -> 000004
INFO  [main] UidManager: FIX: Removed tagk reverse mapping: 000003 -> bar
ERROR [main] UidManager: tagk: Found 2 errors.
INFO  [main] UidManager: 17 KVs analyzed in 334ms (~50 KV/s)
WARN  [main] UidManager: 2 errors found.

metasync

该命令将遍历整个数据表,扫描时间序列数据的每一行,并生成丢失的 TSMeta 对象和 UIDMeta 对象,或者在必要时为每种对象类型更新创建的时间戳。在对现有数据启用元跟踪之后,或者如果怀疑某些时间序列可能未正确构建索引,请使用此命令。如果已配置插件,该命令还将把新的或更新的元条目推送到搜索引擎。如果现有元已损坏,则意味着 TSD 无法反序列化对象,它将被新条目替换。

随时运行此命令是安全的,因为它不会破坏或覆盖有效数据。 (除非您以与元数据格式不一致的方式直接在 HBase 中修改列)。该 Util 会将数据表拆分为多个线程处理的块,因此处理器中的内核越多,命令完成的速度就越快。

Command Format

metasync

Example Command

./tsdb uid metasync

metapurge

此子命令将在 UID 表中将所有 TSMeta 和 UIDMeta 对象标记为要删除。这对于将版本从 2.0 降级到 1.x 或仅刷新所有元数据并从metasync开始很有用。

Command Format

metapurge

Example Command

./tsdb uid metapurge

treesync

在 UID 表中的 TSMeta 对象列表中运行,并通过所有已配置和启用的树来处理每个对象,以编译分支。此命令可以随时运行,并且不会影响现有对象。

Command Format

treesync

Example Command

./tsdb uid treesync

treepurge

删除给定树的所有分支,冲突,不匹配的数据以及树定义本身(可选)。参数包括:

NameData TypeDescriptionExample
idInteger要清除的树的 ID1
definitionFlag在 ID 之后添加此 Literals 以删除树的定义以及数据definition

Command Format

treepurge <id> [definition]

Example Command

./tsdb uid treepurge 1