搜索

InfluxDB(3):Telegraf基本使用


发布时间: 2022-11-24 18:41:00    浏览次数:44 次

Telegraf简介

Telegraf是一个基于插件的开源指标采集工具。本身是为InfluxDB(一款时序数据库)量身打造的数据收集器,但是它过于优秀,能够将抓取的数据写到很多地方,尤其在时序数据库领域,很多时序数据库都能够与它配合使用。通常,它每隔一段时间抓取一批指标数据(比如机器的CPU使用情况,磁盘的IO,网络情况,MySQL服务端的的会话数等等)并将他们发送到时序数据库、消息队列中或者自定义导出到某个地方。供下游的应用处理(比如报警)。Telegraf也能够对外提供一个服务,等待客户端推送数据。

它与logstash类似,只不过logstash是收集日志的。telegraf是收集指标的。

官方提供了300多个可选的插件,另外Telegraf是易于拓展的,如果官方的插件无法满足你的需求,你随时可以在Telegraf的基础上写出自己的插件。

安装部署Telegraf

官方下载页面:https://portal.influxdata.com/downloads/

我的服务器是centos的,所以选择centos安装:

image-20221122111050301

# influxdb.key GPG Fingerprint: 05CE15085FC09D18E99EFB22684A14CF2582E0C5
cat <<EOF | sudo tee /etc/yum.repos.d/influxdata.repo
[influxdata]
name = InfluxData Repository - Stable
baseurl = https://repos.influxdata.com/stable/\$basearch/main
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
EOF

sudo yum install telegraf -y

启动telegraf:

systemctl start telegraf
systemctl status telegraf

image-20221122111308865

极简入门

示例1:收集cpu时序数据

创建一个目录,专门放telegraf的配置文件。

mkdir -p /opt/module/telegraf_conf

vim /opt/module/telegraf_conf/example01.conf

#输入以下内容
[agent]
  interval = "3s"

[[inputs.cpu]]
  percpu = true
  totalcpu = true
  collect_cpu_time = false
  report_active = false
  core_tags = false

[[outputs.file]]
  files = ["stdout"]

配置文件内容是每隔3S采集一次CPU监控信息,并把信息输出到linux标准输出(控制台)中。

运行,观察控制台输出:

telegraf --config /opt/module/telegraf_conf/example01.conf

image-20221122112200099

基本说明

配置文件:

example01.conf配置文件涉及到3个配置块。

[ agent ] 这里面是一些涉及全局的配置。此处我们设置interval="3s",意思是让配置文件中的所有input插件每隔3秒去采集一次指标。interval的默认值是10秒。

[[ inputs.cpu ]] 这是一个input输入组件,这里的配置是说我们导出的指标会包含每一个CPU核的使用情况,而且还包含所有CPU总的使用情况。

[[ outputs.file ]] 这是一个output输出组件,这里我们用了一个名为file的输出组件,不过files参数设为了 stdout (标准输出)也就是控制台,这样程序运行起来我们应该可以看到数据打印在控制台上。

控制台输出内容:

首先输出的是Telegraf进程的描述信息:

image-20221122112603387

(1)当前Telegraf的版本号为1.23.2

(2)加载的input插件列表(目前就1个):cpu

(3)加载的aggregator插件列表(目前没有)

(4)加载的processors插件列表(目前没有)

(5)加载的output插件列表(目前就1个):file

(6)Tags enable,开启了全局的标签集,全局的指标数据都会加上host=wj-server这个标签

(7)agent Config,全局配置

  • Interval : 3s,所有的input组件每3s采集一次指标数据,

  • Quiet:false,不使用安静模式运行。

  • Hostname:"wj-server",机器名称wj-server

  • Flush Interval:10s 所有的output组件每10s输出一次指标数据。所以,telegraf运行后,你应该每隔10秒,看到控制台上有一批输出。

数据输出:

在Telegraf的配置内容输出完毕后,我们可以看到一堆密密麻麻的数据。你会发现它不像json,也不像csv。这其实是Telegraf内置的数据结构,叫做InfluxDB行协议。

关于InflushDB行协议可参考:InfluxDB(2):行协议

示例2:启用处理插件

接下来,我们在example01.conf的基础上稍作改进,编写一个新的配置文件example02.conf。

vim /opt/module/telegraf_conf/example02.conf

[agent]
  interval = "3s"
  flush_interval = "5s"

[global_tags]
  user="wj"

[[inputs.cpu]]
  percpu = true
  totalcpu = true
  collect_cpu_time = false
  report_active = false
  core_tags = false

