Quick Start

一旦 TSD 启动并运行(遵循Installation指南),您可以按照以下步骤将一些数据导入 OpenTSDB。在存储了一些数据之后,请拉起 GUI 并尝试生成一些图形。

创建您的第一个 Metrics

必须先注册 Metrics,然后才能开始为它们存储数据点。这有助于避免摄取不需要的数据并捕获拼写错误。您可以通过配置启用自动度量创建。要注册一个或多个 Metrics,请调用mkmetric CLI:

./tsdb mkmetric mysql.bytes_received mysql.bytes_sent

这将创建 2 个 Metrics:mysql.bytes_receivedmysql.bytes_sent

另一方面,新标签在首次使用时会自动注册。目前,OpenTSDB 仅允许您使用最多 2 ^ 24 = 16,777,216 个不同的度量标准,16,777,216 个不同的标签名称和 16,777,216 个不同的标签值。这是因为其中的每一个都在 3 个字节上分配了一个 UID。度量标准名称,标记名称和标记值具有其自己的 UID 空间,这就是为什么您可以拥有每种类型的 16,777,216 的原因。每个空间的大小是可配置的,但是现在没有旋钮可以显示此配置参数。因此,请记住,如果您的网站很大,则现在无法使用用户 ID 或事件 ID 作为标记值。

开始收集数据

因此,既然我们有了两个 Metrics,就可以开始向 TSD 发送数据了。让我们写一个小 shell 脚本来从 MySQL 收集一些数据并将其发送到 TSD:

cat >mysql-collector.sh <<\EOF
#!/bin/bash
set -e
while true; do
  mysql -u USER -pPASS --batch -N --execute "SHOW STATUS LIKE 'bytes%'" \
  | awk -F"\t" -v now=`date +%s` -v host=`hostname` \
    '{ print "put mysql." tolower($1) " " now " " $2 " host=" host }'
  sleep 15
done | nc -w 30 host.name.of.tsd PORT
EOF
chmod +x mysql-collector.sh
nohup ./mysql-collector.sh &

每隔 15 秒,脚本将从 MySQL 收集 2 个数据点并将其发送到 TSD。您可以使用较小的睡眠间隔来获得更大的粒度。

该脚本有什么作用?如果您不是 shell 和 awk 脚本的忠实拥护者,那么如何使用它可能并不明显。但这很简单。 set -e命令只是指示 bash 如果任何命令失败均以错误退出。这简化了错误处理。然后,脚本进入无限循环。在此循环中,我们查询 MySQL 以检索其 2 个状态变量:

$ mysql -u USER -pPASS --execute "SHOW STATUS LIKE 'bytes%'"
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| Bytes_received | 133   |
| Bytes_sent     | 190   |
+----------------+-------+

