15 Commits
0.2.0 ... 0.5.0

Author SHA1 Message Date
7512939626 Updated changelog 2016-07-17 15:31:01 +02:00
e4ac118212 Removed Travis Test; Update travis build; Added Molecule tests; Updated default installation version 2016-07-17 15:15:22 +02:00
6e990c9a03 Merge pull request #5 from stvnwrgs/feature/add_extra_plugins_to_telegrafd_folder
Feature/add extra plugins to telegrafd folder
2016-06-23 18:53:54 +02:00
01d05b0a88 added template for extra plugins 2016-06-23 12:56:59 +02:00
cf37fb1d2e moved extra plugins to extra configs in telegraf.d and changed the main.yml to more yml stylish definitions 2016-04-06 16:11:48 +02:00
4bd9a85f94 Updated the urls 2016-02-06 16:06:40 +01:00
fe287f5d7c Fixes for serverspec 2016-02-06 15:58:43 +01:00
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
23 changed files with 320 additions and 178 deletions

10
.gitignore vendored
View File

@ -1,3 +1,7 @@
.kitchen/ .idea
.kitchen.local.yml .molecule
.idea/ tests/.cache
.cache
__pycache__
*.retry
pmip

View File

@ -1,22 +0,0 @@
---
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.7
verifier:
ruby_bindir: '/usr/bin'
suites:
- name: default
run_list:
attributes:

17
.travis.yml Normal file
View File

@ -0,0 +1,17 @@
---
sudo: required
language: python
services:
- docker
before_install:
- sudo apt-get -qq update
- sudo apt-get install -o Dpkg::Options::="--force-confold" --force-yes -y docker-engine
install:
- pip install molecule
script:
- molecule test
notifications:
webhooks: https://galaxy.ansible.com/api/v1/notifications/

View File

@ -5,6 +5,25 @@ Below an overview of all changes in the releases.
Version (Release date) Version (Release date)
0.5.0 (2016-07-17)
* Removed Test Kitchen tests
* Added Molecule tests and travis make use of them
* Updated default version to 1.0.0 beta2
* Feature/add extra plugins to telegrafd folder #5 (By pull request: stvnwrgs (Thanks!))
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) 0.2.0 (2015-11-14)
* Fixed kitchen test setup * Fixed kitchen test setup

View File

@ -1,5 +0,0 @@
source "https://rubygems.org"
gem "test-kitchen"
gem "kitchen-docker"
gem "kitchen-ansible"

View File

