21
TP - Dépannage et supervision Mathieu GAUTHIER-LAFAYE Version 0.1, 2017-06-06

TP - Dépannage et supervision - Renater...ceph osd pool create my_objects 288 dd if=/dev/urandom of=random-100M bs=1M count=100 rados -p my_objects put random-100M random-100M Regarder

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

  • 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