dj-wasabi.telegraf

dj-wasabi.telegraf

构建状态:

构建状态

此角色将安装和配置 Telegraf。

Telegraf 是一个用 Go 编写的代理,负责从其运行的系统或其他服务收集指标,并将其写入 InfluxDB。

设计目标是具有较小的内存占用和插件系统,以使社区开发人员能够轻松添加对众所周知的服务(如 Hadoop、Postgres 或 Redis)和第三方 API(如 Mailchimp、AWS CloudWatch 或 Google Analytics)收集指标的支持。

https://github.com/influxdb/telegraf)

需求

支持的系统

此角色支持以下系统:

  • Red Hat
  • Debian
  • Ubuntu
  • Docker 容器
  • (Open)Suse
  • Windows(尽力而为)
  • FreeBSD(尽力而为)
  • Archlinux(仅“在线”模式)

所以,您需要上述系统中的一个.. :-) 如果您想在其他系统上使用此角色,请提交 Pull Requests 或建议。

InfluxDB

您需要在网络中的某处运行一个 InfluxDB 实例。或者使用其他输出类型,见 https://github.com/influxdata/telegraf/#output-plugins

Docker

目标主机上需要安装 Docker。我推荐以下角色来安装 Docker:

仅在需要为 Docker 容器内的 Telegraf 配置时(当 telegraf_agent_docker: True)。

升级

0.7.0

有一个问题:

如果我配置了 telegraf_plugins_extra,运行 ansible,删除插件并再次运行 ansible,插件仍然会留在机器上。

角色变量

Ansible 角色特定变量

指定要安装的版本:

  • telegraf_agent_version:要安装的 Telegraf 版本。如果 telegraf_agent_package_state 设置为 latest,则此属性和值将被忽略。默认值:1.10.0

如何在目标主机上安装 Telegraf。有 4 种方法可以安装 Telegraf

  • 通过包管理器,如 yumaptzypper(“repo”);
  • https://dl.influxdata.com/ 网站下载(“在线”);
  • 目标主机上已经提供但尚未安装/配置(“离线”);
  • 已在目标主机上或手动安装,但尚未配置(“手动”);

可以通过将 telegraf_agent_package_method 设置为适当的值(repoonlineofflinemanual)来配置。

Telegraf 包

这些属性设置有关如何和安装什么包。

  • telegraf_agent_package:要安装的 Telegraf 包的名称。当 telegraf_agent_package_method 设置为 onlineoffline 时,需要提供完整的文件路径。例如:telegraf_agent_package: /tmp/telegraf.rpm。默认值:telegraf_agent_package: telegraf
  • telegraf_agent_package_method:用于安装的方法。可以选择:repoofflineonline
  • telegraf_agent_package_state:包是否应为 presentlatest。设置为 latest 时,将忽略 telegraf_agent_version。默认值:present

Telegraf 代理进程配置

  • telegraf_agent_interval:发送数据到服务器的配置间隔。默认值:10
  • telegraf_agent_debug:在调试模式下运行 Telegraf。默认值:False
  • telegraf_agent_round_interval:将收集间隔舍入到“间隔”。默认值:True
  • telegraf_agent_flush_interval:所有输出的默认数据刷新间隔。默认值:10
  • telegraf_agent_flush_jitter:随机变动刷新间隔。默认值:0
  • telegraf_agent_aws_tags:将 AWS ec2 标签配置到 Telegraf 标签部分。默认值:False
  • telegraf_agent_aws_tags_prefix:定义 AWS ec2 标签的前缀。默认值:""
  • telegraf_agent_collection_jitter:随机变动收集。默认值:0(从 v0.13 开始)
  • telegraf_agent_metric_batch_size:代理指标的批处理大小。默认值:1000 (从 v0.13 开始)
  • telegraf_agent_metric_buffer_limit:代理指标的缓冲区限制。默认值:10000 (从 v0.13 开始)
  • telegraf_agent_quiet:以静默模式运行 Telegraf(仅错误消息)。默认值:False (从 v0.13 开始)
  • telegraf_agent_logfile:代理日志文件名。默认值:''(表示记录到 stdout)(从 v1.1 开始)
  • telegraf_agent_hostname:代理主机名。默认值:ansible_fqdn
  • telegraf_agent_omit_hostname:不在代理中设置“主机”标签。默认值:False (从 v1.1 开始)

