2.Telegraf简介

news2024/12/29 16:39:25

Telegraf简介

Telegraf是Influx公司一款基于插件化的开源指标收集工具.主要结合时序性数据库进行使用,用于性能监控.通常Telegraf会每间隔一段时间抓取一批指标数据并将数据发送给时序性数据库或其他自定义的Output.

官方文档 https://docs.influxdata.com/telegraf/v1.24

与Promethus类似,不同的在于Promethus基于各种Exporter通过HTTP Pull的形式进行数据拉取,Telegraf通过插件化的形式进行数据采集,官方提供了300多个不同的插件用于不同的使用场景.

安装

安装官方文档https://docs.influxdata.com/telegraf/v1.24/install/

  1. 安装Yum源

    cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo
    [influxdb]
    name = InfluxData Repository - Stable
    baseurl = https://repos.influxdata.com/stable/\$basearch/main
    enabled = 1
    gpgcheck = 1
    gpgkey = https://repos.influxdata.com/influxdb.key
    EOF
    
  2. yum安装即可

    yum install -y telegraf
    
  3. 查看telegraf是否安装成功

    systemctl status telegraf
    

    image-20221130160121206

入门示例

最简单的单输入流和输出流的telegraf

  1. 创建一个目录用于管理telegraf的配置文件

    mkdir -p /home/telegraf/config
    
  2. 编写配置文件 vim /home/telegraf/config/example1.conf

    [agent]
      interval = "3s"
    
    [[inputs.cpu]]
      percpu = true
      totalcpu = true
      collect_cpu_time = false
      report_active = false
      core_tags = false
    
    [[outputs.file]]
      files = ["stdout"]
    
  3. 启动telegraf

    telegraf --config  /home/telegraf/config/example1.conf
    

image-20221201101216138

输出内容解析

2022-12-01T02:10:41Z I! Starting Telegraf 1.24.4 #telegraf版本
2022-12-01T02:10:41Z I! Available plugins: 222 inputs, 9 aggregators, 26 processors, 20 parsers, 57 outputs # 可用组件
2022-12-01T02:10:41Z I! Loaded inputs: cpu # 目前已经加载的组件 只有CPU
2022-12-01T02:10:41Z I! Loaded aggregators: # 聚合插件 无
2022-12-01T02:10:41Z I! Loaded processors:  # 处理插件 无
2022-12-01T02:10:41Z I! Loaded outputs: file # 出去插件 只有file
2022-12-01T02:10:41Z I! Tags enabled: host=node2 # 全局Tag只有一个 node2主机名
2022-12-01T02:10:41Z I! [agent] Config: Interval:3s, Quiet:false, Hostname:"node2", Flush Interval:10s # Interval 3s 每三秒采集一次 # Flush Interval 10 每10从telegraf拉去一批数据输出 3s采集一次 10s输出一次 可能一次telegraf就输出了3批的数据

Telegraf架构

  • Agent: 全局配合文件用单[]包裹 主要同于定义全局默认的配置
  • inputs: 输入插件
  • outputs: 输出插件
  • aggregator 和 processor: 聚合插件与处理插件的配置

telegraf各种模型以插件形式进行集成,以一种Pipeline的设计思想处理数据,其中各个组件的顺序是telegraf底层已经定义好了的,一定是从input -> proccessor -> aggregator -> output

image-20221201102005747

  • 所有input将数据汇入一个管道
  • 所有processor按先后顺序处理数据之后传递给下一个processor processor需要指定order顺序不然telegraf默认随机顺序
  • 从processor管道出去的数据会广播分发到各个aggregator聚合组件进行数据的聚合
  • 从aggregator聚合之后数据会广播分发给所有的output输出组件
  • telegraf提供了各种指标的过滤器可以选择性的接受部分数据

telegraf插件

插件文档需要与telegraf版本相对应,telegraf采用go语言编写,有一个特点就是打包出来就是一个可执行文件,在使用插件之前需要与对应telegraf版本匹配

官方文档 https://docs.influxdata.com/telegraf/v1.24/plugins/

