使用 Telegraf 时控制基数的三个方法
作者:Ignacio Van Droogenbroeck / 产品, 用例, 开发者
2021 年 5 月 20 日
导航至
本文将展示我们如何通过对 Telegraf 配置进行一些调整来控制基数。如果您还不熟悉 Telegraf,Telegraf 是 InfluxDB 的原生开源插件驱动的指标收集代理。
如您所知,基数是时序数据库中度量 (measurements)、标签 (tags)、集合 (sets)、字段 (fields) 和值 (values) 的组合,高基数可能是一个挑战。不过不用担心,这里有三种方法(基于我之前的 SRE 经验)来控制基数。
其中一种方法是根据我们的需求、我们需要的特定指标以及我们需要它们的时间长度来选择间隔收集。
让我们仔细看看这三个调整以及它们是如何提供帮助的。
数据收集间隔
当我们需要重新架构监控系统时,我们问自己:我们的 SLA 是什么?我们希望将数据存储多久?Telegraf 的默认间隔可以,但对我们来说是否太短了?我们需要来自 100 多台服务器每 10 秒发送一次的数据吗?我们不需要,根据我们的策略,每 60 秒接收一次数据就足够了。因此,这是我们首先调整的事情之一。
这是我们针对此调整的 Telegraf 配置。
[agent]
interval = "60s"
round_interval = true
metric_batch_size = 1000
metric_buffer_limit = 10000
collection_jitter = "0s"
flush_interval = "60s"
flush_jitter = "0s"
precision = ""
debug = false
quiet = false
logfile = ""
hostname = ""
omit_hostname = false
调整间隔是控制基数的好方法,但不是唯一的方法。让我们看看团队(和我自己)最喜欢的方法,那就是……
过滤指标
过滤指标是控制基数的另一种好方法;有时,根据我们的需求和场景,我们不需要输入插件可以提供的所有指标。看看当我们运行 Mem Telegraf 输入插件时收集的所有这些字段。
active (integer, Darwin, FreeBSD, Linux, OpenBSD)
available (integer)
available_percent (float)
buffered (integer, FreeBSD, Linux)
cached (integer, FreeBSD, Linux, OpenBSD)
commit_limit (integer, Linux)
committed_as (integer, Linux)
dirty (integer, Linux)
free (integer, Darwin, FreeBSD, Linux, OpenBSD)
high_free (integer, Linux)
high_total (integer, Linux)
huge_pages_free (integer, Linux)
huge_page_size (integer, Linux)
huge_pages_total (integer, Linux)
inactive (integer, Darwin, FreeBSD, Linux, OpenBSD)
laundry (integer, FreeBSD)
low_free (integer, Linux)
low_total (integer, Linux)
mapped (integer, Linux)
page_tables (integer, Linux)
shared (integer, Linux)
slab (integer, Linux)
sreclaimable (integer, Linux)
sunreclaim (integer, Linux)
swap_cached (integer, Linux)
swap_free (integer, Linux)
swap_total (integer, Linux)
total (integer)
used (integer)
used_percent (float)
vmalloc_chunk (integer, Linux)
vmalloc_total (integer, Linux)
vmalloc_used (integer, Linux)
wired (integer, Darwin, FreeBSD, OpenBSD)
write_back (integer, Linux)
write_back_tmp (integer, Linux)
很多,对吧?问问自己:您需要所有这些值吗?我们不需要,因为对我们来说重要的数据是 used_percent 和 available。
对于其他输入插件,我们也问了自己同样的问题。因此,我们过滤并仅收集对我们重要的数据,并且我们积极监控。我们的配置如下所示
[[inputs.cpu]]
percpu = true
totalcpu = true
collect_cpu_time = false
report_active = false
fieldpass = ["usage_guest", "usage_system", "usage_idle"]
[[inputs.disk]]
ignore_fs = ["tmpfs", "devtmpfs", "devfs", "overlay", "aufs", "squashfs"]
fieldpass = ["used, "free"]
[[inputs.diskio]]
fieldpass = ["read_bytes", "write_bytes", "read_time", "read_write", "read", "writes"]
[[inputs.mem]]
fieldpass = ["used_percent", "available"]
[[inputs.net]]
fieldpass = ["bytes_sent", "bytes_recv", "err_in", "err_out", "drop_in", "drop_out"]
[[inputs.processes]]
fieldpass = ["running", "zombie", "sleeping", "total"]
[[inputs.swap]]
fieldpass = ["total", "used", "free"]
[[inputs.system]]
fieldpass = ["load1", "load15", "load5", "uptime"]
此配置将收集的字段从 109 个减少到 30 个。数据收集量减少了 72% 以上。
我们应用并帮助控制基数的另一个策略是……
保留策略和降采样
在 InfluxDB 中自定义数据库保留策略是控制基数的好方法。再次问问自己,您是否需要三年的数据。您会查询三年前运行的服务器的磁盘使用情况吗?甚至是一年前?
在我们的案例中,我们根据 PCI 合规性和我们的内部策略设置了数据的生命周期。我们需要保留有关我们系统的信息一年。为了立即分析,我们需要保留最近 14 天的数据。因此,我们架构了我们的监控系统,在我们的主存储桶中存储了过去 14 天的数据,并且每隔相同的天数,我们将旧数据转储到另一个保留策略为一年的存储桶中。
总结...
如您所见,通过对 Telegraf 配置进行一些调整,例如间隔和我们收集的数据量,加上当时可用的保留和降采样数据,我们能够控制基数。您如何看待这些调整,您还有哪些其他技巧来控制基数?请在下面的评论中告诉我们。