Docker 特定角色变量:

  • telegraf_agent_docker:将 Telegraf 安装为 Docker 容器。默认值:False
  • telegraf_agent_docker_name:Docker 容器的名称。默认值:telegraf
  • telegraf_agent_docker_network_mode:Docker 容器的网络模式。默认值:bridge
  • telegraf_agent_docker_restart_policy:Docker 容器重启策略。默认值:unless-stopped
  • telegraf_agent_docker_image_version:要使用的 Docker Telegraf 镜像的版本。默认值包含为 telegraf_agent_version 提供的值。可以设置为 latest 以获取所提供 Docker 镜像的实际 latest 标签。
  • telegraf_uid_docker:覆盖用户 ID。默认值:995
  • telegraf_gid_docker:覆盖组 ID。默认值:998

完整代理设置参考: https://github.com/influxdata/telegraf/blob/master/docs/CONFIGURATION.md#agent-configuration

额外信息

ansible_fqdn 获取主机名的问题

额外信息:关于 ansible_fqdn 获取主机名的问题 #105

描述错误

在某些节点中,我得到了奇怪的主机名,主要是 localhost.localdomain。这些节点在 hostnamectl 中显示了正确的配置。我已经看到您将 'ansible_fqdn' 作为默认值。

似乎 ansible_fqdn 和 ansible_hostname 可能会给出不同的结果,有时甚至非常奇怪的结果,因为有时会进行 DNS 调用(在这些情况下不在我的控制之下)以推断名称。

修复建议

在我的剧本中,我添加了这个参数:

telegraf_agent_hostname: "{{ ansible_nodename }}"

设置标签

您可以为运行 Telegraf 的主机设置标签:

telegraf_global_tags:
  - tag_name: some_name
    tag_value: some_value

指定输出。默认设置为 localhost,您必须指定正确的 InfluxDB 服务器:

telegraf_agent_output:
  - type: influxdb
    config:
      - urls = ["http://localhost:8086"]
      - database = "telegraf"
    tagpass:
      - cpu = ["cpu0"]

配置将逐行打印到配置中,因此您也可以使用:

config:
    - # 打印文档行

这将打印到配置文件中。

Docker 细节

Docker 镜像

使用官方 Influxdata Telegraf 镜像telegraf_agent_version 将转换为镜像标签。

Docker 挂载

请注意,Docker 容器绑定基本上将您的整个系统(只读)挂载到容器内以监控 Docker 引擎主机。具体而言:

- /etc/telegraf:/etc/telegraf:ro
- /:/hostfs:ro
- /etc:/hostfs/etc:ro
- /proc:/hostfs/proc:ro
- /sys:/hostfs/sys:ro
- /var/run:/var/run:ro

更多信息:https://github.com/influxdata/telegraf/blob/master/docs/FAQ.md

示例 Docker 配置

telegraf_agent_docker: True
# 强制使用主机网络模式,以便可以收集 Docker 引擎主机流量指标。
telegraf_agent_docker_network_mode: host
# 强制使用特定镜像标签。
telegraf_agent_version: 1.10.0-alpine

telegraf_plugins_default:
  - plugin: cpu
    config:
      - percpu = true
  - plugin: disk
    tagpass:
      - fstype = [ "ext4", "xfs" ]
    tagdrop:
      - path = [ "/etc", "/etc/telegraf", "/etc/hostname", "/etc/hosts", "/etc/resolv.conf" ]
  - plugin: io
  - plugin: mem
  - plugin: system
  - plugin: swap
  - plugin: netstat
  - plugin: processes
  - plugin: docker
    config:
      - endpoint = "unix:///var/run/docker.sock"
      - timeout = "5s"

Windows 特定变量

注意

支持 Windows 是尽力而为(我没有可能在各种可用的 Windows 实例上测试/验证更改)。针对 Windows 的 PR 将几乎立即合并,除非有人能通过 Travis 或其他服务提供 Windows 测试机制用于 Pull Requests。

  • telegraf_win_install_dir:Telegraf 将安装的目录。
  • telegraf_win_logfile:Telegraf 的日志文件位置。
  • telegraf_win_include:将包含所有插件配置的目录。

openSUSE 特定变量

MacOS 特定变量

注意

MacOS 支持如同 Windows 支持一样尽力而为,并未正式支持。

  • telegraf_mac_user:Telegraf 将以此用户运行(由于使用 brew 以其他用户身份运行是有问题的)。

