InfraGuard

Stockage et RAID

Tableau de bord en direct et en lecture seule : santé du contrôleur RAID (Optimal/Degraded/Failed), carte des disques physiques et utilisation du volume de données par hôte.

Vue d’ensemble — ce que fait cet écran

Infrastructure ▸ Stockage et RAID (/infra/storage) est un tableau de bord de disponibilité en lecture seule qui rassemble sur un seul écran la santé du stockage de chaque hôte. Il assemble deux types de télémétrie en cartes.

Son objectif central est l’alerte précoce de défaillance disque. Lorsqu’une grappe RAID retombe en Degraded ou qu’un disque physique passe en Failed/Missing, la couleur (ambre/rouge) le rend immédiatement visible, ce qui vous permet de remplacer et de reconstruire avant qu’un second disque ne lâche et que toute la grappe ne s’effondre.

Cet écran ne couvre que l’état en direct (la santé à l’instant présent). Le registre des actifs de stockage (métadonnées des équipements, planification de capacité, arborescence des zones de fichiers) appartient à Actifs ▸ Stockage et fichiers. Les deux sont volontairement séparés (voir Sources de données).

Quand l’utiliser

Disposition

Bandeau · barre de commande

Carte de stockage

Une carte est produite par hôte.

Zone Contenu
En-tête Nom de l’hôte · heure de dernière mise à jour · badge de synthèse RAID (status_summary)
Utilisation Libellé DATA VOL usage + pourcentage + (used / available) + barre de progression
Contrôleur Icône + modèle · température · état de la batterie
Volume logique name (RAID level) + état / size
Carte des disques physiques Pastilles d’emplacement (S-{slot} + taille), couleur selon l’état, infobulle = model · serial · status

S’il n’y a pas d’information sur le contrôleur, la carte affiche No controller data ; s’il n’y a aucune carte, elle affiche No storage data.. La liste est paginée par 10 par page.

Règles de couleur des états

Synthèse RAID · état du volume logique (raid_tone) :

Contient Couleur Signification
optimal good (vert) Sain
degrad warn (ambre) Dégradé — un disque est tombé, une reconstruction est nécessaire
fail crit (rouge) RAID en échec — données en danger
autre muted (gris) Inconnu

État du disque physique (disk_tone) :

Contient Couleur Signification
online / optimal good Sain
rebuild warn Reconstruction en cours
fail / missing crit En échec / disparu
autre muted Inconnu

Utilisation disque (usage_tone) :

Utilisation Couleur
≥ 95 % crit
≥ 80 % warn
< 80 % good

Comment l’utiliser

  1. Ouvrez Infrastructure ▸ Stockage et RAID depuis le menu.
  2. Utilisez le filtre par hôte en haut pour vous concentrer sur un serveur, ou affichez All.
  3. Parcourez d’abord le badge RAID de l’en-tête de chaque carte ; traitez en priorité les cartes ambre et rouges.
  4. Sur une carte problématique, lisez la carte des disques physiques pour trouver l’emplacement en Failed/Missing/Rebuild. Survolez une pastille pour obtenir l’infobulle avec le modèle et le numéro de série.
  5. Vérifiez la barre d’utilisation pour voir si le volume de données approche des seuils de 80 %/95 %.
  6. Si les données semblent périmées, cliquez sur Actualiser en haut à droite.

Cette page n’interroge pas le serveur automatiquement. Les données affichées passent par un cache serveur de 30 secondes, et l’écran ne se met à jour que lorsque vous appuyez sur le bouton d’actualisation (qui réinterroge /infra/storage/live). Si vous la laissez ouverte pour suivre les tendances, appuyez périodiquement sur actualiser.

Sources de données

Les deux tables proviennent du MySQL hérité (la connexion legacy, en lecture seule). L’application ne les écrit jamais.

Table Quoi Fournisseur
storage_status host, status_summary, json_data (controllers/logical_volumes/disks), created_at sync_adp.js (arcconf d’Adaptec)
server_status Instantané de la part df-* → utilisation disque run_report.js

Forme de json_data (exemple)

{
  "controllers": [
    {
      "model": "Adaptec ASR-5805",
      "temperature": "41C",
      "battery_status": "Optimal",
      "status": "Optimal",
      "logical_volumes": [
        { "name": "Data", "raid_level": "6", "status": "Optimal", "size": "10.9TB" }
      ],
      "disks": [
        { "slot": 0, "status": "Online", "model": "ST4000NM0033", "serial": "Z1Z00000", "size": "3.6TB" }
      ]
    }
  ]
}

