Blog de dada

DevOps, bidouilleur et routard plein de logiciels libres

Installer mysqld_export pour Prometheus et Grafana

Rédigé par dada / 12 février 2018 / Aucun commentaire


Grafana, c'est mon dada (!) du moment. Après l'avoir installé pour avoir une vision d'ensemble de l'état de mes serveurs, voici l'heure de se pencher sur l'état d'un service en particulier : MariaDB

Je vous redirige vers l'article pour installer Grafana, Prometheus et node_exporter si ça vous intéresse.

Installer mysqld_exporter

On va commencer par récupérer l'exporter :
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.10.0/mysqld_exporter-0.10.0.linux-amd64.tar.gz 
Et on va le placer au chaud dans l’arborescence :
mkdir /opt/prometheus_exporters
tar zxf mysqld_exporter-0.10.0.linux-amd64.tar.gz -C /opt/prometheus_exporters
L'exporter est en place. Ce n'est pas plus compliqué que ça. Passons à la configuration.

Configuration du mysqld_exporter

Il a besoin d'une seule chose : un utilisateur dédié avec les bons droits.
GRANT REPLICATION CLIENT, PROCESS ON *.* TO 'userdelexporter'@'localhost' identified by 'pwddelexporter';
GRANT SELECT ON performance_schema.* TO 'userdelexporter'@'localhost';
FLUSH PRIVILEGES;
On va ajouter ces informations dans un .my.cnf que l'on va passer en paramètre à l'exporter :
[client]
user=userdelexporter
password=pwddelexporter
J'ai choisi de placer ce .my.cnf dans /opt/prometheus_exporters pour ne pas le perdre, mais vous pouvez le mettre ou vous voulez.

Lancer l'exporter

On va déjà le tester :
root@diaspote /opt/prometheus_exporters/ # ./mysqld_exporter -config.my-cnf=".my.cnf"
INFO[0000] Starting mysqld_exporter (version=0.10.0, branch=master, revision=80680068f15474f87847c8ee8f18a2939a26196a)  source="mysqld_exporter.go:460"
INFO[0000] Build context (go=go1.8.1, user=root@3b0154cd9e8e, date=20170425-11:24:12)  source="mysqld_exporter.go:461"
INFO[0000] Listening on :9104                            source="mysqld_exporter.go:479"
Si vous avez ce retour, sans erreur, vous avez réussi l'installation de la bête.

Configurer Prometheus

Ajoutez ces quelques lignes à votre prometheus.yml pour qu'il sache récupérer les informations :
  - job_name: 'mysql'
    # If prometheus-node-exporter is installed, grab stats about the local
    # machine by default.
    static_configs:
      - targets: ['lipdemonserveuraveclexporter:9104']
Rechargez la configuration et le tour est joué :
root@dadall:/home/dada# curl -X POST http://localhost:9090/-/reload 
 Prometheus devrait signaler que tout va bien :



Il ne reste plus qu'à lancer tout ça en tâche de fond en ajoutant une esperluette à la fin de la commande précédente :
root@diaspote /opt/prometheus_exporters/ # ./mysqld_exporter -config.my-cnf=".my.cnf" &

Configurer un dashboard pour Grafana

Pour le dashbaord, sans honte, j'ai pompé sur celui de Perconna que vous pouvez trouver ici. Il est largement suffisant. Prenez quand même bien soin de vérifier que le nom de la data source corresponde bien avec la votre. Je me suis arraché les cheveux parce que la mienne s'appelle prometheus et cette du JSON s'appelle Prometheus. La majuscule, quoi.



Et voilà, le tour est joué. Amusez-vous bien !

N'hésitez pas à me suivre sur Mastodon et/ou diaspora*  pour me lire lutter avec cette stack ! :-)

Passer à Nextcloud 13 rapidement

Rédigé par dada / 06 février 2018 / 4 commentaires