额外信息

有两个属性相似,但用法不同。它们是:

  • telegraf_plugins_default
  • telegraf_plugins_extra

telegraf_plugins_default

通过属性 telegraf_plugins_default 设置为使用默认的 Telegraf 插件集。您可以用更多插件覆盖默认插件。

telegraf_plugins_default:
  - plugin: cpu
    config:
      - percpu = true
  - plugin: disk
  - plugin: io
  - plugin: mem
  - plugin: system
  - plugin: swap
  - plugin: netstat

每个 Telegraf 代理都有这些作为默认配置。

telegraf_plugins_extra

第二个参数 telegraf_plugins_extra 用于添加特定于服务器目标的插件。它是一个哈希而不是列表,因此您可以将来自多个变量文件的值合并在一起。以下是一个示例,说明如何为 MySQL 数据库服务器使用此参数:

cat group_vars/mysql_database
telegraf_plugins_extra:
  mysql:
    config:
      - servers = ["root:{{ mysql_root_password }}@tcp(localhost:3306)/"]

有一个选项可以删除未通过此剧本生成的 /etc/telegraf/telegraf.d 中的额外插件文件,使用 telegraf_plugins_extra_exclusive 变量。

Telegraf 插件选项:

  • tags 是应用于特定输入测量的 k/v 标签。可在任何阶段使用以便于输出时的过滤。
  • tagpass:(在 Telegraf 0.1.5 中添加)用于过滤当前插件的标签名称和字符串数组。数组中的每个字符串都在标签名称中执行精确匹配测试,如果匹配,则发出指标。
  • tagdrop:(在 Telegraf 0.1.5 中添加)与 tagpass 相反。如果标签匹配,则不发出指标。这是在通过 tagpass 测试的指标上进行测试的。
  • interval:多经常收集此指标。正常插件使用单个全局间隔,但如果特定插件的执行频率应该更少或更多,您可以在此配置。
  • filter.name:如当需要配置额外过滤时,例如 grok 对于 logparser 插件。
  • filter.config:在 filter.name 示例中的额外配置(见下面的示例)。
  • sub_inputs:如果输入需要其他子输入,您可以在此添加(见下面的示例)。

一个示例可能如下所示:

telegraf_plugins_default:
  - plugin: disk
    interval: 12
    tags:
      - diskmetrics = "true"
    tagpass:
      - fstype = [ "ext4", "xfs" ]
      - path = [ "/opt", "/home" ]

如果您想要定义处理器,您可以简单地使用 telegraf_processors 变量。 一个示例可能如下所示:

telegraf_processors:
  - processor: rename
  - processor: rename.replace
    config:
        - tag = "level"
        - dest = "LogLevel"

如果您想要对 logparser 使用 grok 过滤器:

telegraf_plugins_extra:
    logparser:
    plugin: logparser
    config:
        - files = ["/var/log/messages"]
        - from_beginning = false
    filter:
        name: grok
        config:
        - patterns = ["invoked oom-killer"]

如果您想要包括具有自己配置的子输入:

sqs:
  plugin: cloudwatch
  config:
    - region = "eu-west-1"
    - access_key = "foo"
    - secret_key = "bar"
    - period = "1m"
    - delay  = "2m"
    - interval = "1m"
    - namespace = "AWS/SQS"
    - statistic_include = ["average"]
  sub_inputs:
    metrics:
      - names = [
          "ApproximateAgeOfOldestMessage",
          "ApproximateNumberOfMessagesVisible",
        ]
    metrics.dimensions:
      - name = "QueueName"
      - value = "*"

依赖

无依赖

示例剧本

- hosts: servers
  roles:
     - { role: dj-wasabi.telegraf }

Molecule

此角色配置为可以使用 Molecule 进行测试。您可以在此页面找到有关 Molecule 的更多信息:https://werner-dijkerman.nl/2016/07/10/testing-ansible-roles-with-molecule-testinfra-and-docker/

许可证

BSD

作者信息

如果您有任何问题,请告诉我。也欢迎提交 Pull Requests!:-)

邮箱:ikben [ at ] werner-dijkerman . nl

关于项目

Installing and configuring Telegraf

安装
ansible-galaxy install dj-wasabi.telegraf
许可证
mit
下载
787.8k
拥有者
DevOps Engineer, Technical reviewer Packt Pub / Manning / BPB Online / O'Reilly Media