Telegraf

1、产品概述

1.1 Telegraf

Telegraf 是一个开源代理工具,用于收集、处理和传输度量数据,由 InfluxData 开发。

Telegraf 有以下这些特点:

  • 插件体系结构:Telegraf 的强大之处在于其广泛的插件生态系统。它支持多种输入、输出和处理器插件,可以与各种数据源和目标无缝集成。
    • 数据收集:Telegraf 擅长从不同来源收集度量数据,例如系统指标、日志、数据库等。其多功能性使其适用于监视应用程序、基础架构和物联网设备。
    • 输出目标:一旦收集到数据,可以将其发送到各种输出目标,包括流行的数据库如 InfluxDB。这种灵活性使 Telegraf 适应不同的监视和分析设置。
  • 配置简易:Telegraf 的配置使用 TOML 文件进行。这种简单性使用户能够轻松定义输入、输出和处理器,使定制变得简单明了。
  • 社区与支持:作为开源项目,Telegraf 受益于活跃的社区。用户可以通过论坛和文档贡献插件、报告问题并寻求帮助。

1.2 Telegraf-IoTDB 插件

Telegraf-IoTDB 插件可以将保存在 Telegraf 中的监控信息输出存储到 IoTDB,输出插件使用了 IoTDB session 进行连接和数据写入。

2、安装要求

Telegraf支持多种操作系统,包括Linux、Windows、macOS,Telegraf 的安装推荐使用root管理员权限才能成功完成,具体安装要求请查看 安装要求

3、安装步骤

具体安装步骤请查看 安装步骤

  • 注:此插件为Telegraf内置插件,无需进行二次安装

4、使用说明

4.1 设置输入源

在“telegraf.conf”配置文件中找到“INPUT PLUGINS”来配置输入源,具体配置内容如下表所示

配置项说明备注
alias命名插件的实例
interval收集此指标的频率。普通插件使用单个全局间隔,但如果某个特定输入的运行频率应更低或更高,您可以在此处进行配置。interval可以增加间隔以减少数据输入速率限制。
precision覆盖precision代理的设置。收集的指标四舍五入到指定的精度interval。当在服务输入上设置此值(例如statsd:)时,输出数据库可能会合并在同一时间戳发生的多个事件。
collection_jitter覆盖collection_jitter代理的设置。Collection jitter 用于通过随机的interval
name_override输出到 IoTDB 时使用的自定义时间序列路径名输出的路径名称需满足“语法要求”要求
name_prefix指定附加到测量名称的前缀
name_suffix指定附加到测量名称的后缀

4.2 设置输出源

在“telegraf.conf”配置文件中找到“outputs.iotdb”来配置输出源,具体配置内容如下表所示,具体输入源示例可查看 输出源示例

配置项说明修改前修改后备注
hostIoTDB 的 host# host = “127.0.0.1”host = “部署 IoTDB 的 host”默认为 127.0.0.1
portIoTDB 的端口号# port = “6667”port = “部署 IoTDB 的端口号”默认为 6667
userIoTDB 的用户名# user = “root”user = “IoTDB 的用户名”默认为 root
passwordIoTDB 的密码# password = “root”password= “IoTDB 的密码”默认为 root
timestamp_precision时间戳精度timestamp_precision = “millisecond”timestamp_precision = “与 IoTDB 相同的时间戳精度”您可以通过查看“iotdb-system.properties”中“timestamp_precision”字段即可
sanitize_tag数据库版本sanitize_tag = “0.13/1.0/1.1/1.2/1.3”

4.3 启动Telegraf服务

telegraf -config /path/to/telegraf.conf

5、使用示例

以下是一个使用 Telegraf 收集 CPU 数据并使用 Telegraf-IoTDB 输出到 IoTDB 的示例。使用 telegraf 命令生成配置文件

telegraf --sample-config --input-filter cpu --output-filter iotdb > cpu_iotdb.conf
  1. 在 cpu_iotdb.conf 中修改 input cpu 插件的配置。其中,“name_override” 字段为输出到 IoTDB 时使用的自定义时间序列路径名