[[processors.converter]]
  [processors.converter.tags]
    measurement = ["cpu"]

[[outputs.file]]
  files = ["stdout"]

运行telegraf:

telegraf --config /opt/module/telegraf_conf/example02.conf

image-20221122142348341

可以观察到,输出的行的测量名称变了。(CPU标签里面的值替换成测量名称)

image-20221122143238828

插件文档:Plugin directory | Telegraf 1.24 Documentation (influxdata.com)

首先注意,如果你正在使用Telegraf的1.23版本,那么你看插件文档的时候,也应该去看1.23版本的文档。这是因为Go语言开发的项目,会把整个项目涉及的东西编译到一个单独的二进制可执行文件中。

而且这个可执行文件里面写的全部都是本地码(native-code),不需要专门的Go语言执行环境,操作系统环境直接可以让它运行起来。

介于此,Telegraf的插件和框架核心代码是编译在一块的,它们都在一个可执行文件中。

image-20221122144858197

因此v1.23中特有的插件,前面的版本就不会有,除非把旧版本的Telegraf源码下下来,然后把想要的插件源码写进去再重新编译。

注意!上面说的是Telegraf的内置插件,Telegraf还为我们留了一个exec Input插件,通过这个插件,我们可以和外部的捕捉指标数据的插件进行集成.

Telegraf命令行用法

Telegraf安装好之后,就可以使用telegraf命令了。

用法:

telegraf [ 命令 ]
telegraf [ 选项 ]

命令

config : 将完整的示例配置打印到标准输出(stdout 控制台)

version : 将版本号打印到标准输出(stdout 控制台)

选项

参数 描述
--aggregator-filter <filter> 筛选要启用聚合器,分隔符为
--config <file> 要加载的配置文件
--config-directory <directory> 包含其他配置文件的目录。其中的配置文件名需要以.conf收尾
--deprecation-list 打印所有已弃用的插件或插件选项。
--watch-config 在本地的配置文件更改时,重启Telegraf进程,监听方式使用的是文件系统的通知或者轮询文件。--watch-config功能默认是关闭的。
--plugin-directory <directory> 插件目录,会以递归的方式搜索这个目录,来找到可用的插件,找到的插件会被加载。插件文件的后缀是.so
--debug 启动debug级别的日志文件
--input-filter <filter> 过滤要启用的输入插件,分隔符为 : 。
--input-list 打印可用的输入插件
--output-filter 过滤要启用的输出插件,分隔符为 : 。
--output-list 打印可用的输出插件
--pidfile <file> 要将pid写入到哪个文件。
--pprof-addr <address> pprof地址,默认情况下禁用。pprof是Go中分析程序运行性的工具,它能够提供各种性能数据。比如,内存分配情况的采样信息、对上内存的使用情况采样信息等。
--processor-filter <filter> 筛选要启用的filter插件,插件之间使用 : 分隔。
--quiet 在安静模式下运行
--section-filter <filter> 这个参数和config命令一起使用才有意义。过滤要打印的配置段(agent,global_tags,outputs,processors,aggregators和inputs)。配置段之间用 : 分隔。
--sample-config 打印完整的示例配置(和config命令的作用一样)
--once 收集一次指标,写出,然后退出进程。
--test 收集一次指标并打印一次,然后退出进程。
--test-wait telegraf进程在test或once模式下,进行一次input所需要的秒数。
--usage <plugin> 打印插件的用法。(比如:telegraf --usage mysql)
--version 打印Telegraf的版本号

运行单个的Telegraf配置文件并打印到控制台:(只打印一次,测试配置文件内容)

telegraf --config /opt/module/telegraf_conf/example02.conf --test

image-20221122150807836

生成仅定义了CPU输入和InfluxDB输出的配置文件:

telegraf --input-filter cpu --output-filter influxdb config

运行一个配置文件中的所有插件:

telegraf --config telegraf.conf

运行Telegraf时开启pprof:

telegraf --config /opt/module/telegraf_conf/example02.conf --pprof-addr localhost:6060
image-20221122153801958

使用远程配置:

Telegraf的--cofnig参数还能指定一个URL,让telegraf通过网络远程获取配置文件。

telegraf --config http://localhost:8080/example01.conf

获取配置文件,而且数据也能够正常输出,但是不能监听配置的变化。

输出示例配置文件:

telegraf --input-filter cpu:mem --processor-filter converter --aggregator-filter minmax --output-filter file config

image-20221122152337651

配置文件参数

Agent配置

