94 Commits

Author SHA1 Message Date
567539a637 Updated Changelog for release 0.12.0 2019-03-12 19:51:10 +01:00
69526620d9 Merge pull request #94 from ph4r5h4d/master
Add processors section in Telegraf config
2019-03-12 16:25:37 +01:00
618b8fa540 Add processors sample to README 2019-03-12 17:50:26 +03:30
f59d45a167 Add processors section in Telegraf config
telegraf_processors: 
  - processor: rename
  - processor: rename.replace  
    config:
        - tag = "message"
        - dest = "messages"
2019-03-12 14:21:45 +03:30
857a7a7938 Merge pull request #93 from dj-wasabi/download-from-influxdb
Updated to Telegraf 1.10.0;Different installation methods
2019-03-11 07:26:45 +01:00
dd28f645a9 increasing limit 2019-03-10 12:45:51 +01:00
0aba53bb17 Updated to Telegraf 1.10.0;Different installation methods 2019-03-10 12:39:14 +01:00
8a8d826de4 Merge pull request #92 from sdurrheimer/master
Updating Telegraf default to 1.9.5
2019-02-27 19:11:36 +01:00
499f217ed3 Updating Telegraf default to 1.9.5
Signed-off-by: Steve Durrheimer <s.durrheimer@gmail.com>
2019-02-27 15:26:58 +01:00
6f8bf1162c Merge pull request #90 from sdurrheimer/master
Updating Telegraf default to 1.9.4
2019-02-07 21:39:29 +01:00
9d24186e01 Updating Telegraf default to 1.9.4
Signed-off-by: Steve Durrheimer <s.durrheimer@gmail.com>
2019-02-07 11:49:40 +01:00
8b0cfeac4d Merge pull request #88 from jgeusebroek/master
Docker enhancements
2019-02-02 17:09:10 +01:00
b88d46ad1a Disable apparmor for Telegraf container (otherwise the logs are swamped with errors). Ignored on other platforms. 2019-02-02 15:52:51 +01:00
2003635e73 Docker telegraf uid and gid configurable 2019-02-02 15:51:19 +01:00
50c4043389 Merge pull request #87 from sdurrheimer/master
Updating Telegraf default to 1.9.3
2019-01-23 16:19:36 +01:00
2086b24b79 Updating Telegraf default to 1.9.3
Signed-off-by: Steve Durrheimer <s.durrheimer@gmail.com>
2019-01-23 15:48:28 +01:00
cf84634ce4 Added register 2019-01-23 11:40:11 +01:00
eaa7210976 Merge pull request #86 from dj-wasabi/add-register-for-trying-again
Added register for installation of packages
2019-01-23 11:25:18 +01:00
87c014da34 Set molecule to latest 2019-01-23 10:12:11 +01:00
bf008bec0c Aded a register so installation can be done again. This would also reduce the amount of E405 lint errors 2019-01-23 09:58:00 +01:00
0b285f7772 Minor documentation changes 2019-01-23 09:53:21 +01:00
2c444d97a8 Merge pull request #85 from jgeusebroek/master
Add Docker container support
2019-01-22 19:35:33 +01:00
5785e4a690 Only restart container when docker is the target platform 2019-01-22 19:04:00 +01:00
1d57bf2af8 Fix test 2019-01-22 16:40:13 +01:00
9f98ae6a76 Add Docker container support 2019-01-22 16:24:21 +01:00
35cd29007a Merge pull request #84 from jgeusebroek/master
Remove legacy options
2019-01-22 15:07:26 +01:00
8cdce07205 Update README, remove legacy options 2019-01-21 18:08:55 +01:00
f826414f5f Remove legacy configuration options 2019-01-21 17:24:01 +01:00
f6be7d6a4c Merge pull request #83 from jgeusebroek/master
Fix tagpass and tagdrop
2019-01-21 16:52:22 +01:00
5764b4bc90 item != inputs 2019-01-21 15:37:43 +01:00
07a6cb0135 Fix tagpass & tagdrop on outputs 2019-01-21 15:34:07 +01:00
140597e41d Also fix tagpass and tagdrop for older configuration format 2019-01-21 15:04:33 +01:00
d744a12f6f Fix tagpass and tagdrop syntax 2019-01-21 15:02:32 +01:00
0cb6770905 Merge pull request #81 from pad92/patch-1
[bug] debian - add cache_valid_time
2019-01-17 15:04:46 +01:00
1ccb184813 add cache_valid_time
- influx keep only last version on they repo

set cache_valid_time to 15mintutes to avoid fail install of old telegraf version
2019-01-17 10:43:19 +01:00
88ba1e218f Merge pull request #79 from anthonysr-mc/2019_01_08_amazon_linux
Add Yum repo support for Amazon Linux
2019-01-09 10:41:02 +01:00
5b31515d1b Merge pull request #80 from sdurrheimer/master
Updating Telegraf default to 1.9.2
2019-01-09 10:39:44 +01:00
38933cfc30 Updating Telegraf default to 1.9.2
Signed-off-by: Steve Durrheimer <s.durrheimer@gmail.com>
2019-01-09 10:06:09 +01:00
454ee8be7b Add Yum repo support for Amazon Linux 2019-01-08 13:15:47 -08:00
d49c278506 Merge pull request #78 from ikke-t/fedora-dnf
Fix to work with Fedora Linux
2018-12-17 06:45:30 +01:00
e3c553e729 Need to pull RHEL packages for Fedora
It seems Influxdb does not provide packages for Fedora. Thus the package repository URL needs to be hard coded to RHEL7 if run from Fedora. This change recognises we are on Fedora, and fakes RHEL release to be 7 so URL gets right.
2018-12-17 00:14:19 +02:00
c5e6883c1b Fedora dnf breaks with yum module.
Fedora uses dnf instead of yum. If this change is not made, playbook fails with:
fatal: [xx.yy]: FAILED! => {"changed": false, "msg": "The Python 2 yum module is needed for this module. If you require Python 3 support use the `dnf` Ansible module instead."}
2018-12-16 23:45:47 +02:00
a4d3eb237c Merge pull request #76 from jdivy/windows
Add support for extra win_perf_counters and prevent python u'' strings
2018-12-13 18:42:28 +01:00
ced8fd8ad5 Merge pull request #77 from dj-wasabi/update-telegraf
Updating to newer version of Telegraf
2018-12-13 18:42:21 +01:00
5f5d393a3f Updating to newer version of Telegraf 2018-12-13 18:26:11 +01:00
086dfab7d3 Add support for extra win_perf_counters and prevent python u'' strings 2018-12-13 10:42:39 -06:00
55e366f3b2 Updating to release 0.11.0 2018-12-11 20:36:18 +01:00
925debe915 Merge pull request #74 from dj-wasabi/move-to-json-to-to_json
Renamed the tojson to to_json
2018-12-11 20:30:04 +01:00
4c9d937b18 mounting a volume 2018-12-11 20:19:29 +01:00
aed37346fb Using self created opensuse container 2018-12-11 19:31:07 +01:00
ad7ea9b04e Minor fixes to get OpenSuse working again 2018-12-11 18:41:30 +01:00
1cffd3dbc0 Renamed the tojson to to_json 2018-12-11 15:48:08 +01:00
1d03fa09ac Merge pull request #73 from jdivy/windows
A few enhancements and fixes to windows support
2018-12-09 20:21:45 +01:00
160793b0e1 A few enhancements and fixes to windows support
- Add object to template for windows perf counters with some defaults
- Fix reference to include directory
2018-12-09 12:12:30 -06:00
8e927ff480 Merge pull request #72 from Rylon/master
Replace 'ec2_facts' with 'ec2_metadata_facts' to fix a deprecation warning
2018-12-03 16:27:23 +01:00
8c61db9d28 Replace 'ec2_facts' with 'ec2_metadata_facts' to fix a deprecation warning. 2018-12-03 14:49:13 +00:00
73bcfaddf3 Merge pull request #70 from dj-wasabi/add-default-plugin
Added default pluging if nothing is configured
2018-11-26 17:56:42 +01:00
0c5d7c2de2 Merge pull request #69 from dj-wasabi/add-other-oses
Added support for (Open)Suse
2018-11-26 17:53:27 +01:00
27033a85d2 Fix merge issue 2018-11-26 17:03:37 +01:00
aea77018a1 Merge pull request #68 from dj-wasabi/add-windows
Added Windows as OS
2018-11-26 16:56:50 +01:00
c9aac33197 Added default pluging if nothing is configured 2018-11-25 20:21:52 +01:00
23963f4292 Fix idempotence issue 2018-11-25 19:39:42 +01:00
aa78fc137e Added support for (Open)Suse 2018-11-25 18:06:45 +01:00
157f02f3f8 Updating meta file so it includes Windows 2018-11-25 14:05:37 +01:00
052142e642 Added Windows as OS 2018-11-25 11:58:28 +01:00
8df7435e51 Merge pull request #67 from dj-wasabi/want-to-use-latest
Want to use latest
2018-11-23 17:42:54 +01:00
139943a832 Allow to install the latest version 2018-11-22 20:52:17 +01:00
126dbb8b22 Fix merge issues 2018-11-22 20:12:57 +01:00
85ee6f2c94 Initial working version 2018-11-22 20:12:07 +01:00
480ac75497 Merge pull request #66 from dj-wasabi/minor-improvements
Some small improvements
2018-11-22 20:10:20 +01:00
1cb38ca480 * Moved the when statements into multiple lines;
* Updated the Molecule *.yml file to newer version;
* Added a influxdb container, so telegraf will start properly on debian/ubuntu;
2018-11-21 20:25:13 +01:00
623759a56e Fix merge issue 2018-11-21 19:27:51 +01:00
54f305b80a Updating Telegraf default to 1.9.0 2018-11-21 19:26:52 +01:00
c04c94b84a Merge pull request #65 from gaelL/master
telegraf-extra-plugin.conf.j2: fix template typo
2018-11-20 16:24:45 +01:00
18f5dd81b9 telegraf-extra-plugin.conf.j2: fix template typo
Related to commend : 3cccb6ba50 (r31366694)

