From 251cf2088f4288c5caa1f8d198369a8e90d87e82 Mon Sep 17 00:00:00 2001 From: Emilien Kenler Date: Thu, 11 Jun 2015 11:12:36 +0900 Subject: [PATCH] Initial commit --- LICENSE | 21 + README.md | 127 ++++ defaults/main.yml | 5 + files/collectd-coretemp.sh | 30 + handlers/main.yml | 6 + meta/main.yml | 24 + tasks/centos.yml | 49 ++ tasks/debian.yml | 19 + tasks/main.yml | 91 +++ templates/collectd.conf.j2 | 1383 ++++++++++++++++++++++++++++++++++++ tests/main.yml | 8 + vars/main.yml | 32 + 12 files changed, 1795 insertions(+) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 defaults/main.yml create mode 100644 files/collectd-coretemp.sh create mode 100644 handlers/main.yml create mode 100644 meta/main.yml create mode 100644 tasks/centos.yml create mode 100644 tasks/debian.yml create mode 100644 tasks/main.yml create mode 100644 templates/collectd.conf.j2 create mode 100644 tests/main.yml create mode 100644 vars/main.yml diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d77bf2a --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Wizcorp + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..d62fb81 --- /dev/null +++ b/README.md @@ -0,0 +1,127 @@ +collectd role +=============== + +This role takes care of adding collectd to any given server. + +It can be used to: + +1. Collect metrics about a machines, and optionally forward them to an aggregation machine. + +2. Create an aggregation machine, which will receive the metrics from a given set of machine within the same datacenter. + In this case too, metrics can optionally be forwarded to another service. + +Configuration +-------------- + +### For any machines + +Simply add the collector role to your playbook. + +By default, we will save all metrics to RRD files under `/var/lib/collectd/rrd/${hostname}`. + +### For forwarding machines + +#### Inventory + +Normally, we put all aggregation on a single machine. +However, it is possible to decouple them, and provision separate machines for any aggregators we might have. +This example demonstrate how to create a dedicated collectd aggregator. + +```ini +[collectd:children] +collectd-somedc-prod + +[collectd-somedc-prod] +collectd1.somedc.prod ansible_ssh_host=10.0.1.111 + +[... skipping ...] +[somedc-prod:children] +collectd-somedc-prod + +[somedc-prod:vars] +collectd_forwarder = collectd1.somedc.prod + +# +# Optional: if you are aggregating logs with logstash +# and are using ElasticSearch and Kibana, you might +# want to also keep track of your metrics through +# Kibana. If so, simply add the following to your +# global configuration - keep in mind that +# activating this will turn off any other +# forwarding you might have configured in +# favor of sending all entries to logstash +# +logstash_forwarder = collectd2.somedc.prod + +collectd_forward_to_logstash = true +``` + +The following may also be added to your inventory. + +* `collectd_interval`: at what interval in seconds to take measurements (default: 60) +* `check_disk`: a value which we will use to select what disk to monitor (default: xvde) +* `fs_type`: the file system type to monitor (default: ext4) +* `monitor_coretemp`: set to true if you want to monitor coretemp (only useful on real hardware) + +### Roles addition + +It is possible for any roles to add their own custom metric collection configuration. + +In `myrole/templates/collectd.conf.j2`: + +``` + + ... + +``` + +Then, in `myrole/tasks/main.yml`: + +```yaml +- name: Adding collectd monitoring for myrole + template: > + src=collectd.conf.j2 + dest=/etc/collectd.d/myrole.conf + notify: + - Restart collectd + tags: + - myrole + - files + - collectd +``` + +### Execution + +#### For any machines + +Simply follow the standard provisioning method. + +### For the collector machine + +When provisioning with this role, you can also add +[Librato](https://www.librato.com/) and +[Graphite](http://graphite.wikidot.com/) support. + +As you should not add any credentials to your inventory, +it should be done by using `--extra-vars` as described below. + +#### Librato + +``` +--extra-vars="use_librato=true" \ +--extra-vars="librato_email=some@email.com" \ +--extra-vars="librato_token=API-KEY" +``` + +### Graphite + +``` +--extra-vars="use_graphite=true" \ +--extra-vars="graphite_host=some.host.com" \ +--extra-vars="graphite_port=" +``` + +See also +-------- + +* [collectd](http://collectd.org/) diff --git a/defaults/main.yml b/defaults/main.yml new file mode 100644 index 0000000..4f75fbd --- /dev/null +++ b/defaults/main.yml @@ -0,0 +1,5 @@ +monitor_coretemp: false +collectd_forward_to_logstash: false + +use_librato: false +use_graphite: false diff --git a/files/collectd-coretemp.sh b/files/collectd-coretemp.sh new file mode 100644 index 0000000..a2f2b5c --- /dev/null +++ b/files/collectd-coretemp.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash + +cd /sys/devices/platform/coretemp.0 + +host=${COLLECTD_HOSTNAME:=`hostname -f`} + +while + true +do + LIST=$(ls | grep temp | cut -d"_" -f1 | sort | uniq) + + for f in ${LIST} + do + timestamp=$(date +%s) + label="$(cat ${f}_label)" + + if + ! (echo ${label} | grep -q "Core") + then + continue + fi + + cpunum="$(echo ${label} | sed "s/Core //")" + value="$(cat ${f}_input)" + + echo "PUTVAL \"${host}/core-temp/gauge-core_${cpunum}\" ${timestamp}:${value}" + done + + sleep ${COLLECTD_INTERVAL:-10} || true +done diff --git a/handlers/main.yml b/handlers/main.yml new file mode 100644 index 0000000..8669fe4 --- /dev/null +++ b/handlers/main.yml @@ -0,0 +1,6 @@ +- name: "Restart collectd" + service: > + name=collectd + state=restarted + tags: + - collectd diff --git a/meta/main.yml b/meta/main.yml new file mode 100644 index 0000000..448a714 --- /dev/null +++ b/meta/main.yml @@ -0,0 +1,24 @@ +galaxy_info: + author: Marc Trudel + description: This role takes care of adding collectd to any given server + company: Wizcorp K.K. + license: MIT + min_ansible_version: 1.8.1 + platforms: + - name: EL + versions: + - 6 + - 7 + - name: Debian + versions: + - wheezy + categories: + - monitoring +dependencies: + - role: aeriscloud.repos + repositories: + centos6: + - epel + centos7: + - epel + - role: aeriscloud.yum diff --git a/tasks/centos.yml b/tasks/centos.yml new file mode 100644 index 0000000..5ca9b82 --- /dev/null +++ b/tasks/centos.yml @@ -0,0 +1,49 @@ +- name: "Set collectd's config file destination" + set_fact: > + collectd_config_dest=/etc/collectd.conf + tags: + - collectd + +- name: "Clean old packages" + yum: > + name={{ item }} + state=absent + with_items: + - collectd-python + - collectd-hddtemp + - libcollectdclient + tags: + - collectd + - pkgs + +- name: "Install Ghettoforge repo" + yum: > + name=http://mirror.symnds.com/distributions/gf/el/6/gf/x86_64/gf-release-6-8.gf.el6.noarch.rpm + state=present + when: ansible_distribution_major_version|int == 6 + tags: + - collectd + - pkgs + - repos + +- name: "Install required packages" + yum : > + name={{ item }} + enablerepo=epel,gf-plus + state=latest + with_items: packages + when: ansible_distribution_major_version|int == 6 + tags: + - collectd + - pkgs + +- name: "Install required packages" + yum : > + name={{ item }} + enablerepo=epel + state=latest + with_items: packages + when: ansible_distribution_major_version|int > 6 + tags: + - collectd + - pkgs diff --git a/tasks/debian.yml b/tasks/debian.yml new file mode 100644 index 0000000..1438424 --- /dev/null +++ b/tasks/debian.yml @@ -0,0 +1,19 @@ +- name: "Set collectd's config file destination" + set_fact: > + collectd_config_dest=/etc/collectd/collectd.conf + tags: + - collectd + +- name: "Install required packages" + apt : > + name={{ item }} + state=latest + with_items: + - git + - collectd + - collectd-core + - collectd-utils + tags: + - install + - collectd + - pkgs diff --git a/tasks/main.yml b/tasks/main.yml new file mode 100644 index 0000000..0c51cb8 --- /dev/null +++ b/tasks/main.yml @@ -0,0 +1,91 @@ +- include: centos.yml + when: ansible_distribution == "CentOS" + +- include: debian.yml + when: ansible_distribution == "Debian" + +##################### +# Common +- name: "Install Librato backend" + git: > + repo=https://github.com/librato/collectd-librato.git + version=v0.0.8 + dest=/opt/collectd-librato/ + tags: + - collectd + - pkgs + - libs + +- name: "Ensure the collectd python and exec module directory exists" + file: > + path=/opt/collectd-{{ item }}-modules + state=directory + with_items: + - python + - exec + tags: + - collectd + - pkgs + - libs + +- name: "Symlink the librato module into the python module directory" + file: > + src=/opt/collectd-librato/lib/collectd-librato.py + dest=/opt/collectd-python-modules/collectd-librato.py + state=link + tags: + - collectd + - libs + +- name: "Install coretemp plugin for collectd" + copy: > + src=collectd-coretemp.sh + dest=/opt/collectd-exec-modules/ + mode=0755 + owner=root + group=root + notify: + - Restart collectd + tags: + - collectd + - files + +- name: "Install /etc/collectd.conf" + template: > + src=collectd.conf.j2 + dest={{ collectd_config_dest }} + mode=0644 + notify: + - Restart collectd + tags: + - collectd + - files + - configs + +- name: "Make sure /etc/collectd.d is present" + file: > + path=/etc/collectd.d + state=directory + tags: + - collectd + - files + - configs + +- name: "Add the coretemp kernel module" + modprobe: > + name=coretemp + state=present + when: monitor_coretemp + tags: + - collectd + - files + - configs + +- name: "Make sure collectd is running" + service: > + name=collectd + state=running + enabled=yes + runlevel=5 + tags: + - collectd diff --git a/templates/collectd.conf.j2 b/templates/collectd.conf.j2 new file mode 100644 index 0000000..22fd128 --- /dev/null +++ b/templates/collectd.conf.j2 @@ -0,0 +1,1383 @@ +# +# Config file for collectd(1). +# Please read collectd.conf(5) for a list of options. +# http://collectd.org/ +# + +############################################################################## +# Global # +#----------------------------------------------------------------------------# +# Global settings for the daemon. # +############################################################################## + +Hostname "{{ server_hostname | default(inventory_hostname) }}" +FQDNLookup false +#BaseDir "/var/lib/collectd" +#PIDFile "/var/run/collectd.pid" +#PluginDir "/usr/lib64/collectd" +#TypesDB "/usr/share/collectd/types.db" + +#----------------------------------------------------------------------------# +# When enabled, plugins are loaded automatically with the default options # +# when an appropriate block is encountered. # +# Disabled by default. # +#----------------------------------------------------------------------------# +AutoLoadPlugin true + +#----------------------------------------------------------------------------# +# Interval at which to query values. This may be overwritten on a per-plugin # +# base by using the 'Interval' option of the LoadPlugin block: # +# # +# Interval 60 # +# # +#----------------------------------------------------------------------------# +# +Interval {{ collectd_interval|default('60') }} + +#Timeout 2 +#ReadThreads 5 +#WriteThreads 5 + +# Limit the size of the write queue. Default is no limit. Setting up a limit is +# recommended for servers handling a high volume of traffic. +#WriteQueueLimitHigh 1000000 +#WriteQueueLimitLow 800000 + +############################################################################## +# Logging # +#----------------------------------------------------------------------------# +# Plugins which provide logging functions should be loaded first, so log # +# messages generated when loading or configuring other plugins can be # +# accessed. # +############################################################################## + +# +# Logging +# +LoadPlugin syslog + + + LogLevel info + + +# +# General system health +# +LoadPlugin memory +LoadPlugin vmem +LoadPlugin swap + + + Disk "/^{{ check_disk|default('xvde') }}/" + IgnoreSelected false + + +LoadPlugin load +LoadPlugin cpu + + + Interface "lo" + IgnoreSelected true + + +{% if monitor_coretemp %} + + Exec nobody "/opt/collectd-exec-modules/collectd-coretemp.sh" + +{% endif %} +# +# Local copy of all collected data. +# This will get flushed every week, and +# can be used in cases where we need +# to analyze an incident during which +# network connectivity was lost and data +# could not be forwarded to our monitoring +# tool of choice in the meantime +# + + DataDir "/var/lib/collectd/rrd" + CacheFlush 120 + WritesPerSecond 50 + + + + {% if collectd_forwarder is defined and collectd_forward_to_logstash %} + + Interface "{{ private_interface }}" + + + TimeToLive 128 + + {% elif collectd_forwarder is defined and collectd_forwarder != inventory_hostname %} + + Interface "{{ private_interface }}" + + + TimeToLive 128 + + {% else %} + + + Interface "{{ private_interface }}" + + + MaxPacketSize 4096 + + {% endif %} + + # statistics about the network plugin itself + ReportStats false + + + + FSType "{{ fs_type|default('ext4') }}" + + +# +# Custom python plugins +# +LoadPlugin python + +{% if collectd_forwarder is defined and collectd_forwarder == inventory_hostname %} +# +# This section should be only on machine forwarding +# data to external databases and tools +# + + + ModulePath "/opt/collectd-python-modules/" + + {% if use_librato %} + # + # Librato plugin to forward monitoring + # data to librato for visualization and + # alerting + # + Import "collectd-librato" + + Email "{{ librato_email }}" + APIToken "{{ librato_token }}" + + {% endif %} + + +{% if use_graphite %} + + Interval {{ graphite_interval|default('10') }} + + + + Host "{{ graphite_host }}" + Port "{{ graphite_port }}" + Protocol "udp" + LogSendErrors true + Prefix "collectd" + Postfix "collectd" + StoreRates true + AlwaysAppendDS false + EscapeCharacter "_" + + +{% endif %} +{% endif %} + +Include "/etc/collectd.d/*.conf" + +############################################################################## +# - NO CONFIGURATION SHOULD GO BELOW THIS; THIS IS FOR REFERENCE PURPOSES - # +############################################################################## + +############################################################################## +# LoadPlugin section # +#----------------------------------------------------------------------------# +# Lines beginning with a single `#' belong to plugins which have been built # +# but are disabled by default. # +# # +# Lines begnning with `##' belong to plugins which have not been built due # +# to missing dependencies or because they have been deactivated explicitly. # +############################################################################## + +#LoadPlugin aggregation +#LoadPlugin amqp +#LoadPlugin apache +#LoadPlugin apcups +##LoadPlugin apple_sensors +##LoadPlugin aquaero +#LoadPlugin ascent +#LoadPlugin battery +#LoadPlugin bind +#LoadPlugin conntrack +#LoadPlugin contextswitch +#LoadPlugin cgroups +#LoadPlugin cpu +#LoadPlugin cpufreq +#LoadPlugin csv +#LoadPlugin curl +#LoadPlugin curl_json +#LoadPlugin curl_xml +#LoadPlugin dbi +#LoadPlugin df +#LoadPlugin disk +#LoadPlugin dns +#LoadPlugin email +#LoadPlugin entropy +#LoadPlugin ethstat +#LoadPlugin exec +#LoadPlugin filecount +#LoadPlugin fscache +#LoadPlugin gmond +#LoadPlugin hddtemp +#LoadPlugin interface +#LoadPlugin iptables +#LoadPlugin ipmi +#LoadPlugin ipvs +#LoadPlugin irq +#LoadPlugin java +#LoadPlugin libvirt +#LoadPlugin load +##LoadPlugin lpar +#LoadPlugin lvm +#LoadPlugin madwifi +#LoadPlugin mbmon +#LoadPlugin md +#LoadPlugin memcachec +#LoadPlugin memcached +#LoadPlugin memory +##LoadPlugin modbus +#LoadPlugin multimeter +#LoadPlugin mysql +##LoadPlugin netapp +##LoadPlugin netlink +#LoadPlugin network +#LoadPlugin nfs +#LoadPlugin nginx +#LoadPlugin notify_desktop +#LoadPlugin notify_email +#LoadPlugin ntpd +#LoadPlugin numa +#LoadPlugin nut +#LoadPlugin olsrd +##LoadPlugin onewire +#LoadPlugin openvpn +##LoadPlugin oracle +# +# Globals true +# +#LoadPlugin pinba +#LoadPlugin ping +#LoadPlugin postgresql +#LoadPlugin powerdns +#LoadPlugin processes +#LoadPlugin protocols +# +# Globals true +# +##LoadPlugin redis +##LoadPlugin routeros +##LoadPlugin rrdcached +#LoadPlugin rrdtool +#LoadPlugin sensors +#LoadPlugin serial +##LoadPlugin sigrok +#LoadPlugin snmp +#LoadPlugin statsd +#LoadPlugin swap +#LoadPlugin table +#LoadPlugin tail +#LoadPlugin tail_csv +##LoadPlugin tape +#LoadPlugin tcpconns +#LoadPlugin teamspeak2 +#LoadPlugin ted +#LoadPlugin thermal +##LoadPlugin tokyotyrant +#LoadPlugin unixsock +#LoadPlugin uptime +#LoadPlugin users +#LoadPlugin uuid +#LoadPlugin varnish +##LoadPlugin mic +#LoadPlugin vmem +#LoadPlugin vserver +#LoadPlugin wireless +#LoadPlugin write_graphite +#LoadPlugin write_http +##LoadPlugin write_mongodb +##LoadPlugin write_redis +#LoadPlugin write_riemann +##LoadPlugin xmms +##LoadPlugin zfs_arc + +############################################################################## +# Plugin configuration # +#----------------------------------------------------------------------------# +# In this section configuration stubs for each plugin are provided. A desc- # +# ription of those options is available in the collectd.conf(5) manual page. # +############################################################################## + +# +# +# #Host "unspecified" +# Plugin "cpu" +# #PluginInstance "unspecified" +# Type "cpu" +# #TypeInstance "unspecified" +# +# GroupBy "Host" +# GroupBy "TypeInstance" +# +# CalculateNum false +# CalculateSum false +# CalculateAverage true +# CalculateMinimum false +# CalculateMaximum false +# CalculateStddev false +# +# + +# +# +# Host "localhost" +# Port "5672" +# VHost "/" +# User "guest" +# Password "guest" +# Exchange "amq.fanout" +# RoutingKey "collectd" +# Persistent false +# StoreRates false +# +# + +# +# +# URL "http://localhost/status?auto" +# User "www-user" +# Password "secret" +# CACert "/etc/ssl/ca.crt" +# +# + +# +# Host "localhost" +# Port "3551" +# ReportSeconds true +# + +# +# Device "" +# + +# +# URL "http://localhost/ascent/status/" +# User "www-user" +# Password "secret" +# CACert "/etc/ssl/ca.crt" +# + +# +# URL "http://localhost:8053/" +# ParseTime false +# OpCodes true +# QTypes true +# +# ServerStats true +# ZoneMaintStats true +# ResolverStats false +# MemoryStats true +# +# +# QTypes true +# ResolverStats true +# CacheRRSets true +# +# Zone "127.in-addr.arpa/IN" +# +# + +# +# DataDir "/var/lib/collectd/csv" +# StoreRates false +# + +# +# +# URL "http://finance.google.com/finance?q=NYSE%3AAMD" +# User "foo" +# Password "bar" +# MeasureResponseTime false +# +# Regex "]*> *([0-9]*\\.[0-9]+) *" +# DSType "GaugeAverage" +# Type "stock_value" +# Instance "AMD" +# +# +# + +# +## See: http://wiki.apache.org/couchdb/Runtime_Statistics +# +# Instance "httpd" +# +# Type "http_requests" +# +# +# +# Type "http_request_methods" +# +# +# +# Type "http_response_codes" +# +# +## Database status metrics: +# +# Instance "dbs" +# +# Type "gauge" +# +# +# Type "counter" +# +# +# Type "bytes" +# +# +# + +# +# +# Host "my_host" +# Instance "some_instance" +# User "collectd" +# Password "thaiNg0I" +# VerifyPeer true +# VerifyHost true +# CACert "/path/to/ca.crt" +# +# +# Type "magic_level" +# #InstancePrefix "prefix-" +# InstanceFrom "td[1]" +# ValuesFrom "td[2]/span[@class=\"level\"]" +# +# +# + +# +# +# Statement "SELECT 'customers' AS c_key, COUNT(*) AS c_value FROM customers_tbl" +# +# Type "gauge" +# InstancesFrom "c_key" +# ValuesFrom "c_value" +# +# +# +# Driver "mysql" +# DriverOption "host" "localhost" +# DriverOption "username" "collectd" +# DriverOption "password" "AeXohy0O" +# DriverOption "dbname" "custdb0" +# #SelectDB "custdb0" +# Query "num_of_customers" +# #Query "..." +# #Host "..." +# +# + +# +# Device "/dev/hda1" +# Device "192.168.0.2:/mnt/nfs" +# MountPoint "/home" +# FSType "ext3" +# IgnoreSelected false +# ReportByDevice false +# ReportReserved false +# ReportInodes false +# + +# +# Disk "/^[hs]d[a-f][0-9]?$/" +# IgnoreSelected false +# + +# +# Interface "eth0" +# IgnoreSource "192.168.0.1" +# SelectNumericQueryTypes true +# + +# +# SocketFile "/var/run/collectd-email" +# SocketGroup "collectd" +# SocketPerms "0770" +# MaxConns 5 +# + +# +# Interface "eth0" +# Map "rx_csum_offload_errors" "if_rx_errors" "checksum_offload" +# Map "multicast" "if_multicast" +# MappedOnly false +# + +# +# Exec "user:group" "/path/to/exec" +# NotificationExec "user:group" "/path/to/exec" +# + +# +# +# Instance "foodir" +# Name "*.conf" +# MTime "-5m" +# Size "+10k" +# Recursive true +# IncludeHidden false +# +# + +# +# MCReceiveFrom "239.2.11.71" "8649" +# +# Type "swap" +# TypeInstance "total" +# DataSource "value" +# +# +# Type "swap" +# TypeInstance "free" +# DataSource "value" +# +# + +# +# Host "127.0.0.1" +# Port "7634" +# + +# +# Interface "eth0" +# IgnoreSelected false +# + +# +# Sensor "some_sensor" +# Sensor "another_one" +# IgnoreSelected false +# NotifySensorAdd false +# NotifySensorRemove true +# NotifySensorNotPresent false +# + +# +# Chain table chain +# + +# +# Irq 7 +# Irq 8 +# Irq 9 +# IgnoreSelected true +# + +# +# JVMArg "-verbose:jni" +# JVMArg "-Djava.class.path=/usr/share/collectd/java/collectd-api.jar" +# +# LoadPlugin "org.collectd.java.Foobar" +# +# # To be parsed by the plugin +# +# + +# +# Connection "xen:///" +# RefreshInterval 60 +# Domain "name" +# BlockDevice "name:device" +# InterfaceDevice "name:device" +# IgnoreSelected false +# HostnameFormat name +# InterfaceFormat name +# + +# +# CpuPoolStats false +# ReportBySerial false +# + +# +# Interface "wlan0" +# IgnoreSelected false +# Source "SysFS" +# WatchSet "None" +# WatchAdd "node_octets" +# WatchAdd "node_rssi" +# WatchAdd "is_rx_acl" +# WatchAdd "is_scan_active" +# + +# +# Host "127.0.0.1" +# Port "411" +# + +# +# Device "/dev/md0" +# IgnoreSelected false +# + +# +# +# Server "localhost" +# Key "page_key" +# +# Regex "(\\d+) bytes sent" +# ExcludeRegex "" +# DSType CounterAdd +# Type "ipt_octets" +# Instance "type_instance" +# +# +# + +# +# +# Host "127.0.0.1" +# Port "11211" +# +# + +# +# +# RegisterBase 1234 +# RegisterType float +# Type gauge +# Instance "..." +# +# +# +# Address "addr" +# Port "1234" +# Interval 60 +# +# +# Instance "foobar" # optional +# Collect "data_name" +# +# +# + +# +# +# Host "database.serv.er" +# User "db_user" +# Password "secret" +# Database "db_name" +# MasterStats true +# +# +# +# Host "localhost" +# Socket "/var/run/mysql/mysqld.sock" +# SlaveStats true +# SlaveNotifications true +# +# + +# +# +# Protocol "https" +# Address "10.0.0.1" +# Port 443 +# User "username" +# Password "aef4Aebe" +# Interval 30 +# +# +# Interval 30 +# GetNameCache true +# GetDirCache true +# GetBufferCache true +# GetInodeCache true +# +# +# +# Interval 30 +# GetBusy true +# +# +# +# Interval 30 +# GetIO "volume0" +# IgnoreSelectedIO false +# GetOps "volume0" +# IgnoreSelectedOps false +# GetLatency "volume0" +# IgnoreSelectedLatency false +# +# +# +# Interval 30 +# GetCapacity "vol0" +# GetCapacity "vol1" +# IgnoreSelectedCapacity false +# GetSnapshot "vol1" +# GetSnapshot "vol3" +# IgnoreSelectedSnapshot false +# +# +# +# Interval 30 +# GetCPULoad true +# GetInterfaces true +# GetDiskOps true +# GetDiskIO true +# +# +# + +# +# Interface "All" +# VerboseInterface "All" +# QDisc "eth0" "pfifo_fast-1:0" +# Class "ppp0" "htb-1:10" +# Filter "ppp0" "u32-1:0" +# IgnoreSelected false +# + +# +# # client setup: +# Server "ff18::efc0:4a42" "25826" +# +# SecurityLevel Encrypt +# Username "user" +# Password "secret" +# Interface "eth0" +# +# TimeToLive "128" +# +# # server setup: +# Listen "ff18::efc0:4a42" "25826" +# +# SecurityLevel Sign +# AuthFile "/etc/collectd/passwd" +# Interface "eth0" +# +# MaxPacketSize 1024 +# +# # proxy setup (client and server as above): +# Forward true +# +# # statistics about the network plugin itself +# ReportStats false +# +# # "garbage collection" +# CacheFlush 1800 +# + +# +# URL "http://localhost/status?auto" +# User "www-user" +# Password "secret" +# CACert "/etc/ssl/ca.crt" +# + +# +# OkayTimeout 1000 +# WarningTimeout 5000 +# FailureTimeout 0 +# + +# +# SMTPServer "localhost" +# SMTPPort 25 +# SMTPUser "my-username" +# SMTPPassword "my-password" +# From "collectd@main0server.com" +# # on . beware! do not use not more than two %s in this string!!! +# Subject "Aaaaaa!! %s on %s!!!!!" +# Recipient "email1@domain1.net" +# Recipient "email2@domain2.com" +# + +# +# Host "localhost" +# Port 123 +# ReverseLookups false +# IncludeUnitID true +# + +# +# UPS "upsname@hostname:port" +# + +# +# Host "127.0.0.1" +# Port "2006" +# CollectLinks "Summary" +# CollectRoutes "Summary" +# CollectTopology "Summary" +# + +# +# Device "-s localhost:4304" +# Sensor "F10FCA000800" +# IgnoreSelected false +# + +# +# StatusFile "/etc/openvpn/openvpn-status.log" +# ImprovedNamingSchema false +# CollectCompression true +# CollectIndividualUsers true +# CollectUserCount false +# + +# +# +# Statement "SELECT category, COUNT(*) AS value FROM products WHERE in_stock = 0 GROUP BY category" +# +# Type "gauge" +# InstancesFrom "category" +# ValuesFrom "value" +# +# +# +# ConnectID "db01" +# Username "oracle" +# Password "secret" +# Query "out_of_stock" +# +# + +# +# IncludeDir "/my/include/path" +# BaseName "Collectd::Plugins" +# EnableDebugger "" +# LoadPlugin Monitorus +# LoadPlugin OpenVZ +# +# +# Foo "Bar" +# Qux "Baz" +# +# + +# +# Address "::0" +# Port "30002" +# +# Host "host name" +# Server "server name" +# Script "script name" +# +# + +# +# Host "host.foo.bar" +# Interval 1.0 +# Timeout 0.9 +# TTL 255 +# SourceAddress "1.2.3.4" +# Device "eth0" +# MaxMissed -1 +# + +# +# +# Statement "SELECT magic FROM wizard WHERE host = $1;" +# Param hostname +# +# Type gauge +# InstancePrefix "magic" +# ValuesFrom magic +# +# +# +# Statement "SELECT COUNT(type) AS count, type \ +# FROM (SELECT CASE \ +# WHEN resolved = 'epoch' THEN 'open' \ +# ELSE 'resolved' END AS type \ +# FROM tickets) type \ +# GROUP BY type;" +# +# Type counter +# InstancePrefix "rt36_tickets" +# InstancesFrom "type" +# ValuesFrom "count" +# +# +# +# # See contrib/postgresql/collectd_insert.sql for details +# Statement "SELECT collectd_insert($1, $2, $3, $4, $5, $6, $7, $8, $9);" +# StoreRates true +# +# +# Host "hostname" +# Port "5432" +# User "username" +# Password "secret" +# SSLMode "prefer" +# KRBSrvName "kerberos_service_name" +# Query magic +# +# +# Interval 60 +# Service "service_name" +# Query backend # predefined +# Query rt36_tickets +# +# +# Service "collectd_store" +# Writer sqlstore +# # see collectd.conf(5) for details +# CommitInterval 30 +# +# + +# +# +# Collect "latency" +# Collect "udp-answers" "udp-queries" +# Socket "/var/run/pdns.controlsocket" +# +# +# Collect "questions" +# Collect "cache-hits" "cache-misses" +# Socket "/var/run/pdns_recursor.controlsocket" +# +# LocalSocket "/opt/collectd/var/run/collectd-powerdns" +# + +# +# Process "name" +# + +# +# Value "/^Tcp:/" +# IgnoreSelected false +# + +# +# ModulePath "/path/to/your/python/modules" +# LogTraces true +# Interactive true +# Import "spam" +# +# +# spam "wonderful" "lovely" +# +# + +# +# +# Host "redis.example.com" +# Port "6379" +# Timeout 2000 +# +# + +# +# +# Host "router.example.com" +# Port "8728" +# User "admin" +# Password "dozaiTh4" +# CollectInterface true +# CollectRegistrationTable true +# CollectCPULoad true +# CollectMemory true +# CollectDF true +# CollectDisk true +# +# + +# +# DaemonAddress "unix:/tmp/rrdcached.sock" +# DataDir "/var/lib/collectd/rrd" +# CreateFiles true +# CreateFilesAsync false +# CollectStatistics true +# + +# +# DataDir "/var/lib/collectd/rrd" +# CreateFilesAsync false +# CacheTimeout 120 +# CacheFlush 900 +# WritesPerSecond 50 +# + +# +# SensorConfigFile "/etc/sensors.conf" +# Sensor "it8712-isa-0290/temperature-temp1" +# Sensor "it8712-isa-0290/fanspeed-fan3" +# Sensor "it8712-isa-0290/voltage-in8" +# IgnoreSelected false +# + +# +# LogLevel 3 +# +# Driver "fluke-dmm" +# MinimumInterval 10 +# Conn "/dev/ttyUSB2" +# +# +# Driver "cem-dt-885x" +# Conn "/dev/ttyUSB1" +# +# + +# +# +# Type "voltage" +# Table false +# Instance "input_line1" +# Values "SNMPv2-SMI::enterprises.6050.5.4.1.1.2.1" +# +# +# Type "users" +# Table false +# Instance "" +# Values "HOST-RESOURCES-MIB::hrSystemNumUsers.0" +# +# +# Type "if_octets" +# Table true +# Instance "IF-MIB::ifDescr" +# Values "IF-MIB::ifInOctets" "IF-MIB::ifOutOctets" +# +# +# +# Address "192.168.0.2" +# Version 1 +# Community "community_string" +# Collect "std_traffic" +# Interval 120 +# +# +# Address "192.168.0.42" +# Version 2 +# Community "another_string" +# Collect "std_traffic" "hr_users" +# +# +# Address "192.168.0.3" +# Version 1 +# Community "more_communities" +# Collect "powerplus_voltge_input" +# Interval 300 +# +# + +# +# Host "::" +# Port "8125" +# DeleteCounters false +# DeleteTimers false +# DeleteGauges false +# DeleteSets false +# TimerPercentile 90.0 +# + +# +# ReportByDevice false +# ReportBytes true +# + +# +# +# Instance "slabinfo" +# Separator " " +# +# Type gauge +# InstancePrefix "active_objs" +# InstancesFrom 0 +# ValuesFrom 1 +# +# +# Type gauge +# InstancePrefix "objperslab" +# InstancesFrom 0 +# ValuesFrom 4 +# +#
+#
+ +# +# +# Instance "exim" +# +# Regex "S=([1-9][0-9]*)" +# DSType "CounterAdd" +# Type "ipt_bytes" +# Instance "total" +# +# +# Regex "\\" +# ExcludeRegex "\\.*mail_spool defer" +# DSType "CounterInc" +# Type "counter" +# Instance "local_user" +# +# +# + +# +# +# Type "percent" +# Instance "dropped" +# ValueFrom 1 +# +# +# Type "bytes" +# Instance "wire-realtime" +# ValueFrom 2 +# +# +# Type "alerts_per_second" +# ValueFrom 3 +# +# +# Type "kpackets_wire_per_sec.realtime" +# ValueFrom 4 +# +# +# Instance "snort-eth0" +# Interval 600 +# Collect "dropped" "mbps" "alerts" "kpps" +# TimeFrom 0 +# +# + +# +# ListeningPorts false +# LocalPort "25" +# RemotePort "25" +# + +# +# Host "127.0.0.1" +# Port "51234" +# Server "8767" +# + +# +# Device "/dev/ttyUSB0" +# Retries 0 +# + +# +# ForceUseProcfs false +# Device "THRM" +# IgnoreSelected false +# + +# +# Host "localhost" +# Port "1978" +# + +# +# SocketFile "/usr/var/run/collectd-unixsock" +# SocketGroup "collectd" +# SocketPerms "0660" +# DeleteSocket false +# + +# +# UUIDFile "/etc/uuid" +# + +# +# ShowCPU true +# ShowCPUCores true +# ShowMemory true +# ShowTemperatures true +## Temperature Sensors can be ignored/shown by repeated #Temperature lines, and +## then inverted with a IgnoreSelectedTemperature. +## Known Temperature sensors: die, devmem, fin, fout, vccp, vddg, vddq +# Temperature vddg +# IgnoreSelectedTemperature true +# ShowPower true +## Power Sensors can be ignored/shown by repeated #Power lines, and +## then inverted with a IgnoreSelectedTemperature. +## Known Temperature sensors: total0, total1, inst, imax, pci3, c2x3, c2x4, vccp, vddg, vddq +# Power total1 +# IgnoreSelectedPower true +# + +# +# This tag support an argument if you want to +# monitor the local instance just use +# If you prefer defining another instance you can do +# so by using +# +# CollectCache true +# CollectBackend true +# CollectBan false # Varnish 3 only +# CollectConnections true +# CollectDirectorDNS false # Varnish 3 only +# CollectSHM true +# CollectESI false +# CollectFetch false +# CollectHCB false +# CollectObjects false +# CollectPurge false # Varnish 2 only +# CollectSession false +# CollectSMA false # Varnish 2 only +# CollectSMS false +# CollectSM false # Varnish 2 only +# CollectStruct false +# CollectTotals false +# CollectUptime false +# CollectVCL false +# CollectWorkers false +# +# + +# +# Verbose false +# + +# +# +# Host "localhost" +# Port "2003" +# Protocol "udp" +# LogSendErrors true +# Prefix "collectd" +# Postfix "collectd" +# StoreRates true +# AlwaysAppendDS false +# EscapeCharacter "_" +# +# + +# +# +# User "collectd" +# Password "weCh3ik0" +# VerifyPeer true +# VerifyHost true +# CACert "/etc/ssl/ca.crt" +# Format "Command" +# StoreRates false +# +# + +# +# +# Host "localhost" +# Port "27017" +# Timeout 1000 +# StoreRates false +# Database "auth_db" +# User "auth_user" +# Password "auth_passwd" +# +# + +# +# +# Host "localhost" +# Port "6379" +# Timeout 1000 +# +# + +# +# +# Host "localhost" +# Port 5555 +# Protocol UDP +# StoreRates true +# AlwaysAppendDS false +# +# Tag "foobar" +# + +############################################################################## +# Filter configuration # +#----------------------------------------------------------------------------# +# The following configures collectd's filtering mechanism. Before changing # +# anything in this section, please read the `FILTER CONFIGURATION' section # +# in the collectd.conf(5) manual page. # +############################################################################## + +# Load required matches: +#LoadPlugin match_empty_counter +#LoadPlugin match_hashed +#LoadPlugin match_regex +#LoadPlugin match_value +#LoadPlugin match_timediff + +# Load required targets: +#LoadPlugin target_notification +#LoadPlugin target_replace +#LoadPlugin target_scale +#LoadPlugin target_set +#LoadPlugin target_v5upgrade + +#----------------------------------------------------------------------------# +# The following block demonstrates the default behavior if no filtering is # +# configured at all: All values will be sent to all available write plugins. # +#----------------------------------------------------------------------------# + +# +# Target "write" +# + +############################################################################## +# Threshold configuration # +#----------------------------------------------------------------------------# +# The following outlines how to configure collectd's threshold checking # +# plugin. The plugin and possible configuration options are documented in # +# the collectd-threshold(5) manual page. # +############################################################################## + +#LoadPlugin "threshold" +# +# +# WarningMin 0.00 +# WarningMax 1000.00 +# FailureMin 0.00 +# FailureMax 1200.00 +# Invert false +# Instance "bar" +# +# +# +# Instance "eth0" +# +# FailureMax 10000000 +# DataSource "rx" +# +# +# +# +# +# Instance "idle" +# FailureMin 10 +# +# +# +# +# Instance "cached" +# WarningMin 100000000 +# +# +# +# +# DataSource "midterm" +# FailureMax 4 +# Hits 3 +# Hysteresis 3 +# +# +# diff --git a/tests/main.yml b/tests/main.yml new file mode 100644 index 0000000..20a8b57 --- /dev/null +++ b/tests/main.yml @@ -0,0 +1,8 @@ +--- +name: "Collectd" +playbook: +- hosts: centos:debian + sudo: true + roles: + - role: "@ROLE_NAME@" + private_interface: eth0 diff --git a/vars/main.yml b/vars/main.yml new file mode 100644 index 0000000..b1a3df5 --- /dev/null +++ b/vars/main.yml @@ -0,0 +1,32 @@ +packages: + - git + - collectd + - collectd-amqp + - collectd-apache +# - collectd-ascent + - collectd-bind + - collectd-curl + - collectd-curl_json + - collectd-curl_xml + - collectd-dbi + - collectd-dns + - collectd-email + - collectd-generic-jmx + - collectd-ipmi + - collectd-iptables + - collectd-ipvs + - collectd-java + - collectd-lvm + - collectd-mysql + - collectd-netlink + - collectd-nginx + - collectd-notify_desktop + - collectd-notify_email + - collectd-ping + - collectd-postgresql + - collectd-rrdcached + - collectd-rrdtool + - collectd-sensors + - collectd-snmp + - collectd-virt + - collectd-write_riemann