因为telegraf的插件非常多 在官网可以查询自己需要类型的插件如Input outputs等 再选择具体某一个组件看关于他的详细示例

image-20221201103209308

image-20221201103338663

image-20221201103456855

telegraf命令行常见用法

  1. 创建一个telegraf 配置模板 telegraf config > telegraf.conf

  2. 使用 input-filter 和 output-filter选择输入输出插件 生成对应模板

    telegraf  --input-filter cpu:mem --output-filter influxdb > ./example_filter.conf
    
  3. 远程配置 --config 直接跟远程地址 但是不支持热更新

    telegraf --config http://www.xxxx.com/telegraf.conf
    

telegraf通用配置参数

官方网站 https://docs.influxdata.com/telegraf/v1.24/configuration/

如下配置是通用配置不同的插件的差异化配置参考具体插件的文档

Agent

配置名解释
interval所有的input组件采集数据的间隔时间
round_interval将采集的间隔时间取整。比如,如果interval设置为10s,但我们在1分02秒启动了telegraf服务,那么采集的时间会取整到1分10秒,1分20秒,1分30秒
metric_batch_sizetelegraf一批次从output组件向外发送数据的大小,网络不稳定时可以减小此参数。
metric_buffer_limittelegraf会为每个output插件创建一个缓冲区,来缓存指标数据,并在output成功将数据发送后,将成功发送的数据从缓冲区删除。所以,metriac_buffer_limit参数应该至少是metric_batch_size参数的两倍
collection_jitter这个参数会在采集的时间点上加一个随机的抖动,这样可以避免很多插件同时查询一些消耗资源的指标,从而对被观测的系统产生不可忽视的影响。
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_hostnametelegraf输出的指标数据中,有一个默认的

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通用配置

可以通过过滤器卸载input output

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

配置文件中使用环境变量

  • 在telegraf配置文件中可以使用"$STR_VAR"来表示字符串变量(需要使用双引号包裹) $INT_VAR引用其他类型
  • 默认会加载/etc/default/telegraf 的配置文件,但是生效需要重启influx
  • 直接编辑一个文件 vim /home/telegraf/defalut.conf 然后source 即可
  • export VAR_NAME=xxx
[agent]
  interval = "3s"

[global_tags]
  who = "$MY_NAME"

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

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

telegraf集成自定义插件

通过telegraf自带的exec 或者 execd插件集成

https://github.com/influxdata/telegraf/blob/release-1.24/plugins/inputs/exec/README.md

https://github.com/influxdata/telegraf/blob/release-1.24/plugins/inputs/execd/README.md

telegraf强大的扩展性可以通过执行脚本调用其他语言编写的插件获取结果进行收集

如集成Python或者 shell等

import glob
import sys
import time
# 获取给定目录下的文件数

# 定义输出的 模板字符串
template = "PathFileNum,name=test num={num} {timestamp}"
# 获取传入的第一个参数
path = sys.argv[1]
# 使用glob进行文件匹配,得到匹配到文件数量
path_file_num = glob.glob(path).__len__()
# 套用模板
data = template.format(num=path_file_num)
print(data)
sys.exit(0)
#!/bin/sh
echo 'example,tag1=a,tag2=b i=42i,j=43i,k=44i'

telegraf配置如下Input插件

[[inputs.exec]]
  commands = ["python3 /home/telegraf/script/dir_num_input_exec.py /home/*","bash /home/telegraf/script/test.sh"]
  data_format = "influx"
  • command表示执行的命令 也可以使用[ “command1”, “comm2and” ]执行多个命令
  • data_format 表示数据格式 influx 表示使用influx行协议

exec与execd区别

  • exec调用执行具体命令或者标准输出作为telegraf的Input数据
  • execd可以长时运行一个外部进程作为守护进程,并且可以发送signal信号给该程序

使用GoLang对telegraf源码进行二次开发

参考https://github.com/influxdata/telegraf/tree/release-1.24

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/352591.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分享7个比B站更刺激的老司机网站,别轻易点开