# Read metrics about cpu usage
[[inputs.cpu]]
  ## Whether to report per-cpu stats or not
  percpu = true
  ## Whether to report total system cpu stats or not
  totalcpu = true
  ## If true, collect raw CPU time metrics
  collect_cpu_time = false
  ## If true, compute and report the sum of all non-idle CPU states
  report_active = false
  ## If true and the info is available then add core_id and physical_id tags
  core_tags = false
  name_override = "root.demo.telgraf.cpu"
  1. 在 cpu_iotdb.conf 中修改 output iotdb 插件的配置
配置项说明修改前修改后备注
hostIoTDB 的 host# host = “127.0.0.1”host = “部署 IoTDB 的 host”默认为 127.0.0.1
portIoTDB 的端口号# port = “6667”port = “部署 IoTDB 的端口号”默认为 6667
userIoTDB 的用户名# user = “root”user = “IoTDB 的用户名”默认为 root
passwordIoTDB 的密码# password = “root”password= “IoTDB 的密码”默认为 root
timestamp_precision时间戳精度timestamp_precision = “millisecond”timestamp_precision = “与 IoTDB 相同的时间戳精度”您可以通过查看“iotdb-system.properties”中“timestamp_precision”字段即可
sanitize_tag数据库版本sanitize_tag = “0.13/1.0/1.1/1.2/1.3”
# Save metrics to an IoTDB Database
[[outputs.iotdb]]
  ## Configuration of IoTDB server connection
  host = "127.0.0.1"
  # port = "6667"

  ## Configuration of authentication
  # user = "root"
  # password = "root"

  ## Timeout to open a new session.
  ## A value of zero means no timeout.
  # timeout = "5s"

  ## Configuration of type conversion for 64-bit unsigned int
  ## IoTDB currently DOES NOT support unsigned integers (version 13.x).
  ## 32-bit unsigned integers are safely converted into 64-bit signed integers by the plugin,
  ## however, this is not true for 64-bit values in general as overflows may occur.
  ## The following setting allows to specify the handling of 64-bit unsigned integers.
  ## Available values are:
  ##   - "int64"       --  convert to 64-bit signed integers and accept overflows
  ##   - "int64_clip"  --  convert to 64-bit signed integers and clip the values on overflow to 9,223,372,036,854,775,807
  ##   - "text"        --  convert to the string representation of the value
  # uint64_conversion = "int64_clip"

  ## Configuration of TimeStamp
  ## TimeStamp is always saved in 64bits int. timestamp_precision specifies the unit of timestamp.
  ## Available value:
  ## "second", "millisecond", "microsecond", "nanosecond"(default)
  timestamp_precision = "millisecond"

  ## Handling of tags
  ## Tags are not fully supported by IoTDB.
  ## A guide with suggestions on how to handle tags can be found here:
  ##     https://iotdb.apache.org/UserGuide/Master/API/InfluxDB-Protocol.html
  ##
  ## Available values are:
  ##   - "fields"     --  convert tags to fields in the measurement
  ##   - "device_id"  --  attach tags to the device ID
  ##
  ## For Example, a metric named "root.sg.device" with the tags `tag1: "private"`  and  `tag2: "working"` and
  ##  fields `s1: 100`  and `s2: "hello"` will result in the following representations in IoTDB
  ##   - "fields"     --  root.sg.device, s1=100, s2="hello", tag1="private", tag2="working"
  ##   - "device_id"  --  root.sg.device.private.working, s1=100, s2="hello"
  # convert_tags_to = "device_id"
   ## Handling of unsupported characters
  ## Some characters in different versions of IoTDB are not supported in path name
  ## A guide with suggetions on valid paths can be found here:
  ## for iotdb 0.13.x           -> https://iotdb.apache.org/UserGuide/V0.13.x/Reference/Syntax-Conventions.html#identifiers
  ## for iotdb 1.x.x and above  -> https://iotdb.apache.org/UserGuide/V1.3.x/User-Manual/Syntax-Rule.html#identifier
  ##
  ## Available values are:
  ##   - "1.0", "1.1", "1.2", "1.3"  -- enclose in `` the world having forbidden character
  ##                                    such as @ $ # : [ ] { } ( ) space
  ##   - "0.13"                      -- enclose in `` the world having forbidden character
  ##                                    such as space
  ##
  ## Keep this section commented if you don't want to sanitize the path
  sanitize_tag = "1.3"
  1. 使用 cpu_iotdb.conf 配置文件运行 Telegraf:运行一段时间后,可以在 IoTDB 中查询到 Telegraf 收集上报的数据