Outils pour utilisateurs

Outils du site


sysadmin

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
Prochaine révisionLes deux révisions suivantes
sysadmin [2020/01/21 15:52] lpierisysadmin [2020/03/16 19:35] – [Gestion des alarmes] lpieri
Ligne 1: Ligne 1:
-===== Administration système =====+====== Administration système ======
  
-=== Ajouter un nouvel utilisateur sur un serveur ===+===== Ajouter un nouvel utilisateur sur un serveur =====
  
-== Depuis l'interface Ajenti ==+==== Depuis l'interface Ajenti ====
  
 Dans l'onglet **Utilisateurs**, cliquer sur le bouton "+ utilisateur" en haut. Renseigner les champs __Nom d'utilisateur__, __Nouveau mot de passe__ (puis cliquer sur "définir"), __Répertoire personnel__ cliquer le bouton "créer", __Shell__ avec "/bin/bash/" (sans les guillemets). Dans l'onglet **Utilisateurs**, cliquer sur le bouton "+ utilisateur" en haut. Renseigner les champs __Nom d'utilisateur__, __Nouveau mot de passe__ (puis cliquer sur "définir"), __Répertoire personnel__ cliquer le bouton "créer", __Shell__ avec "/bin/bash/" (sans les guillemets).
  
-== Connecté au serveur en ssh avec un utilisateur ayant les droits sudo ==+==== Connecté au serveur en ssh avec un utilisateur ayant les droits sudo ====
  
   * Modifier le fichier **/etc/sudoers** pour attribuer les droits sudo au nouvel utilisateur.   * Modifier le fichier **/etc/sudoers** pour attribuer les droits sudo au nouvel utilisateur.
   * Modifier/Créer le fichier **.ssh/authorized_keys** depuis le répertoire personnel du nouvel utilisateur et ajouter une clé ssh publique pour pouvoir se connecter en tant que ce nouvel utilisateur.   * Modifier/Créer le fichier **.ssh/authorized_keys** depuis le répertoire personnel du nouvel utilisateur et ajouter une clé ssh publique pour pouvoir se connecter en tant que ce nouvel utilisateur.
  
-Plusieurs clés peuvent être ajoutées dans le fichier authorized_keys, il suffit des les ajouter à la fin du fichier.+Plusieurs clés peuvent être ajoutées dans le fichier authorized_keys, il suffit de les ajouter à la fin du fichier.
  
-=== Grafana ===+====== Surveillance système ======
  
-== Installation ==+La surveillance système est un processus qui consiste en la vérification périodique du bon fonctionnement de tous les composants des serveurs hébergeant les différents applicatifs logiciels.
  
