OpenTSDB Code Reading: 3. Commands

Class: net.opentsdb.tsd.RpcManager

该类维护了HTTP/RPC Protocol下指令,以及具体执行对象的信息。

Commands

Write

put

telnet: put
http-api: api/put
code: class PutDataPointRpc

qualifier 格式

Long比特位格式:
bit[0:2] 保存value length
bit[3] Float Flag
毫秒时间戳
bit[0:5] 保存flag
bit[6:27] 保存真实时间戳
bit[28:31] 全为1,java为大端,该信息保存在bytes[0]位置
秒时间戳
bit[0:3] 保存flag
bit[4:] 保存真实时间戳

秒与毫秒时间戳的区分
1
2
/** Mask to verify a timestamp on 4 bytes in seconds */
public static final long SECOND_MASK = 0xFFFFFFFF00000000L;

timestamp不超过~SECOND_MASK,则认为时间戳单位为秒。否则为毫秒。
参考代码:link

append模式与普通模式

append模式下,统一小时内的数据都追加到同一列中,qualifer为0x050000,共三字节。

1
2
3
4
5
6
7
8
9
10
11
// File: AppendDataPoints.java
// Line: 41
public class AppendDataPoints {
private static final Logger LOG = LoggerFactory.getLogger(AppendDataPoints.class);

/** The prefix ID of append columns */
public static final byte APPEND_COLUMN_PREFIX = 0x05;

/** The full column qualifier for append columns */
public static final byte[] APPEND_COLUMN_QUALIFIER = new byte[] {
APPEND_COLUMN_PREFIX, 0x00, 0x00};

References:

compaction

class:

  • net.opentsdb.core.CompactionQueue
  • net.opentsdb.core.CompactionQueue.Compaction
  • net.opentsdb.core.CompactionQueue.ColumnDatapointIterator

非append模式下,每次有新数据写入,就会将rowkey插入到一个CompactionQueue,然后定期处理,该对象是一个Sorted Set,插入时有去重。

CompactionQueue初始化时会启动一个thread处理任务。当前时间 - baseTime(rowkey) > 3600秒,则会进行处理。

Read

Stats

telnet: stats
http-api: api/stats
http-ui: stats
code: class StatsRpc

class: net.opentsdb.stats.StatsCollector
StatsCollector是一个抽象基类,接口实现中初始化一个StatsCollector类型对象,然后在各组件中通过调用collectStats()接口收集状态信息。
StatsCollector默认内部记录统计信息的格式为:

1
stats-name timestamp value tagk=tagv tagk=tav...

返回给用户的,没记录一条信息就会调用StatsCollector::emit(record-str)函数,子类实现emit函数,完成格式的状态。

Drop Caches

telnet: dropcaches
http-api: api/dropcaches
http-ui: dropcaches
code: class DropCachesRpc

metrics/tagk/tagv各对应一个UniqueId Instance,该类内部有 name <-> id 映射关系的缓存,该接口清空这三个对象内部缓存。code link

Version

telnet: version
http-api: api/version
http-ui: version
code: class RpcManager.Version

获取实例的版本信息。

1
2
3
4
5
6
7
8
9
10
11
{
"short_revision": "",
"repo": "/root/opentsdb-2.3.0/build",
"host": "***********",
"version": "2.3.0",
"full_revision": "",
"repo_status": "MODIFIED",
"user": "root",
"branch": "",
"timestamp": "1521782831"
}

通过脚本build-aux/gen_build_data.sh生成BuildData.java文件,运行时读取该类的信息。

Exit

telnet: exit
code: class RpcManager.Exit

关闭连接。

Help

telnet: help
code: class RpcManager.Help

返回telnet_commands列表。

HomePage

http-ui: ""
code: class RpcManager.HomePage

UI主页。

List Aggregators

http-api: api/aggregators
http-ui: aggregators
code: class ListAggregators

显示支持的聚合方式列表。

Static File

http-ui: favicon.ico|s
code: class StaticFileRpc

返回 /s/[path/to/static/file] s之后的uri部分对应的静态文件。

Logs

http-ui: logs
code: class LogsRpc

该接口有两类功能:

  1. 获取日志信息,默认plain text格式,可加参数json。
  2. 设置logger日志等级,参数 level, logger。
    level参数取值

Graph

http-ui: q
code: class GraphHandler

Suggest

http-api: api/suggest
http-ui: suggest
code: SuggestRpc

It's used for auto-complete entries and does not support wildcards.

输入参数:

  • type: metrics, tagk, tagv. required.
  • q: optional, default "".
  • max: optional, default 25.

Annotation

http-api: api/annotation|api/annotations
code: class AnnotationRpc

Show Config

http-api: api/config
code: class RpcManager.ShowConfig

两种请求

  1. api/config
    返回运行实例的配置项。
  2. api/config/filters
    返回所有的tag value filters信息。

Query

http-api: api/query
code: class QueryRpc

Reference:

http-api: api/search
code: class SearchRpc

Reference:

Serializers

http-api: api/serializers
code: class Serializers

显示支持的序列化方式列表。

Tree

http-api: api/tree
code: class TreeRpc

Reference:

  1. /api/tree
  2. /api/tree/branch
  3. /api/tree/rule
  4. /api/tree/rules
  5. /api/tree/test
  6. /api/tree/collisions
  7. /api/tree/notmatched

UniqueId

http-api: api/uid
code: class UniqueIdRpc

该接口有如下子功能:

  1. assign
    给name分配uid。

    1
    /api/uid/assign?metric=nameA,nameB&tagk=nameC,nameD&tagv=nameE,nameF
  2. uidmeta
    2.1. GET
    获取uid meta信息

    1
    /api/uid/uidmeta?type=tagk&uid=000013

    2.2. POST
    设置meta信息。
    2.3. DELETE
    删除meta信息。

  3. tsmeta
    Handles CRUD calls to individual TSMeta data entries
  4. rename
    更改uid对应的名字,一次只能更新一个。
    1
    /api/uid/rename?tagk=OldName&name=NewName

DieDieDie

telnet: diediedie
http: diediedie
code: class DieDieDie

关闭服务端。