TP - Dépannage et supervision - Renater...ceph osd pool create my_objects 288 dd if=/dev/urandom...
Transcript of TP - Dépannage et supervision - Renater...ceph osd pool create my_objects 288 dd if=/dev/urandom...
-
TP - Dépannage et supervisionMathieu GAUTHIER-LAFAYE
Version 0.1, 2017-06-06
-
Table des matièresÉtat initial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Difficultés de démarrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Vérification des moniteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Vérification des OSDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Simulation de pannes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Perte de réseau sur un serveur OSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Perte d’un OSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Système de fichiers plein sur un OSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Dégradation d’un groupe de placement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Synchronisation des horloges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Retrouver où sont stockées les données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Image RBD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Mesure de performances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Débit actuel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Latence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Benchmark des OSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Les différents formats de sortie de la commande CEPH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
API Rest. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Supervision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Supervision automatisée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Métrologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
-
État initial
Si vous voulez garder l’état des jours précédents, créez de nouveaux instantanésavant d’effectuer la restauration.
Restaurez les instantanés (snapshot) "ceph" de l’ensemble des machines virtuelles. Démarrezl’ensemble des machines virtuelles.
Difficultés de démarrage
IntroductionMaleureusement, notre cluster sensé être fonctionnel à des difficultés de démarrage. Suivez lesétapes suivantes pour comprendre son status et les différentes étapes pour sa remise en service.
Vérification des moniteursConnectez vous sur la machine virtuelle "adm01" et vérifiez l’état du cluster.
ceph health
La commande n’arrive pas à joindre les moniteurs.
Connectez-vous sur mon01, puis vérifiez l’état du service ceph-mon@mon01 :
systemctl status ceph-mon@mon01
Les moniteurs ne sont effectivement pas lancés. Démarrez le service :
systemctl start ceph-mon@mon01
Vérifiez que le service a démarré correctement. Puis vérifiez également l’état du quorum :
systemctl status ceph-mon@mon01ceph daemon mon.mon01 quorum_status
Que constatez-vous ?
Retournez sur adm01 et vérifiez l’état du cluster. Est-ce que la commande "ceph health" répondmieux ?
Répétez les opérations sur mon02.
1
-
Normalement, vous devriez remarquer que le quorum est atteint et que la commande "ceph health"répond.
Sur adm01, vérifiez l’état des moniteurs après avoir démarré le service sur mon02:
ceph mon statceph mon dumpceph quorum_status
Répétez l’opération sur mon03 et effectuez de nouveau les vérifications d’état des moniteurs.
Vérification des OSDsDepuis "adm01", vérifiez l’état du cluster :
ceph healthceph status
Le cluster est en warning mais semble fonctionnel. Essayez de copier un fichier :
ceph osd pool create my_objects 288dd if=/dev/urandom of=random-100M bs=1M count=100rados -p my_objects put random-100M random-100M
Regarder l’état des OSD plus en détail :
ceph osd tree
Connecter vous sur osd01 et vérifier l’état du service :
systemctl status ceph-osd@0systemctl status ceph-osd@1systemctl status ceph-osd@2
Comment expliquez-vous que les OSD ne soient pas vus absents par les moniteurs ?
Normalement les OSD auraient du démarrer. Forcez le démarage d’un premier moniteur endéclenchant le trigger (udev aurait dû le faire) :
ceph-disk trigger /dev/sdb1
Vérifiez l’état des OSD depuis "adm01":
2
-
ceph statusceph osd tree
Que constatez-vous ?
Puis démarrez l’ensemble des OSD:
ceph-disk trigger /dev/sdc1ceph-disk trigger /dev/sdd1
Vérifiez l’état des OSD depuis "adm01":
ceph statusceph osd tree
Démarrez les OSD sur les machines virtuelles osd02 et osd03.
Réessayez de copier le fichier.
rados -p my_objects put random-100M random-100M
Le cluster est maintenant opérationnel pour la partie RADOS et RBD.
Simulation de pannes
Perte de réseau sur un serveur OSDSurveillez le cluster avec la commande :
ceph -w
Sur proxmox, attribuez un numéro de VLAN (par exemple 999) aux deux cartes réseaux de lamachine virtuelle "osd01".
L’OSD est bien détecté "down" par les deux autres OSD.
Vous pouvez supprimer le numéro de VLAN des deux interfaces réseaux. Le cluster doit revenir à lanormale.
Perte d’un OSDDepuis l’interface de Proxmox, supprimez le deuxième disque du serveur osd02.
3
-
Surveillez le cluster avec la commande :
ceph -w
Au bout d’un moment, vous devriez le voir commencer à reconstruire.
Trouvez le numéro de l’OSD qui est tombé :
ceph osd tree
Vous pouvez aller voir dans les journaux de l’osd ce qui s’est passé en vous connectant à la machinevirtuelle osd02 :
less /var/log/ceph/ceph-osd.4.log
Quel ligne vous donne l’information de ce qui se passe ?
Démontez la partition de l’OSD en erreur :
umount /var/lib/ceph/osd/ceph-4
Reconnectez le disque depuis Proxmox.
Vérifiez que la partition se monte et que le processus "ceph-osd" se lance sur la machine virtuelle.
Surveillez le cluster avec la commande :
ceph -w
Système de fichiers plein sur un OSDNous allons simuler le remplissage d’un OSD en plaçant un gros fichier sur le système de fichierd’un OSD :
Depuis "adm01", consultez l’état d’utilisation du cluster et des OSD :
ceph dfceph osd df
Nous choisissons de saturer "osd.0". Il y a actuellement 27213 Mo de libre.
Dans un premier temps, nous allons remplir pour laisser 9% de libre. Nous décidons donc de créerun fichier de 24764 Mo.
4
-
round(27213-(27213*9/100))
Sur le serveur de l’osd.0 (ceph osd tree), allez à la racine du point de montage de l’OSD. Puis créezun fichier "mad" de 24764 Mo :
cd /var/lib/ceph/osd/ceph-0fallocate -l 24764M mad
Retournez sur adm01, consultez le status du cluster :
ceph healthceph statusceph osd df
Essayez de copier un fichier sur le pool "my_objects":
dd if=/dev/urandom of=random-10M bs=1M count=10rados --pool my_objects put my_object_1 random-10M
On va maintenant ne laisser plus que 1% d’espace disque.
round(27213-(27213*1/100))
Supprimez le fichier "mad" puis créer un fichier de 26941 Mo.
cd /var/lib/ceph/osd/ceph-0rm madfallocate -l 26941M mad
Retournez sur adm01, consultez le status du cluster :
ceph healthceph statusceph osd df
Essayez de copier un fichier sur le pool "my_objects":
rados --pool my_objects put my_object_2 random-10M
Qu’est ce que vous constatez ?
5
-
Supprimez le fichier "mad" pour retrouver un cluster fonctionnel.
Dégradation d’un groupe de placementPour simuler le problème, connectez-vous à une machine virtuelle OSD. Par exemple, celui quihéberge le "osd.1".
Allez dans "/var/lib/ceph/osd/ceph-1/current". Entrez dans un des dossiers se terminant par "_head".Noter le numéro du groupe de placement (par exemple : 0.1a).
Il faut qu’il y ait d’autres fichiers en plus d’un fichier "head*". Par exemple :rbd\udata.1be2f238e1f29.000000000000002r Si ce n’est pas le cas choisissez un autre groupe deplacement.
Vous pouvez utiliser la commande suivante pour retrouver les groupes de placement qui hébergentdes données :
ceph pg dump pgs
Créez une corruption du groupe de placement en remplissant tous les fichiers commencant"rbd\udata." d’un contenu alléatoire :
shred rbd\udata.*
Effectuez une vérification du groupe de placement :
ceph pg scrub 0.1a
Retrouvez l’OSD primaire :
ceph pg 0.1a queryceph osd tree
Allez voir le journal de l’OSD "/var/log/ceph/ceph-osd.5.log". Consultez les journaux aux allentoursdu scrub.
Est-ce que CEPH a détecté une erreur ?
Faites la même chose mais cette fois avec un deep-scrub.
ceph pg deep-scrub 0.1a
Il devrait detecter des erreurs au niveau du scrub et un groupe de placement inconsistent.
6
-
ceph health detail
Réparez le groupe de placement :
ceph pg repair 0.1a
Retournez voir le journal de l’OSD primaire du groupe de placement. Étudiez les lignes quicorrespondent à la detection et à la réparation de l’erreur.
La réparation fonctionne car nous avons deux réplicas qui sont en bon état. Sivous faites un pool avec deux réplicas vous ne pourrez effectuer la réparation quemanuellement en supprimant l’objet defectueux. La condition est bien sûr depouvoir discerner le bon du mauvais.
Synchronisation des horlogesCoupez la synchronisation des horloges sur les moniteurs et la machine virtuelle osd03 :
ssh mon01 systemctl stop ntpssh mon02 systemctl stop ntpssh mon03 systemctl stop ntpssh osd03 systemctl stop ntp
Décalez les heures des moniteurs et de la machine virtuelle osd03 :
ssh mon01 date 06160816ssh mon02 date 06170816ssh mon03 date 06180816ssh osd03 date 06190816
Redémarrez les moniteurs :
ssh mon01 systemctl restart ceph-mon@mon01ssh mon02 systemctl restart ceph-mon@mon02ssh mon03 systemctl restart ceph-mon@mon03
Regardez le status du cluster, du quorum et des OSD :
ceph statusceph quorum_statusceph osd tree
7
-
Qu’est ce que vous remarquez ?
Redémarrez un des services osd de la machine virtuelle osd02 et vérifiez le status des osd:
ssh osd02 systemctl restart ceph-osd@4ceph osd tree
Redémarrez le services de l’osd 6 de la machine virtuelle osd03 et vérifiez le status des osd:
ssh osd02 systemctl restart ceph-osd@6ceph osd tree
Allez sur la machine virtuelle osd03 pour vérifier si le service est démarré et consultez les journauxde l’osd pour voir le message d’erreur.
ssh osd03systemct status ceph-osd@6less /var/log/ceph/ceph-osd.6.log
Réparrez les osd en redémarrant les services ntp, les moniteurs et l’OSD qui pose problème :
ssh mon01 systemctl start ntpssh mon02 systemctl start ntpssh mon03 systemctl start ntpssh osd03 systemctl start ntp
ssh mon01 systemctl restart ceph-mon@mon01ssh mon02 systemctl restart ceph-mon@mon02ssh mon03 systemctl restart ceph-mon@mon03
ssh osd03 systemctl restart ceph-osd@6
Retrouver où sont stockées les données
ObjetsListez les groupes de placement de l’objets :
ceph osd map my_objects random-100Mceph pg 3.33 query
Quels sont les OSD qui hébergent les données ? Quel est l’OSD primaire ?
8
-
Image RBDAugmentez le nombre de groupes de placement pour le pool rbd :
ceph osd pool set rbd pg_num 288ceph osd pool set rbd pgp_num 288
Générez une image et l’importez là dans le pool rbd :
dd if=/dev/urandom of=random-256M bs=1M count=256rbd import --dest-pool rbd random-256M
Récupérez le préfixe du nom des objets :
rbd info --pool rbd random-256Mblock_name_prefix=$(rbd info --pool rbd random-256M | grep block_name_prefix | cut -d:-f2)
Listez les objets qui composent l’image RBD :
rados --pool rbd ls | grep $block_name_prefixrbd_objects=$(rados --pool rbd ls | grep $block_name_prefix)
Listez les groupes de placement :
for object in $rbd_objects; do ceph osd map rbd $objectdone
Il peut être intéressant de faire l’inverse, pour déterminer les images affectées parla perte d’un groupe de placement. L’exercice est laissé au lecteur ;)
Mesure de performances
IntroductionCes commandes peuvent être utilisées pour effectuer des comparaisons à un moment donné ou êtreutilisées comme source de la mise en place de la métrologie des performances du cluster.
9
-
Débit actuelLa commande suivante permet d’afficher des informations sur l’activité en cours sur le cluster :
ceph status
Lancez :
• un transfert en écriture
• un transfert en ĺecture
• un recovery en sortant un OSD (ceph osd out)
Vous pourez voir dans la sortie de la commande les lignes suivantes :
• client io 883 kB/s wr, 0 op/s rd, 0 op/s wr
• client io 2957 kB/s rd, 0 op/s rd, 0 op/s wr
• recovery io 4553 kB/s, 1 objects/s
LatenceUne commande permet d’obtenir des indications de latence des OSD :
ceph osd perf
Cette information peut-être utile pour detecter un service OSD défaillant quinessesite d’être redémarré.
Benchmark des OSDOn peut également effectuer des mesures de performances :
ceph tell osd.1 bench
ScriptsCette partie donne des pistes pour l’écriture de script. Il montre la mise en place de l’API REST quipermet de récupérer des informations ou d’effectuer des actions. Il montre aussi la possibilité derécupérer l’information dans différents formats.
10
-
Les différents formats de sortie de la commande CEPHLa commande ceph permet de sortir l’information dans différents formats.
Testez la sortie du status du cluster en json et en xml :
ceph --format=json-pretty statusceph --format=json-pretty osd treeceph --format=xml-pretty status
API RestÀ l’heure actuelle, il n’existe pas de service systemd intégré avec les paquets de CEPH pour activersimplement l’API.
Nous allons ajouter un service systemd "/etc/systemd/system/ceph-rest-api.service":
[Unit]Description=Ceph Rest APIAfter=network.target
[Service]ExecStart=/usr/bin/ceph-rest-api -c /etc/ceph/ceph.conf --cluster ceph -i adminRestart=alwaysPIDFile=/var/run/ceph-rest-api.pidRestartSec=500ms
[Install]WantedBy=multi-user.target
Rechargez les fichiers de définition des services et démarrez le service :
systemctl daemon-reloadsystemctl start ceph-rest-apisystemctl status ceph-rest-api
Vous devriez pouvoir effectuer des requêtes depuis votre navigateur surhttp://:5000/.
Si ce n’est pas le cas vous pouvez installer "curl" :
apt-get install curl
Effectuez des requêtes pour récupérer :
11
http://:5000/
-
• La santé du cluster
• Le status du cluster
• La liste des OSDs
Tentez plusieurs format JSON, XML.
curl http://localhost:5000/api/v0.1/healthcurl http://localhost:5000/api/v0.1/statuscurl http://localhost:5000/api/v0.1/osd/treecurl http://localhost:5000/api/v0.1/osd/tree.jsoncurl http://localhost:5000/api/v0.1/health.xml
Cette configuration n’est pas sécurisée !
Il serait plus que souhaitable que :
• Le daemon tourne avec un autre utilisateur que l’utilisateur root
• Le daemon n’utilise pas les droits "admin" sur le cluster
• Les accès à l’API soit sécurisés au moins par un firewall qui n’autorise quecertaines adresses IP.
Supervision
IntroductionLe but est de mettre en pratique la supervision automatique et la collecte de métriques d’uneinfrastructure CEPH.
La mise en place d’une infrastructure centralisée de monitoring de type "Nagios", "Zabbix","Graphana" ou autres est hors sujet.
Nous utiliserons donc des logiciels simples : monit et munin.
Supervision automatisée
Installation de Monit
apt-get install monit
Alertes email
Le serveur smtp.in2p3.fr n’est pas accecible depuis le réseau des TP. Demandez lenom du serveur accecible.
12
-
Pour configurer les alertes via courriel, ajoutez un fichier "/etc/monit/conf.d/mail" :
set alert [email protected] mailserver smtp.in2p3.fr
Interface WEB
Pour activer l’interface web avec un user "user" et mot de passe "user", ajouter le fichier"/etc/monit/conf.d/httpd" qui contient :
set httpd port 2812 and use address 0.0.0.0 allow user:user
Redemarrez le service :
systemctl restart monit
Vous devriez pouvoir vous connecter à l’interface web : http://:2812/
Réseau
Nous supervisons ici, la réponse au ping et l’ouverture des ports.
Pour les moniteurs le port à superviser est 6789 en TCP.
Ajoutez dans "/etc/monit/conf.d/network":
check host net-mon01 with address mon01 if failed ping then alert if failed port 6789 then alert
check host net-mon02 with address mon02 if failed ping then alert if failed port 6789 then alert
check host net-mon03 with address mon03 if failed ping then alert if failed port 6789 then alert
Pour les OSD c’est un peu plus compliqué. Les OSD utilisent le premier port libre à partir de 6800.Un OSD utilise 4 ports. J’ai choisi de ne regarder que le premier des 4 ports.
Ajoutez dans "/etc/monit/conf.d/network":
13
http:// -
check host net-osd01 with address osd01 if failed ping then alert if failed port 6800 then alert if failed port 6804 then alert if failed port 6808 then alert
check host net-osd02 with address osd02 if failed ping then alert if failed port 6800 then alert if failed port 6804 then alert if failed port 6808 then alert
check host net-osd03 with address osd03 if failed ping then alert if failed port 6800 then alert if failed port 6804 then alert if failed port 6808 then alert
Le monitoring des ports réseaux des OSD n’est pas forcement très fiable. Il peutchoisir de redémarrer sur un autre port que celui défini.
CEPH
Installez "git" pour récupérer des plugins nagios developpés par la communauté :
apt-get install git
Clonez le dépôt :
cd /optgit clone https://github.com/valerytschopp/ceph-nagios-plugins.git
Ajoutez au fichier "/etc/monit/conf.d/ceph" les configurations ci-dessous et redemarrez les servicespour la rendre active.
Pour vérifiez l’état de santé du cluster :
check program ceph-health with path "/opt/ceph-nagios-plugins/src/check_ceph_health" if status != 0 then alert
Pour vérifier que le moniteur est bien présent dans le quorum :
14
-
check program ceph-mon01 with path "/opt/ceph-nagios-plugins/src/check_ceph_mon -Imon01" if status != 0 then alert
check program ceph-mon02 with path "/opt/ceph-nagios-plugins/src/check_ceph_mon -Imon02" if status != 0 then alert
check program ceph-mon03 with path "/opt/ceph-nagios-plugins/src/check_ceph_mon -Imon03" if status != 0 then alert
Pour vérifier que les OSD sur les machines virtuelles :
check program ceph-osd01 with path "/opt/ceph-nagios-plugins/src/check_ceph_osd -Hosd01" if status != 0 then alert
check program ceph-osd02 with path "/opt/ceph-nagios-plugins/src/check_ceph_osd -Hosd02" if status != 0 then alert
check program ceph-osd03 with path "/opt/ceph-nagios-plugins/src/check_ceph_osd -Hosd03" if status != 0 then alert
Pour vérifier l’espace de stockage disponnible dans les pools :
check program ceph-df-rbd with path "/opt/ceph-nagios-plugins/src/check_ceph_df -pmy_objects -W 90 -C 95" if status != 0 then alert
check program ceph-df-my_objects with path "/opt/ceph-nagios-plugins/src/check_ceph_df-p my_objects -W 90 -C 95" if status != 0 then alert
Métrologie
Installation de Munin
Installez munin sur "adm01":
apt-get install apache2 munin
Activation de munin sur le serveur apache : Installez munin sur "adm01":
15
-
a2enconf muninsed -i 's@Require local@Require all granted@' /etc/apache2/conf-enabled/munin.confservice apache2 reload
Munin doit être accecible depuis : http:///munin
Plugin
Copiez le script ci-dessous dans "/etc/munin/plugins/ceph_status" et donnez le droit d’execution.
Ajoutez également le fichier de configuration du plugin "/etc/munin/plugin-conf.d/ceph" :
[ceph_status]user root
Puis, redémarrez "munin-node".
systemctl restart munin-node
Utilisation et status (ceph_status) :
#!/usr/bin/env python
from __future__ import print_functionfrom __future__ import unicode_literals
import jsonimport argparseimport subprocess
def config(args): print('multigraph ceph_client_io_ops') print('graph_title ceph client io op/s') print('graph_category ceph') print('read_ops.label read op/s') print('write_ops.label write op/s') print('graph_args --lower-limit 0') print('graph_scale no')
print('multigraph ceph_client_read_write') print('graph_title ceph client read/write') print('graph_category ceph') print('graph_args --base 1024 --lower-limit 0') print('read.label read') print('write.label write')
print('multigraph ceph_recovery_bandwidth')
16
http:// -
print('graph_title ceph recovery bandwidth') print('graph_category ceph') print('graph_args --base 1024 --lower-limit 0') print('bandwidth.label bandwidth')
print('multigraph ceph_recovery_keys_objects') print('graph_title ceph recovery keys/objects') print('graph_category ceph') print('graph_args --lower-limit 0') print('graph_scale no') print('keys.label keys/s') print('objects.label objects/s')
print('multigraph ceph_degrated_ratio') print('graph_title ceph degrated ratio') print('graph_category ceph') print('graph_args --lower-limit 0 --upper-limit 100') print('graph_scale no') print('degrated.label degrated ratio (%)')
print('multigraph ceph_misplaced_ratio') print('graph_title ceph misplaced_ratio') print('graph_category ceph') print('graph_args --lower-limit 0 --upper-limit 100') print('graph_scale no') print('misplaced.label misplaced ratio (%)')
print('multigraph ceph_osd_status') print('graph_title ceph osd status') print('graph_category ceph') print('graph_args --lower-limit 0') print('graph_scale no') print('total.label total') print('up.label up') print('in.label in')
print('multigraph ceph_mon_count') print('graph_title ceph mon count') print('graph_category ceph') print('graph_scale no') print('count.label count')
print('multigraph ceph_usage') print('graph_title ceph usage') print('graph_category ceph') print('graph_args --base 1024 --lower-limit 0') print('total.label total') print('used.label used') print('available.label available')
def run(args):
17
-
output_json = subprocess.check_output(['/usr/bin/ceph', 'status', '--format=json']) status = json.loads(output_json) pgmap = status['pgmap'] osdmap = status['osdmap']['osdmap']
if args.verbose: print(json.dumps(status, indent=2))
print('multigraph ceph_client_io_ops') print('read_ops.value %d' % pgmap['read_op_per_sec'] if 'read_op_per_sec' in pgmapelse 0) print('write_ops.value %d' % pgmap['write_op_per_sec'] if 'write_op_per_sec' inpgmap else 0)
print('multigraph ceph_client_read_write') print('read.value %d' % (pgmap['read_bytes_sec'] if 'read_bytes_sec' in pgmap else0)) print('write.value %d' % (pgmap['write_bytes_sec'] if 'write_bytes_sec' in pgmapelse 0))
print('multigraph ceph_recovery_bandwidth') print('bandwidth.value %d' % ( pgmap['recovering_bytes_per_sec'] if'recovering_bytes_per_sec' in pgmap else 0 ))
print('multigraph ceph_recovery_keys_objects') print('objects.value %d' % ( pgmap['recovering_objects_per_sec'] if'recovering_objects_per_sec' in pgmap else 0 )) print('keys.value %d' % ( pgmap['recovering_keys_per_sec'] if'recovering_keys_per_sec' in pgmap else 0 ))
print('multigraph ceph_degrated_ratio') print('degrated.value %f' % ( float(pgmap['degraded_ratio']) * 100 if'degraded_ratio' in pgmap else 0.0 ))
print('multigraph ceph_misplaced_ratio') print('misplaced.value %f' % ( float(pgmap['misplaced_ratio']) * 100 if'misplaced_ratio' in pgmap else 0.0 ))
print('multigraph ceph_osd_status') print('total.value %d' % ( int(osdmap['num_osds']) )) print('up.value %d' % ( int(osdmap['num_up_osds']) )) print('in.value %d' % ( int(osdmap['num_in_osds']) ))
print('multigraph ceph_mon_count') print('count.value %d' % ( len(status['monmap']['mons']) ))
print('multigraph ceph_usage') print('total.value %d' % ( int(pgmap['bytes_total']) )) print('used.value %d' % ( int(pgmap['bytes_used']) )) print('available.value %d' % ( int(pgmap['bytes_avail']) ))
18
-
def main(): parser = argparse.ArgumentParser(description="plugin munin pour ceph pg stat") parser.add_argument('command', choices=['config', 'run'], default='run', nargs='?') parser.add_argument('--verbose', action="store_true") args = parser.parse_args()
if 'config' == args.command: config(args) elif 'run' == args.command: run(args)
main()
19
TP - Dépannage et supervisionTable des matièresÉtat initialDifficultés de démarrageIntroductionVérification des moniteursVérification des OSDs
Simulation de pannesPerte de réseau sur un serveur OSDPerte d’un OSDSystème de fichiers plein sur un OSDDégradation d’un groupe de placementSynchronisation des horloges
Retrouver où sont stockées les donnéesObjetsImage RBD
Mesure de performancesIntroductionDébit actuelLatenceBenchmark des OSD
ScriptsLes différents formats de sortie de la commande CEPHAPI Rest
SupervisionIntroductionSupervision automatiséeMétrologie