kokou Agbedanou
Service de monitoring (Telemetry)
Telemetry (anciennement nommé Ceilometer) est un module permettant de disposer d’outils de
métrologie de la plate-forme OpenStack comme par exemple l’utilisation de la CPU, de la RAM... Les
données issues de Telemetry peuvent être exploitées par le module Heat afin d’effectuer des actions
particulières comme par exemple instancier une seconde VM Apache dans un cluster Web lorsque le pic
de charge du site web est proche de 80 % d’utilisation de CPU.
Telemetry est accessible via son API Rest. L’agent Telemetry, installé sur chaque VM de la stack, permet
de collecter les informations à envoyer au serveur Telemetry.
1. Installation et configuration sur le Controller node
Comme Telemetry enregistre de très grosses quantités de données non structurées, il est judicieux
d’utiliser une base NoSQL de type MongoDB.
Installation de la base de données MongoDB
# yum install mongodb-server mongodb
Modification du fichier de configuration /etc/mongodb.conf
Il faut renseigner l’adresse IP du Controller node dans le champ bind_ip.
...
# affectation avec l'IP du contrôleur
bind_ip = 10.0.0.11
...
# gestion de la taille des logs (128 Mo) dans
/var/lib/mongodb/journal
smallfiles = true
© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -1-
kokou Agbedanou
...
Démarrage du service MongoDB
# service mongod start
# chkconfig mongod on
Vérification du fonctionnement de MongoDB
# mongo --host srv-openstack-controller
MongoDB shell version: 2.6.5
connecting to: srv-openstack-controller:27017/test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
> show dbs
admin 0.031GB
local 0.031GB
Création de la base de données de collecte nommée ceilometer
# mongo --host srv-openstack-controller --eval 'db =
db.getSiblingDB("ceilometer"); db.addUser({user:
"ceilometerUser", pwd: "ceilometerPass", roles: [ "readWrite",
"dbAdmin" ]})'
WARNING: The 'addUser' shell helper is DEPRECATED. Please use
'createUser' instead
Successfully added user: { "user" : "ceilometerUser", "roles" :
© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -2-
kokou Agbedanou
[ "readWrite", "dbAdmin" ] }
ceilometerPass doit contenir le vrai mot de passe.
Affectation des credentials
# source ~/admin_creds.sh
Gestion de ceilometer avec Keystone
ˇ
Création de l’utilisateur ceilometerUser :
# keystone user-create --name ceilometerUser --pass ceilometerPass
+ ----------+----------------------------------+
| Property | Value |
+ ----------+----------------------------------+
| email | |
| enabled | True |
| id | ee4921a91ef74b229dbffa3fbc6b2521 |
| name | ceilometerUser |
| username | ceilometerUser |
+ ----------+----------------------------------+
ceilometerPass doit contenir le vrai de mot de passe.
© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -3-
kokou Agbedanou
ˇ
Ajout du rôle admin et du tenant service pour l’utilisateur ceilometerUser :
# keystone user-role-add --user ceilometerUser --tenant service
--role admin
ˇ
Création du service ceilometer :
# keystone service-create --name ceilometer --type metering
--description "Telemetry"
+ -------------+----------------------------------+
| Property | Value |
+ -------------+----------------------------------+
| description | Telemetry |
| enabled | True |
| id | 78122455507945e3b5e4e1b82a9caf27 |
| name | ceilometer |
| type | metering |
+ -------------+----------------------------------+
ˇ
Création des endpoints :
# keystone endpoint-create --service-id $(keystone service-list |
awk '/ metering / {print $2}') --publicurl http://srv-openstack-
controller:8777 --internalurl http://srv-openstack-controller:8777
--adminurl http://srv-openstack-controller:8777 --region regionOne
+-------------+--------------------------------------+
| Property | Value |
+-------------+--------------------------------------+
| adminurl | http://srv-openstack-controller:8777 |
| id | 38950ce919604ea5a7b8f5f783609bd9 |
| internalurl | http://srv-openstack-controller:8777 |
| publicurl | http://srv-openstack-controller:8777 |
© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -4-
kokou Agbedanou
| region | regionOne |
| service_id | 78122455507945e3b5e4e1b82a9caf27 |
+-------------+--------------------------------------+
Le port 8777 est le port utilisé par Ceilometer.
Installation des paquets Ceilometer
# yum install openstack-ceilometer-api openstack-ceilometer-
collector openstack-ceilometer-notification openstack-ceilometer-
central openstack-ceilometer-alarm python-ceilometerclient
Modification du fichier de configuration /etc/ceilometer/ceilometer.conf
...
[DEFAULT]
...
rpc_backend = rabbit
rabbit_host = srv-openstack-controller
rabbit_password = RABBIT_PASS
...
auth_strategy = keystone
...
[keystone_authtoken]
...
auth_uri = http://srv-openstack-controller:5000/v2.0
identity_uri = http://srv-openstack-controller:35357
admin_tenant_name = service
admin_user = ceilometerUser
admin_password = ceilomterPass
...
[database]
...
© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -5-
kokou Agbedanou
connection = mongodb://ceilometer:ceilometerPass@srv-openstack-
controller:27017/ceilometer
...
[service_credentials]
...
os_auth_url = http://srv-openstack-controller:5000/v2.0
os_username = ceilometerUSer
os_tenant_name = service
os_password = ceilometerPass
[publisher]
...
metering_secret = METERING_SECRET
Il faut remplacer RABBIT_PASS, ceilometerPass et METERING_SECRET par les
vrais mots de passe.
Opérations post-installation
# systemctl enable openstack-ceilometer-api.service openstack-
ceilometer-notification.service openstack-ceilometer-
central.service openstack-ceilometer-collector.service openstack-
ceilometer-alarm-evaluator.service openstack-ceilometer-alarm-
notifier.service
# systemctl start openstack-ceilometer-api.service openstack-
ceilometer-notification.service openstack-ceilometer-
central.service openstack-ceilometer-collector.service openstack-
ceilometer-alarm-evaluator.service openstack-ceilometer-alarm-
notifier.service
© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -6-
kokou Agbedanou
2. Installation de l’agent Telemetry sur le Compute Node
Telemetry fonctionne avec un serveur et des agents qui sont installés sur chaque host de compute.
Installation des paquets
# yum install openstack-ceilometer-compute python-
ceilometerclient pythonpecan
Modification du fichier /etc/nova/nova.conf
[DEFAULT]
...
instance_usage_audit = True
instance_usage_audit_period = hour
notify_on_state_change = vm_and_task_state
notification_driver = nova.openstack.common.notifier.rpc_notifier
notification_driver = ceilometer.compute.nova_notifier
Redémarrage du service Nova
# systemctl restart openstack-nova-compute.service
Configuration de l’agent
Il faut procéder à la modification du fichier /etc/ceilometer/ceilometer.conf :
...
© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -7-
kokou Agbedanou
[DEFAULT]
rabbit_host = srv-opentack-controller
rabbit_password = RABBIT_PASS
...
[publisher]
# Secret value for signing metering messages (string value)
metering_secret = METERING_SECRET
...
[keystone_authtoken]
auth_uri = http://srv-opentack-controller:5000/v2.0
identity_uri = http://srv-opentack-controller:35357
admin_tenant_name = service
admin_user = ceilometerUser
admin_password = ceilometerPass
...
[service_credentials]
os_auth_url = http://srv-opentack-controller:5000/v2.0
os_username = ceilometerUser
os_tenant_name = service
os_password = ceilometerPass
os_endpoint_type = internalURL
Il faut remplacer RABBIT_PASS, METERING_SECRET et ceilometer par les vrais
mots de passe.
Opérations post-installation
# systemctl enable openstack-ceilometer-compute.service
# systemctl start openstack-ceilometer-compute.service
© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -8-
kokou Agbedanou
3. Configuration du service image
Sur le serveur contrôleur sur lequel est installé le service Glance et afin de pouvoir récupérer les
informations de métrologie sur les images, il faut effectuer les interventions suivantes :
Modification du fichier /etc/glance/glance-api.conf
notification_driver = messaging
rpc_backend = rabbit
rabbit_host = srv-opentack-controller
rabbit_password = RABBIT_PASS
Il faut remplacer RABBIT_PASS par le vrai mot de passe.
Redémarrage du service Glance
# systemctl restart openstack-glance-api.service openstack-
glance-registry.service
4. Gestion du stockage bloc
De la même façon, afin de récupérer les informations de métrologie sur le stockage bloc, il faut intervenir
sur le service Cinder.
Modification du fichier /etc/cinder/cinder.conf
© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou -9-
kokou Agbedanou
[DEFAULT]
...
control_exchange = cinder
notification_driver =
cinder.openstack.common.notifier.rpc_notifier
Redémarrage du service Cinder
ˇ
Sur le serveur Controller, redémarrage de cinder-api et cinder scheduler :
# systemctl restart openstack-cinder-api.service openstack-
cinder-scheduler.service
ˇ
Sur le serveur storage, redémarrage de cinder-volume :
# systemctl restart openstack-cinder-volume.service
5. Gestion du stockage objet
De la même façon, afin de récupérer les informations de métrologie sur le stockage objet, il faut intervenir
sur le serveur de stockage objet en effectuant les actions suivantes :
Installation du paquet sur le serveur proxy (si différent du Controller node)
Dans l’installation de Swift (section Installation et configuration sur le Controller Node), c’est le Controller
node qui joue le rôle de proxy swift. Les manipulations suivantes sont donc à effectuer sur le Controller
node.
© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 10 -
kokou Agbedanou
# yum install python-ceilometerclient
Gestion de l’accès et des rôles pour accéder aux statistiques
# keystone role-create --name ResellerAdmin
+ ----------+----------------------------------+
| Property | Value |
+ ----------+----------------------------------+
| id | e71a9a40c68e43719c6d91d0d9a93055 |
| name | ResellerAdmin |
+ ----------+----------------------------------+
Gestion du rôle, tenant pour l’utilisateur ceilometerUser
# keystone user-role-add --tenant service --user ceilometerUser
--role e71a9a40c68e43719c6d91d0d9a93055
Modification du fichier /etc/swift/proxy-server.conf
[filter:ceilometer]
use = egg:ceilometer#swift
[pipeline:main]
pipeline = healthcheck cache authtoken keystoneauth ceilometer
proxyserver
Association de l’utilisateur swift au groupe ceilometer
Cela permet d’avoir accès au fichier ceilometer.conf.
© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 11 -
kokou Agbedanou
# usermod -a -G ceilometer swift
Modification du fichier /etc/swift/proxy-server.conf
operator_roles =
Member,admin,swiftoperator,_member_,ResellerAdmin
Redémarrage du service Swift
# systemctl restart openstack-swift-proxy.service
6. Vérification de bon fonctionnement
Accès à Telemetry (depuis le Controller node)
La commande ceilometer meter-listpermet de s’assurer que le service Telemetry fonctionne
bien.
# ceilometer meter-list
+ ------------+-------+-------+--------------------------------------
+ ---------+----------------------------------+
| Name | Type | Unit | Resource ID
| User ID | Project ID |
+ ------------+-------+-------+--------------------------------------
+ ---------+----------------------------------+
| image | gauge | image | 2cddb75f-5d3f-4cfb-b09f-
7e75a0033115 | None | 4864d3fff7f445d696e52aa77f728734 |
© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 12 -
kokou Agbedanou
| image | gauge | image | ae83804d-5e9e-487e-806b-
1b0f5851900e | None | 4864d3fff7f445d696e52aa77f728734 |
| image.size | gauge | B | 2cddb75f-5d3f-4cfb-b09f-
7e75a0033115 | None | 4864d3fff7f445d696e52aa77f728734 |
| image.size | gauge | B | ae83804d-5e9e-487e-806b-
1b0f5851900e | None | 4864d3fff7f445d696e52aa77f728734 |
+ ------------+-------+-------+--------------------------------------
+ ---------+----------------------------------+
Download d’image
Dans cet exemple, une image cirros est téléchargée depuis le service Glance et poussée sur le disque dur.
# glance image-download "cirros-0.3.3-x86_64" > cirros.img
Détection du download
Telemetry doit détecter l’action de download d’image depuis Glance et afficher une entrée de log :
# ceilometer meter-list
+ ---------------------+------------+----------+--------------------
------------------+----------------------------------+-------------
---------------------+
| Name | Type | Unit | Resource ID
| User ID | Project ID
|
+ ---------------------+------------+----------+--------------------
-----------------+----------------------------------+--------------
--------------------+
| cpu | cumulative | ns | 89b45017-5f70-
4344-a577-91721210c0bd | df220efb4d234f958dd2b3ec76f775de |
4864d3fff7f445d696e52aa77f728734 |
© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 13 -
kokou Agbedanou
| disk.read.bytes | cumulative | B | 89b45017-5f70-
4344-a577-91721210c0bd | df220efb4d234f958dd2b3ec76f775de |
4864d3fff7f445d696e52aa77f728734 |
| disk.read.requests | cumulative | request | 89b45017-5f70-
4344-a577-91721210c0bd | df220efb4d234f958dd2b3ec76f775de |
4864d3fff7f445d696e52aa77f728734 |
| disk.write.bytes | cumulative | B | 89b45017-5f70-
4344-a577-91721210c0bd | df220efb4d234f958dd2b3ec76f775de |
4864d3fff7f445d696e52aa77f728734 |
| disk.write.requests | cumulative | request | 89b45017-5f70-
4344-a577-91721210c0bd | df220efb4d234f958dd2b3ec76f775de |
4864d3fff7f445d696e52aa77f728734 |
| image | gauge | image | 2cddb75f-5d3f-
4cfb-b09f-7e75a0033115 | None |
4864d3fff7f445d696e52aa77f728734 |
| image | gauge | image | ae83804d-5e9e-
487e-806b-1b0f5851900e | None |
4864d3fff7f445d696e52aa77f728734 |
| image.size | gauge |B | 2cddb75f-5d3f-
4cfb-b09f-7e75a0033115 | None |
4864d3fff7f445d696e52aa77f728734 |
| image.size | gauge |B | ae83804d-5e9e-
487e-806b-1b0f5851900e | None |
4864d3fff7f445d696e52aa77f728734 |
| instance | gauge | instance | 89b45017-5f70-
4344-a577-91721210c0bd | df220efb4d234f958dd2b3ec76f775de |
4864d3fff7f445d696e52aa77f728734 |
| instance:m1.small | gauge | instance | 89b45017-5f70-
4344-a577-91721210c0bd | df220efb4d234f958dd2b3ec76f775de |
4864d3fff7f445d696e52aa77f728734 |
+---------------------+------------+----------+--------------------
------------------+----------------------------------+-------------
---------------------+
Commande Telemetry
Telemetry dispose de nombreuses commandes.
ˇ
Affichage des statistiques de consommation CPU :
© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 14 -
kokou Agbedanou
# ceilometer statistics -m cpu
+ --------+---------------------+---------------------+-----+------
+ -----+-----+-------+----------+---------------------+------------
----------+
| Period | Period Start | Period End | Max | Min
| Avg | Sum | Count | Duration | Duration Start | Duration
End |
+ --------+---------------------+---------------------+-----+------
+ -----+-----+-------+----------+---------------------+------------
----------+
|0 | 2015-03-29T20:10:32 | 2015-03-29T20:10:32 | 0.0 | 0.0 |
0.0 | 0.0 | 1 | 0.0 | 2015-03-29T20:10:32 | 2015-03-
29T20:10:32 |
+ --------+---------------------+---------------------+-----+------
+ -----+-----+-------+----------+---------------------+------------
---------+
ˇ
Affichage des alarmes telemetry :
# ceilometer alarm-list
ˇ
Affichage des métriques de la ressource ressource_id :
# ceilometer meter-list --query ressource=ressource_id
7. Configuration d’une alarme Telemetry
Outre le fait de collecter des informations sur les ressources, Telemetry permet de configurer des alarmes
afin de déclencher une action.
© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 15 -
kokou Agbedanou
Syntaxe de la commande ceilometer
# ceilometer alarm-threshold-create --name alarm-name
[--description alarm-text] --meter-name meter-name --threshold value
Mot-clé : alarm-threshold-create
Options :
--name : nom de l’alarme.
--meter-name: nom du métrique (mot-clé de Telemetry).
--threshold : valeur du seuil pour le déclenchement de l’alarme.
ˇ
Premier exemple : création d’une alarme de notification dans un log quand l’utilisation de la
CPU de l’instance instance_id est supérieure à 50 % pendant 600s (10 minutes) :
# ceilometer alarm-threshold-create --name cpu_high --description
'CPU usage high' --meter-name cpu_usage_high --threshold 50
--comparison-operator gt --statistic avg --period 600 --evaluation-
periods 3 --alarm-action 'log://' --query resource_id=instance_id
Deux nouvelles options sont utilisées :
--period, qui détermine la durée de mesure.
--alarm-action, qui déclenche une action post-alarme.
ˇ
Second exemple : modification de l’alarme précédente avec un seuil de 75 % au lieu de 50 %.
© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 16 -
kokou Agbedanou
# ceilometer alarm-threshold-update alarm_id --threshold=75
Il est nécessaire de connaître l’ID de l’alarme.
Suppression de l’alarme alarm_id :
# ceilometer alarm-delete alarm_id
De nombreux exemples sont disponibles à l’adresse : https://access.redhat.com
/documentation/en-US/Red_Hat_Enterprise_Linux_OpenStack_Platform/6/html
/Administration_Guide/sect-Using_the_Telemetry_Service.html.
© Editions ENI - Tous droits réservés - Copie personnelle de kokou Agbedanou - 17 -