27 Commits
0.0.1 ... 0.4.0

Author SHA1 Message Date
a733de5695 Updating Readme 2016-02-05 20:01:27 +01:00
f28ba37db5 Removed default entry 'telegraf_plugins_extra' 2016-02-05 19:51:31 +01:00
54f2b75af5 Added build status 2016-01-31 19:31:48 +01:00
bbcd52e32f Fixed installation for Ubuntu 2016-01-31 18:49:58 +01:00
e2205aa7d8 Fixed test and added travis. 2016-01-31 18:41:25 +01:00
66e20cd7f6 Updated to 0.10.1 default version 2016-01-31 16:10:05 +01:00
720e9c94da Updated documentation and changelog for new version 2016-01-13 15:55:16 +01:00
ec993c2066 Made it work with telegraf 0.10.0 2016-01-13 15:50:54 +01:00
fabb511365 Updated CHANGELOG; added Gemfile.lock; Added aferrari-technisys as contributor 2015-11-14 16:08:31 +01:00
6f7d970595 Fixed kitchen test setup 2015-11-14 14:43:29 +01:00
18cfcd8cff Adding "net" to be used 2015-11-01 12:12:38 +01:00
5692928cb3 Removed options 2015-11-01 08:31:32 +01:00
aa391d97f9 Merge pull request #2 from aferrari-technisys/master
Update etc-opt-telegraf-telegraf.conf.j2
2015-10-29 15:31:39 +01:00
64f62c8dc5 Update etc-opt-telegraf-telegraf.conf.j2
Fix missing line into config result after apply template
2015-10-29 10:10:06 -03:00
8a869e7a0e Merge pull request #1 from aferrari-technisys/master
Improvement and upgrade for v0.2.0 of telegraf
2015-10-29 14:00:31 +01:00
ef8ecffbdf Update etc-opt-telegraf-telegraf.conf.j2
Added Specifications to Extra section too.
2015-10-29 09:56:35 -03:00
37f3a8e208 Update main.yml
Moved procstat to EXTRA section that need custom process name that can apply only in some hosts
2015-10-29 09:55:44 -03:00
a3951d52a8 Update README.md
Updated Readme for 0.2.0 version
2015-10-29 09:54:51 -03:00
3f7f83cfc4 Added iteration for specifications
with procstats plugin a new config value exist called "specifications" is similar to config but this plugin call specifications.
2015-10-29 09:49:39 -03:00
677950be23 Updated version and added plugins
Updated for 0.2.0 version and added plugins netstat and procstat that has new  "specifications" params
2015-10-29 09:47:54 -03:00
a41e4f9c84 Updated to release 0.1.0 2015-09-23 19:25:15 +02:00
890e48c82d Added possibility to use pass, drop, tagpass, tagdrop and interval 2015-09-23 19:24:57 +02:00
ac27a7a9eb Added notify on installation of package 2015-09-23 19:24:01 +02:00
7cc9e52d85 Updated to new telegraf version 2015-09-23 19:23:07 +02:00
43e5e633fd Added changelogd 2015-09-20 18:47:02 +02:00
2239f59c85 Added an ":" for correct usage 2015-09-20 16:27:19 +02:00
4196a74c22 Forgot to update meta file 2015-09-20 14:37:17 +02:00
14 changed files with 386 additions and 156 deletions

1
.gitignore vendored
View File

@ -1,3 +1,4 @@
.kitchen/
.kitchen.local.yml
.idea/
pmip

View File

@ -1,14 +1,17 @@
---
driver:
name: docker
provision_command: sed -i '/tsflags=nodocs/d' /etc/yum.conf
provisioner:
name: ansible_playbook
ansible_yum_repo: "http://mirror.logol.ru/epel/6/x86_64/epel-release-6-8.noarch.rpm"
hosts: localhost
require_chef_for_busser: false
require_ruby_for_busser: true
platforms:
- name: centos-6.6
- name: centos-6.7
verifier:
ruby_bindir: '/usr/bin'

15
.travis.yml Normal file
View File

