Telegraf 是 InfluxData 公司开源的一款采集器,内置非常多的采集插件,不过 Telegraf 是面向 InfluxDB 生态的,采集的监控数据推给 InfluxDB 非常合适,推给 Prometheus、Victoriametrics、Thanos 这些时序库,可能会带来问题。主要是两点:

    • 有些数据是 string 类型的,Prometheus、VM、M3、Thanos 等都不支持 string 类型的数据
    • 有些采集器设计的标签是非稳态的设计,比如经常会看到 result=successresult=failed 的标签,需要手工配置采集器 drop 掉,但是对于新手确实有些难度

    另外一个问题是,Telegraf 采集的数据存到 Prometheus 中,这种做法在业界实践的比较少,导致 Grafana 大盘很少,需要我们付出较大精力手工制作大盘。不过,如果,你是资深监控玩家,Telegraf 上面这些问题都不是问题。下面是笔者之前调研 Telegraf 的几篇笔记,供大家参考:

    Telegraf 是如何与 Nightingale 整合的呢?Telegraf 有不同的 output plugin,可以把采集的数据推给 OpenTSDB、推给 Datadog,Nightingale 实现了 OpenTSDB 和 Datadog 这两种消息接收接口,所以,可以通过任一 output plugin 和 Nightingale 对接。下面提供一个简单的 Telegraf 配置供大家参考,使用 OpenTSDB 的 output plugin 和 Nightingale 对接,即 [[outputs.opentsdb]] 配置段,host 部分配置为 n9e-server 的地址:

    1. #!/bin/sh
    2. version=1.20.4
    3. tarball=telegraf-${version}_linux_amd64.tar.gz
    4. wget https://dl.influxdata.com/telegraf/releases/$tarball
    5. tar xzvf $tarball
    6. mkdir -p /opt/telegraf
    7. cp -far telegraf-${version}/usr/bin/telegraf /opt/telegraf
    8. cat <<EOF > /opt/telegraf/telegraf.conf
    9. [global_tags]
    10. [agent]
    11. interval = "10s"
    12. round_interval = true
    13. metric_batch_size = 1000
    14. metric_buffer_limit = 10000
    15. collection_jitter = "0s"
    16. flush_interval = "10s"
    17. flush_jitter = "0s"
    18. precision = ""
    19. hostname = ""
    20. omit_hostname = false
    21. [[outputs.opentsdb]]
    22. host = "http://127.0.0.1"
    23. port = 19000
    24. http_batch_size = 50
    25. http_path = "/opentsdb/put"
    26. debug = false
    27. separator = "_"
    28. [[inputs.cpu]]
    29. percpu = true
    30. totalcpu = true
    31. collect_cpu_time = false
    32. report_active = true
    33. [[inputs.disk]]
    34. ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]
    35. [[inputs.diskio]]
    36. [[inputs.kernel]]
    37. [[inputs.mem]]
    38. [[inputs.processes]]
    39. [[inputs.system]]
    40. fielddrop = ["uptime_format"]
    41. [[inputs.net]]
    42. ignore_protocol_stats = true
    43. EOF
    44. cat <<EOF > /etc/systemd/system/telegraf.service
    45. [Unit]
    46. Description="telegraf"
    47. After=network.target
    48. [Service]
    49. Type=simple
    50. ExecStart=/opt/telegraf/telegraf --config telegraf.conf
    51. WorkingDirectory=/opt/telegraf
    52. SuccessExitStatus=0
    53. LimitNOFILE=65535
    54. StandardOutput=syslog
    55. StandardError=syslog
    56. SyslogIdentifier=telegraf
    57. KillMode=process
    58. KillSignal=SIGQUIT
    59. TimeoutStopSec=5
    60. Restart=always
    61. [Install]
    62. WantedBy=multi-user.target
    63. EOF
    64. systemctl daemon-reload
    65. systemctl enable telegraf
    66. systemctl restart telegraf
    67. systemctl status telegraf