Nextcloud 13 est enfin disponible ! Cette dernière n'est cependant pas encore disponible pour tout le monde via l'application Updater. Seul 15% des utilisateurs ont la chance de pouvoir se mettre à jour en 3 clics. Pour le reste d'entre nous, il va falloir attendre un peu. En effet, les développeurs expliquent qu'ils ne la balancent pas à tout le monde dès le premier jour pour pouvoir la couper en cas de bugs et/ou de soucis découverts pendant la première salve. Ils déploient calmement, c'est bien.

Ceci dit, pour les plus pressés, il est possible de se lancer dans l'aventure avec les quelques actions suivantes :
  • Passer l'Updater sur le canal «beta»
  • Recharger la page
  • Appliquer la mise à jour proposée, qui est bien la version stable
  • Ne pas oublier de repasser sur le canal stable une fois la màj terminée


Si vous avez peur de cette manipulation, sachez qu'elle sort tout droit du billet de blog annonçant la sortie de la nouvelle version de mon cloud adoré ! Si si, tout en bas, juste avant le »Thank you».

Maintenant, la mise en garde :

Les applications officielles ne vous poseront pas de souci, contrairement aux applications terces !
Pensez à bien aller faire un tour dans le magasin d'application pour vérifier que vos outils sont biens compatibles avec cette toute nouvelle mouture !
Solution rapide : aller faire un tour dans la page Applications de votre instance et cliquez sur Afficher dans le magasin d'application dès que vous en avez l'occasion.


Si, comme dans la capture si dessus, vous ne voyez pas apparaitre Nextcloud 13, vous savez que vous devez attendre !

J'ai, personnellement, pas encore de versions compatibles avec NC 13 de Nextant et de Tasks. Cette dernière devrait arriver très vite, d'après cette issue Github.

Pour terminer : si vous le pouvez, soyez patient !

Installer Grafana, Prometheus et Node Exporter

Rédigé par dada / 31 janvier 2018 / 5 commentaires




Le monitoring, j'aime à dire que c'est ce que l'administrateur a de plus pervers : surveiller, voir et savoir tout ce qui se passe sur ses machines, sans limite, et de la façon qui lui est la plus agréable possible. Un admin, c'est un stalker, en fait.

De mon côté, après avoir testé Facette, Monitorix, Netdata et Munin, je joue en ce moment avec Grafana, Prometheus et les exporters qui vont avec. C'est l'objet de ce billet, ça tombe bien, alors voyons comment faire pour installer tout ça en quelques minutes.

Comprendre l'installation en quelques lignes

Vos serveurs vont avoir un exporter simple : le Node Exporter, qui va permettre à Prometheus de récupérer les différentes métriques qu'il partage. La bonne pratique consiste à installer Prometheus sur une serveur qui sera dédié à la collecte des informations. Si vous installez tout sur une seul et même machine, vous pourrez mettre du localhost dans presque tout ce qui suit. Grafana, quant à lui, va afficher ses données avec des jolies couleurs et dans des jolis graphiques.

Installer Prometheus

Pas de piège pour une Debian Stretch :
apt install prometheus 
C'est un peu plus compliqué pour une Jessie :
apt -t jessie-backports install prometheus 
Notez qu'essayer de lancer le service sous Jessie via systemd est foireux : il faut utiliser la bonne vieille méthode :
/etc/init.d/prometheus start 
Si vous ne faites pas ça et que vous avez des soucis, genre un service qui écoute déjà sur le 9090, vous ne verrez rien dans les logs.

A partir de là, vous devriez pouvoir accéder à Prometheus en tapant sur le port 9090 de votre serveur.



Quoi ? Jamais j'ai écrit que Prometheus était sexy ;-)

Installer Node Exporter

Prometheus ne sait pas collecter d'informations tout seul. Il lui faut des exporters. Le plus simple et le plus complet pour avoir une vision global de la situation d'une machine (CPU, RAM, Load, traffic, etc) est le bien nommé Prometheus Node Exporter. Pour l'installer :
apt install prometheus-node-exporter