俗话说摸鱼一时爽&#xff0c;一直摸一直爽&#xff0c;作为一个程序员老司机了&#xff0c;一头乌黑浓密的头发还时不时被同事调侃&#xff0c;就靠这10个网站让我健康生活&#xff0c;不建议经常性使用&#xff0c;因为还有一句俗话&#xff0c;那就是“摸鱼一时爽&#xff0…

22- 隐马尔科夫HMM (NLP自然语言算法) (算法)

HMM模型 : from hmmlearn.hmm import GaussianHMM model GaussianHMM(n_components3,n_iter100000, covariance_type diag) model.fit(X) 1、马尔科夫链 有向图模型&#xff08;贝叶斯网络&#xff09;&#xff1a;用有向图表示变量间的依赖关系&#xff1b; 无向图模型&…

【GlobalMapper精品教程】051:融合Dissolve操作详解

本节讲解globalmapper中融合Dissolve工具的使用。 文章目录 一、工具介绍1. 工具位置2. 融合工具二、案例实战1. 加载实验数据2. 根据字段分组融合案例一:根据地类名称分组,将相同的类型融合到一起。案例二:根据权属地类名称分组,将相同的类型融合到一起。一、工具介绍 1.…

UE4 手把手教你做插件(1) 从代码引用插件

0&#xff0c;前言 我看的是 技术宅阿棍儿 的视频&#xff0c;B站有。 系列视频&#xff1a;从代码引用插件_哔哩哔哩_bilibili 看不懂&#xff0c;只能边查资料边看&#xff0c;讲的顺序有点乱 1&#xff0c;根据视频提示创建第三方插件 注意&#xff1a;如果只有空白插件的情…

如何从手工测试进阶自动化测试?阿里10年测开经验分享...

随着行业的竞争加剧&#xff0c;互联网产品迭代速度越来越快&#xff0c;QA 与测试工程师都需要在越来越短的测试周期内充分保证质量。可是&#xff0c;App 测试面临着很多挑战&#xff0c;比如多端发布、多版本发布、多机型发布等等&#xff0c;导致了手工测试很难完全胜任。因…

使用yolov5和强化学习训练一个AI智能欢乐斗地主(一)

这里写自定义目录标题项目介绍项目过程介绍训练yolov5目标检测斗地主收集数据集yolov5调参项目介绍 你好&#xff01; 欢迎阅读我的文章&#xff0c;本章将介绍&#xff0c;如何使用yolov5和强化学习训练一个AI斗地主&#xff0c;本项目将分为三个部分&#xff0c;其中包含&am…

一篇搞懂Mock测试

1. 什么是Mock测试 mock测试就是在测试过程中&#xff0c;对于某些不容易构造或者不容易获取的对象/数据/场景&#xff0c;用一个虚拟的对象来创建以便测试的测试方法。 2. Mock测试常见场景 无法控制第三方系统接口的返回&#xff0c;返回的数据不满足要求依赖的接口还未开…

DEM数据下载——以地理空间数据云为例

数字高程模型&#xff08;Digital Elevation Model)是进行地形分析的重要基础&#xff0c;诸如坡度、坡向及水文分析等都在此基础上进行。今天&#xff0c;我们一起来聊一聊一种DEM数据常见下载方式。按照惯例&#xff0c;先将网址列出&#xff1a;https://www.gscloud.cn/home…

2023年美赛 MCM B题 重新构想马赛马拉岛

背景肯尼亚的野生动物保护区最初主要是为了保护野生动物和其他自然资源。肯尼亚议会于2013 年通过了《野生动物保护和管理法》&#xff0c;以提供更公平的资源共享&#xff0c;并允许进行替代的、以社 区为基础的管理工作[1].此后&#xff0c;肯尼亚增加了修正案&#xff0c;以…

有特别有创意的网站设计案例

