library/roles/ganglia/handlers/main.yml: Set a timeout for the restart handler.

library/roles/couchbase: Add support for a specific ganglia plugin.
This commit is contained in:
Andrea Dell'Amico 2016-07-28 18:31:53 +02:00
parent c34cd379db
commit 565d53bb4a
7 changed files with 282 additions and 28 deletions

View File

@ -1,7 +1,10 @@
---
couchbase_install_packages: True
couchbase_start_server: True
couchbase_repo_pkg: couchbase-release-1.0-2-amd64.deb
couchbase_repo_pkg_url: 'http://packages.couchbase.com/releases/couchbase-release/{{ couchbase_repo_pkg }}'
couchbase_default_host: localhost
couchbase_console_port: 8091
couchbase_xdcr_port: 8092
couchbase_query_port: 8093
@ -39,3 +42,6 @@ couchbase_allowed_hosts:
- '{{ network.nmis }}'
- '{{ ansible_default_ipv4.address }}/32'
#couchbase_ganglia_url_username:
#couchbase_ganglia_url_password:
couchbase_monitored_buckets:

View File

@ -0,0 +1,29 @@
---
- name: Get the meta package for the couchbase repository
get_url: url={{ couchbase_repo_pkg_url }} dest=/root/{{ couchbase_repo_pkg }}
register: couchbase_repository
tags: couchbase
- name: Install the package source and the Couchbase public keys
shell: /usr/bin/dpkg -i /root/couchbase-release-1.0-2-amd64.deb
when: ( couchbase_repository | changed )
tags: couchbase
- name: Install the latest version of couchbase community server
apt: pkg={{ item }} state=latest update_cache=yes
with_items:
- couchbase-server-community
when:
- couchbase_install_packages
tags: couchbase
- name: Ensure couchbase is started and enabled
service: name=couchbase-server state=started enabled=yes
when: couchbase_start_server
tags: couchbase
- name: Ensure couchbase is stopped and disabled
service: name=couchbase-server state=stopped enabled=no
when: not couchbase_start_server
tags: couchbase

View File

@ -0,0 +1,15 @@
---
#
# The ganglia plugin comes from https://github.com/ganglia/gmond_python_modules
#
- name: Install the ganglia plugin for Couchbase. One instance per bucket
template: src=couchbase.py.j2 dest=/usr/lib/ganglia/python_modules/couchbase_{{ item }}.py owner=root group=ganglia mode=0440
with_items: '{{ couchbase_monitored_buckets }}'
notify: Restart ganglia monitor
tags: [ 'ganglia', 'couchbase' ]
- name: Distribute the ganglia (gmond) configuration for the Couchbase plugin
template: src=couchbase.pyconf.j2 dest=/etc/ganglia/conf.d/couchbase_{{ item }}.pyconf owner=root group=ganglia mode=0440
with_items: '{{ couchbase_monitored_buckets }}'
notify: Restart ganglia monitor
tags: [ 'ganglia', 'couchbase' ]

View File

@ -1,29 +1,5 @@
---
- name: Get the meta package for the couchbase repository
get_url: url=http://packages.couchbase.com/releases/couchbase-release/couchbase-release-1.0-2-amd64.deb dest=/root/couchbase-release-1.0-2-amd64.deb
register: couchbase_repository
tags: couchbase
- name: Install the package source and the Couchbase public keys
shell: /usr/bin/dpkg -i /root/couchbase-release-1.0-2-amd64.deb
when: ( couchbase_repository | changed )
tags: couchbase
- name: Install the latest version of couchbase community server
apt: pkg={{ item }} state=latest update_cache=yes
with_items:
- couchbase-server-community
when:
- couchbase_install_packages
tags: couchbase
- name: Ensure couchbase is started and enabled
service: name=couchbase-server state=started enabled=yes
when: couchbase_start_server
tags: couchbase
- name: Ensure couchbase is stopped and disabled
service: name=couchbase-server state=stopped enabled=no
when: not couchbase_start_server
tags: couchbase
- include: couchbase.yml
- include: ganglia-plugin.yml
when: ganglia_enabled

View File