Configurer le Node Exporter dans Prometheus

Maintenant que les deux premiers outils sont installés, il va falloir les faire bosser ensemble. On va simplement déclarer dans la configuration de Prometheus qu'il doit se mettre d'accord avec l'exporter :
vim /etc/prometheus/prometheus.yml
scrape_configs:
  - job_name: 'prometheus'

    scrape_interval: 5s
    scrape_timeout: 5s

    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node'
    static_configs:
      - targets: ['monserveur:9100','monserveurdeux:9100']

L'exemple de configuration ci-dessus est quasiment celle de base. Il faut noter que le job_name 'prometheus' est là pour expliquer que Prometheus est en local. Quant au job_name 'node',  il fait comprendre à Prometheus que le Node Exporter est présent sur les hosts cités entre crochets.

On sauvegarde tout ça et on recharge la configuration de Prometheus avec le curl qui va bien :
curl -X POST http://localhost:9090/-/reload
Si vous n'avez pas d'erreur, on va enfin s'attaquer à la partie artistique de l'opération : les graphiques !

Installer Grafana

L'installation est, là aussi, triviale :
apt-get install grafana 
C'est 'achement difficile, tout ça, hein ?

Configurer Nginx

Pour ne pas avoir à toujours taper le port de Grafana, voici un bout de conf pour Nginx :
server {
    listen 80;

        root /var/www/html/;

        server_name grafana.monserveur.tld;

        location / {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_redirect off;
                proxy_pass http://127.0.0.1:3000;
        }
}

Configurer Grafana

- Ajouter une data source

Grafana, ça marche tout seul. Une fois installé, il vit sa vie. Par contre, il va falloir le brancher à Prometheus, tout de même.
Comme blablater, c'est chiant, voici une capture d'écran de ce que vous devez faire :



En commentaire : cliquez sur le menu en haut à gauche de Grafana pour ajouter une nouvelle data source et récupérer les informations que vous voyez dans la capture.
Vous remarquerez que le port mis en place est bien celui de Prometheus et pas celui du Node Exporter : Grafana ne communique pas avec Node Exporter (sur le port 9100), mais uniquement avec Prometheus.

On arrive à la fin. Maintenant que l'exporter balance des informations, que Prometheus en est conscient et que Grafana arrive à échanger avec Prometheus, on va pouvoir mettre en place un dashboard pour profiter des graphiques !

- Installer le dashboard Node Exporter Full

Ici, c'est aussi simple (mais pourquoi est-ce que je m'emmerde à écrire ce billet si c'est si simple ?!), pour installer un dashboard, allez dans le Menu de Grafana, puis Dashboard et enfin Import. Je dis bien Import, pas New. Enfin, ajoutez le nombre 1860 dans la premier champ pour faire apparaître la fenêtre suivante :



Bon, j'ai aussi cliqué n'importe-où sur la fenêtre pour que Grafana prenne en compte la nouvelle information et, finalement, affiche la capture ci-dessus.

On a fait le tour. Tout est bon. Vous pouvez aller sur la page d'accueil de Grafana, cliquer sur le nom de votre nouveau dashboard et profiter du spectacle !



Diaspote et diaspodon passent chez Hetzner

Rédigé par dada / 28 janvier 2018 / Aucun commentaire




Ce billet est un peu l'héritier des anciens "Diaspote in backstage" mais comme je gère maintenant un serveur Mastodon, se concentrer sur la seule vie de diaspote.org n'a plus vraiment de sens.
Donc, en ce début d'année 2018, j'ai succombé, encore, à mon activité préférée : migrer des services d'un serveur à un autre.

Diaspote

Pas grand chose à signaler si ce n'est que j'ai décidé de me passer du C2S de chez Scaleway pour partir chez Hetzner. Le serveur passe donc de 4 cores et 8Go de RAM à 2 cores et 4Go de RAM. On pourrait parler de chute drastique des performances si on se contentait de ces chiffres, mais non. Les processeurs de Hetzner sont bien plus puissants que ceux de Scaleway et les besoins en mémoire vive de diaspote.org ne sont pas mirobolants. Je surveille tout de même tout ça de près avec Grafana et Prometheus, mais ça sera pour un autre billet.