Forme de la valeur df-*

server_status.value est un JSON qui porte p (pourcentage) · u (utilisé) · a (disponible).

{ "p": 72, "u": "7.2T", "a": "2.8T" }

Correspondance hôte ↔ alias

L’utilisation est jointe via une table statique reliant storage_status.host (libellé en majuscules) à server_status.server_alias (en minuscules). Les hôtes absents de cette table retombent sur le nom d’hôte en minuscules.

host alias host alias
AMBER am ART art
MEDIA media BUD bud
ARCH1 arch1 GLORY glory
SOL sol DOCU documents
BLUE blue DNS_SERVER demo

Requête à fenêtre de seq — éviter les balayages lents

server_status est une grande série temporelle. Agréger la table entière avec MAX(seq) … GROUP BY server_alias, part déclenche un balayage complet. À la place, le constructeur (StorageStatusService::dfUsageByAlias) ne récupère par l’index que les 3 valeurs de seq les plus récentes, puis ne lit que les lignes df-* de ces seq.

-- 1) Les 3 valeurs de seq les plus récentes (index seq → O(log N))
SELECT DISTINCT seq FROM server_status ORDER BY seq DESC LIMIT 3;

-- 2) Seulement les lignes df-* de ces seq (de la plus ancienne à la plus récente, la dernière l’emporte)
SELECT server_alias, part, value
  FROM server_status
 WHERE seq IN (?, ?, ?) AND part LIKE 'df-%'
 ORDER BY seq;

Pour chaque alias, il privilégie la part df-data ; à défaut, il retient comme valeur représentative le volume dont l’utilisation est la plus élevée (p maximal).

Les lignes RAID les plus récentes sont de même réduites à la plus récente par hôte.

SELECT MAX(id) AS mid FROM storage_status GROUP BY host;   -- la plus récente par hôte
SELECT * FROM storage_status WHERE id IN (?, ...) ORDER BY host;

Les résultats sont mis en cache pendant 30 secondes sous la clé infr:infra:storage:v1. Cela supprime les allers-retours vers la base héritée et absorbe les consultations simultanées. Si la base héritée est injoignable, le constructeur avale l’exception et renvoie un tableau vide : l’écran se dégrade proprement en No storage data..

Accès

Dépannage et FAQ

Q. La carte s’affiche mais l’utilisation (DATA VOL) est vide. L’alias de l’hôte n’a correspondu à aucune donnée df-* dans la fenêtre de seq récente. Vérifiez que run_report.js tourne sur ce nœud et que la correspondance hôte↔alias est correcte. Cette correspondance est une table statique, distincte de la configuration de run_report dans Administration ▸ Collecteurs.

Q. La carte des disques ou le contrôleur affiche « No controller data ». Le tableau controllers de storage_status.json_data est vide ou n’a pas pu être analysé. Cet hôte n’a peut-être pas de RAID Adaptec, ou la collecte sync_adp.js (arcconf) échoue. Vérifiez le chemin et les droits d’arcconf.

Q. Tout affiche « No storage data. ». Échec de connexion à la base héritée, ou storage_status ne contient aucune ligne. Le constructeur renvoie un tableau vide en cas d’exception. Vérifiez la connexion legacy (DB_* dans .env) et la santé du collecteur.

Q. Les valeurs sont les mêmes qu’il y a quelques minutes. (1) Cette page n’interroge pas automatiquement — appuyez sur actualiser. (2) Le cache serveur vit 30 secondes. (3) Fondamentalement, les collecteurs (sync_adp.js, run_report.js) s’exécutent hors de Laravel selon une planification : la fraîcheur de la source dépend donc de la cadence du cron.

Q. Un badge Degraded est apparu — que faire ? Repérez l’emplacement en Failed/Missing dans la carte des disques physiques, remplacez ce disque et vérifiez que le contrôleur démarre un Rebuild automatique. Pendant une reconstruction, la grappe est vulnérable à une double panne : contrôlez donc aussi votre dispositif de sauvegarde (Sauvegarde ▸ Tableau de planification).

Voir aussi

스토리지 · RAID 건전성
스토리지 · RAID 건전성