使用Telegraf时控制基数的三种方法
作者:Ignacio Van Droogenbroeck / 产品,用例,开发者
2021年5月20日
导航至
本文将展示我们如何在Telegraf配置中进行一些调整,以保持基数在可控范围内。如果您还不熟悉,Telegraf是InfluxDB的本地和开源插件驱动程序指标收集代理。
如您所知,基数是时间序列数据库中测量、标签、集合、字段和值的组合,而高基数可能会带来挑战。不过别担心——以下是我根据之前SRE经验总结的保持基数在可控范围内的三种方法。
其中之一是根据我们的需求选择收集间隔,我们需要的具体指标以及我们需要它们的时间长度。
让我们更详细地看看这三种调整以及它们是如何帮助我们的。
数据收集间隔
在我们需要重构监控系统时,我们问自己:我们的SLA是什么,我们希望存储数据多长时间?Telegraf的默认间隔是不错的,但对我们来说是否太短了?我们是否需要每10秒从100多台服务器收集数据?我们不需要,根据我们的政策,每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配置中进行一些调整,例如间隔和收集的数据量,以及当时可用的保留和降采样数据,我们能够将基数控制在可接受范围内。您对这些调整有何看法?您还有哪些技巧可以控制基数?请在下面的评论中告诉我们。