Implement Ceilometer

date:2015-03-31 10:30
tags: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
  ceilometer_agent_notification:
    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_agent_notification
      - 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.

Alternatives

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.

Upgrade impact

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.

Dependencies

N/A

Implementation

Assignee(s)

Primary Assignee(s)

Miguel Alejandro Cantu Sudarshan Acharya

Other contributors:

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/tasks/swift_service_setup.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
    • LICENSE
    • README.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
    • tasks/
      • main.yml
      • ceilometer_install.yml
      • ceilometer_pre_install.yml
      • ceilometer_post_install.yml
      • ceilometer_service_setup.yml
      • ceilometer_service_add.yml
      • ceilometer_upstart_common_init.yml
      • ceilometer_upstart_init.yml

Testing

The gate scripts will need to be modified with the ceilometer configurations turned on. A variable of the like of “DEPLOY_CEILOMETER” will be added with the appropriate conditionals in place to deploy ceilometer with a mongodb server for testing.

The playbooks will point to a mongodb server deployed on the AIO. A gate script will be created to deploy a simple mongodb server on the AIO using an ansible galaxy role.

Documentation impact

Thorough documentation will need to be created explaining how to enable ceilometer.