Diaspodon

Moins abordé dans ces colonnes, diaspodon.fr est mon serveur Mastodon. Vous ne connaissez pas Mastodon ? C'est un équivalent libre et décentralisé à Twitter. C'est du temps réel, rapide, loin de la tranquillité de diaspora*.
J'avais d'abord posé Mastodon sur un C1 de chez Scaleway, avant de le migrer sur une Kimsufi (4 cores, 16Go de RAM) pour terminer par me dire que c'était bien trop gros et migrer tout ça chez Hetzner avec la même configuration que diaspote.org.

Hetzner Cloud

On parle de qui ? Hetzner, ce sont des allemands. Ce sont aussi les hébergeurs des services de Framasoft. Ils ont sorti une offre qu'il est difficile de ne pas apprécier :



Des services comme diaspora* et Mastodon, à condition de ne pas héberger des centaines de comptes, rentrent parfaitement dans l'offre à 5,88 TTC.
Les plus observateurs remarqueront qu'il est possible de détacher le stockage de la machine pour la mettre sur un cluster CEPH. On perd en performance brute mais on gagne en fiabilité. En cas de souci sur une machine, avec CEPH, on déplace le disque sur une nouvelle bête et ça repart.
Les sauvegardes sont aussi présentes dans cette offre de cloud : pour une majoration de 20% sur votre facture, vous avez un backup journalier de vos disques, avec une rétention de 7 jours. Nickel.
Quant à la limitation de bande passante, je suppose qu'elle n'est pas gênante pour diaspora* ou pour Mastodon. 20TB, c'est quand même énorme. Elle doit peut-être pouvoir s'expliquer par une envie de réduire l'utilisation de ces machines en tant que seedbox.
Ils ont aussi des IP flottantes, pour celles et ceux qui savent à quoi ça peut servir, et d'autres services. Leur cloud est tout frais. Tout n'est pas encore disponible, va falloir surveiller les nouveautés de près.

L'espace disque

C'est là que Hetzner pèche un peu. 40Go, ce n'est pas énorme. Ce n'est pas un souci pour diaspora* mais c'est à surveiller pour Mastodon. Si vous ne le savez pas, sachez que votre pod diaspora* héberge uniquement les données de vos utilisateurs. Celles des autres vous parviennent par un jeu de liens. Mastodon est plus violent : il se sert bien d'un lien, mais met en cache la donnée sur votre serveur. Si votre serveur voit 100 personnes poster une image de 4Mo, Mastodon va utiliser 400Mo d'espace disque. Et sachez que croiser 100 personnes sur Mastodon, ça peut se faire en quelques minutes.

Enfin, le coût

Ces deux services me coûtent maintenant 2 x 5.88€, soit moins de 12€ par mois, ce qui était le prix du fonctionnement de diaspote.org uniquement. Il parait que Scaleway n'est pas cher, c'est maintenant faux. C'est cher et lent.
Passer sa facture mensuelle d'un peu moins de 30€ à un peu moins de 15€, c'est assez génial : ça fait 2 pintes de bière belge en plus.

Le mot de la fin

Viendez tester diaspote.org et diaspodon.fr : c'est ouvert et la politique de modération est la même des deux côtés : si vous ne faites rien d'illégal, nous ne ferons rien.

Le mot de la fin x2

Vous savez que le FOSDEM (FOSDEM), c'est le week-end prochain, hein ? Et qu'on y sera avec l'ami Augier et les autres ? N'oubliez pas de venir ! Cette année, pas de stand pour nous. On sera dans les salles et les couloirs, et les bars. Notifiez-nous sur Mastodon ou diaspora et on se retrouvera !

J'ai fait une semaine d'astreinte

Rédigé par dada / 29 décembre 2017 / 15 commentaires


