将StatsD指标发送到Telegraf & InfluxDB入门教程
作者:Steven Soroka / 用例,产品,开发者,入门
2020年9月10日
导航至
为什么选择StatsD?
使用StatsD有很多好理由,并且有许多关于为什么它很棒的文章,例如这些和这些。StatsD简单、占用空间小,拥有强大的客户端库生态系统。它不会使您的应用程序崩溃,并且已成为大规模指标收集的标准。它的工作原理
Telegraf是一个用Go编写的代理,它通过UDP接受StatsD协议指标,然后定期将指标转发到InfluxDB。可以使用许多可用的客户端库中的任何一个从应用程序发送StatsD指标。以下是收集StatsD指标的标准配置为什么使用UDP?
UDP通常被称为“发射后不管”协议。UDP是无连接协议,不等待响应。UDP数据包在不需要响应的情况下发送,不受网络延迟的影响,也不受可能导致连接中断的网络故障的影响。这意味着UDP是有损耗的,但对于指标数据通常是可以接受的。
设置
首先,您需要安装Telegraf。接下来,您需要使用statsd插件设置Telegraf。--sample-config
选项告诉Telegraf输出一个配置文件。--input-filter
和--output-filter
告诉Telegraf要配置哪些插件(StatsD)和输出(InfluxDB)。(注意,如果您使用的是InfluxDB 2.0云或OSS beta,则应使用influxdb_v2;对于2.0之前的本地InfluxDB,则使用influxdb)
$ telegraf --sample-config --input-filter statsd --output-filter influxdb_v2 > telegraf.conf
$ telegraf --config telegraf.conf
配置文件(telegraf.conf)将假设您的InfluxDB实例正在localhost上运行,如果情况不是这样,则需要编辑。还有许多针对StatsD服务器的配置选项,但在此指南中我不会全部介绍,有关更多详细信息,请参阅文档。
发送StatsD指标
默认情况下,Telegraf将开始监听端口8125的UDP数据包。可以使用echo和netcat将StatsD指标发送到它
$ echo "mycounter:10|c" | nc -C -w 1 -u localhost 8125
或者使用您最喜欢的客户端库。
Influx StatsD
由于InfluxDB支持标签,我们的StatsD实现也是如此!向StatsD指标添加标签的方式与它们在行协议中显示的方式相似。
这意味着您可以像下面这样标记您的StatsD指标。这个特定的指标通过service和region标签增加了theuser_login计数器
1次。
user.logins,service=payroll,region=us-west:1|c
就这样!只需以键值格式的逗号分隔的标签列表添加即可。
对于使用StatsD客户端的用户,可以将此附加到桶中。我将使用Python客户端作为示例
>>> import statsd
>>> c = statsd.StatsClient('localhost', 8125)
>>> c.incr('user.logins,service=payroll,region=us-west') # Increment counter
一旦刷新,该指标将在InfluxDB中以所有标记的形式可用。
> SELECT * FROM statsd_user_logins
name: statsd_user_logins
------------------------
time host metric_type region service value
2015-10-27T03:26:40Z tyrion counter us-west payroll 1
2015-10-27T03:26:50Z tyrion counter us-west payroll 1
指标
Telegraf支持所有标准的StatsD指标,以下将详细介绍。
计数器
logins.total:1|c
logins.total:15|c
这是一个简单的计数器,如上述示例中的logins_total指标
将被增加1和15。计数器可以是始终递增的,或者您可以选择使用delete_counters配置选项在刷新时清除它们。
采样
logins.total:1|c|@0.1
告诉StatsD此计数器每1/10的时间被发送采样。在此示例中,logins_total指标
将被增加10。
仪表
current.users:105|g
仪表值会随着每次发送的后续值而更改。最终达到 InfluxDB 的值将是最后记录的值。仪表将保持相同的值,直到发送新的值。您可以选择使用 delete_gauges
配置选项在每个刷新时清除它们。
添加符号可以改变仪表的值,而不是覆盖它
current.users:-10|g
current.users:+12|g
时间与直方图
response.time:301|ms
response.time:301|h
时间用于跟踪某物花费了多长时间。它是跟踪应用程序性能的非常有价值的工具。
当 Telegraf 接收时间度量时,它将它们聚合,并将以下统计信息写入 InfluxDB,有关这些统计信息的更多详细信息可以在 文档 中找到。
stat_name_lower
stat_name_upper
stat_name_mean
stat_name_stddev
stat_name_count
stat_name_percentile_90
采样
response.time:301|ms|@0.1
时间,就像计数器一样,也可以进行采样。这将让 Telegraf 知道这个时间只在每 10 次运行中记录一次。
注意
Telegraf 会按到达顺序聚合统计信息,并限制缓存的计时数量以保持其内存占用低。默认情况下,Telegraf 在计算百分位数时会为每个统计信息保留 1000 个计时。这可以通过百分位数限制配置选项进行调整。
集合
unique.users:100|s
集合可以用于计数唯一发生次数。在上面的例子中,unique.users 度量将增加 1,然后无论发送多少次值 100,都不会再增加。
模板
插件支持指定模板,以使用关键字将 statsd 存储桶转换为 InfluxDB 度量名称、标签和字段。这些可以用于指定要在度量名称中使用的存储桶的部分。模板中的其他单词用作标签名称。例如,以下模板
templates = ["cpu.* measurement.field.region"]
这意味着对于以 cpu. 开头的每个指标,您打算将存储桶名称拆分为三个部分,第一个属于度量名称,第二个属于字段,最后一个将拆分出来,并转换为名为“region”的标签。如果原始指标看起来像这样
cpu.load.us-west:100|g
在 InfluxDB 中创建的指标将看起来像这样
cpu,metric_type=gauge,region=us-west load=100
其中度量名称是 cpu_load
,并且它有一个名为 region 的标签,其值为 us-west。
这为您提供了对将 StatsD 存储桶名称映射到 influxdb 中的指标和标签的详细控制。
此外,通过 在 GitHub 上打开问题 通知我们您想看到的内容。
下一步
- 下载 Telegraf
- 开始免费试用 InfluxDB Cloud