diff --git a/Documents/Rapport_mensuelle_PFE_octobre_2025.pdf b/Documents/Rapport_mensuelle_PFE_octobre_2025.pdf new file mode 100644 index 0000000..4bf4ad0 Binary files /dev/null and b/Documents/Rapport_mensuelle_PFE_octobre_2025.pdf differ diff --git a/Documents/test b/Documents/test deleted file mode 100644 index e69de29..0000000 diff --git a/observabilite/observability/vm_observabilite/docker-compose.yml b/observabilite/observability/vm_observabilite/docker-compose.yml index 9fd1772..9192dd7 100644 --- a/observabilite/observability/vm_observabilite/docker-compose.yml +++ b/observabilite/observability/vm_observabilite/docker-compose.yml @@ -1,4 +1,3 @@ -version: "3.8" services: prometheus: image: prom/prometheus:latest @@ -47,8 +46,24 @@ services: - /var/log:/var/log:ro command: - -config.file=/etc/promtail/config.yaml + #depends_on: + # - loki networks: - observability + node_exporter: + image: prom/node-exporter:latest + container_name: node-exporter + restart: unless-stopped + pid: "host" + network_mode: "host" + volumes: + - /proc:/host/proc:ro + - /sys:/host/sys:ro + - /:/rootfs:ro + command: + - '--path.procfs=/host/proc' + - '--path.sysfs=/host/sys' + - '--collector.filesystem.ignored-mount-points="^/(sys|proc|dev|host|etc)($$|/)"' volumes: grafana-data: networks: diff --git a/observabilite/observability/vm_observabilite/prometheus.yml b/observabilite/observability/vm_observabilite/prometheus.yml index 3d79954..61fe97a 100644 --- a/observabilite/observability/vm_observabilite/prometheus.yml +++ b/observabilite/observability/vm_observabilite/prometheus.yml @@ -6,10 +6,19 @@ scrape_configs: static_configs: - targets: ['localhost:9090'] - #- job_name: 'node_exporter_vmservices' - # static_configs: - # - targets: ['192.168.56.31:9100'] + - job_name: 'observabilite' + static_configs: + - targets: ['192.168.56.16:9100'] #ip de la machine observabilite + + - job_name: 'scaphandre' + static_configs: + - targets: ['192.168.56.16:8080'] + fallback_scrape_protocol: "PrometheusText1.0.0" - job_name: 'apache_vmservices' static_configs: - - targets: ['192.168.56.32:9117'] #ip vmService + - targets: ['192.168.56.17:9117'] #ip vmService + + - job_name: 'vms' + static_configs: + - targets: ['192.168.56.18:9100'] #ip vmHardware diff --git a/observabilite/observability/vm_observabilite/promtail-config.yaml b/observabilite/observability/vm_observabilite/promtail-config.yaml index c071df1..f8cc655 100644 --- a/observabilite/observability/vm_observabilite/promtail-config.yaml +++ b/observabilite/observability/vm_observabilite/promtail-config.yaml @@ -17,3 +17,10 @@ scrape_configs: job: docker __path__: /var/lib/docker/containers/*/*.log + - job_name: system_logs + static_configs: + - targets: + - localhost + labels: + job: syslog + __path__: /var/log/*.log \ No newline at end of file diff --git a/observabilite/observability/vm_observabilite_applicatif/scripts/install_applicatif.sh b/observabilite/observability/vm_observabilite_applicatif/scripts/install_applicatif.sh index a8aa491..18e2637 100755 --- a/observabilite/observability/vm_observabilite_applicatif/scripts/install_applicatif.sh +++ b/observabilite/observability/vm_observabilite_applicatif/scripts/install_applicatif.sh @@ -59,6 +59,7 @@ sudo systemctl status tomcat --no-pager echo "=== Déploiement du WAR ArchiWeb ===" sudo cp /vagrant/archiweb-api-1.0.0.war /opt/tomcat/webapps/ +sudo mv /opt/tomcat/webapps/archiweb-api-1.0.0.war /opt/tomcat/webapps/api.war echo "=== Installation PostgreSQL 18 ===" echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list @@ -72,6 +73,8 @@ DROP DATABASE IF EXISTS archiweb_db; CREATE DATABASE archiweb_db; CREATE USER archiweb_user WITH ENCRYPTED PASSWORD 'archiweb_pass'; GRANT ALL PRIVILEGES ON DATABASE archiweb_db TO archiweb_user; +\c archiweb_db +GRANT ALL ON SCHEMA public TO archiweb_user; \q EOF @@ -82,9 +85,34 @@ sudo systemctl restart postgresql sudo systemctl status postgresql --no-pager echo "=== Import des schémas et données ===" +<<<<<<< HEAD #sudo -u archiweb_user psql -U archiweb_user -d archiweb_db -f /vagrant/database/schema.sql -W <<< "archiweb_pass" #sudo -u archiweb_user psql -U archiweb_user -d archiweb_db -f /vagrant/database/data.sql -W <<< "archiweb_pass" PGPASSWORD=archiweb_pass psql -U archiweb_user -d archiweb_db -f /vagrant/database/schema.sql PGPASSWORD=archiweb_pass psql -U archiweb_user -d archiweb_db -f /vagrant/database/data.sql +======= +# Attendre que PostgreSQL soit complètement redémarré +sleep 3 +>>>>>>> develop -echo "=== Installation et déploiement terminé ===" +# Import avec PGPASSWORD et vérification des fichiers +if [ -f /vagrant/database/schema.sql ]; then + echo "Import du schéma..." + PGPASSWORD=archiweb_pass psql -h localhost -U archiweb_user -d archiweb_db -f /vagrant/database/schema.sql +else + echo "ERREUR: Fichier schema.sql introuvable" + exit 1 +fi + +if [ -f /vagrant/database/data.sql ]; then + echo "Import des données..." + PGPASSWORD=archiweb_pass psql -h localhost -U archiweb_user -d archiweb_db -f /vagrant/database/data.sql +else + echo "ERREUR: Fichier data.sql introuvable" + exit 1 +fi + +echo "=== Vérification de l'import ===" +PGPASSWORD=archiweb_pass psql -h localhost -U archiweb_user -d archiweb_db -c "\dt" + +echo "=== Installation et déploiement terminé ===" \ No newline at end of file diff --git a/observabilite/observability/vm_observabilite_applicatif/scripts/monitoring_applicatif.sh b/observabilite/observability/vm_observabilite_applicatif/scripts/monitoring_applicatif.sh index 6115ef9..6271d4e 100755 --- a/observabilite/observability/vm_observabilite_applicatif/scripts/monitoring_applicatif.sh +++ b/observabilite/observability/vm_observabilite_applicatif/scripts/monitoring_applicatif.sh @@ -6,7 +6,7 @@ PROMTAIL_VERSION="v3.1.1" PROMTAIL_DIR="/opt/promtail" CONFIG_DIR="/etc/promtail" TOMCAT_LOG_DIR="/opt/tomcat/logs" -LOKI_URL="http://192.168.56.20:3100/loki/api/v1/push" +LOKI_URL="http://192.168.56.16:3100/loki/api/v1/push" PROMTAIL_USER="promtail" PROMTAIL_GROUP="promtail" TOMCAT_GROUP="tomcatlogs" diff --git a/observabilite/observability/vm_observabilite_applicatif/scripts/note.txt b/observabilite/observability/vm_observabilite_applicatif/scripts/note.txt new file mode 100644 index 0000000..2f27427 --- /dev/null +++ b/observabilite/observability/vm_observabilite_applicatif/scripts/note.txt @@ -0,0 +1,53 @@ +sudo mv /opt/tomcat/webapps/archiweb-api-1.0.0.war /opt/tomcat/webapps/api.war + +ALTER TABLE utilisateur ADD COLUMN token_reinitialisation VARCHAR(255); + +root@vmApplicatif:/opt/tomcat/webapps# psql -U archiweb_user -d archiweb_db +Password for user archiweb_user: archiweb_pass + +archiweb_db=> \dt + List of tables + Schema | Name | Type | Owner +--------+------------------+-------+--------------- + public | contenu_cours | table | archiweb_user + public | cours | table | archiweb_user + public | devoir | table | archiweb_user + public | enseignement | table | archiweb_user + public | inscription | table | archiweb_user + public | note | table | archiweb_user + public | rendu_devoir | table | archiweb_user + public | role | table | archiweb_user + public | utilisateur | table | archiweb_user + public | utilisateur_role | table | archiweb_user +(10 rows) + +archiweb_db=> \d utilisateur + Table "public.utilisateur" + Column | Type | Collation | Nullable | Default +--------------+------------------------+-----------+----------+----------------------------------------- + id | bigint | | not null | nextval('utilisateur_id_seq'::regclass) + login | character varying(8) | | not null | + mot_de_passe | character varying(255) | | not null | + nom | character varying(100) | | | + prenom | character varying(100) | | | + email | character varying(255) | | | + +NB: +archiweb_db=> ALTER TABLE utilisateur ADD COLUMN token_reinitialisation VARCHAR(255); +ALTER TABLE +archiweb_db=> \d utilisateur + Table "public.utilisateur" + Column | Type | Collation | Nullable | Default +------------------------+------------------------+-----------+----------+----------------------------------------- + id | bigint | | not null | nextval('utilisateur_id_seq'::regclass) + login | character varying(8) | | not null | + mot_de_passe | character varying(255) | | not null | + nom | character varying(100) | | | + prenom | character varying(100) | | | + email | character varying(255) | | | + token_reinitialisation | character varying(255) | | | + +archiweb_db=> \q + +root@vmApplicatif:/opt/tomcat/webapps# sudo systemctl restart postgresql +root@vmApplicatif:/opt/tomcat/webapps# sudo systemctl status postgresql \ No newline at end of file diff --git a/observabilite/observability/vm_observabilite_hardware_desVMs/scripts/monitoring_VMhardware.sh b/observabilite/observability/vm_observabilite_hardware_desVMs/scripts/monitoring_VMhardware.sh new file mode 100755 index 0000000..8c79e41 --- /dev/null +++ b/observabilite/observability/vm_observabilite_hardware_desVMs/scripts/monitoring_VMhardware.sh @@ -0,0 +1,104 @@ +#!/bin/bash +# --------------------------------------------------------- +# Script d'installation automatique de Node Exporter + Promtail +# Compatible Debian/Ubuntu +# --------------------------------------------------------- + +set -e # Stoppe le script en cas d'erreur + +# --- Variables globales --- +NODE_EXPORTER_VERSION="1.7.0" +PROMTAIL_VERSION="2.9.2" +LOKI_SERVER_IP="192.168.56.16" # à modifier selon ton environnement +HOSTNAME_LABEL=$(hostname) + +# --- Vérification utilisateur root --- +if [ "$EUID" -ne 0 ]; then + echo "Ce script doit être exécuté en tant que root (sudo)." + exit 1 +fi + +echo "🚀 Mise à jour du système..." +apt update -y && apt install -y wget unzip + +# --- Installation de Node Exporter --- +echo "Installation de Node Exporter v${NODE_EXPORTER_VERSION}..." +cd /tmp +wget -q https://github.com/prometheus/node_exporter/releases/download/v${NODE_EXPORTER_VERSION}/node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64.tar.gz +tar xvf node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64.tar.gz +mv node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64/node_exporter /usr/local/bin/ +useradd -rs /bin/false nodeusr || true + +cat >/etc/systemd/system/node_exporter.service </etc/promtail-config.yml </etc/systemd/system/promtail.service < /etc/promtail-config.yml" +echo "Loki Server IP : ${LOKI_SERVER_IP}:3100" +echo "----------------------------------------" \ No newline at end of file diff --git a/observabilite/observability/vm_observabilite_hardware_desVMs/scripts/stress.sh b/observabilite/observability/vm_observabilite_hardware_desVMs/scripts/stress.sh new file mode 100644 index 0000000..34f3f3b --- /dev/null +++ b/observabilite/observability/vm_observabilite_hardware_desVMs/scripts/stress.sh @@ -0,0 +1,139 @@ +#!/usr/bin/env bash +# Script de stress "fort mais contrôlable" pour VM Linux +# - CPU : boucle infinie sur plusieurs cœurs +# - RAM : allocation d'un pourcentage de la RAM +# - DISK : gros fichier + lectures en boucle +# +# ⚠️ À adapter AVANT d'exécuter : les variables MEM_PRESSURE_PCT, DISK_FILE_SIZE_MB, etc. + +set -euo pipefail + +########## PARAMÈTRES À ADAPTER ########## +# Pourcentage de RAM à consommer (50 = 50%) +MEM_PRESSURE_PCT=60 + +# Nombre de workers CPU +# 0 = "autant que de vCPU" (nproc) +CPU_WORKERS=0 + +# Taille du fichier de stress disque (en MiB) +DISK_FILE_SIZE_MB=1024 # 1024 MiB ≈ 1 GiB + +# Répertoire temporaire utilisé pour le test disque +TEST_DIR=/tmp/vm_stress_test +########################################## + +pids=() + +cleanup() { + echo + echo "[*] Nettoyage en cours..." + # On essaie de tuer proprement tous les jobs de fond + for pid in "${pids[@]}"; do + if kill -0 "$pid" 2>/dev/null; then + kill "$pid" 2>/dev/null || true + fi + done + + # On attend un peu qu'ils se terminent + sleep 1 + for pid in "${pids[@]}"; do + if kill -0 "$pid" 2>/dev/null; then + kill -9 "$pid" 2>/dev/null || true + fi + done + + # On supprime les fichiers disque + rm -rf "$TEST_DIR" 2>/dev/null || true + + echo "[*] Nettoyage terminé. La charge devrait retomber dans quelques secondes." +} + +trap cleanup INT TERM EXIT + +mkdir -p "$TEST_DIR" + +echo "=== Infos de la VM ===" +if command -v nproc >/dev/null 2>&1; then + echo "CPU : $(nproc) vCPU détectés" +fi +if [ -r /proc/meminfo ]; then + mem_total_kb=$(awk '/MemTotal/ {print $2}' /proc/meminfo) + echo "RAM totale : $((mem_total_kb / 1024)) MiB" +fi +echo + +########## STRESS CPU ########## +cpu_workers=${CPU_WORKERS:-0} +if [ "$cpu_workers" -le 0 ]; then + cpu_workers=$(nproc) +fi + +echo "[*] Lancement de $cpu_workers workers CPU…" +for ((i=0; i