Je ne me souviens pas avoir déjà lu des billets de retours d'expérience autour de ce qu'on appelle l'astreinte en informatique, alors voici ce que je peux raconter après avoir passé ma toute première semaine à rester pendu à un téléphone en attendant un éventuel incident.

L'astreinte dans l'IT

Il n'y a rien d'étonnant quand on nous parle de garde. Le fait que le personnel médical, pour ne parler que de lui, soit régulièrement appelé à bosser de nuit ou les week-ends n'étonne personne. Par contre, nous autres, les geeks de l'ombre, les administrateurs système, c'est moins évident. Pourtant, les sites web, sur lesquels vous traînez à longueur de journée, doivent bien fonctionner jours et nuits, week-ends et jours fériés.
C'était mon travail de la semaine, pendant que vous profitiez certainement de Noël et d'une semaine de vacances bien méritée. J'avais un œil sur l'applicatif et le matériel des centaines de clients de mon entreprise.

La nuit

Animal de nuit au visage pâle, c'est une définition populaire du bon gros geek. Il se couche tard, vit bien mieux dans le noir et évite les rayons du soleil tout juste bons à faire des reflets sur les écrans. Loin d'être totalement fausse, c'est une définition du geek détendu, qui fait sa tambouille dans son coin et qui s'organise pour que personne ne le dérange. En astreinte, on est loin du compte. L'admin que je suis était tout sauf détendu. Heureux de vivre de nuit, je l'étais certainement : pas de bruit, un vrai calme olympien dehors, pas de reflet sur l'écran, soit. Mais pas détendu pour un euro. À partir de 20h, on regarde ce téléphone qui va s'allumer et sonner toutes les 45min, ou presque.

La gestion du temps

Comme je n'aime pas vraiment faire les choses à moitié, j'ai commencé cette période d'astreinte par un jour férié : le jour de Noël, ce lundi 25 décembre 2017. Vous savez, ce jour où toute la famille est là, heureuse (ou presque) de se rassembler dans un déballage de bouffe, de bon vin et de cadeaux. J'ai commencé ma journée à 8h, pour la finir à 8h le lendemain. Oui, les jours fériés, c'est cadeau : 24h. Le rythme classique de mon type d'astreinte m'oblige à être disponible de 20h à 8h. Sauf les jours fériés. Et ma première fois fut un jour férié. Joie.
Qu'est-ce que je foutais dans la maison familiale alors que j'étais d'astreinte et que rien ne vaut le calme de mon appartement ? Les fêtes de famille, tout simplement.
Ça m'a sauté à la gueule, d'ailleurs. Sans que personne n'ait pu me l'expliquer, la fréquentation du site d'un client a EX-PLO-SÉE. Un jour de Noël. Et je parle de gens qui vendent du matériel de sport, pas des cochonneries qu'on pourrait s'offrir après avoir reçu le chèque des Grand-Parents. Enfin bref. Là, j'ai été victime de mon inexpérience : j'aurais dû tout de suite contacter le responsable de ce client pour lui dire de gonfler les machines plutôt que d'essayer de les faire tenir en, par exemple, bloquant le crawling des bots. Ça m'aurait épargné des heures de prise de tête et une fatigue qui m'a empêché de tenir toute la nuit. Grosse inexpérience.

L'appel en cas d'incident ou d'impossibilité d'agir