配置名 直 译 解释
interval 间隔 所有的input组件采集数据的间隔时间
round_interval 间隔取整 将采集的间隔时间取整。比如,如果interval设置为10s,但我们在1分02秒启动了telegraf服务,那么采集的时间会取整到1分10秒,1分20秒,1分30秒
metric_batch_size 指标 批大小 telegraf一批次从output组件向外发送数据的大小,网络不稳定时可以减小此参数。
metric_buffer_limit 指标 缓冲区 telegraf会为每个output插件创建一个缓冲区,来缓存指标数据,并在output成功将数据发送后,将成功发送的数据从缓冲区删除。所以,metriac_buffer_limit参数应该至少是metric_batch_size参数的两倍
collection_jetter 采集抖动 这个参数会在采集的时间点上加一个随机的抖动,这样可以避免很多插件同时查询一些消耗资源的指标,从而对被观测的系统产生不可忽视的影响。
flush_interval 刷新间隔 所有output的输出间隔,这个参数不应该设的比interval(所有input组件的采集间隔)小。最大的实际发送间隔将会是
flush_jitter 刷新抖动 对output的输出时间加上一个随机的抖动,这主要是为了避免大量的Telegraf实例在同样的时间同时执行写入操作,出现较大的写入峰值。比如,flush_jitter设为5s,flush_interval设为10s意味着会在10~15秒的时候进行一次输出。
precision 精度 精度配置确定从输入插件接收的点中保留多少时间戳精度。所有传入的时间戳都被阶段为给定的精度。然后Telegraf用零填充截断的时间戳以创建纳秒时间戳,输出插件将以纳秒为单位发出时间戳。有效的精度为ns,us,ms和s。 例如:如果精度设置为ms,则纳秒时间戳1480000000123456789将被截断为1480000000123毫秒精度,然后用0填充以生成新的,不太精确的纳秒时间戳1480000000123000000。输出插件不会进一步更改时间戳。如果是服务型的输出插件会忽略这个设置。
logfile 日志文件 自定义的日志名称,
debug 调试 使用debug模式运行Telegraf
quiet 安静 安静地运行Telegraf,只会提示错误信息
logtarget 日志目标 该配置用来空值日志的目标。它可以是"file","stderr"之一,如果是在Windows系统上,它还可以设为"eventlog"。设置为"file"时,输入文件由 logfile 配置项决定。
logfile 日志文件 指定logtarget指定为"file"时的日志文件名。如果设置为空,那么日志会输出到stderr上。
logfile_rotation_interval 日志轮转间隔 日志轮转间隔,多长时间开启一个新的日志文件,如果设置为0,那么就不按时间进行轮转。
logfile_rotation_max_size 日志轮转大小 当正在使用的日志文件的大小超过该值时,开启一个新的日志文件。当设置为0,表示不按照日志文件的大小进行日志轮转。
logfile_rotation_max_archives 最大轮转存档数 最大的日志归档数量,每一次日志轮转发生时,都会产生一个新的正在使用的日志文件,和一个归档(旧的不再使用的日志文件)
log_with_timezone 日志时区 设置日志记录要使用的时区,或者设为"local"即为本地时间。
hostname 主机名 覆盖默认的主机名,如果不设该值,那么os.Hostname( )的返回值。(os.Hostname)是Go语言标准库中的方法,可以获取当前机器的名称。
omit_hostname 忽略主机名 telegraf输出的指标数据中,有一个默认的

Input 输入插件通用配置

配置名 直译 解释
alias 别名 给一个input插件实例进行命名。
interval 间隔 单个Input组件收集指标的间隔时间,插件中的interval配置比全局的interval配置的优先级要高。
precision 精度 单个Input组件的时间精度,覆盖[agent]中的配置。精度配置确定从输出插件接收的点中保留多少时间戳精度。所有传入的时间戳都被阶段为给定的精度。然后Telegraf用零填充截断的时间戳以创建纳秒时间戳,输出插件将以纳秒为单位发出时间戳。有效的精度为ns,us,ms和s。 例如:如果精度设置为ms,则纳秒时间戳1480000000123456789将被截断为1480000000123毫秒精度,然后用0填充以生成新的,不太精确的纳秒时间戳1480000000123000000。输出插件不会进一步更改时间戳。如果是服务型的输出插件会忽略这个设置。
collection_jitter 采集抖动 单个Input组件的采集抖动
name_override 重命名 覆盖原来的指标名称,默认值为input组件的名称
name_prefix 名称前缀 指定要附加到度量值名称的前缀
name_suffix 名称后缀 指定要附加到度量值名称的后缀
tags 标签集 给当前input数据添加新的标签集。

Output 输出插件通用配置

