OpenSource For You

The DevOps Series Deploying Graphite Using Ansible

In this fifth article in the DevOps series we will learn to install and set up Graphite using Ansible.

-

Graphite is a monitoring tool that was written by Chris Davis in 2006. It has been released under the Apache 2.0 licence and comprises three components: 1. Graphite-Web 2. Carbon

3. Whisper

Graphite-Web is a Django applicatio­n and provides a dashboard for monitoring. Carbon is a server that listens to time-series data, while Whisper is a database library for storing the data.

Setting it up

A CentOS 6.8 virtual machine (VM) running on KVM is used for the installati­on. Please make sure that the VM has access to the Internet. The Ansible version used on the host (Parabola GNU/Linux-libre x86_64) is 2.2.1.0. The ansible/ folder contains the following files:

ansible/inventory/kvm/inventory ansible/playbooks/configurat­ion/graphite.yml ansible/playbooks/admin/uninstall-graphite.yml

The IP address of the guest CentOS 6.8 VM is added to the inventory file as shown below:

graphite ansible_host=192.168.122.120 ansible_connection=ssh ansible_user=root ansible_password=password Also, add an entry for the graphite host in the /etc/hosts file as indicated below:

192.168.122.120 graphite

Graphite

The playbook to install the Graphite server is given below: ---

- name: Install Graphite software hosts: graphite gather_facts: true tags: [graphite]

tasks:

- name: Import EPEL GPG key rpm_key: key: http://dl.fedoraproj­ect.org/pub/epel/RPM-GPGKEY-EPEL-6 state: present

- name: Add YUM repo yum_repository: name: epel descriptio­n: EPEL YUM repo baseurl: https://dl.fedoraproj­ect.org/pub/ epel/$releasever/$basearch/ gpgcheck: yes

- name: Update the software package repository yum: name: ‘*’ update_cache: yes

- name: Install Graphite server package: name: “{{ item }}” state: latest with_items:

- graphite-web

We first import the keys for the Extra Packages for Enterprise Linux (EPEL) repository and update the software package list. The ‘graphite-web’ package is then installed using Yum. The above playbook can be invoked using the following command:

$ ansible-playbook -i inventory/kvm/inventory playbooks/ configurat­ion/graphite.yml --tags “graphite”

MySQL

A backend database is required by Graphite. By default, the SQLite3 database is used, but we will install and use MySQL as shown below:

- name: Install MySQL hosts: graphite become: yes become_method: sudo gather_facts: true tags: [database]

tasks:

- name: Install database package: name: “{{ item }}” state: latest with_items:

- mysql - mysql-server - MySQL-python - libselinux-python

- name: Start mysqld server service: name: mysqld state: started

- wait_for: port: 3306

- name: Create graphite database user mysql_user: name: graphite password: graphite12­3 priv: ‘*.*:ALL,GRANT’ state: present

- name: Create a database mysql_db: name: graphite state: present

- name: Update database configurat­ion blockinfil­e: path: /etc/graphite-web/local_settings.py block: |

DATABASES = {

‘default’: {

‘NAME’: ‘graphite’,

‘ENGINE’: ‘django.db.backends.mysql’, ‘USER’: ‘graphite’,

‘PASSWORD’: ‘graphite12­3’,

}

}

- name: syncdb shell: /usr/lib/python2.6/site-packages/graphite/ manage.py syncdb --noinput

- name: Allow port 80 shell: iptables -I INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHE­D -j ACCEPT

- name: lineinfile: path: /etc/httpd/conf.d/graphite-web.conf insertafte­r: ‘ # Apache 2.2’ line: ‘ Allow from all’

- name: Start httpd server service: name: httpd state: started

As a first step, let’s install the required MySQL dependency packages and the server itself. We can then start the server and wait for it to listen on port 3306. A graphite user and database is created for use with the Graphite Web applicatio­n. For this example, the password is provided as plain text. In production, use an encrypted Ansible Vault password.

The database configurat­ion file is then updated to use the MySQL credential­s. Since Graphite is a Django applicatio­n, the manage.py script with syncdb needs to be executed to create the necessary tables. We then allow port 80 through the firewall in order to view the Graphite dashboard. The graphite-web.conf file is updated to allow read access, and the

Apache Web server is started.

The above playbook can be invoked as follows:

$ ansible-playbook -i inventory/kvm/inventory playbooks/ configurat­ion/graphite.yml --tags “database”

Carbon and Whisper

The Carbon and Whisper Python bindings need to be installed before starting the carbon-cache script.

- name: Install Carbon and Whisper hosts: graphite become: yes become_method: sudo gather_facts: true tags: [carbon]

tasks:

- name: Install carbon and whisper package: name: “{{ item }}” state: latest with_items:

- python-carbon - python-whisper

- name: Start carbon-cache shell: /etc/init.d/carbon-cache start

The above playbook is invoked as follows:

$ ansible-playbook -i inventory/kvm/inventory playbooks/ configurat­ion/graphite.yml --tags “carbon”

The Graphite dashboard

You can open http://192.168.122.120 in the browser on the host to view the Graphite dashboard. A screenshot of the Graphite Web applicatio­n is shown in Figure 1.

Uninstalli­ng Graphite

An uninstall script to remove the Graphite server and its dependency packages is required for administra­tion. The Ansible playbook for the same is available in the playbooks/ admin folder and is given below:

--name: Uninstall Graphite and dependenci­es hosts: graphite gather_facts: true tags: [remove]

tasks:

- name: Stop the carbon-cache server shell: /etc/init.d/carbon-cache stop - name: Uninstall carbon and whisper package: name: “{{ item }}” state: absent with_items:

- python-whisper

- python-carbon

- name: Stop httpd server service: name: httpd state: stopped

- name: Stop mysqld server service: name: mysqld state: stopped

- name: Uninstall database packages package: name: “{{ item }}” state: absent with_items:

- libselinux-python - MySQL-python

- mysql-server

- mysql

- graphite-web

The script can be invoked as follows:

$ ansible-playbook -i inventory/kvm/inventory playbooks/ admin/uninstall-graphite.yml

 ??  ??
 ??  ?? Figure 1: Graphite Web
Figure 1: Graphite Web

Newspapers in English

Newspapers from India