Telegraf是一个用Golang写的开源数据收集Agent,基于插件驱动。本身提供的输入和输出插件非常丰富,当然有需求也可以自行编写(需要重新编译)。Telegraf是influxdata公司的时间序列平台TICK技术栈中的“T”,主要用于收集时间序列型数据,比如服务器CPU指标、内存指标、各种IoT设备产生的数据等等。后面抽空会介绍TICK栈中的其他技术及其应用。
1. 核心概念
Telegraf工作原理大概是这样:定时去执行输入插件收集数据,数据经过处理插件和聚合插件,批量输出到数据存储。
1> 数据指标(Metrics)
指标名(Measurement name):指标描述和命名。
标签集合(Tags):Key/Value键值对,可以类比为关系型数据库的键值,常用于快速索引和唯一标识。标签在设计的时候,尽量避免各种数值型,尽量使用有限集合。
字段集合(Fields):Key/Value键值对,包含指标描述的数据类型和值。
时间戳(Timestamp):此条指标数据的时间戳。
2> 插件(Plugins)
Telegraf有四种类型的插件:
输入插件(Inputs):收集各种时间序列性指标,包含各种系统信息和应用信息的插件。
处理插件(Process):当收集到的指标数据流要进行一些简单处理时,比如给所有指标添加、删除、修改一个Tag。只是针对当前的指标数据进行。
聚合插件(Aggregate):聚合插件有别于处理插件,就在于它要处理的对象是某段时间流经该插件的所有数据(所以,每个聚合插件都有一个设置,只会处理时间段内的数据),比如取最大值、最小值、平均值等操作。
输出插件(Outputs):收集到的数据,经过处理和聚合后,输出到数据存储系统,可以是各种地方,如:文件、InfluxDB、各种消息队列服务等等。
一般在使用的时候,关注Inputs和Outputs会比较多。
2. 简单用法
快速生成配置并启动
查看输出
输入测试
3. 常用插件
Telegraf所有插件都对应配置中的一段,下面快速了解一下常用的几个插件,详情查看Github主页,介绍的非常全面,用到时再详情了解也不迟。
常用输入插件
:系统CPU信息,如用户态和系统态利用率等等。
:系统内存信息,如物理、虚拟、交换内存量等等。
:磁盘占用信息。
:磁盘IO性能。
和:网卡和网络信息。
:当前系统负载信息,类似信息。
:每个时间周期读取文件所有信息。
:收集满足条件的进程信息,包含进程CPU占用、内存占用等信息。
:定时执行某个可执行文件,可执行文件根据要求输出到标准输出即可。
常用输出插件
:输出到InfluxDB。
:输出到文件。
:输出到某个HTTP服务器。
4. 常见需求
1> 同种类型的输入和输出插件可以配置多个吗?
可以支持!比如:可以根据命名规则把不同的指标,写到不同influxdb里面。
2> 所有指标都打一个相同的标签怎么做?
方法一:telegraf.conf里面段里面直接配置。
方法二:telegraf.conf里面段里面配置环境变量。此方法意义非常大,这样运维同学在部署好环境的时候,设置好环境变量,telegraf.conf保持一份即可。
方法三:使用process插件
3> 自己怎么写插件?
有需求,先看官方提供的插件是否能满足需求,实在不行就自行开发,也很简单。说来话长,改日再聊。自行编译通过先:
5. 参考资料
https://docs.influxdata.com/telegraf
https://github.com/influxdata/telegraf
领取专属 10元无门槛券
私享最新 技术干货