@ -1,41 +0,0 @@
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 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. 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. 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,10 +23,14 @@ Role Variables
The following parameters can be set for the Telegraf agent: The following parameters can be set for the Telegraf agent:
* `telegraf_agent_version`: The version of Telegraf to install. Default: `0.2.0` * `telegraf_agent_version`: The version of Telegraf to install. Default: `1.0.0`
* `telegraf_agent_rpm_url`: The full path to the RPM file located on a webserver.
* `telegraf_agent_deb_url`: The full path to the DEB file located on a webserver.
* `telegraf_agent_interval`: The interval configured for sending data to the server. Default: `10` * `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_debug`: Setting the Telegraf in debug mode. Default: `False`
* `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: You can set tags for the host running telegraf:
@ -35,7 +43,7 @@ Specifying an output. The default is set to localhost, you'll have to specify th
telegraf_agent_output: telegraf_agent_output:
- type: influxdb - type: influxdb
config: config:
- url = "http://localhost:8086" - urls = ["http://localhost:8086"]
- database = "telegraf" - database = "telegraf"
The config will be printed line by line into the configuration, so you could also use: The config will be printed line by line into the configuration, so you could also use:
@ -108,12 +116,11 @@ Example Playbook
The following have contributed to this Ansible role: The following have contributed to this Ansible role:
* aferrari-technisys * aferrari-technisys
* stvnwrgs
# Molecule
Test Kitchen This roles is configured to be tested with Molecule. You can find on this page some more information regarding Molecule: https://werner-dijkerman.nl/2016/07/10/testing-ansible-roles-with-molecule-testinfra-and-docker/
------------
This roles is configured to be tested with Test Kitchen. You can find on this page some more information regarding Test Kitchen: http://werner-dijkerman.nl/2015/08/20/using-test-kitchen-with-docker-and-serverspec-to-test-ansible-roles/
License License
------- -------

View File

@ -1,17 +1,27 @@
--- ---
# defaults file for ansible-telegraf # defaults file for ansible-telegraf
telegraf_agent_version: 0.2.0 #telegraf_agent_version: 0.10.1
telegraf_agent_version: 1.0.0
telegraf_agent_version_sub_l: _beta2
telegraf_agent_version_sub_u: -beta2
telegraf_agent_interval: 10 telegraf_agent_interval: 10
telegraf_agent_debug: False telegraf_agent_debug: False
telegraf_agent_round_interval: True
telegraf_agent_flush_interval: 10
telegraf_agent_flush_jitter: 0
telegraf_agent_rpm_url: https://dl.influxdata.com/telegraf/releases/telegraf-{{ telegraf_agent_version }}{{ telegraf_agent_version_sub_l }}.x86_64.rpm
telegraf_agent_deb_url: https://dl.influxdata.com/telegraf/releases/telegraf_{{ telegraf_agent_version }}{{ telegraf_agent_version_sub_u }}_amd64.deb
telegraf_agent_tags: telegraf_agent_tags:
telegraf_agent_output: telegraf_agent_output:
- type: influxdb - type: influxdb
config: config:
- url = "http://localhost:8086" - urls = ["http://localhost:8086"]
- database = "telegraf" - database = "telegraf"
- precision = "s"
telegraf_plugins_default: telegraf_plugins_default:
- plugin: cpu - plugin: cpu
@ -26,7 +36,3 @@ telegraf_plugins_default:
- plugin: netstat - plugin: netstat
telegraf_plugins_extra: telegraf_plugins_extra:
- plugin: procstat
specifications:
- prefix = "" # optional string to prefix measurements
- exe = "java" # the name as pgrep can find

18
molecule.yml Normal file
View File

@ -0,0 +1,18 @@
---
ansible:
playbook: playbook.yml
docker:
containers:
- name: telegraf-centos
ansible_groups:
- group1
image: milcom/centos7-systemd
image_version: latest
privileged: True
- name: telegraf-debian
ansible_groups:
- group2
image: maint/debian-systemd
image_version: latest
privileged: True

15
playbook.yml Normal file
View File

@ -0,0 +1,15 @@
---
- hosts: all
pre_tasks:
- name: "Installing which on CentOS"
action: yum
name=which
state=installed
when: ansible_distribution == 'CentOS'
- name: "Installing wget on Debian"
action: apt
name=wget
state=installed
when: ansible_distribution == 'Debian'
roles:
- role: ansible-telegraf

View File

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

View File

@ -1,14 +1,38 @@
--- ---
- name: "Enable EPEL"
action: yum
name=epel-release
state=installed
- name: "Installing some dependencies"
action: yum
name={{ item }}
state=installed
with_items:
- python-pip
- python-devel
- gcc
- libffi-devel
- openssl-devel
- name: "Installing PIP dependensies"
action: pip
name={{ item }}
state=present
with_items:
- urllib3
- pyopenssl
- ndg-httpsclient
- name: "Fetch telegraf installation package | RedHat" - name: "Fetch telegraf installation package | RedHat"
action: get_url action: get_url
url=http://get.influxdb.org/telegraf/telegraf-{{ telegraf_agent_version }}-1.x86_64.rpm url="{{ telegraf_agent_rpm_url }}"
dest=/tmp/telegraf_{{ telegraf_agent_version }}-1.x86_64.rpm dest=/tmp/telegraf_{{ telegraf_agent_version }}.x86_64.rpm
mode=0440 mode=0440
- name: "Install telegraf package | RedHat" - name: "Install telegraf package | RedHat"
action: yum action: yum
name=/tmp/telegraf_{{ telegraf_agent_version }}-1.x86_64.rpm name=/tmp/telegraf_{{ telegraf_agent_version }}.x86_64.rpm
state=installed state=installed
notify: "Restart Telegraf" notify: "Restart Telegraf"
sudo: yes

View File

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

View File

@ -68,50 +68,5 @@
{% endif %} {% endif %}
{% endfor %}
{% endif %}
{% 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 %} {% endfor %}
{% endif %} {% endif %}

View File

@ -0,0 +1,44 @@
{% 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

@ -0,0 +1,78 @@
# 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 %}

View File

@ -1,4 +0,0 @@
---
- hosts: localhost
roles:
- role: ansible-telegraf

View File

@ -1,27 +0,0 @@
require 'serverspec'
require 'spec_helper'
describe 'Telegraf Packages' do
describe package('telegraf') do
it { should be_installed }
end
end
describe 'Telegraf Services' do
describe service('telegraf') do
it { should be_enabled }
end
end
describe 'Telegraf Configuration' do
describe file('/etc/opt/telegraf/telegraf.conf') do
it { should be_file}
it { should be_owned_by 'root'}
it { should be_grouped_into 'root'}
it { should contain "[cpu]" }
it { should contain "[mem]" }
it { should contain "url = \"http://localhost:8086\"" }
end
end

View File

@ -1,2 +0,0 @@
require 'serverspec'
set :backend, :exec

6
tests/inventory Normal file
View File

@ -0,0 +1,6 @@
localhost
[group1]
telegraf-centos
[group2]
telegraf-debian

5
tests/test.yml Normal file
View File

@ -0,0 +1,5 @@
---
- hosts: localhost
remote_user: root
roles:
- ansible-zabbix-agent

19
tests/test_docker.py Normal file
View File

@ -0,0 +1,19 @@
def test_telegraf_running_and_enabled(Service, SystemInfo):
telegraf = Service("telegraf")
assert telegraf.is_enabled
if SystemInfo.distribution == 'centos':
assert telegraf.is_running
def test_telegraf_dot_conf(File):
telegraf = File("/etc/telegraf/telegraf.conf")
assert telegraf.user == "root"
assert telegraf.group == "root"
assert telegraf.mode == 0o644
assert telegraf.contains('[[inputs.cpu]]')
def test_telegraf_package(Package, SystemInfo):
telegraf = Package('telegraf')
assert telegraf.is_installed

View File

@ -1,2 +0,0 @@
---
# vars file for .