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
:
- 通过包管理器,如
yum
、apt
或zypper
(“repo”); - 从
https://dl.influxdata.com/
网站下载(“在线”); - 目标主机上已经提供但尚未安装/配置(“离线”);
- 已在目标主机上或手动安装,但尚未配置(“手动”);
可以通过将 telegraf_agent_package_method
设置为适当的值(repo
、online
、offline
或 manual
)来配置。
Telegraf 包
这些属性设置有关如何和安装什么包。
telegraf_agent_package
:要安装的 Telegraf 包的名称。当telegraf_agent_package_method
设置为online
或offline
时,需要提供完整的文件路径。例如:telegraf_agent_package: /tmp/telegraf.rpm
。默认值:telegraf_agent_package: telegraf
。telegraf_agent_package_method
:用于安装的方法。可以选择:repo
、offline
或online
。telegraf_agent_package_state
:包是否应为present
或latest
。设置为latest
时,将忽略telegraf_agent_version
。默认值:present
Telegraf 代理进程配置
telegraf_agent_interval
:发送数据到服务器的配置间隔。默认值:10
telegraf_agent_debug
:在调试模式下运行 Telegraf。默认值:False
telegraf_agent_round_interval
:将收集间隔舍入到“间隔”。默认值:Truetelegraf_agent_flush_interval
:所有输出的默认数据刷新间隔。默认值:10telegraf_agent_flush_jitter
:随机变动刷新间隔。默认值:0telegraf_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 特定变量
telegraf_zypper_baseurl
:托管 Telegraf 的 openSUSE 仓库的 URL(例如,对于 openSUSE Leap:“http://download.opensuse.org/repositories/devel:/languages:/go/openSUSE_Leap_{{ ansible_distribution_version }}/”)。如果未指定,将使用默认仓库。
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
ansible-galaxy install dj-wasabi.telegraf