-[[https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-grafana-on-ubuntu-18-04#conclusion|Tutoriel DigitalOcean]]+Ce processus a été mis en place à la suite d'une erreur liée à l'espace disque insuffisant qui a entraîné une interruption de plusieurs minutes du serveur de développementPour prévoir les futures erreurs, nous avions besoin d'une solution capable de surveiller le serveur (charge du système, espace disque restant...) et d'alarmes qui déclencheraient des notifications en cas dépassement de seuils pré-configurés.
  
 +La surveillance système est composée de trois outils complémentaires : 
 +  * L'outil qui va chercher les données du serveur
 +  * L'outil qui va formater les données et le rendre disponible
 +  * L'outil qui va récupérer les données formatées et les afficher dans des tableaux de bord
 +
 +=== Formater et mettre à disposition les données ===
 +
 +Le premier outil se nomme Promethéus, c'est une time series database.
 +
 +**Une Time Series DataBase est une base de données optimisée pour le stockage de données horodatées**
 +
 +C'est l'outil qui va stocker les informations que l'on souhaite récolter à propos du serveur et les mettre à disposition pour d'autres outils.
 +
 +{{:what-does-prometheus-do-1024x610.png?800|}}
 +
 +Il permet d'accéder aux données via des requêtes comme sur une base de données classique.
 +
 +=== Récolter les données ===
 +
 +Prometheus fonctionne avec des exporter. Ce sont des outils qui récolter les données d'un serveur ou d'un service et les enregistrer dans Prometheus. Il en existe de nombreux pour tous types d'applications (MySQL, NodeJS, Nginx, Linux...)
 +
 +[[https://prometheus.io/docs/instrumenting/exporters/|Liste d'exporters]]
 +
 +=== Alerter ===
 +
 +Prometheus possède un système d'alarme et de notification lorsqu'un comportement identifié se déroule pendant une période trop longue. Ce système se nomme AlertManager. Il fonctionne grâce à des règles qui définissent le comportement à observer (requête Prometheus), la période avant que l'alarme se déclenche, le canal de notification (E-mail, Slack...) et enfin les destinataires.
 +
 +[[https://awesome-prometheus-alerts.grep.to/|Listes d'alertes préconfigurées en fonction d'exporters]]
 +
 +=== Afficher les données ===
 +
 +Enfin, il est intéressant d'afficher ces données sous la forme de dashboards pour avoir un rapide aperçu de la santé du système. Pour cela, on utilise Grafana.
 +===== Ressources =====
 +
 +  * [[https://blog.debugo.fr/monitoring-prometheus-serie-tutos/|Tutoriel complet sur l'installation et l'utilisation d'outils de supervision]]
 +  * [[https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-grafana-on-ubuntu-18-04#conclusion|Installation Grafana avancée]]
 +  * [[https://devconnected.com/alertmanager-and-prometheus-complete-setup-on-linux/|AletManager and Preometheus complete setup]]
 +  * [[https://awesome-prometheus-alerts.grep.to/|Liste de règles d'alertes]]
 +
 +===== Installation =====
 +
 +L'outil de récupération des données du serveur se nomme **node_exporter**.
 +L'outil de formatage se nomme **Prometheus**.
 +L'outil de création de tableau de bord se nomme **Grafana**.
 +
 +L'installation de ces trois outils a été réalisée en suivant ce [[https://www.scaleway.com/en/docs/configure-prometheus-monitoring-with-grafana/|tutoriel]]
 +
 +[[https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-grafana-on-ubuntu-18-04#conclusion|Installation Grafana avancée]]
 +
 +A la fin de ces tutoriels, il est possible d'accéder à **Prometheus** sur [[dev.qse.betterb.fr:9090]] et Grafana est accessible sur [[dev.qse.betterb.fr:3000]]. Aucun des deux outils n'est chiffré par SSL pour le moment.
 +
 +===== Tableau de bord =====
 +
 +Pour répondre au plus vite au besoin de voir les données du système, il est possible d'importer des tableaux de bord grafana déjà construit, [[https://grafana.com/grafana/dashboards?dataSource=prometheus&collector=nodeExporter|ici]].
 +
 +==== Importer un tableau de bord communautaire ====
 +
 +  - Copier l'id d'un tableau de bord [[https://grafana.com/grafana/dashboards/11074|Lien vers tableau de bord]]
 +  - Coller l'id dans Grafana [[http://dev.qse.betterb.fr:3000/dashboard/import|Dashboards > Manage > Import]]
 +  - Configurer la **data source** comme indiqué
 +
 +===== Concepts de Grafana =====
 +
 +[[https://grafana.com/docs/grafana/latest/guides/basic_concepts/|Basic Concepts]]
 +
 +===== Gestion des utilisateurs =====
 +
 +Lors de l'installation de Grafana, par sécurité, l'inscription d'utilisateurs externes a été désactivée. Seuls les administrateurs peuvent ajouter de nouveaux utilisateurs. Et seuls des utilisateurs inscrit peuvent accéder à Grafana.
 +
 +L'administration au sein de Grafana est construite de la manière suivante :
 +  * Tous les dashboards et users appartiennent à une organization. Qui représente une entreprise. Dans la plupart des cas il n'y en a qu'une, mais il peut y en avoir plusieurs.
 +  * Au sein d'une [[https://grafana.com/docs/grafana/latest/guides/basic_concepts/#organization|organization]], un user a un rôle particulier : Admin, Editor ou Viewer
 +  * (Optionnel) Une [[https://grafana.com/docs/grafana/latest/guides/whats-new-in-v5/#teams|team]] est un groupe de users qui permet d'affiner les permissions d'édition ou de visualisation des dashboards
 +  * Les Grafana Admin ont toutes les permissions
 +
 +Un [[https://grafana.com/docs/grafana/latest/guides/basic_concepts/#user|user]] a des permissions qui sont définies par :
 +  * Le rôle qu'il a au sein de son organization
 +  * Les permissions de la team auquel il appartient
 +  * Les permissions qui lui sont attribuées directement
 +  * Toutes les permissions si il est **Grafana Admin**
 +
 +===== Gestion des alarmes =====
 +
 +Comme expliqué plus haut, les alarmes sont gérées par AlertManager.
 +
 +AlertManager récupère les alertes remontées par Prometheus et les dispatche aux personnes concernées. Il est aussi capable de mettre en silence certaines alertes et d'en regrouper d'autres pour ne pas inonder les boites de réception. Par exemple : l’hébergeur subit une coupure d’électricité, toutes les instances ne fonctionnent plus. Si une alerte doit être déclenchée à chaque fois qu'une instance n'est plus accessible, alors Alermanager n'enverra qu'un e-mail indiquant toutes les instances inaccessibles.
 +
 +[[https://blog.debugo.fr/tuto-monitoring-prometheus-partie-4-alertmanager/|Installation et configuration d'AlertManager]]
 +
 +Le fichier de configuration global d'AlertManager se trouve **/etc/alertmanager/alertmanager.yml**, il contient : 
 +  * les informations de connexions au serveur smtp
 +  * la liste des destinataires des alertes
 +  * la configuration du silence et du regroupement des alertes
 +
 +La configuration des alertes en elle-mêmes est rédigée dans le dossier **/etc/prometheus/alerting_rules/*_rule.yml**. La convention veut que les fichiers des règles portent le nom du groupe auxquels ils appartiennent puis **_rule.yml**.
 +
 +Dans ces fichiers sera décrit : 
 +  * le groupe
 +  * le nom de l'alerte
 +  * la requête prometheus qui va identifier le comportement déclenchant l'alerte
 +  * le temps avant que l'alerte soit déclenchée
 +  * un label pour identifier la sévérité de l'alerte (page, warning, high, critical...)
 +  * un sommaire et une description : c'est ce qu'on retrouvera dans la notification
 +
 +Plusieurs alertes peuvent-être configurées dans un même fichier, à condition qu'elles fassent partie du même groupe. 
 +
 +2 alertes ont déjà été configurées : 
 +  * une alerte si le serveur dev n'est plus accessible pendant plus d'une minute.
 +  * une alerte si le disque du serveur dev possède moins de 5% de capacité libre pendant plus de une minute.
 +
 +**Attention !** A chaque de fois qu'un fichier d'alerte est créé, il faut vérifier :
 +  * que les droits du fichier sont prometheus:prometheus
 +  * que le fichier est correctement construit avec la commande **promtool check rules path/to/the/rule**
 +  * relancer prometheus avec **sudo systemctl restart prometheus**
 +
 +===== Monitorer CouchDB =====
 +
 +Exporter Prometheus pour CouchDB : [[https://github.com/gesellix/couchdb-prometheus-exporter|CouchDB exporter]]
 +
 +Cet exporter fonctionne exclusivement avec Docker il faut donc l'installer sur le serveur.
 +
 +[[https://docs.docker.com/install/linux/docker-ce/ubuntu/|Installation de Docker sur un serveur Ubuntu 18.04]]
 +
 +Il faut ajouter l'utilisateur au groupe docker pour corriger les erreurs de permissions.
 +
 +<code>sudo usermod -aG docker ${USER}</code>
 +
 +Puis se reconnecter.
 +
 +L'exporter se lance avec la commande suivante : 
 +
 +<code>
 +docker run -d --restart always -p 9984:9984 gesellix/couchdb-prometheus-exporter --couchdb.uri=http://dev.qse.betterb.fr:5984 --databases=_all_dbs --couchdb.username=LOGIN --couchdb.password=PASSWORD
 +</code>
 +
 +Ajouter l'exporter à Prometheus, dans le fichier `/etc/prometheus/prometheus.yml`
 +
 +<code>
 +- job_name: 'couchdb_dev'
 +    scrape_interval: 5s
 +    static_configs:
 +      - targets: ['localhost:9984']
 +</code>
 +
 +Ajouter une rêgle d'alerte dans la config d'AlertManager : 
 +
 +<code>
 +dev@ubuntu1804-betterb-dev:~$ cat /etc/prometheus/alerting_rules/couchdb_rule.yml 
 +groups:
 +  - name: couchdb.rules
 +    rules:
 +    - alert: CouchDbDownAlert
 +      expr: absent(couchdb_httpd_up) or couchdb_https_up < 1
 +      for: 1m
 +      annotations:
 +        summary: CouchDB Node Down
 +</code>