有人说 UI 设计师集艺术性与科学性于一身&#xff0c;不仅需要对工具的使用熟练&#xff0c;更需要对美术艺术有一定的基础了解。如果想要成为优秀的 UI 设计师是一个需要磨砺的过程&#xff0c;需要不断的学习和积累&#xff0c;多看多练多感受&#xff0c;其中对于优质的设计…

力扣53.最大子数组和

文章目录力扣53.最大子数组和题目描述贪心动态规划力扣53.最大子数组和 题目描述 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 示例…

4、HAL库SPI数据收发

1、通过SPI轮询的方式实现数据收发 1.1、通过CubeMx配置SPI轮询的方式实现数据收发 SPI模式 CPOL CPHA 空闲时 SCK 时钟 采样时刻 0 0 0 低电平 奇数边沿(W25Qxx支持) 1 0 1 低电平 偶数边沿 2 1 0 高电平 奇数边沿 3 1 1 高电平 偶数边沿(W25Qxx支持)当前使用 生成代码工程 …

[计算机操作系统(慕课版)]第一章 操作系统引论(学习笔记)

操作系统&#xff08;Operating System&#xff0c;OS&#xff09;是配置在计算机硬件上的第一层软件&#xff0c;是对硬件系统的首次扩充。操作系统的主要作用&#xff1a; 管理硬件设备&#xff0c;提高他们的利用率和系统吞吐量 利用率&#xff1a;使硬件充分忙碌系统吞吐量…

Python|每日一练|树|深度优先搜索|数组|二分查找|链表|双指针|单选记录:填充每个节点的下一个右侧节点指针|搜索插入位置|旋转链表

1、填充每个节点的下一个右侧节点指针&#xff08;树&#xff0c;深度优先搜索&#xff09; 给定一个 完美二叉树 &#xff0c;其所有叶子节点都在同一层&#xff0c;每个父节点都有两个子节点。二叉树定义如下&#xff1a; struct Node { int val; Node *left; Node *rig…

同一个整型常量怎样在不同进制间之间转换?

整型常量可以分别用二进制、八进制、十进制和十六进制表示&#xff0c;不同的进制并不影响数据本身的大小&#xff0c;同一个整型常量可以在不同进制之间转换&#xff0c;具体转换方式如下。1.十进制和二进制之间的转换(1)十进制转二进制。十进制转换成二进制就是一个除以2取余…

INDEMIND:2023,服务机器人能否“狂飙”?

过去一年&#xff0c;服务机器人的发展并不顺利。头部厂商的变动&#xff0c;市场增长率的持续下降不由得让人质疑&#xff0c;2023年&#xff0c;服务机器人还能“狂飙”吗&#xff1f;短期的市场波动&#xff0c;并不能代表行业的未来走向&#xff0c;而行业的两面矛盾现象&a…

珞珈1号-数据预处理流程

珞珈1号-数据预处理流程 1、重投影Albers 2、重采样 3、辐射校正–将INT32转化为浮点型真实数据 4、统一量纲(eg:和NPP同一量纲) 5、去噪 1、重投影Albers 参考这篇文章 2、重采样 输入想要重采样的数据&#xff0c;其中X和Y是你想要的大小&#xff0c;125即是重采样至125m …

kaggle竞赛-宠物受欢迎程度(赛题讲解与数据分析)

比赛官网地址 赛题介绍 petfinder是马来西亚领先的动物福利平台宠物网站地址 该网站使用可爱指数来排名宠物照片。它分析了图片组成和其他因素&#xff0c;并与数千个宠物档案的表现进行了比较。 在这场比赛中&#xff0c;你将分析原始图像和元数据来预测宠物照片的“Pawp…

Word控件Spire.Doc 【Table】教程(16):C#/VB.NET:在 Word 表格中插入或提取图像

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

JMM(Java内存模型)及volatile关键字

JMM(Java内存模型 Java Memory Model&#xff0c;简称JMM)JMM(Java内存模型 Java Memory Model&#xff0c;简称JMM)本身是一种抽象的概念并不真实存在&#xff0c;它描述的是一组规则或者规范&#xff0c;通过这组规范定义了程序中各个变量&#xff08;包括实例字段&#xff0…