@ -0,0 +1,54 @@
import requests
import random
import json
HOST = "{{ couchbase_default_host }}"
PORT = "{{ couchbase_console_port }}"
BCKT = "{{ item }}"
USERNAME = "{{ couchbase_ganglia_url_username }}"
PASSWORD = "{{ couchbase_ganglia_url_password }}"
PREFIX = ""
def get_descriptor(name):
d = {'name': name,
'call_back': temp_handler,
'time_max': 90,
'value_type': 'uint',
'units': 'number',
'slope': 'both',
'format': '%d',
'description': '%s metric' %name,
'groups': 'cb bucket %s' %BCKT}
return d
def temp_handler(name):
global s
return int(s[name[len(PREFIX):]].pop())
def metric_init(params):
global s
descriptors = []
url = 'http://%s:%s/pools/default/buckets/%s/stats/' %(HOST, PORT, BCKT)
r = requests.get(url, auth=(USERNAME, PASSWORD))
j = json.loads(r.content)
s = j['op']['samples']
for i in s:
name = PREFIX + str(i)
d = get_descriptor(name)
descriptors.append(d)
return descriptors
def metric_cleanup():
'''Clean up the metric module.'''
pass
if __name__ == '__main__':
dd = metric_init({})
for d in dd:
print (('%s = %s') % (d['name'], d['format'])) % (d['call_back'](d['name']))

View File

@ -0,0 +1,171 @@
modules {
module {
name = "couchbase_{{ item }}"
language = "python"
}
}
collection_group {
collect_every = 40
time_threshold = 50
metric {
name = "avg_disk_commit_time"
title = "{{ item }}_avg_disk_commit_time"
}
metric {
name = "avg_disk_update_time"
title = "{{ item }}_avg_disk_update_time"
}
metric {
name = "cas_hits"
title = "{{ item }}_cas_hits"
}
metric {
name = "cas_misses"
title = "{{ item }}_cas_misses"
}
metric {
name = "couch_docs_actual_disk_size"
title = "{{ item }}_couch_docs_actual_disk_size"
}
metric {
name = "couch_views_disk_size"
title = "{{ item }}_couch_views_disk_size"
}
metric {
name = "couch_views_ops"
title = "{{ item }}_couch_views_ops"
}
metric {
name = "cpu_idle_ms"
title = "{{ item }}_cpu_idle_ms"
}
metric {
name = "cpu_utilization_rate"
title = "{{ item }}_cpu_utilization_rate"
}
metric {
name = "curr_connections"
title = "{{ item }}_curr_connections"
}
metric {
name = "curr_items"
title = "{{ item }}_curr_items"
}
metric {
name = "curr_items_tot"
title = "{{ item }}_curr_items_tot"
}
metric {
name = "decr_hits"
title = "{{ item }}_decr_hits"
}
metric {
name = "decr_misses"
title = "{{ item }}_decr_misses"
}
metric {
name = "delete_hits"
title = "{{ item }}_delete_hits"
}
metric {
name = "delete_misses"
title = "{{ item }}_delete_misses"
}
metric {
name = "disk_commit_count"
title = "{{ item }}_disk_commit_count"
}
metric {
name = "disk_commit_total"
title = "{{ item }}_disk_commit_total"
}
metric {
name = "disk_update_count"
title = "{{ item }}_disk_update_count"
}
metric {
name = "disk_update_total"
title = "{{ item }}_disk_update_total"
}
metric {
name = "disk_write_queue"
title = "{{ item }}_disk_write_queue"
}
metric {
name = "evictions"
title = "{{ item }}_evictions"
}
metric {
name = "get_hits"
title = "{{ item }}_get_hits"
}
metric {
name = "get_misses"
title = "{{ item }}_get_misses"
}
metric {
name = "hibernated_requests"
title = "{{ item }}_hibernated_requests"
}
metric {
name = "hibernated_waked"
title = "{{ item }}_hibernated_waked"
}
metric {
name = "hit_ratio"
title = "{{ item }}_hit_ratio"
}
metric {
name = "incr_hits"
title = "{{ item }}_incr_hits"
}
metric {
name = "incr_misses"
title = "{{ item }}_incr_misses"
}
metric {
name = "mem_actual_free"
title = "{{ item }}_mem_actual_free"
}
metric {
name = "mem_actual_used"
title = "{{ item }}_mem_actual_used"
}
metric {
name = "mem_free"
title = "{{ item }}_mem_free"
}
metric {
name = "mem_total"
title = "{{ item }}_mem_total"
}
metric {
name = "mem_used"
title = "{{ item }}_mem_used"
}
metric {
name = "misses"
title = "{{ item }}_misses"
}
metric {
name = "ops"
title = "{{ item }}_ops"
}
metric {
name = "swap_total"
title = "{{ item }}_swap_total"
}
metric {
name = "swap_used"
title = "{{ item }}_swap_used"
}
metric {
name = "vb_total_queue_age"
title = "{{ item }}_vb_total_queue_age"
}
metric {
name = "xdc_ops"
title = "{{ item }}_xdc_ops"
}
}

View File

@ -1,2 +1,5 @@
---
- name: Restart ganglia monitor
service: name=ganglia-monitor state=restarted
service: name=ganglia-monitor state=restarted sleep=20
when: ganglia_enabled