Des centaines de clients au bout de mon clavier, disais-je plus haut, c'est tout autant de cas particuliers que je ne peux pas maîtriser. L'entreprise pour laquelle je travaille n'étant pas un repère d'enfoirés, en cas de souci, j'ai la possibilité, voire l'obligation d'appeler la personne la plus à même de réagir pour rétablir un service qui me laisse sans voix.
Appeler quelqu'un entre 20h et 23h, ça me va. Appeler quelqu'un entre minuit et 6h du matin, c'est au delà de ce que mon éducation considère comme respectable. C'est non, niet, nada, on ne fait pas ça ! Pourtant, ce lundi, j'ai du le faire, à 4h du matin, pour être précis. L'horreur. Et ça ne s'est pas passé qu'une fois cette nuit là.
Heureusement, j'ai réussi à réveiller un bon gars qui m'a tout de suite pris sous son aile pour m'accompagner et me rassurer. Dans les détails, je n'en pouvais plus de tenir à bout de bras un groupe de 6 machines et j'ai décidé d'appeler pour valider une augmentation des ressources. Chose qu'on est censé faire après validation avec le client. Sauf qu'à 4h du matin, c'est délicat. L'histoire révéla qu'une fois mon collègue réveillé, les soucis ont disparu. #Tristitude.
Alors qu'il était encore avec moi, un autre client a vu son infrastructure se casser la figure. Un bordel sans nom, cette infra. À deux, nous n'avons rien pu faire. On a fini par réveiller un troisième larron vers 5h. Il était loin de chez lui, sans ordinateur. Il nous a dépanné pour comprendre le souci : c'était pas nous, l'hébergeur, mais une erreur dans le code du client. La solution ? Devinez ! Nous avons réveillé le CTO d'un grand groupe de mode français, à 5h30 du matin. La situation que je voulais absolument éviter et survenue. J'étais mal.
Vers 6h, après 22h de lutte, mon corps m'a lâché. Je devais tenir jusqu'à 8h, mais pas ce jour là. Le stress m'a tué.

J'ai tenu 22h d'astreinte sur les 24 demandées, mon premier jour, ma première nuit. Mardi, le réveil m'a malheureusement sorti de mon sommeil vers 13h. J'étais HS, à bout, mais les soucis de la nuit étaient résolus. Mes collègues du jour m'avaient sorti du pétrin et je n'avais rien raté entre 6h et 8h. Merci les copains. J'ajoute que le CTO a bougé le cul d'un de ses développeurs pour corriger la situation. Astreinte, responsable du client, responsable du projet côté hébergeur, CTO du client, développeur du client, retour à la normale. Et ben.

La gestion du sommeil

On ne sait jamais ce qui peut arriver. Jamais. Les histoires que je relate dans le paragraphe précédent, jamais je n'aurais imaginé ça possible. On m'avait dit que le jour de Noël, on s’ennuyait. La belle affaire.

12h, c'est long, très long et l'astreinte a deux possibilités :
  • Vivre sa vie normale en journée et se laisser réveiller par les alertes/incidents.
  • Se décaler complètement en dormant toute la journée et vivant la nuit.
Vous l'avez lu un peu plus haut : pour les fêtes de fin d'année et la famille, il était hors de question que je me décale complètement. J'ai donc choisi de tenter l'expérience skipper : essayer de dormir au maximum entre chaque forte vague.
Confiant, j'étais, comme dirait le petit gars vert de chez Disney. Sauf que mon cerveau m'a empêché de faire ce que je voulais. Allongé dans mon lit, il m'était impossible de dormir. La peur d'être dérangé par un incident qui me forcerait à dégainer le téléphone m'a complètement bloqué. On ne grappille pas quelques heures de sommeil comme ça, sur un claquement de doigts et sous une couverture chaude. Non. Il faut avoir confiance en soi pour se laisser emporter par le sommeil alors que tout est organisé pour l'empêcher.

Bref, la première période d'astreinte fut un cauchemar. J'ai mieux supporté la suite, mais quand même. Vendredi, 8h, je terminais ma dernière nuit : j'étais sauvé, enfin sorti de ce jeu infernal qui te réveille quand tu veux dormir.
Je n'ai pas envie de faire la liste des choses qui me sont arrivées au cours de cette semaine. La grande majorité de mes interventions se sont révélées sans grand intérêt mais bien assez régulières pour empêcher plus de 60min de sommeil d'affilé.

Il ne me reste plus qu'à attendre mon week-end d'astreinte. Une terreur reconnue de tous. Courage, moi.