Fix typo added in template `telegraf-extra-plugin.conf.j2`

Also add molecule tests to validate file generated with `telegraf_plugins_extra` option.

The added test template come from `Multiple inputs of the same type` (https://github.com/influxdata/telegraf/blob/master/docs/CONFIGURATION.md#multiple-inputs-of-the-same-type)
2018-11-20 15:59:45 +01:00
09e3ee1505 Merge pull request #61 from tszym/pin-apt-key-id
Pin apt key ID
2018-11-20 07:04:37 +01:00
386cab3328 Merge pull request #62 from mprasil/master
Wen copying/removing plugins show only plugin name
2018-11-20 07:04:22 +01:00
4d9c8b4d4d Merge pull request #64 from dj-wasabi/use-base-ci
Using base ci requirements.txt
2018-11-20 07:03:29 +01:00
7e940eb0af Remove a test 2018-11-19 20:54:48 +01:00
402d69494b Make it work to pass the ci 2018-11-19 20:39:50 +01:00
79d0cdeb9f Using base ci requirements.txt 2018-11-19 20:22:41 +01:00
3cccb6ba50 Fix meta file 2018-11-19 20:20:49 +01:00
2fc672f09c Wen copying/removing plugins show only plugin name 2018-11-10 14:39:22 +00:00
f8677ca119 Pin apt key ID
ID is specified so ansible can check if the key is already there without
downloading the file. Useful to keep the role woring when the key has
already been added on systems where DL won't work with the module
because of certificate validation (Ubuntu 14.04).
2018-09-25 15:11:57 +02:00
f74ff634a7 Merge pull request #60 from gaizeror/wipe-non-ansible-extra-plugins
Added support for plugins being managed exclusively by this playbook
2018-08-20 18:46:56 +02:00
or
1cd2798566 [STYLE] added name to the task 2018-08-20 19:13:40 +03:00
or
a49e82bf12 [FIX] added a check if dir exists, else skip 2018-08-18 12:32:42 +03:00
or
fa75297915 [FIX] mode should be 740, else telegraf user doesnt have permissions to exec service and read extra plugins 2018-08-16 10:31:59 +03:00
or
2a8184490c [FIX] state is directory, not present 2018-08-16 10:11:36 +03:00
or
f74e649085 [FIX] wrong identation 2018-08-15 23:05:55 +03:00
or
5317930b21 Added telegraf_plugins_extra_exclusive to readme 2018-08-15 22:43:36 +03:00
or
5b419ffa2d [FIX] job name 2018-08-15 22:38:39 +03:00
or
323e5f8831 Added support for plugins being managed exclusively by this playbook 2018-08-15 21:13:04 +03:00
db7b456f6d Updating meta file 2018-08-12 13:53:01 +02:00
27 changed files with 1152 additions and 222 deletions

View File

@ -5,6 +5,7 @@ services:
- docker
install:
- curl -sSlo requirements.txt https://raw.githubusercontent.com/dj-wasabi/ansible-ci-base/master/requirements.txt
- pip install -r requirements.txt
script:

View File

@ -5,6 +5,37 @@ Below an overview of all changes in the releases.
Version (Release date)
0.12.0 (2019-03-12)
* Add support for extra win_perf_counters and prevent python u'' strings #76 (By pull request: jdivy (Thanks!))
* Fix to work with Fedora Linux #78 (By pull request: ikke-t (Thanks!))
* Add Yum repo support for Amazon Linux #79 (By pull request: anthonysr-mc (Thanks!))
* Updating Telegraf default to 1.9.2 #80 (and some to other versions as well) (By pull request: sdurrheimer (Thanks!))
* [bug] debian - add cache_valid_time #81 (By pull request: pad92 (Thanks!))
* Fix tagpass and tagdrop #83 (By pull request: jgeusebroek (Thanks!))
* Remove legacy options #84 (By pull request: jgeusebroek (Thanks!))
* Add Docker container support #85 (By pull request: jgeusebroek (Thanks!))
* Added register for installation of packages #86
* Docker enhancements #88 (By pull request: jgeusebroek (Thanks!))
* Updated to Telegraf 1.10.0;Different installation methods #93
* Add processors section in Telegraf config #94 (By pull request: ph4r5h4d (Thanks!))
0.11.0 (2018-12-11)
* Added support for plugins being managed exclusively by this playbook #60 (By pull request: gaizeror (Thanks!))
* Pin apt key ID #61 (By pull request: tszym (Thanks!))
* Wen copying/removing plugins show only plugin name #62 (By pull request: mprasil (Thanks!))
* Using base ci requirements.txt #64
* telegraf-extra-plugin.conf.j2: fix template typo #65 (By pull request: gaelL (Thanks!))
* Some small improvements #66
* Want to use latest #67
* Added Windows as OS #68
* Added support for (Open)Suse #69
* Added default pluging if nothing is configured #70
* Replace 'ec2_facts' with 'ec2_metadata_facts' to fix a deprecation warning #72 (By pull request: Rylon (Thanks!))
* A few enhancements and fixes to windows support #73 (By pull request: jdivy (Thanks!))
* Renamed the tojson to to_json #74
0.10.0 (2018-08-12)
* Updating to telegraf 1.7.3

167
README.md
View File

@ -14,8 +14,31 @@ Design goals are to have a minimal memory footprint with a plugin system so that
## Requirements
### Supported systems
This role supports the following systems:
No requirements. (Yes, an Influxdb server somewhere on the network will help though ;-) )
* Red Hat
* Debian
* Ubuntu
* Docker container
* Windows (Best effort)
* (Open)Suse
So, you'll need one of those systems.. :-)
Please sent Pull Requests or suggestions when you want to use this role for other systems.
### InfluxDB
You'll need an InfluxDB instance running somewhere on your network. Or 1 of the other output types found on https://github.com/influxdata/telegraf/#output-plugins
### Docker
Docker needs to be installed on the target host. I can recommend these roles to install Docker:
* [jgeusebroek.docker](https://galaxy.ansible.com/jgeusebroek/docker)
* [geerlingguy.docker](https://galaxy.ansible.com/geerlingguy/docker)
This is only the case when the configuration is needed for a Telegraf inside a Docker container (When `telegraf_agent_docker: True`).
## Upgrade
### 0.7.0
@ -24,13 +47,32 @@ There was an issue:
If I configure a telegraf_plugins_extra, run ansible, delete the plugin and run ansible again, the plugin stays on the machine.
## Role Variables
The following parameters can be set for the Telegraf agent:
### Ansible role specific variables
Specifying the version to be installed:
* `telegraf_agent_version`: The version of Telegraf to install. Default: `1.10.0`
How `Telegraf` needs to be installed. There are 3 methods in getting `Telegraf` installed on the target host:
* Via the package manager, like `yum`, `apt` or `zypper` ("repo");
* Via a download from the `https://dl.influxdata.com/` site ("online");
* Already provided and is already available on the target host, but not yet installed/configured ("offline");
This can be configured by setting `telegraf_agent_package_method` to one of the appropriate values ( `repo`, `online` or `offline`).
#### Telegraf Package
These properties set in how and what package will be installed.
* `telegraf_agent_package`: The name of the Telegraf package to install. When `telegraf_agent_package_method` is set to `online` or `offline`, it needs to have the full path of the file. Example: `telegraf_agent_package: /tmp/telegraf.rpm`. Default: `telegraf_agent_package: telegraf`.
* `telegraf_agent_package_method`: The installation method to be used. Can choose between: `repo`, `offline` or `online`.
* `telegraf_agent_package_state`: If the package should be `present` or `latest`. When set to `latest`, `telegraf_agent_version` will be ignored. Default: `present`
### Telegraf agent process configuration.
* `telegraf_agent_version`: The version of Telegraf to install. Default: `1.0.0`
* `telegraf_agent_interval`: The interval configured for sending data to the server. Default: `10`
* `telegraf_agent_debug`: Run Telegraf in debug mode. Default: `False`
* `telegraf_agent_round_interval`: Rounds collection interval to 'interval' Default: True
@ -45,7 +87,19 @@ The following parameters can be set for the Telegraf agent:
* `telegraf_agent_logfile`: The agent logfile name. Default: '' (means to log to stdout) (since v1.1)
* `telegraf_agent_omit_hostname`: Do no set the "host" tag in the agent. Default: `False` (since v1.1)
Full agent settings reference: https://github.com/influxdata/telegraf/blob/master/docs/CONFIGURATION.md#agent-configuration
### Docker specific role variables:
* `telegraf_agent_docker`: Install Telegraf as a docker container. Default: `False`
* `telegraf_agent_docker_name`: Name of the docker container. Default: `telegraf`
* `telegraf_agent_docker_network_mode`: Networking mode of the docker container. Default: `bridge`
* `telegraf_agent_docker_restart_policy`: Docker container restart policy. Default: `unless-stopped`
* `telegraf_uid_docker`: Override user id. Default: `995`
* `telegraf_gid_docker`: Override group id. Default: `998`
Full agent settings reference: [https://github.com/influxdata/telegraf/blob/master/docs/CONFIGURATION.md#agent-configuration](https://github.com/influxdata/telegraf/blob/master/docs/CONFIGURATION.md#agent-configuration).
## Extra information
### Setting tags
You can set tags for the host running telegraf:
@ -61,7 +115,7 @@ Specifying an output. The default is set to localhost, you'll have to specify th
- urls = ["http://localhost:8086"]
- database = "telegraf"
tagpass:
- diskmetrics = ["true"]
- cpu = ["cpu0"]
The config will be printed line by line into the configuration, so you could also use:
@ -70,6 +124,67 @@ The config will be printed line by line into the configuration, so you could als
and it will be printed in the configuration file.
### Docker specifics
#### Docker image
The official [Influxdata Telegraf image](https://hub.docker.com/_/telegraf) is used. `telegraf_agent_version` will translate to the image tag.
#### Docker mounts
Please note that the Docker container bind mounts basicly your whole system (read-only) to monitor the Docker Engine Host from within the container. To be precise:
- /etc/telegraf:/etc/telegraf:ro
- /:/hostfs:ro
- /etc:/hostfs/etc:ro
- /proc:/hostfs/proc:ro
- /sys:/hostfs/sys:ro
- /var/run:/var/run:ro
More information: [https://github.com/influxdata/telegraf/blob/master/docs/FAQ.md](https://github.com/influxdata/telegraf/blob/master/docs/FAQ.md).
#### Example Docker configuration
telegraf_agent_docker: True
# Force host networking mode, so Docker Engine Host traffic metrics can be gathered.
telegraf_agent_docker_network_mode: host
# Force a specific image tag.
telegraf_agent_version: 1.10.0-alpine
telegraf_plugins_default:
- plugin: cpu
config:
- percpu = "true"
- plugin: disk
tags:
- diskmetrics = "true"
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 specific Variables
**NOTE**
_Supporting Windows is an best effort (I don't have the possibility to either test/verify changes on the various amount of available Windows instances). PR's specific to Windows will almost immediately be merged, unless some one is able to provide a Windows test mechanism via Travis or other service for Pull Requests._
* `telegraf_win_install_dir`: The directory where Telegraf will be installed.
* `telegraf_win_logfile`: The location to the logfile of Telegraf.
* `telegraf_win_include`: The directory that will contain all plugin configuration.
## Extra information
There are two properties which are similar, but are used differently. Those are:
* `telegraf_plugins_default`
@ -98,12 +213,11 @@ The 2nd parameter `telegraf_plugins_extra` can be used to add plugins specific t
config:
- servers = ["root:{{ mysql_root_password }}@tcp(localhost:3306)/"]
There is an option to delete extra-plugin files in /etc/telegraf/telegraf.d if they weren't generated by this playbook with `telegraf_plugins_extra_exclusive` variable.
Telegraf plugin options:
* `tags` An k/v tags to apply to a specific input's measurements. Can be used on any stage for better filtering for example in outputs.
* `pass`: An array of strings that is used to filter metrics generated by the current plugin. Each string in the array is tested as a prefix against metric names and if it matches, the metric is emitted.
* `drop`: The inverse of pass, if a metric name matches, it is not emitted.
* `tagpass`: (added in Telegraf 0.1.5) tag names and arrays of strings that are used to filter metrics by the current plugin. Each string in the array is tested as an exact match against the tag name, and if it matches the metric is emitted.
* `tagdrop`: (added in Telegraf 0.1.5) The inverse of tagpass. If a tag matches, the metric is not emitted. This is tested on metrics that have passed the tagpass test.
* `interval`: How often to gather this metric. Normal plugins use a single global interval, but if one particular plugin should be run less or more often, you can configure that here.
@ -119,7 +233,16 @@ An example might look like this:
- fstype = [ "ext4", "xfs" ]
- path = [ "/opt", "/home" ]
If you want to define processors you can simply use `telegraf_processors` variable.
An example might look like this:
```
telegraf_processors:
- processor: rename
- processor: rename.replace
config:
- tag = "level"
- dest = "LogLevel"
```
## Dependencies
@ -133,24 +256,34 @@ No dependencies
## Contributors
The following have contributed to this Ansible role:
The following have contributed to this Ansible role (Provided with: `git shortlog -s -n`):
* Werner Dijkerman
* Thomas Szymanski
* Jeroen Geusebroek
* or
* Alejandro
* Troy Jendra
* Slawomir Skowron
* Ismael
* Laurent Hoss
* Anthony ARNAUD
* Rick Box
* Emerson Knapp
* gaelL
* Laurent Hoss
* Ismael
* Anthony ARNAUD
* Ilkka Tengvall
* Rick Box
* Steven Wirges
* Jack Ivy
* Emerson Knapp
* zend0
* Angristan
* Miroslav Prasil
* Olivier Boukili
* Pascal
* Romain BUREAU
* Ryan Conway
* Steve Durrheimer
* TheCodeAssassin
* tjend
* aroglian
Thank you all!

View File

@ -1,7 +1,12 @@
---
# defaults file for ansible-telegraf
telegraf_agent_version: 1.7.3
telegraf_agent_version: 1.10.0
telegraf_agent_version_patch: 1
telegraf_agent_package: telegraf
telegraf_agent_package_path: /tmp
telegraf_agent_package_method: repo
telegraf_agent_package_state: present
telegraf_agent_hostname: "{{ ansible_fqdn }}"
telegraf_agent_interval: 10
telegraf_agent_debug: False
@ -11,6 +16,14 @@ telegraf_agent_flush_jitter: 0
telegraf_agent_aws_tags: False
telegraf_agent_aws_tags_prefix: ""
# Docker specific settings
telegraf_uid_docker: 998
telegraf_gid_docker: 995
telegraf_agent_docker: False
telegraf_agent_docker_name: telegraf
telegraf_agent_docker_network_mode: bridge
telegraf_agent_docker_restart_policy: unless-stopped
# v0.13 settings (not sure if supported in older version):
telegraf_agent_collection_jitter: 0
telegraf_agent_metric_batch_size: 1000
@ -47,6 +60,21 @@ telegraf_plugins_default:
# extra configuration - /etc/telegraf/telegraf.d/*
telegraf_plugins_extra: {}
telegraf_plugins_extra_exclusive: False
# RedHat specific settings for convenience
telegraf_redhat_releasever: "$releasever"
telegraf_yum_baseurl:
amazon: "https://repos.influxdata.com/centos/6/$basearch/stable"
centos: "https://repos.influxdata.com/rhel/{{ telegraf_redhat_releasever }}/$basearch/stable"
default: "https://repos.influxdata.com/{{ ansible_distribution|lower }}/{{ telegraf_redhat_releasever }}/$basearch/stable"
redhat: "https://repos.influxdata.com/rhel/{{ telegraf_redhat_releasever }}/$basearch/stable"
telegraf_win_install_dir: 'C:\Telegraf'
telegraf_win_logfile: 'C:\\Telegraf\\telegraf.log'
telegraf_win_include: 'C:\Telegraf\telegraf_agent.d'
telegraf_win_service_args:
- -service install
- -config {{ telegraf_win_install_dir }}\telegraf\telegraf.conf
- --config-directory {{ telegraf_win_include }}

212
files/telegraf.init Normal file
View File

@ -0,0 +1,212 @@
#! /usr/bin/env bash
# chkconfig: 2345 99 01
# description: Telegraf daemon
### BEGIN INIT INFO
# Provides: telegraf
# Required-Start: $all
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start telegraf at boot time
### END INIT INFO
# this init script supports three different variations:
# 1. New lsb that define start-stop-daemon
# 2. Old lsb that don't have start-stop-daemon but define, log, pidofproc and killproc
# 3. Centos installations without lsb-core installed
#
# In the third case we have to define our own functions which are very dumb
# and expect the args to be positioned correctly.
# Command-line options that can be set in /etc/default/telegraf. These will override
# any config file values.
TELEGRAF_OPTS=
USER=telegraf
GROUP=telegraf
if [ -r /lib/lsb/init-functions ]; then
source /lib/lsb/init-functions
fi
DEFAULT=/etc/default/telegraf
if [ -r $DEFAULT ]; then
set -o allexport
source $DEFAULT
set +o allexport
fi
if [ -z "$STDOUT" ]; then
STDOUT=/dev/null
fi
if [ ! -f "$STDOUT" ]; then
mkdir -p `dirname $STDOUT`
fi
if [ -z "$STDERR" ]; then
STDERR=/var/log/telegraf/telegraf.log
fi
if [ ! -f "$STDERR" ]; then
mkdir -p `dirname $STDERR`
fi
OPEN_FILE_LIMIT=65536
function pidofproc() {
if [ $# -ne 3 ]; then
echo "Expected three arguments, e.g. $0 -p pidfile daemon-name"
fi
if [ ! -f "$2" ]; then
return 1
fi
local pidfile=`cat $2`
if [ "x$pidfile" == "x" ]; then
return 1
fi
if ps --pid "$pidfile" | grep -q $(basename $3); then
return 0
fi
return 1
}
function killproc() {
if [ $# -ne 3 ]; then
echo "Expected three arguments, e.g. $0 -p pidfile signal"
fi
pid=`cat $2`
kill -s $3 $pid
}
function log_failure_msg() {
echo "$@" "[ FAILED ]"
}
function log_success_msg() {
echo "$@" "[ OK ]"
}
# Process name ( For display )
name=telegraf
# Daemon name, where is the actual executable
daemon=/usr/bin/telegraf
# pid file for the daemon
pidfile=/var/run/telegraf/telegraf.pid
piddir=`dirname $pidfile`
if [ ! -d "$piddir" ]; then
mkdir -p $piddir
chown $USER:$GROUP $piddir
fi
# Configuration file
config=/etc/telegraf/telegraf.conf
confdir=/etc/telegraf/telegraf.d
# If the daemon is not there, then exit.
[ -x $daemon ] || exit 5
case $1 in
start)
# Checked the PID file exists and check the actual status of process
if [ -e $pidfile ]; then
pidofproc -p $pidfile $daemon > /dev/null 2>&1 && status="0" || status="$?"
# If the status is SUCCESS then don't need to start again.
if [ "x$status" = "x0" ]; then
log_failure_msg "$name process is running"
exit 0 # Exit
fi
fi
# Bump the file limits, before launching the daemon. These will carry over to
# launched processes.
ulimit -n $OPEN_FILE_LIMIT
if [ $? -ne 0 ]; then
log_failure_msg "set open file limit to $OPEN_FILE_LIMIT"
fi
log_success_msg "Starting the process" "$name"
if command -v startproc >/dev/null; then
startproc -u "$USER" -g "$GROUP" -p "$pidfile" -q -- "$daemon" -pidfile "$pidfile" -config "$config" -config-directory "$confdir" $TELEGRAF_OPTS
elif which start-stop-daemon > /dev/null 2>&1; then
start-stop-daemon --chuid $USER:$GROUP --start --quiet --pidfile $pidfile --exec $daemon -- -pidfile $pidfile -config $config -config-directory $confdir $TELEGRAF_OPTS >>$STDOUT 2>>$STDERR &
else
su -s /bin/sh -c "nohup $daemon -pidfile $pidfile -config $config -config-directory $confdir $TELEGRAF_OPTS >>$STDOUT 2>>$STDERR &" $USER
fi
log_success_msg "$name process was started"
;;
stop)
# Stop the daemon.
if [ -e $pidfile ]; then
pidofproc -p $pidfile $daemon > /dev/null 2>&1 && status="0" || status="$?"
if [ "$status" = 0 ]; then
if killproc -p $pidfile SIGTERM && /bin/rm -rf $pidfile; then
log_success_msg "$name process was stopped"
else
log_failure_msg "$name failed to stop service"
fi
fi
else
log_failure_msg "$name process is not running"
fi
;;
reload)
# Reload the daemon.
if [ -e $pidfile ]; then
pidofproc -p $pidfile $daemon > /dev/null 2>&1 && status="0" || status="$?"
if [ "$status" = 0 ]; then
if killproc -p $pidfile SIGHUP; then
log_success_msg "$name process was reloaded"
else
log_failure_msg "$name failed to reload service"
fi
fi
else
log_failure_msg "$name process is not running"
fi
;;
restart)
# Restart the daemon.
$0 stop && sleep 2 && $0 start
;;
status)
# Check the status of the process.
if [ -e $pidfile ]; then
if pidofproc -p $pidfile $daemon > /dev/null; then
log_success_msg "$name Process is running"
exit 0
else
log_failure_msg "$name Process is not running"
exit 1
fi
else
log_failure_msg "$name Process is not running"
exit 3
fi
;;
version)
$daemon version
;;
*)
# For invalid arguments, print the usage message.
echo "Usage: $0 {start|stop|restart|status|version}"
exit 2
;;
esac

View File

@ -6,4 +6,17 @@
name: telegraf
state: restarted
enabled: yes
when: not telegraf_agent_docker
become: yes
- name: "Restart Telegraf container"
docker_container:
name: "{{ telegraf_agent_docker_name }}"
restart: True
when: telegraf_agent_docker
- name: "Restart Windows Telegraf"
win_service:
name: Telegraf
start_mode: auto
state: restarted

View File

@ -2,8 +2,8 @@
galaxy_info:
author: Werner Dijkerman
description: Installing and configuring Telegraf
company:
license: license BSD
company: myCompany.Dotcom
license: MIT
min_ansible_version: 2.4
platforms:
- name: EL
@ -15,6 +15,14 @@ galaxy_info:
- name: Debian
versions:
- all
categories:
- name: opensuse
versions:
- all
- name: Windows
versions:
- all
galaxy_tags:
- monitoring
dependencies: []

View File

@ -1,7 +1,14 @@
FROM {{ item.image }}
# Molecule managed
RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get upgrade -y && apt-get install -y python sudo bash ca-certificates && apt-get clean; \
elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python python-devel python2-dnf bash && dnf clean all; \
elif [ $(command -v yum) ]; then yum makecache fast && yum update -y && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \
elif [ $(command -v zypper) ]; then zypper refresh && zypper update -y && zypper install -y python sudo bash python-xml && zypper clean -a; \
elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; fi
{% if item.registry is defined %}
FROM {{ item.registry.url }}/{{ item.image }}
{% else %}
FROM {{ item.image }}
{% endif %}
RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \
elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python2-dnf bash && dnf clean all; \
elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \
elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \
elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \
elif [ $(command -v xbps-install) ]; then xbps-install -Syu && xbps-install -y python sudo bash ca-certificates && xbps-remove -O; fi

View File

@ -2,14 +2,22 @@
- name: Create
hosts: localhost
connection: local
gather_facts: False
gather_facts: false
no_log: "{{ not lookup('env', 'MOLECULE_DEBUG') | bool }}"
vars:
molecule_file: "{{ lookup('env', 'MOLECULE_FILE') }}"
molecule_ephemeral_directory: "{{ lookup('env', 'MOLECULE_EPHEMERAL_DIRECTORY') }}"
molecule_scenario_directory: "{{ lookup('env', 'MOLECULE_SCENARIO_DIRECTORY') }}"
molecule_yml: "{{ lookup('file', molecule_file) | from_yaml }}"
tasks:
- name: Log into a Docker registry
docker_login:
username: "{{ item.registry.credentials.username }}"
password: "{{ item.registry.credentials.password }}"
email: "{{ item.registry.credentials.email | default(omit) }}"
registry: "{{ item.registry.url }}"
docker_host: "{{ item.docker_host | default(lookup('env', 'DOCKER_HOST') or 'unix://var/run/docker.sock') }}"
with_items: "{{ molecule_yml.platforms }}"
when:
- item.registry is defined
- item.registry.credentials is defined
- item.registry.credentials.username is defined
- name: Create Dockerfiles from image names
template:
src: "{{ molecule_scenario_directory }}/Dockerfile.j2"
@ -20,6 +28,7 @@
- name: Discover local Docker images
docker_image_facts:
name: "molecule_local/{{ item.item.name }}"
docker_host: "{{ item.item.docker_host | default(lookup('env', 'DOCKER_HOST') or 'unix://var/run/docker.sock') }}"
with_items: "{{ platforms.results }}"
register: docker_images
@ -27,21 +36,49 @@
docker_image:
path: "{{ molecule_ephemeral_directory }}"
name: "molecule_local/{{ item.item.image }}"
docker_host: "{{ item.item.docker_host | default(lookup('env', 'DOCKER_HOST') or 'unix://var/run/docker.sock') }}"
dockerfile: "{{ item.item.dockerfile | default(item.invocation.module_args.dest) }}"
force: "{{ item.item.force | default(True) }}"
force: "{{ item.item.force | default(true) }}"
pull: "{{ item.item.pull | default(omit) }}"
with_items: "{{ platforms.results }}"
when: platforms.changed or docker_images.results | map(attribute='images') | select('equalto', []) | list | count >= 0
- name: Create docker network(s)
docker_network:
name: "{{ item }}"
docker_host: "{{ item.docker_host | default(lookup('env', 'DOCKER_HOST') or 'unix://var/run/docker.sock') }}"
state: present
with_items: "{{ molecule_yml.platforms | molecule_get_docker_networks }}"
- name: Create molecule instance(s)
docker_container:
name: "{{ item.name }}"
hostname: "{{ item.name }}"
docker_host: "{{ item.docker_host | default(lookup('env', 'DOCKER_HOST') or 'unix://var/run/docker.sock') }}"
hostname: "{{ item.hostname | default(item.name) }}"
image: "molecule_local/{{ item.image }}"
state: started
recreate: False
log_driver: none
command: "{{ item.command | default('sleep infinity') }}"
recreate: false
log_driver: json-file
command: "{{ item.command | default('bash -c \"while true; do sleep 10000; done\"') }}"
privileged: "{{ item.privileged | default(omit) }}"
security_opts: "{{ item.security_opts | default(omit) }}"
volumes: "{{ item.volumes | default(omit) }}"
tmpfs: "{{ item.tmpfs | default(omit) }}"
capabilities: "{{ item.capabilities | default(omit) }}"
exposed_ports: "{{ item.exposed_ports | default(omit) }}"
published_ports: "{{ item.published_ports | default(omit) }}"
ulimits: "{{ item.ulimits | default(omit) }}"
networks: "{{ item.networks | default(omit) }}"
dns_servers: "{{ item.dns_servers | default(omit) }}"
register: server
with_items: "{{ molecule_yml.platforms }}"
async: 7200
poll: 0
- name: Wait for instance(s) creation to complete
async_status:
jid: "{{ item.ansible_job_id }}"
register: docker_jobs
until: docker_jobs.finished
retries: 300
with_items: "{{ server.results }}"

View File

@ -2,15 +2,31 @@
- name: Destroy
hosts: localhost
connection: local
gather_facts: False
gather_facts: false
no_log: "{{ not lookup('env', 'MOLECULE_DEBUG') | bool }}"
vars:
molecule_file: "{{ lookup('env', 'MOLECULE_FILE') }}"
molecule_yml: "{{ lookup('file', molecule_file) | from_yaml }}"
tasks:
- name: Destroy molecule instance(s)
docker_container:
name: "{{ item.name }}"
docker_host: "{{ item.docker_host | default(lookup('env', 'DOCKER_HOST') or 'unix://var/run/docker.sock') }}"
state: absent
force_kill: "{{ item.force_kill | default(True) }}"
force_kill: "{{ item.force_kill | default(true) }}"
register: server
with_items: "{{ molecule_yml.platforms }}"
async: 7200
poll: 0
- name: Wait for instance(s) deletion to complete
async_status:
jid: "{{ item.ansible_job_id }}"
register: docker_jobs
until: docker_jobs.finished
retries: 300
with_items: "{{ server.results }}"
- name: Delete docker network(s)
docker_network:
name: "{{ item }}"
docker_host: "{{ item.docker_host | default(lookup('env', 'DOCKER_HOST') or 'unix://var/run/docker.sock') }}"
state: absent
with_items: "{{ molecule_yml.platforms | molecule_get_docker_networks }}"

View File

@ -9,22 +9,76 @@ lint:
config-file: molecule/default/yaml-lint.yml
platforms:
- name: influxdb
image: influxdb:1.7-alpine
command: influxd
groups:
- tsdb
networks:
- name: telegraf
environment:
INFLUXDB_DB: telegraf
- name: telegraf-centos
image: milcom/centos7-systemd
privileged: True
groups:
- telegraf
networks:
- name: telegraf
- name: telegraf-debian
image: minimum2scp/systemd-stretch
privileged: True
command: /sbin/init
groups:
- telegraf
networks:
- name: telegraf
- name: telegraf-ubuntu
image: solita/ubuntu-systemd:bionic
privileged: True
command: /sbin/init
groups:
- telegraf
networks:
- name: telegraf
- name: telegraf-opensuse
image: wdijkerman/molecule-systemd-leap
privileged: True
command: /sbin/init
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
groups:
- telegraf
networks:
- name: telegraf
provisioner:
name: ansible
lint:
name: ansible-lint
inventory:
host_vars:
telegraf-debian:
telegraf_agent_package: /tmp/telegraf_amd64.deb
telegraf_agent_package_method: online
group_vars:
all:
telegraf_agent_package_state: latest
telegraf_agent_output:
- type: influxdb
config:
- urls = ["http://influxdb:8086"]
- database = "telegraf"
- precision = "s"
telegraf_plugins_extra:
percpu-usage:
plugin: cpu
config:
- percpu = true
- totalcpu = false
- name_override = "percpu_usage"
- fielddrop = ["cpu_time*"]
scenario:
name: default
verifier:

View File

@ -1,22 +1,4 @@
---
- hosts: all
pre_tasks:
- name: "Installing which on CentOS"
yum:
name: which
state: present
when:
- ansible_os_family == 'RedHat'
- name: "Installing wget on Debian"
apt:
name: "{{ item }}"
state: present
when:
- ansible_os_family == 'Debian'
with_items:
- wget
- gpg
- hosts: telegraf
roles:
- role: ansible-telegraf

View File

@ -0,0 +1,29 @@
---
- hosts: telegraf
tasks:
- name: "Installing packages on CentOS"
yum:
name: which
state: present
when:
- ansible_os_family == 'RedHat'
- name: "Installing packages on Debian"
apt:
name:
- wget
- gpg
state: present
when:
- ansible_os_family == 'Debian'
- name: "Installing packages on Suse"
zypper:
name:
- sysvinit-tools
- insserv-compat
- aaa_base
state: present
when:
- ansible_os_family == 'Suse'

View File

@ -3,13 +3,13 @@ import os
import testinfra.utils.ansible_runner
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('telegraf')
def test_telegraf_running_and_enabled(Service, SystemInfo):
telegraf = Service("telegraf")
if SystemInfo.distribution not in ['opensuse-leap']:
assert telegraf.is_enabled
if SystemInfo.distribution == 'centos':
assert telegraf.is_running
@ -18,9 +18,31 @@ def test_telegraf_dot_conf(File):
assert telegraf.user == "telegraf"
assert telegraf.group == "telegraf"
assert telegraf.mode == 0o640
assert telegraf.contains('interval = "10s"')
assert telegraf.contains('[[inputs.cpu]]')
assert telegraf.contains('percpu = true')
assert telegraf.contains('[[outputs.influxdb]]')
assert telegraf.contains('["http://influxdb:8086"]')
assert telegraf.contains('[[inputs.net]]')
def test_telegraf_package(Package, SystemInfo):
def test_telegraf_dot_d_dir(File):
telegraf = File("/etc/telegraf/telegraf.d")
assert telegraf.user == "root"
assert telegraf.group == "root"
assert telegraf.mode == 0o755
assert telegraf.is_directory
def test_telegraf_dot_d(File):
telegraf = File("/etc/telegraf/telegraf.d/percpu-usage.conf")
assert telegraf.user == "telegraf"
assert telegraf.group == "telegraf"
assert telegraf.mode == 0o640
assert telegraf.contains('[[inputs.cpu]]')
assert telegraf.contains('totalcpu = false')
def test_telegraf_package(Package):
telegraf = Package('telegraf')
assert telegraf.is_installed

View File

@ -4,6 +4,6 @@ extends: default
rules:
line-length:
max: 140
max: 180
level: warning
truthy: disable

View File

@ -1,4 +0,0 @@
ansible==2.4.4.0
docker==3.3.0
molecule==2.13.1
testinfra==1.12.0

View File

@ -1,42 +1,93 @@
---
- name: Ensure the system can use the HTTPS transport for APT.
- name: "Debian | Set name if state == latest"
set_fact:
telegraf_agent_package: telegraf={{ telegraf_agent_version }}-{{ telegraf_agent_version_patch }}
when:
- telegraf_agent_package_state != "latest"
- name: "Debian | Set telegraf_agent_package_arch"
set_fact:
telegraf_agent_package_arch: "{{ ansible_architecture }}"
- name: "Debian | Set telegraf_agent_package_arch specific for x86_64"
set_fact:
telegraf_agent_package_arch: "amd64"
when:
- ansible_architecture == "x86_64"
- name: "Debian | Ensure the system can use the HTTPS transport for APT"
stat:
path: /usr/lib/apt/methods/https
register: apt_https_transport
- name: Install APT HTTPS transport.
- name: "Debian | Install APT HTTPS transport"
apt:
name: "apt-transport-https"
state: present
when: not apt_https_transport.stat.exists
register: are_telegraf_dependencies_packages_installed
until: are_telegraf_dependencies_packages_installed is succeeded
when:
- not apt_https_transport.stat.exists
become: yes
- name: Download Telegraf apt key.
- name: "Debian | Download Telegraf apt key"
apt_key:
url: "https://repos.influxdata.com/influxdb.key"
id: 2582E0C5
state: present
register: are_telegraf_dependencies_keys_installed
until: are_telegraf_dependencies_keys_installed is succeeded
become: yes
when:
- telegraf_agent_package_method == "repo"
- name: Add Telegraf repository (using LSB).
- name: "Debian | Add Telegraf repository (using LSB)"
apt_repository:
repo: "deb https://repos.influxdata.com/{{ ansible_distribution|lower }} {{ ansible_lsb.codename }} stable"
filename: "telegraf"
state: present
become: yes
when: ansible_lsb is defined and ansible_lsb.codename is defined
when:
- telegraf_agent_package_method == "repo"
- ansible_lsb is defined
- ansible_lsb.codename is defined
- name: Add Telegraf repository.
- name: "Debian | Add Telegraf repository"
apt_repository:
repo: "deb https://repos.influxdata.com/{{ ansible_distribution|lower }} {{ ansible_distribution_release }} stable"
filename: "telegraf"
state: present
become: yes
when: ansible_lsb is not defined or ansible_lsb.codename is not defined
when:
- telegraf_agent_package_method == "repo"
- ansible_lsb is not defined or ansible_lsb.codename is not defined
- name: "Install telegraf package | Debian"
- name: "Debian | Download Telegraf package (online)"
get_url:
url: https://dl.influxdata.com/telegraf/releases/telegraf_{{ telegraf_agent_version }}-{{ telegraf_agent_version_patch }}_{{ telegraf_agent_package_arch }}.deb
dest: "{{ telegraf_agent_package }}"
when:
- telegraf_agent_package_method == "online"
- name: "Debian | Install Telegraf package"
apt:
name: "telegraf"
state: present
name: "{{ telegraf_agent_package }}"
state: "{{ telegraf_agent_package_state }}"
register: is_telegraf_package_installed
until: is_telegraf_package_installed is succeeded
notify: "Restart Telegraf"
become: yes
when:
- telegraf_agent_package_method == "repo"
- name: "Debian | Install Telegraf package"
apt:
deb: "{{ telegraf_agent_package }}"
state: "present"
register: is_telegraf_package_installed
until: is_telegraf_package_installed is succeeded
notify: "Restart Telegraf"
become: yes
when:
- telegraf_agent_package_method != "repo"

View File

@ -1,16 +1,38 @@
---
# description: RedHat specific installation
- name: "Add yum repository | RedHat"
- name: "RedHat | Set name if state == latest"
set_fact:
telegraf_agent_package: telegraf-{{ telegraf_agent_version }}
when:
- telegraf_agent_package_state != "latest"
- name: Use RHEL 7 packages for Fedora
set_fact:
telegraf_redhat_releasever: 7
when: ansible_distribution == "Fedora"
- name: "RedHat | Add yum repository"
yum_repository:
name: influxdb
description: InfluxDB Repository - RHEL $releasever
baseurl: "https://repos.influxdata.com/rhel/{{ telegraf_redhat_releasever }}/$basearch/stable"
baseurl: "{{ telegraf_yum_baseurl[ansible_distribution|lower] | default(telegraf_yum_baseurl['default']) }}"
gpgcheck: yes
gpgkey: https://repos.influxdata.com/influxdb.key
when:
- telegraf_agent_package_method == "repo"
- name: "Install telegraf package | RedHat"
yum:
name: "telegraf-{{ telegraf_agent_version }}"
state: installed
- name: "RedHat | Download Telegraf package (online)"
get_url:
url: https://dl.influxdata.com/telegraf/releases/telegraf-{{ telegraf_agent_version }}-{{ telegraf_agent_version_patch }}.{{ ansible_architecture }}.rpm
dest: "{{ telegraf_agent_package }}"
when:
- telegraf_agent_package_method == "online"
- name: "RedHat | Install Telegraf package"
package:
name: "{{ telegraf_agent_package }}"
state: "{{ telegraf_agent_package_state }}"
register: is_telegraf_package_installed
until: is_telegraf_package_installed is succeeded
notify: "Restart Telegraf"

56
tasks/Suse.yml Normal file
View File

@ -0,0 +1,56 @@
---
- name: "Suse | Adding Telegraf group"
group:
name: telegraf
state: present
- name: "Suse | Adding Telegraf user"
user:
name: telegraf
group: telegraf
state: present
become: yes
- name: "Suse | Install repo dependencies"
zypper:
name: ["python-libxml2", "python-xml"]
update_cache: True
state: present
register: are_telegraf_dependencies_packages_installed
until: are_telegraf_dependencies_packages_installed is succeeded
become: yes
- name: "Suse | Install basic repo file"
zypper_repository:
repo: "http://download.opensuse.org/repositories/devel:/languages:/go/openSUSE_Factory/"
name: The Go Programming Language (openSUSE_Factory)
state: present
runrefresh: True
auto_import_keys: True
become: yes
- name: "Suse | Install Telegraf"
zypper:
name: "{{ telegraf_agent_package }}"
state: "{{ telegraf_agent_package_state }}"
register: is_telegraf_package_installed
until: is_telegraf_package_installed is succeeded
become: yes
- name: "Suse | Create directories for telegraf"
file:
path: "{{ item.path }}"
owner: "{{ item.owner }}"
state: directory
with_items:
- path: /etc/telegraf/telegraf.d/
owner: root
- path: /var/log/telegraf
owner: telegraf
- name: "Suse | Install init file"
copy:
src: telegraf.init
dest: /etc/init.d/telegraf
mode: 0755

View File

@ -1,60 +0,0 @@
---
# description: Configure telegraf and get all relevent ec2 information
- name: Retrieve ec2 facts
ec2_facts:
when: telegraf_agent_aws_tags
- name: Retrieve all ec2 tags on the instance
ec2_tag:
region: '{{ ansible_ec2_placement_region }}'
resource: '{{ ansible_ec2_instance_id }}'
state: list
when: telegraf_agent_aws_tags
register: ec2_tags
- name: "Copy the template for versions < 0.10.0"
template:
src: etc-opt-telegraf-telegraf.conf.j2
dest: /etc/opt/telegraf/telegraf.conf
owner: telegraf
group: telegraf
mode: 0640
become: yes
when: telegraf_agent_version is version_compare('0.10.0', '<')
notify: "Restart Telegraf"
- name: "Copy the template for versions >= 0.10.0"
template:
src: telegraf.conf.j2
dest: /etc/telegraf/telegraf.conf
owner: telegraf
group: telegraf
mode: 0640
become: yes
when: telegraf_agent_version is version_compare('0.10.0', '>=')
notify: "Restart Telegraf"
- name: "Copy telegraf extra plugins"
template:
src: "telegraf-extra-plugin.conf.j2"
dest: "/etc/telegraf/telegraf.d/{{ item.key }}.conf"
owner: telegraf
group: telegraf
mode: 0640
with_dict: "{{ telegraf_plugins_extra }}"
when: "telegraf_plugins_extra is defined and telegraf_plugins_extra is iterable and item.value.state|default('present') != 'absent'"
become: yes
notify: "Restart Telegraf"
- name: "Remove telegraf extra plugins"
file:
path: "/etc/telegraf/telegraf.d/{{ item.key }}.conf"
state: absent
with_dict: "{{ telegraf_plugins_extra }}"
when: "telegraf_plugins_extra is defined and telegraf_plugins_extra is iterable and item.value.state|default('present') == 'absent'"
become: yes
notify: "Restart Telegraf"
- name: "Force restart service after reread config"
meta: flush_handlers

124
tasks/configure_linux.yml Normal file
View File

@ -0,0 +1,124 @@
---
# description: Configure telegraf and get all relevent ec2 information
- name: Retrieve ec2 facts
ec2_metadata_facts:
when:
- telegraf_agent_aws_tags
- name: Retrieve all ec2 tags on the instance
ec2_tag:
region: '{{ ansible_ec2_placement_region }}'
resource: '{{ ansible_ec2_instance_id }}'
state: list
when:
- telegraf_agent_aws_tags
register: ec2_tags
- name: "Copy the template for versions < 0.10.0"
template:
src: etc-opt-telegraf-telegraf.conf.j2
dest: /etc/opt/telegraf/telegraf.conf
owner: telegraf
group: telegraf
mode: 0640
become: yes
when:
- telegraf_agent_version is version_compare('0.10.0', '<')
notify:
- Restart Telegraf
- Restart Telegraf container
- name: "Copy the template for versions >= 0.10.0"
template:
src: telegraf.conf.j2
dest: /etc/telegraf/telegraf.conf
owner: telegraf
group: telegraf
mode: 0640
become: yes
when:
- telegraf_agent_version is version_compare('0.10.0', '>=')
notify:
- Restart Telegraf
- Restart Telegraf container
- name: "Check if extra plugins directory exists in case of exclusive"
stat:
path: /etc/telegraf/telegraf.d
register: telegraf_directory
when:
- telegraf_plugins_extra_exclusive
- name: "Delete telegraf extra plugin path"
file:
state: absent
path: "/etc/telegraf/telegraf.d/"
when:
- telegraf_plugins_extra_exclusive
- telegraf_directory.stat.exists
become: yes
notify:
- Restart Telegraf
- Restart Telegraf container
- name: "Create telegraf extra plugin path"
file:
state: directory
path: "/etc/telegraf/telegraf.d/"
owner: telegraf
group: telegraf
mode: 0755
when:
- telegraf_plugins_extra_exclusive
- telegraf_directory.stat.exists
become: yes
notify:
- Restart Telegraf
- Restart Telegraf container
- name: "Copy telegraf extra plugins"
template:
src: "telegraf-extra-plugin.conf.j2"
dest: "/etc/telegraf/telegraf.d/{{ item.key }}.conf"
owner: telegraf
group: telegraf
mode: 0640
with_dict: "{{ telegraf_plugins_extra }}"
loop_control:
label: "{{ item.key }}"
when:
- telegraf_plugins_extra is defined
- telegraf_plugins_extra is iterable
- item.value.state|default('present') != 'absent'
become: yes
notify:
- Restart Telegraf
- Restart Telegraf container
- name: "Remove telegraf extra plugins"
file:
path: "/etc/telegraf/telegraf.d/{{ item.key }}.conf"
state: absent
with_dict: "{{ telegraf_plugins_extra }}"
loop_control:
label: "{{ item.key }}"
when:
- telegraf_plugins_extra is defined
- telegraf_plugins_extra is iterable
- item.value.state|default('present') == 'absent'
become: yes
notify:
- Restart Telegraf
- Restart Telegraf container
- name: "Force restart service after reread config"
meta: flush_handlers
- name: "Start Telegraf (If it wasn't running)"
service:
name: telegraf
state: started
enabled: yes
become: yes
when: not telegraf_agent_docker

View File

@ -0,0 +1,78 @@
---
- name: "Windows | Create directory structure"
win_file:
path: "{{ item }}"
state: directory
with_items:
- "{{ telegraf_win_install_dir }}"
- "{{ telegraf_win_include }}"
- name: "Windows | Check if file is already downloaded"
win_stat:
path: '{{ telegraf_win_install_dir }}\telegraf-{{ telegraf_agent_version }}_windows_amd64.zip'
register: file_info
- name: "Windows | Download Telegraf Agent Zip file"
win_get_url:
url: https://dl.influxdata.com/telegraf/releases/telegraf-{{ telegraf_agent_version }}_windows_amd64.zip
dest: '{{ telegraf_win_install_dir }}\telegraf-{{ telegraf_agent_version }}_windows_amd64.zip'
when:
- not file_info.stat.exists
- name: "Windows | Unzip file"
win_unzip:
src: '{{ telegraf_win_install_dir }}\telegraf-{{ telegraf_agent_version }}_windows_amd64.zip'
dest: "{{ telegraf_win_install_dir }}"
creates: '{{ telegraf_win_install_dir }}\telegraf\telegraf.exe'
- name: "Windows | Configure Telegraf"
win_template:
src: telegraf.conf.j2
dest: '{{ telegraf_win_install_dir }}\telegraf\telegraf.conf'
notify: "Restart Windows Telegraf"
- name: "Windows | Copy telegraf extra plugins"
win_template:
src: "telegraf-extra-plugin.conf.j2"
dest: '{{ telegraf_win_include }}\{{ item.key }}.conf'
with_dict: "{{ telegraf_plugins_extra }}"
loop_control:
label: "{{ item.key }}"
when:
- telegraf_plugins_extra is defined
- telegraf_plugins_extra is iterable
- item.value.state|default('present') != 'absent'
notify: "Restart Windows Telegraf"
- name: "Windows | Remove telegraf extra plugins"
win_file:
path: '{{ telegraf_win_include }}\{{ item.key }}.conf'
state: absent
with_dict: "{{ telegraf_plugins_extra }}"
loop_control:
label: "{{ item.key }}"
when:
- telegraf_plugins_extra is defined
- telegraf_plugins_extra is iterable
- item.value.state|default('present') == 'absent'
notify: "Restart Windows Telegraf"
- name: "Windows | Register Service"
win_command: '{{ telegraf_win_install_dir }}\telegraf\telegraf.exe {{ telegraf_win_service_args | join(" ") }}'
register: telegraf_windows_install
args:
creates: '{{ telegraf_win_install_dir }}\.installed'
- name: "Windows | Create done file so it won't register itself again"
win_file:
path: '{{ telegraf_win_install_dir }}\.installed'
state: touch
when:
- telegraf_windows_install is changed
- name: "Windows | Set service startup mode to auto and ensure it is started"
win_service:
name: Telegraf
start_mode: auto
state: started

59
tasks/docker.yml Normal file
View File

@ -0,0 +1,59 @@
---
- name: Adding Telegraf group
group:
name: telegraf
state: present
gid: "{{ telegraf_gid_docker }}"
- name: Adding Telegraf user
user:
name: telegraf
group: telegraf
state: present
create_home: False
home: /etc/telegraf
uid: "{{ telegraf_uid_docker }}"
system: True
become: yes
- name: Create /etc/telegraf (home) directory
file:
path: /etc/telegraf
owner: telegraf
group: telegraf
mode: 0750
state: directory
become: yes
- name: Create /etc/telegraf.d directory
file:
path: /etc/telegraf/telegraf.d
owner: telegraf
group: telegraf
mode: 0750
state: directory
become: yes
- name: Ensure Telegraf Docker container is running
docker_container:
name: "{{ telegraf_agent_docker_name }}"
image: "telegraf:{{ telegraf_agent_version }}"
state: started
restart_policy: "{{ telegraf_agent_docker_restart_policy }}"
command: -config /etc/telegraf/telegraf.conf -config-directory /etc/telegraf/telegraf.d
network_mode: "{{ telegraf_agent_docker_network_mode }}"
security_opts:
- apparmor:unconfined
volumes:
- /etc/telegraf:/etc/telegraf:ro
- /:/hostfs:ro
- /etc:/hostfs/etc:ro
- /proc:/hostfs/proc:ro
- /sys:/hostfs/sys:ro
- /var/run:/var/run:ro
env:
HOST_MOUNT_PREFIX: /hostfs
HOST_ETC: /hostfs/etc
HOST_PROC: /hostfs/proc
HOST_SYS: /hostfs/sys

View File

@ -1,16 +1,32 @@
---
# tasks file for ansible-telegraf
- name: "Install the correct repository"
- name: "Install on RedHat"
include_tasks: "RedHat.yml"
when: ansible_os_family == "RedHat"
when:
- ansible_os_family == "RedHat" and not telegraf_agent_docker
- name: "Install the correct repository"
- name: "Install on Debian"
include_tasks: "Debian.yml"
when: ansible_os_family == "Debian"
when:
- ansible_os_family == "Debian" and not telegraf_agent_docker
tags:
- telegraf
- packages
- name: "Configure telegraf"
include_tasks: "configure.yml"
- name: "Install on Suse"
include_tasks: "Suse.yml"
when: ansible_os_family == "Suse" and not telegraf_agent_docker
- include_tasks: "docker.yml"
when: telegraf_agent_docker
- name: "Configure Telegraf"
include_tasks: "configure_linux.yml"
when:
- ansible_os_family != "Windows"
- name: "Install / Configure telegraf on Windows"
include_tasks: "configure_windows.yml"
when:
- ansible_os_family == "Windows" and not telegraf_agent_docker

View File

@ -27,6 +27,18 @@
{% for items in item.config %}
{{ items }}
{% endfor %}
{% if item.tagpass is defined and item.tagpass is iterable %}
[outputs.{{ item.type }}.tagpass]
{% for items in item.tagpass %}
{{ items }}
{% endfor %}
{% endif %}
{% if item.tagdrop is defined and item.tagdrop is iterable %}
[outputs.{{ item.type }}.tagdrop]
{% for items in item.tagdrop %}
{{ items }}
{% endfor %}
{% endif %}
{% endfor %}
{% endif %}
@ -43,36 +55,17 @@
{% endfor %}
{% endif %}
{% if item.tagpass is defined and item.tagpass is iterable %}
[{{ item.plugin }}.tagpass]
[inputs.{{ item.plugin }}.tagpass]
{% for items in item.tagpass %}
{{ items }}
{% endfor %}
{% endif %}
{% if item.tagdrop is defined and item.tagdrop is iterable %}
[{{ item.plugin }}.tagdrop]
[inputs.{{ item.plugin }}.tagdrop]
{% for items in item.tagdrop %}
{{ items }}
{% endfor %}
{% endif %}
{% if item.pass is defined and item.pass is iterable %}
[{{ item.plugin }}.pass]
{% for items in item.pass %}
{{ items }}
{% endfor %}
{% endif %}
{% if item.drop is defined and item.drop is iterable %}
[{{ item.plugin }}.drop]
{% for items in item.drop %}
{{ items }}
{% endfor %}
{% endif %}
{% if item.specifications is defined and item.specifications is iterable %}
[[{{item.plugin}}.specifications]]
{% for items in item.specifications %}
{{ items }}
{% endfor %}
{% endif %}
{% endfor %}
{% endif %}

View File

@ -16,32 +16,24 @@
{% endfor %}
{% endif %}
{% if item.value.tagpass is defined and item.value.tagpass is iterable %}
[{{ item.value.plugin | default(item.key) }}.tagpass]
[inputs.{{ item.value.plugin | default(item.key) }}.tagpass]
{% for items in item.value.tagpass %}
{{ items }}
{% endfor %}
{% endif %}
{% if item.value.tagdrop is defined and item.value.tagdrop is iterable %}
[{{ item.value.plugin | default(item.key) }}.tagdrop]
[inputs.{{ item.value.plugin | default(item.key) }}.tagdrop]
{% for items in item.value.tagdrop %}
{{ items }}
{% endfor %}
{% endif %}
{% if item.value.pass is defined and item.value.pass is iterable %}
[{{ item.value.plugin | default(item.key) }}.pass]
{% for items in item.value.pass %}
{{ items }}
{% endfor %}
{% endif %}
{% if item.value.drop is defined and item.value.drop is iterable %}
[{{ item.value.plugin | default(item.key) }}.drop]
{% for items in item.value.drop %}
{{ items }}
{% endfor %}
{% endif %}
{% if item.value.specifications is defined and item.value.specifications is iterable %}
[[{{item.value.plugin | default(item.key)}}.specifications]]
{% for items in item.value.specifications %}
{{ items }}
{% if item.value.objects is defined and item.value.objects is iterable %}
{% for object in item.value.objects %}
[[inputs.{{ item.value.plugin | default(item.key) }}.object]]
ObjectName = {{ object.name | to_json }}
Instances = {{ object.instances | default(["*"]) | to_json }}
Counters = {{ object.counters | default(["*"]) | to_json }}
Measurement = {{ object.measurement | default("win_perf_counters") | to_json }}
IncludeTotal = {{ object.total | default(false) | string | lower }}
{% endfor %}
{% endif %}

View File

@ -28,7 +28,11 @@
quiet = {{ telegraf_agent_quiet | lower }}
{% endif %}
{% if telegraf_agent_version is version_compare('1.1', '>=') %}
{% if ansible_os_family == "Windows" %}
logfile = "{{ telegraf_win_logfile }}"
{% else %}
logfile = "{{ telegraf_agent_logfile }}"
{% endif %}
omit_hostname = {{ telegraf_agent_omit_hostname | lower }}
{% endif %}
@ -42,6 +46,18 @@
{% for items in item.config %}
{{ items }}
{% endfor %}
{% if item.tagpass is defined and item.tagpass is iterable %}
[outputs.{{ item.type }}.tagpass]
{% for items in item.tagpass %}
{{ items }}
{% endfor %}
{% endif %}
{% if item.tagdrop is defined and item.tagdrop is iterable %}
[outputs.{{ item.type }}.tagdrop]
{% for items in item.tagdrop %}
{{ items }}
{% endfor %}
{% endif %}
{% endfor %}
{% endif %}
@ -67,32 +83,46 @@
{% endfor %}
{% endif %}
{% if item.tagpass is defined and item.tagpass is iterable %}
[{{ item.plugin }}.tagpass]
[inputs.{{ item.plugin }}.tagpass]
{% for items in item.tagpass %}
{{ items }}
{% endfor %}
{% endif %}
{% if item.tagdrop is defined and item.tagdrop is iterable %}
[{{ item.plugin }}.tagdrop]
[inputs.{{ item.plugin }}.tagdrop]
{% for items in item.tagdrop %}
{{ items }}
{% endfor %}
{% endif %}
{% if item.pass is defined and item.pass is iterable %}
[{{ item.plugin }}.pass]
{% for items in item.pass %}
{{ items }}
{% if item.objects is defined and item.objects is iterable %}
{% for object in item.objects %}
[[inputs.{{ item.plugin }}.object]]
ObjectName = {{ object.name | to_json }}
Instances = {{ object.instances | default(["*"]) | to_json }}
Counters = {{ object.counters | default(["*"]) | to_json }}
Measurement = {{ object.measurement | default("win_perf_counters") | to_json }}
IncludeTotal = {{ object.total | default(false) | string | lower }}
{% endfor %}
{% endif %}
{% if item.drop is defined and item.drop is iterable %}
[{{ item.plugin }}.drop]
{% for items in item.drop %}
{{ items }}
{% endfor %}
{% endif %}
{% if item.specifications is defined and item.specifications is iterable %}
[[{{item.plugin}}.specifications]]
{% for items in item.specifications %}
{% if telegraf_plugins_default is defined and telegraf_plugins_default|length == 0 %}
{% if telegraf_plugins_extra is defined and telegraf_plugins_extra.keys() | length == 0 %}
# No plugins configured, added a mem plugin so telegraf doesn't stop working.
[[inputs.mem]]
{% endif %}
{% endif %}
###############################################################################
# PROCESSORS #
###############################################################################
{% if telegraf_processors is defined and telegraf_processors is iterable %}
{% for item in telegraf_processors %}
[[processors.{{ item.processor }}]]
{% if item.config is defined and item.config is iterable %}
{% for items in item.config %}
{{ items }}
{% endfor %}
{% endif %}