@ -0,0 +1,15 @@
---
language: python
python: "2.7"
before_install:
- sudo apt-get update -qq
- sudo apt-get install -qq python-apt python-pycurl
install:
- pip install ansible==1.9.4
- echo -e 'localhost ansible_connection=local' > test/inventory
- echo -e '[defaults]\nroles_path = ../\nhostfile = ./test/inventory' > ansible.cfg
script:
- ansible-playbook test/integration/default.yml --syntax-check
- ansible-playbook test/integration/default.yml --connection=local --sudo
notifications:
webhooks: https://galaxy.ansible.com/api/v1/notifications/

48
CHANGELOG.md Normal file
View File

@ -0,0 +1,48 @@
dj-wasabi.telegraf
------------------
Below an overview of all changes in the releases.
Version (Release date)
0.4.0 (2016-02-05)
* Fixed test for test-kitchen
* Added travis-ci test for testing default installation when PR is made
* Fixed Download url for Debian
* Removed default entry for telegraf_plugins_extra
0.3.0 (2016-01-13)
* Made it work with telegraf 0.10.0
* Default installation: 0.10.0
0.2.0 (2015-11-14)
* Fixed kitchen test setup
* Adding "net" to the telegraf_plugins_default property
* Update etc-opt-telegraf-telegraf.conf.j2 #2 (By pull request: aferrari-technisys (Thanks!))
* Improvement and upgrade for v0.2.0 of telegraf #1 (By pull request: aferrari-technisys (Thanks!))
0.1.0 (2015-09-23)
* Updated `telegraf_agent_version` to 0.1.9
* Added restart when package is changed (When updated for example)
* Added several plugin options:
* pass
* drop
* tagpass
* tagdrop
* interval
* Updated documentation
0.0.2 (2015-09-20)
* Updated README dus to missing colon
* Forgot to update the meta file
* Added Changelog file
0.0.1 (2015-09-20)
* Initial release

41
Gemfile.lock Normal file
View File

@ -0,0 +1,41 @@
GEM
remote: https://rubygems.org/
specs:
faraday (0.9.2)
multipart-post (>= 1.2, < 3)
highline (1.7.8)
kitchen-ansible (0.0.30)
librarian-ansible
test-kitchen
kitchen-docker (2.3.0)
test-kitchen (>= 1.0.0)
librarian (0.1.2)
highline
thor (~> 0.15)
librarian-ansible (1.0.6)
faraday
librarian (~> 0.1.0)
mixlib-shellout (2.2.3)
multipart-post (2.0.0)
net-scp (1.2.1)
net-ssh (>= 2.6.5)
net-ssh (2.9.2)
safe_yaml (1.0.4)
test-kitchen (1.4.2)
mixlib-shellout (>= 1.2, < 3.0)
net-scp (~> 1.1)
net-ssh (~> 2.7, < 2.10)
safe_yaml (~> 1.0)
thor (~> 0.18)
thor (0.19.1)
PLATFORMS
ruby
DEPENDENCIES
kitchen-ansible
kitchen-docker
test-kitchen
BUNDLED WITH
1.10.6

View File