--batch -N标志要求 mysql 命令删除对人类友好的绒毛,因此我们不必自己过滤掉绒毛。然后将输出通过管道传递到 awk,该命令被告知在选项卡-F"\t"上拆分字段,因为 mysql 将使用--batch标志。我们还创建了几个变量,一个名为now` and initialize it to the current timestamp, the other namedhost and set to the hostname of the local machine. Then, for every line, we print put ``mysql.``, followed by the lower\-case form of the first word, then by a space, then by the current timestamp, then by the second word \(the value\), another space, and finally host = and the current hostname\. Rinse and repeat every 15 seconds\. The -w 30 parameter given to nc 的变量只是在与 TSD 的连接上设置超时。请记住,这只是一个示例,实际上,您可以使用 tcollector 的 MySQL 收集器。

如果您没有要监视的 MySQL 服务器,则可以尝试以下方法来从 Linux 服务器收集基本负载 Metrics:

cat >loadavg-collector.sh <<\EOF
#!/bin/bash
set -e
while true; do
  awk -v now=`date +%s` -v host=`hostname` \
  '{ print "put proc.loadavg.1m " now " " $1 " host=" host;
    print "put proc.loadavg.5m " now " " $2 " host=" host }' /proc/loadavg
  sleep 15
done | nc -w 30 host.name.of.tsd PORT
EOF
chmod +x loadavg-collector.sh
nohup ./loadavg-collector.sh &

通过将简单的“ telnet 样式的命令”发送到 TSD,这将在 OpenTSDB 中存储服务器 1 分钟和 5 分钟平均负载的读数:

put proc.loadavg.1m 1288946927 0.36 host=foo
put proc.loadavg.5m 1288946927 0.62 host=foo
put proc.loadavg.1m 1288946942 0.43 host=foo
put proc.loadavg.5m 1288946942 0.62 host=foo

Batch Imports

假设您有一个 cron 作业,该作业每天或每小时处理千兆字节的应用程序日志以提取分析数据。例如,您可能会记录处理请求所花费的时间,您的 cron 作业将计算每 30 秒窗口的平均值。也许您对应用程序处理的两种请求类型特别感兴趣,所以您将为这些请求分别计算平均值,并为其他所有请求类型分别计算平均值。因此,您的 cron 作业可能会生成如下所示的输出文件:

1288900000 42 foo
1288900000 51 bar
1288900000 69 other
1288900030 40 foo
1288900030 59 bar
1288900030 80 other

第一列是时间戳,第二列是该 30 秒窗口的平均延迟,第三列是我们正在讨论的请求类型。如果您在一天的日志 Logging 运行 cron 作业,那么最终将得到 8640 条这样的行。为了将它们导入 OpenTSDB,您需要稍微调整 cron 作业以产生以下格式的输出:

myservice.latency.avg 1288900000 42 reqtype=foo
myservice.latency.avg 1288900000 51 reqtype=bar
myservice.latency.avg 1288900000 69 reqtype=other
myservice.latency.avg 1288900030 40 reqtype=foo
myservice.latency.avg 1288900030 59 reqtype=bar
myservice.latency.avg 1288900030 80 reqtype=other

注意,我们只是将每个数据点与 Metrics 名称(myservice.latency.avg)相关联,并命名代表请求类型的标签。如果每个服务器都有自己的日志,并且分别进行处理,则可能需要向每行添加另一个标签,例如上一节中看到的host=foo标签。这样,除了全面和/或每个请求类型的平均延迟之外,您还可以分别绘制每个服务器的延迟。为了以上述格式(度量标准时间戳记值标记)导入数据文件,只需运行以下命令:

./tsdb import your-file

如果您的数据文件很大,请考虑先将其压缩。这就像将 cron 作业的输出传递到gzip -9 >output.gz一样简单,而不是直接写入文件。 import 命令能够读取 gzip 压缩的文件,并且极大地提高了大批量导入的性能。

Self Monitoring

每个 TSD 都通过简单的 stats 命令导出有关其自身的一些统计信息。您可以收集这些统计信息,并每隔几秒钟将其反馈给 TSD。首先,创建必要的 Metrics:

echo stats | nc -w 1 localhost 4242 \
| awk '{ print $1 }' | sort -u \
| xargs ./tsdb mkmetric

这会向 TSD 请求统计信息(假设它正在 localhost 上运行并正在侦听端口 4242),从统计信息中提取 Metrics 名称并为其分配 UID。然后,您可以使用以下简单脚本收集统计信息并将其存储在 OpenTSDB 中:

#!/bin/bash
INTERVAL=15
while :; do
  echo stats || exit
  sleep $INTERVAL
done | nc -w 30 localhost $1 \
    | sed 's/^/put /' \
    | nc -w 30 localhost $1

这样,您将每 15 秒从 TSD 收集和存储一次统计信息。

创建图

使用上述任何一种方法编写了一些数据后,现在就可以尝试使用该数据创建图形。在您喜欢的浏览器中拉起 GUI。如果您在 localhost 上运行 TSD,只需访问http://127.0.0.1:4242

首先,选择一个 Metrics 并将其放在Metric框中。例如proc.loadavg.1m。键入时,您应该会看到自动完成行弹出,您可以单击其中的任何一条。

然后,单击顶部的From框,然后会出现一个日期 selectors 弹出窗口。从昨天开始选择任何时间,然后单击另一个框。此时,您应该非常简单地看到“正在加载图形..”,然后是实际图形。如果图形为空,则可能未找到最新的数据点,因此请单击(now)链接,页面应刷新。

此初始图将汇总您选择的 Metrics 的所有时间序列。尝试将查询限制为特定主机,方法是在Tags标签旁边的左侧框中添加host作为值(如果尚不存在),然后在右侧框中添加特定主机名(例如foo) 。单击另一个框后,您应该看到带有不同信息的图形重绘。