# Implement Ceilometer¶

date: 2015-03-31 10:30 kilo, ceilometer

This blueprint was created to add the Celiometer project to OSAD. It will lay out a possible solution that will hopefully in turn create discussion around how to properly implement ceilometer as an OPTIONAL component of OSAD.

## Problem description¶

Currently, OSAD does not implement Ceilometer for various reasons. One being the unstable nature of the project in production environments - causing ever growing database tables resulting in extremely slow API quries. However, some may still want to deploy Ceilometer and may prefer to deal with the problem internally.

Furthermore, these issues should not discount the credibility of Ceilometer as an OpenStack project, and as such, it should be implemented into OSAD.

## Proposed change¶

An additional role, os_ceilometer, would need to be added to handle the installation/configuration of the ceilometer services. Also, additional configuration directives would need to be added to other projects (such as cinder, nova, glance, etc..) so that they will generate notifications.

For the database, the /etc/openstack_deploy/conf.d/ceilometer.yml should give the user an option as to which database they want to connect to. This BP does not implement the deployment of an additional database for Ceilometer, but can be discussed as a potential addition.

Furthermore, new host groups will be added to the env.d/ceilometer.yml file so that the user may specify which infra nodes to install the central agents on , and which compute nodes to install the compute agent on. The proposed changes to the this file will look something like:

component_skel:
ceilometer_agent_compute:
belongs_to:
- ceilometer_all
ceilometer_agent_central:
belongs_to:
- ceilometer_all
belongs_to:
- ceilometer_all
ceilometer_collector:
belongs_to:
- ceilometer_all
ceilometer_alarm_evaluator:
belongs_to:
- ceilometer_all
ceilometer_alarm_notifier:
belongs_to:
- ceilometer_all
ceilometer_api:
belongs_to:
- ceilometer_all

container_skel:
ceilometer_api_container:
belongs_to:
- metering-infra_containers
contains:
- ceilometer_agent_central
- ceilometer_collector
- ceilometer_alarm_evaluator
- ceilometer_alarm_notifier
- ceilometer_api
properties:
service_name: ceilometer
container_release: trusty
metering-compute_container:
belongs_to:
- metering-compute_containers
contains:
- ceilometer_agent_compute
properties:
service_name: ceilometer
container_release: trusty
is_metal: true

physical_skel:
metering-compute_containers:
belongs_to:
- all_containers
metering-compute_hosts:
belongs_to:
- hosts
metering-infra_containers:
belongs_to:
- all_containers
metering-infra_hosts:
belongs_to:
- hosts

Notable changes:
• New ceilometer role
• New ceilometer playbooks
• A openstack_user_config.yml file in the openstack_deploy/conf.d/ directory specifically for ceilometer configurations.
• Added vars in appropriate files
• Haproxy config changes for ceilometer apis.

Don’t do it.

### Playbook impact¶

The ceilometer component should be OPTIONAL. And thus have no effect on other playbooks when chosen not to be run. However, when chosen to be run, other configurations across different projects can be changed to allow notifications.

None known

### Security impact¶

Credentials for the Ceilometer database may need to be specified by the user, as this BP does not implement the deployment of the Ceilometer database at this moment.

### Performance impact¶

When ceilometer is enabled, the horizon dashboard can potentially slow down due to large API responses from ceilometer. This is related to the problem stated in the Problem Description. We must let the user know about this known problem, and advise the ceilometer database be properly supervised. When ceilometer is disabled, it should have no performance impact.

### End user impact¶

The user will now have the option to enable ceilometer on their private cloud.

### Deployer impact¶

Additional configs must be specified in /etc/openstack_deploy/conf.d/ceilometer.yml only if the deployer wants ceilometer to be enabled.

The deployer needs to be aware of the database that is going to be used for ceilometer.

### Developer impact¶

A new role will be created to handle the installation/configuration of ceilometer. This role will be run explicitly by the deployer.

N/A

## Implementation¶

### Primary Assignee(s)¶

Miguel Alejandro Cantu Sudarshan Acharya

### Work items¶

At the very least, the following need to get done:
• New ceilometer role
• New ceilometer playbooks
• A openstack_user_config.yml file in the openstack_deploy/conf.d/ directory specifically for ceilometer configurations.
• Added vars in the appropriate sections.
• Haproxy config changes for ceilometer apis.

The following files need to be modified:

• etc/openstack_deploy/env.d/openstack_environment.yml
• etc/openstack_deploy/user_secrets.yml
• etc/openstack_deploy/user_variables.yml
• playbooks/inventory/group_vars/all.yml
• playbooks/vars/configs/haproxy_config.yml
• playbooks/vars/repo_packages/openstack_services.yml
• playbooks/roles/os_cinder/defaults/main.yml
• playbooks/roles/os_cinder/templates/cinder.conf.j2
• playbooks/roles/os_glance/defaults/main.yml
• playbooks/roles/os_glance/templates/glance-api.conf.j2
• playbooks/roles/os_glance/tempaltes/glance-registry.conf.j2
• playbooks/roles/os_heat/defaults/main.yml
• playbooks/roles/os_heat/templates/heat.conf.j2
• playbooks/roles/os_nova/defaults/main.yml
• playbooks/roles/os_nova/templates/nova.conf.j2
• playbooks/roles/os_swift/defaults/main.yml
• playbooks/roles/os_swift/templates/proxy-server.conf.j2

The following files need to added:

• etc/openstack/deploy/conf.d/ceilometer.yml.example
• playbooks/os-ceilometer-install.yml
• playbooks/roles/os_ceilometer/
• CONTRIBUTING.rst
• defaults/
• main.yml
• handlers/
• main.yml
• meta/
• main.yml
• templates/
• ceilometer.conf.j2
• api_paste.ini.j2
• ceilometer-upstart-init.j2
• event_definitions.yaml.j2
• event_pipeline.yaml.j2
• pipeline.yaml.j2
• sudoers.j2
• main.yml
• ceilometer_install.yml
• ceilometer_pre_install.yml
• ceilometer_post_install.yml
• ceilometer_service_setup.yml