@ -1,6 +1,10 @@
dj-wasabi.telegraf
=========
Build status:
[![Build Status](https://travis-ci.org/dj-wasabi/ansible-telegraf.svg?branch=master)](https://travis-ci.org/dj-wasabi/ansible-telegraf)
This role will install and configure telegraf.
Telegraf is an agent written in Go for collecting metrics from the system it's running on, or from other services, and writing them into InfluxDB.
@ -19,11 +23,12 @@ Role Variables
The following parameters can be set for the Telegraf agent:
* `telegraf_agent_version`: The version of Telegraf to install. Default: `0.1.8`
* `telegraf_agent_version`: The version of Telegraf to install. Default: `0.10.0`
* `telegraf_agent_interval`: The interval configured for sending data to the server. Default: `10`
* `telegraf_agent_debug`: Setting the Telegraf in debug mode. Default: `False`
* `telegraf_agent_utc`: Option for outputting data in UTC. Default: `True`
* `telegraf_agent_precision`: Precision to write data at. Valid values for Precision are n, u, ms, s, m, and h. Default: `s`
* `telegraf_agent_round_interval`: Rounds collection interval to 'interval' Default: True
* `telegraf_agent_flush_interval`: Default data flushing interval for all outputs. Default: 10
* `telegraf_agent_flush_jitter`: Jitter the flush interval by a random amount. Default: 0
You can set tags for the host running telegraf:
@ -36,7 +41,7 @@ Specifying an output. The default is set to localhost, you'll have to specify th
telegraf_agent_output:
- type: influxdb
config:
- url = "http://localhost:8086"
- urls = ["http://localhost:8086"]
- database = "telegraf"
The config will be printed line by line into the configuration, so you could also use:
@ -62,18 +67,38 @@ With the property `telegraf_plugins_default` it is set to use the default set of
- plugin: mem
- plugin: system
- plugin: swap
- plugin: netstat
Every telegraf agent has these as an default configuration.
The 2nd parameter `telegraf_plugins_extra` can be used to add plugins specific to the servers goal. Following is an example for using this parameter for MySQL database servers:
cat group_vars/mysql_database
telegraf_plugins_extra
telegraf_plugins_extra:
- plugin: mysql
config:
- servers = ["root:{{ mysql_root_password }}@tcp(localhost:3306)/"]
Telegraf plugin options:
* `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.
An example might look like this:
telegraf_plugins_default:
- plugin: disk
interval: 12
tagpass:
- fstype = [ "ext4", "xfs" ]
- path = [ "/opt", "/home" ]
Dependencies
------------
No dependencies
@ -85,6 +110,12 @@ Example Playbook
roles:
- { role: dj-wasabi.telegraf }
##Contributors
The following have contributed to this Ansible role:
* aferrari-technisys
Test Kitchen
------------

View File

@ -1,19 +1,21 @@
---
# defaults file for ansible-telegraf
telegraf_agent_version: 0.1.8
telegraf_agent_version: 0.10.1
telegraf_agent_interval: 10
telegraf_agent_debug: False
telegraf_agent_utc: True
telegraf_agent_precision: s
telegraf_agent_round_interval: True
telegraf_agent_flush_interval: 10
telegraf_agent_flush_jitter: 0
telegraf_agent_tags:
telegraf_agent_output:
- type: influxdb
config:
- url = "http://localhost:8086"
- urls = ["http://localhost:8086"]
- database = "telegraf"
- precision = "s"
telegraf_plugins_default:
- plugin: cpu
@ -22,7 +24,9 @@ telegraf_plugins_default:
- plugin: disk
- plugin: io
- plugin: mem
- plugin: net
- plugin: system
- plugin: swap
- plugin: netstat
telegraf_plugins_extra:

View File

@ -1,139 +1,20 @@
---
galaxy_info:
author: your name
description:
company: your company (optional)
# If the issue tracker for your role is not on github, uncomment the
# next line and provide a value
# issue_tracker_url: http://example.com/issue/tracker
# Some suggested licenses:
# - BSD (default)
# - MIT
# - GPLv2
# - GPLv3
# - Apache
# - CC-BY
license: license (GPLv2, CC-BY, etc)
author: Werner Dijkerman
description: Installing and configuring Telegraf
company:
license: license BSD
min_ansible_version: 1.2
#
# Below are all platforms currently available. Just uncomment
# the ones that apply to your role. If you don't see your
# platform on this list, let us know and we'll get it added!
#
#platforms:
#- name: EL
# versions:
# - all
# - 5
# - 6
# - 7
#- name: GenericUNIX
# versions:
# - all
# - any
#- name: Fedora
# versions:
# - all
# - 16
# - 17
# - 18
# - 19
# - 20
# - 21
# - 22
#- name: Windows
# versions:
# - all
# - 2012R2
#- name: SmartOS
# versions:
# - all
# - any
#- name: opensuse
# versions:
# - all
# - 12.1
# - 12.2
# - 12.3
# - 13.1
# - 13.2
#- name: Amazon
# versions:
# - all
# - 2013.03
# - 2013.09
#- name: GenericBSD
# versions:
# - all
# - any
#- name: FreeBSD
# versions:
# - all
# - 8.0
# - 8.1
# - 8.2
# - 8.3
# - 8.4
# - 9.0
# - 9.1
# - 9.1
# - 9.2
#- name: Ubuntu
# versions:
# - all
# - lucid
# - maverick
# - natty
# - oneiric
# - precise
# - quantal
# - raring
# - saucy
# - trusty
# - utopic
# - vivid
#- name: SLES
# versions:
# - all
# - 10SP3
# - 10SP4
# - 11
# - 11SP1
# - 11SP2
# - 11SP3
#- name: GenericLinux
# versions:
# - all
# - any
#- name: Debian
# versions:
# - all
# - etch
# - jessie
# - lenny
# - squeeze
# - wheezy
#
# Below are all categories currently available. Just as with
# the platforms above, uncomment those that apply to your role.
#
#categories:
#- cloud
#- cloud:ec2
#- cloud:gce
#- cloud:rax
#- clustering
#- database
#- database:nosql
#- database:sql
#- development
#- monitoring
#- networking
#- packaging
#- system
#- web
platforms:
- name: EL
versions:
- all
- name: Ubuntu
versions:
- all
- name: Debian
versions:
- all
categories:
- monitoring
dependencies: []
# List your role dependencies here, one per line.
# Be sure to remove the '[]' above if you add dependencies
# to this list.

View File

@ -2,12 +2,13 @@
- name: "Fetch telegraf installation package | Debian"
action: get_url
url=http://get.influxdb.org/telegraf/telegraf-{{ telegraf_agent_version }}_amd64.deb
dest=/tmp/telegraf_{{ telegraf_agent_version }}_amd64.deb
url=http://get.influxdb.org/telegraf/telegraf_{{ telegraf_agent_version }}-1_amd64.deb
dest=/tmp/telegraf_{{ telegraf_agent_version }}-1_amd64.deb
mode=0440
- name: "Install telegraf package | Debian"
action: apt
deb=/tmp/telegraf_{{ telegraf_agent_version }}_amd64.deb
deb=/tmp/telegraf_{{ telegraf_agent_version }}-1_amd64.deb
state=installed
notify: "Restart Telegraf"
sudo: yes

View File

@ -10,4 +10,5 @@
action: yum
name=/tmp/telegraf_{{ telegraf_agent_version }}-1.x86_64.rpm
state=installed
notify: "Restart Telegraf"
sudo: yes

View File

@ -9,12 +9,28 @@
include: "Debian.yml"
when: ansible_os_family == "Debian"
- name: "Copy the template"
- name: "Set fact by remove the dots from version"
action: set_fact
telegraf_ver="{{ telegraf_agent_version.replace('.','') }}"
- name: "Copy the template for versions < 0.10.0"
action: template
src=etc-opt-telegraf-telegraf.conf.j2
dest=/etc/opt/telegraf/telegraf.conf
owner=root
group=root
mode=644
when: telegraf_ver < 100
sudo: yes
notify: "Restart Telegraf"
- name: "Copy the template for versions >= 0.10.0"
action: template
src=telegraf.conf.j2
dest=/etc/telegraf/telegraf.conf
owner=root
group=root
mode=644
when: telegraf_ver >= 100
sudo: yes
notify: "Restart Telegraf"

View File

@ -12,8 +12,6 @@
interval = "{{ telegraf_agent_interval }}s"
debug = {{ telegraf_agent_debug | lower }}
hostname = "{{ ansible_fqdn }}"
utc = {{ telegraf_agent_utc | lower }}
precision = "{{ telegraf_agent_precision }}"
# Configuration for influxdb server to send metrics to
[outputs]
@ -30,11 +28,45 @@
{% if telegraf_plugins_default is defined and telegraf_plugins_default is iterable %}
{% for item in telegraf_plugins_default %}
[{{ item.plugin }}]
{% if item.interval is defined %}
interval = "{{ item.interval }}s"
{% endif %}
{% if item.config is defined and item.config is iterable %}
{% for items in item.config %}
{{ items }}
{% endfor %}
{% endif %}
{% if item.tagpass is defined and item.tagpass is iterable %}
[{{ item.plugin }}.tagpass]
{% for items in item.tagpass %}
{{ items }}
{% endfor %}
{% endif %}
{% if item.tagdrop is defined and item.tagdrop is iterable %}
[{{ 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 %}
@ -42,11 +74,44 @@
{% if telegraf_plugins_extra is defined and telegraf_plugins_extra is iterable %}
{% for item in telegraf_plugins_extra %}
[{{ item.plugin }}]
{% if item.interval is defined %}
interval = "{{ item.interval }}s"
{% endif %}
{% if item.config is defined and item.config is iterable %}
{% for items in item.config %}
{{ items }}
{% endfor %}
{% endif %}
{% if item.tagpass is defined and item.tagpass is iterable %}
[{{ item.plugin }}.tagpass]
{% for items in item.tagpass %}
{{ items }}
{% endfor %}
{% endif %}
{% if item.tagdrop is defined and item.tagdrop is iterable %}
[{{ 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 %}

123
templates/telegraf.conf.j2 Normal file
View File

@ -0,0 +1,123 @@
# Telegraf configuration
[tags]
{% if telegraf_agent_tags is defined and telegraf_agent_tags is iterable %}
{% for item in telegraf_agent_tags %}
{{ item.tag_name }} = "{{ item.tag_value }}"
{% endfor %}
{% endif %}
# Configuration for telegraf agent
[agent]
interval = "{{ telegraf_agent_interval }}s"
debug = {{ telegraf_agent_debug | lower }}
hostname = "{{ ansible_fqdn }}"
round_interval = {{ telegraf_agent_round_interval | lower }}
flush_interval = "{{ telegraf_agent_flush_interval }}s"
flush_jitter = "{{ telegraf_agent_flush_jitter }}s"
###############################################################################
# OUTPUTS #
###############################################################################
{% if telegraf_agent_output is defined and telegraf_agent_output is iterable %}
{% for item in telegraf_agent_output %}
[[outputs.{{ item.type }}]]
{% for items in item.config %}
{{ items }}
{% endfor %}
{% endfor %}
{% endif %}
###############################################################################
# INPUTS #
###############################################################################
{% if telegraf_plugins_default is defined and telegraf_plugins_default is iterable %}
{% for item in telegraf_plugins_default %}
[[inputs.{{ item.plugin }}]]
{% if item.interval is defined %}
interval = "{{ item.interval }}s"
{% endif %}
{% if item.config is defined and item.config is iterable %}
{% for items in item.config %}
{{ items }}
{% endfor %}
{% endif %}
{% if item.tagpass is defined and item.tagpass is iterable %}
[{{ item.plugin }}.tagpass]
{% for items in item.tagpass %}
{{ items }}
{% endfor %}
{% endif %}
{% if item.tagdrop is defined and item.tagdrop is iterable %}
[{{ 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 %}
{% if telegraf_plugins_extra is defined and telegraf_plugins_extra is iterable %}
{% for item in telegraf_plugins_extra %}
[[inputs.{{ item.plugin }}]]
{% if item.interval is defined %}
interval = "{{ item.interval }}s"
{% endif %}
{% if item.config is defined and item.config is iterable %}
{% for items in item.config %}
{{ items }}
{% endfor %}
{% endif %}
{% if item.tagpass is defined and item.tagpass is iterable %}
[{{ item.plugin }}.tagpass]
{% for items in item.tagpass %}
{{ items }}
{% endfor %}
{% endif %}
{% if item.tagdrop is defined and item.tagdrop is iterable %}
[{{ 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

@ -15,7 +15,7 @@ describe 'Telegraf Services' do
end
describe 'Telegraf Configuration' do
describe file('/etc/opt/telegraf/telegraf.conf') do
describe file('/etc/telegraf/telegraf.conf') do
it { should be_file}
it { should be_owned_by 'root'}
it { should be_grouped_into 'root'}