配置名 直译 解释
alias 别名 给一个output插件起一个别名
flush_interval 刷新间隔 单个output插件的输出间隔(覆盖全局配置)
flush_jitter 刷新抖动 单个output插件的输出时间抖动(覆盖全局配置)
metric_batch_size 指标批次大小 一次最多发送多少条数据(会覆盖全局配置)
metric_buffer_limit 指标缓冲区上限 未发送数据的缓冲区(会覆盖全局配置)
name_override 重命名 覆盖原来的指标名称,默认值为output的名称(我怀疑官网说错了)
name_prefix 名称前缀 指标名称的前缀
name_suffix 名称后缀 指标名称的后缀

Aggregator 聚合插件通用配置

配置名 直译 解释
alias 别名 给一个Aggregator插件的实例命名
period 期间 聚合器对从now-period 到now 之间的数据进行聚合。
delay 延迟 聚合时进行一个小的延迟,防止在对时间戳为1000的数据进行聚合时,上游还在正在发送时间戳为1000的数据
grace 宽限 迟到多久的数据可以进入下一个聚合周期。
drop_original 删除源 默认为false,如果设置为true,袁术的指标数据就会从流水线上删除,不会发给下游的output插件
name_override 名称覆盖 给数据的指标名称重新命名
name_prefix 名称前缀 给指标名称加一个前缀
name_suffix 名称后缀 给指标名称加一个后缀
tags 标记 添加额外的标签集

Processor 处理插件通用配置

配置名 直译 解释
alias 别名 给Processor插件的示例起一个名字
order 顺序 这是处理器的执行顺序,如果没有制定,那么执行器的顺序就是随机的。注意!不是按照配置文件的先后顺序来的,而是随机。

Metric filtering 指标过滤器通用配置

配置名 直译 解释
namepass 名称通过 一个glob模式的字符串数组,仅有measurement名称与这个配置的参数能匹配的指标数据可以进入此插件。
namedrop 名称删除 一个glob模式的字符串数组,能匹配上measurement的数据直接删除。
fieldpass 字段通过 一个glob模式的字符串数组,只有能匹配上的字段才能通过
fielddrop 字段删除 一个glob模式的字符串数组,如果匹配上了就删除这个资源。
tagpass 标签通过 一个glob模式的字符串数组,tag能匹配上的数据才能通过
tagdrop 标签删除 一个glob模式的字符串数组,tag能匹配上的数据会被删除
taginclude 标签包含 一个glob模式的字符串数据,能匹配到其中一个的整条数据才能通过。
tagexclude 标签不含 tageinclude的反函数

配置文件与环境变量

vi /opt/module/telegraf_conf/example3.conf

[agent]
  interval = "3s"

[global_tags]
  user = "${USER}"

[[inputs.cpu]]
  percpu = true
  totalcpu = true
  collect_cpu_time = false
  report_active = false
  core_tags = false

[[outputs.file]]
  files = ["stdout"]

Telegraf默认的变量声明文件:

/etc/default/telegraf 是Telegraf的默认变量声明文件,你也可以直接在这个文件中声明变量。但优先级不如环境变量高。

vim /etc/default/telegraf

USER=HAHA

运行telegraf程序(需要重启机器)。

或者直接在命令行中生命变量:

USER=HAHA
telegtelegraf --config /opt/module/telegraf_conf/example3.conf --test

image-20221122162608762

Exec插件

官方文档:telegraf/README.md at release-1.24 · influxdata/telegraf · GitHub

exec可以执行命令,并把命令执行的输出当作数据的输入。

示例:

编写一个shell:

vi /tmp/test.sh

#!/bin/sh
echo 'example,tag1=a,tag2=b i=42i,j=43i,k=44i'

编写telegraf配置文件:

vi /opt/module/telegraf_conf/example4.conf

[agent]
  interval = "3s"

[[inputs.exec]]
  commands = ["sh /tmp/test.sh"]
  timeout = "5s"
  data_format = "influx"

[[outputs.file]]
  files = ["stdout"]

执行,观察结果:

telegraf --config /opt/module/telegraf_conf/example4.conf

image-20221122163443274

免责声明 InfluxDB(3):Telegraf基本使用,资源类别:文本, 浏览次数:44 次, 文件大小:-- , 由本站蜘蛛搜索收录2022-11-24 06:41:00。此页面由程序自动采集,只作交流和学习使用,本站不储存任何资源文件,如有侵权内容请联系我们举报删除, 感谢您对本站的支持。 原文链接:https://www.cnblogs.com/wwjj4811/p/16915673.html