On this page
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 命令所需的字段包括:
Name | Data Type | Description | Default | Example |
---|---|---|---|---|
kind | String | 要搜索的 UID 的类型。必须是metrics ,tagk 或tagv 之一 |
tagk | |
expression | String | 要搜索的正则表达式 | 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,然后将返回分配列表。
Name | Data Type | Description | Example |
---|---|---|---|
kind | String | 名称代表的 UID 的类型。必须是metrics ,tagk 或tagv 之一 |
tagk |
name | String | 一个或多个要分配 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。
Name | Data Type | Description | Example |
---|---|---|---|
kind | String | 名称代表的 UID 的类型。必须是metrics ,tagk 或tagv 之一 |
tagk |
name | String | 现有的 UID 名称 | owner |
newname | String | 新名称 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。
Name | Data Type | Description | Example |
---|---|---|---|
kind | String | 名称代表的 UID 的类型。必须是metrics ,tagk 或tagv 之一 |
tagk |
name | String | 现有的 UID 名称 | owner |
Command Format
delete <kind> <name>
Example Command
./tsdb uid delete disk.d0
fsck
UID FSCK 命令将扫描整个 UID 表以查找与名称和 UIDMap 有关的错误。默认情况下,运行将扫描表中的每一列并记录发现的任何错误。在 2.1 版中,可以通过传递“修复”标志来修复表中的错误。扫描期间将跳过 UIDMeta 对象。可能的错误包括:
Error | Description | Fix |
---|---|---|
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
删除给定树的所有分支,冲突,不匹配的数据以及树定义本身(可选)。参数包括:
Name | Data Type | Description | Example |
---|---|---|---|
id | Integer | 要清除的树的 ID | 1 |
definition | Flag | 在 ID 之后添加此 Literals 以删除树的定义以及数据 | definition |
Command Format
treepurge <id> [definition]
Example Command
./tsdb uid treepurge 1