Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

RMF / CMF Analyzer V2 – Analyseur intelligent des rapports DASD mainframe

Objectif du guide

Installer, tester et exploiter le script rmf_cmf_analyzer_v2.py, capable de parser des rapports RMF / CMF orientés stockage DASD, de normaliser les métriques I/O et de générer un diagnostic lisible.

Les rapports RMF et CMF sont historiquement trĂšs prĂ©cis, mais difficiles Ă  lire dĂšs que l’on passe Ă  des centaines ou milliers de volumes. Cette V2 transforme les listings en donnĂ©es structurĂ©es, puis classe les devices et volumes selon leur criticitĂ© performance.

TĂ©lĂ©charger l’utilitaire RMF / CMF Analyzer V2

Bouton principal vers le script Python à déposer dans /static/toolbox/rmf_cmf_analyzer_v2.py.

Parser
Lecture des formats IBM RMF DASD, Shared DASD et variantes CMF proches.
Analyzer
Calcul des scores, détection des anomalies et tri des volumes sensibles.
Exporter
Production de rapports HTML, JSON, CSV records et CSV issues.

Ce que le moteur analyse

MétriqueLecture opérationnelleSymptÎme possible
RESPTemps de rĂ©ponse global de l’I/O.Latence visible par le workload.
IOSQTemps passĂ© en file d’attente I/O cĂŽtĂ© systĂšme.Contention locale, queue depth, mauvais Ă©quilibrage.
PENDTemps d’attente avant prise en charge par le sous-systùme.Pathing, control unit, saturation front-end ou FICON.
DISCTemps oĂč le device est dĂ©connectĂ© pendant le service de l’I/O.Backend delay, activitĂ© contrĂŽleur, comportement cache.
CONNTemps réel de connexion channel-device.Transfert long, device lent, charge séquentielle lourde.
% DEV UTILTaux d’utilisation du volume ou device.Hot volume, volume trop sollicitĂ©, dĂ©sĂ©quilibre.
Positionnement : ce guide est conçu pour un usage labo, audit, avant/aprĂšs migration storage, prĂ©paration d’un futur moteur expert, ou dĂ©monstrateur technique pour anciens environnements IBM Z / EMC / HDS / DS8K.
Important : le fichier RMF fourni pour les tests est synthĂ©tique mais rĂ©aliste. Il sert Ă  valider les rĂšgles, les exports et la robustesse du parser sans exposer de donnĂ©es confidentielles issues d’un centre informatique rĂ©el.

Installation du parseur RMF / CMF Analyzer V2

Le script est volontairement autonome. Il ne nĂ©cessite ni Django, ni base SQL, ni package externe. Une version Python moderne suffit. Il peut donc tourner sur un poste Windows, Linux, macOS ou sur un serveur d’audit.

1. Arborescence recommandée

Project tree
rmf_cmf_lab/
  bin/
    rmf_cmf_analyzer_v2.py
  input/
    sample_rmf_shared_dasd_activity.rmf
  output/
    reports/
    csv/
    json/

2. Copie du script

Placer le fichier rmf_cmf_analyzer_v2.py dans un répertoire dédié, par exemple bin/.

Lien de téléchargement direct du script Python

Ce bouton pointe explicitement vers /static/toolbox/rmf_cmf_analyzer_v2.py.

Linux / macOS setup
mkdir -p rmf_cmf_lab/bin rmf_cmf_lab/input rmf_cmf_lab/output/reports rmf_cmf_lab/output/csv rmf_cmf_lab/output/json
cp rmf_cmf_analyzer_v2.py rmf_cmf_lab/bin/
cp sample_rmf_shared_dasd_activity.rmf rmf_cmf_lab/input/
cd rmf_cmf_lab
python3 bin/rmf_cmf_analyzer_v2.py --demo
Windows PowerShell setup
New-Item -ItemType Directory -Force rmf_cmf_lab\bin, rmf_cmf_lab\input, rmf_cmf_lab\output\reports, rmf_cmf_lab\output\csv, rmf_cmf_lab\output\json
Copy-Item .\rmf_cmf_analyzer_v2.py .\rmf_cmf_lab\bin\
Copy-Item .\sample_rmf_shared_dasd_activity.rmf .\rmf_cmf_lab\input\
Set-Location .\rmf_cmf_lab
python .\bin\rmf_cmf_analyzer_v2.py --demo

3. Intégration dans un projet Django / IDEO-Lab

Si tu veux l’exposer depuis un guide Django, le plus simple est de dĂ©poser le script et l’input de test dans static/toolbox/, puis d’utiliser des liens de tĂ©lĂ©chargement.

Django static files
static/
  toolbox/
    rmf_cmf_analyzer_v2.py
    sample_rmf_shared_dasd_activity.rmf
    rmf_cmf_analyzer_v2_guide.html
Validation rapide : si python rmf_cmf_analyzer_v2.py --demo affiche un rĂ©sumĂ© et un top des devices, l’environnement Python est suffisant pour passer aux vrais fichiers input.

Fichiers input attendus

La V2 attend un fichier texte brut contenant un rapport RMF ou CMF. L’extension importe peu : .txt, .rmf, .lst ou .log. Le point clĂ© est que les lignes de donnĂ©es DASD soient lisibles en texte, avec les colonnes de temps et d’activitĂ©.

1. Exemple minimal de rapport RMF-like

Utilitaire nécessaire pour tester ce fichier input

TĂ©lĂ©charger d’abord le script Python, puis lancer l’analyse sur le fichier .rmf ci-dessous.

sample_rmf_shared_dasd_activity.rmf
DEVICE   DEV   VOLUME   LCU    ACTIVITY   RESP   IOSQ   PEND   DISC   CONN   %UTIL
02180    33909 PAY001   0100   120.450    0.620  0.020  0.030  0.290  0.280  18.40
02181    33909 PAY002   0100   365.700    8.920  5.100  0.220  1.700  1.900  76.20
02182    33909 PAY003   0100   412.330    12.800 0.120  8.700  2.100  1.880  81.00
02183    33909 LOG001   0101   950.120    18.400 0.400  0.650  14.200 3.150  88.90

2. Sources possibles

SourceFormat attenduUsage
RMF PostprocessorListing texte DASD Activity / Shared DASD Activity.Analyse de performance z/OS classique.
CMF AnalyzerListing texte Device Activity / Shared Device Activity.Analyse BMC équivalente ou complémentaire.
Export spoolFichier texte issu de JES / SDSF / outil interne.Analyse offline hors mainframe.
Fichier synthétiqueRapport généré pour tests et scénarios contrÎlés.Développement, démonstration, non-régression.

3. PrĂ©paration d’un vrai listing

  • Exporter le rapport en texte brut, pas en image ni en PDF scannĂ©.
  • Conserver les entĂȘtes de colonnes si possible : ils aident Ă  vĂ©rifier visuellement le format.
  • Éviter les conversions qui compressent les espaces ou tronquent les colonnes.
  • Anonymiser les noms de volumes, systĂšmes, LPAR ou applications si le rapport vient d’un environnement client.
RÚgle de sécurité : un vrai rapport RMF/CMF peut révéler des noms de volumes, classes de workloads, heures de batch, topologie storage et indices de volumétrie. Il faut toujours anonymiser avant partage.

Utilisation quotidienne

1. Mode démo intégré

Le mode dĂ©mo permet de vĂ©rifier que le script fonctionne mĂȘme sans fichier RMF externe.

Demo mode
python rmf_cmf_analyzer_v2.py --demo

2. Analyse simple d’un fichier RMF

Simple analysis
python rmf_cmf_analyzer_v2.py input/sample_rmf_shared_dasd_activity.rmf

3. Analyse avec tous les exports

Full export analysis
python rmf_cmf_analyzer_v2.py input/sample_rmf_shared_dasd_activity.rmf \
  --json output/json/rmf_analysis.json \
  --csv-records output/csv/rmf_records.csv \
  --csv-issues output/csv/rmf_issues.csv \
  --html output/reports/rmf_report.html

4. Analyse stricte pour batch ou CI

Le paramĂštre --fail-on-critical force un code retour non nul si des anomalies critiques sont dĂ©tectĂ©es. Cela permet d’intĂ©grer le script dans un job batch, un contrĂŽle qualitĂ©, ou une chaĂźne d’audit automatisĂ©e.

Batch mode
python rmf_cmf_analyzer_v2.py input/nightly_rmf_dasd.rmf \
  --html output/reports/nightly_rmf_dasd.html \
  --csv-issues output/csv/nightly_rmf_issues.csv \
  --fail-on-critical
Lecture recommandĂ©e : commencer par le rapport HTML pour l’humain, puis utiliser le JSON/CSV pour brancher des dashboards, alimenter une base SQL ou comparer plusieurs pĂ©riodes.

ParamĂštres de ligne de commande

La V2 a Ă©tĂ© pensĂ©e pour rester simple Ă  lancer, mais assez configurable pour adapter les seuils Ă  un contexte mainframe rĂ©el. Les seuils par dĂ©faut sont utiles en dĂ©monstration, mais doivent ĂȘtre ajustĂ©s selon l’environnement.

1. ParamĂštres d’entrĂ©e et de sortie

ParamĂštreDescriptionExemple
input_fileFichier RMF/CMF texte Ă  analyser.input/rmf_report.rmf
--demoLance une analyse avec un jeu de données interne.--demo
--jsonGénÚre le résumé complet en JSON.--json output/rmf.json
--csv-recordsExporte les lignes normalisées, une ligne par device/volume.--csv-records output/records.csv
--csv-issuesExporte les anomalies détectées par le rules engine.--csv-issues output/issues.csv
--htmlGénÚre un rapport HTML lisible par un ingénieur ou un manager.--html output/report.html
--fail-on-criticalRetourne une erreur si au moins une anomalie critique existe.--fail-on-critical

2. ParamĂštres de seuils

ParamùtreMesureQuand l’utiliser
--warn-response-msSeuil warning du temps de rĂ©ponse global.Pour rendre l’outil plus ou moins sensible Ă  la latence globale.
--critical-response-msSeuil critique du temps de réponse global.Pour déclencher les alertes majeures.
--warn-iosq-msSeuil warning du temps IOSQ.Pour détecter la contention ou les queues locales.
--critical-iosq-msSeuil critique du temps IOSQ.Pour isoler les volumes avec attente systĂšme importante.
--warn-pending-msSeuil warning du temps pending.Pour repérer les problÚmes potentiels cÎté path/control unit.
--critical-pending-msSeuil critique du temps pending.Pour classer les anomalies storage/pathing les plus sérieuses.
--warn-utilization-pctSeuil warning d’utilisation device.Pour dĂ©tecter les hot volumes.
--critical-utilization-pctSeuil critique d’utilisation device.Pour isoler les devices trĂšs sollicitĂ©s.

3. Exemple avec seuils personnalisés

Custom thresholds
python rmf_cmf_analyzer_v2.py input/sample_rmf_shared_dasd_activity.rmf \
  --warn-response-ms 8 \
  --critical-response-ms 20 \
  --warn-iosq-ms 1 \
  --critical-iosq-ms 4 \
  --warn-pending-ms 1 \
  --critical-pending-ms 4 \
  --warn-utilization-pct 70 \
  --critical-utilization-pct 90 \
  --html output/reports/rmf_custom_thresholds.html
Attention aux seuils universels : un environnement batch lourd, DB2 trĂšs actif ou un systĂšme bancaire transactionnel n’ont pas les mĂȘmes profils. Les seuils doivent ĂȘtre calibrĂ©s aprĂšs observation de plusieurs pĂ©riodes.

Exemples d’utilisation

ScĂ©nario 1 – Audit rapide aprĂšs incident batch

On dispose d’un listing gĂ©nĂ©rĂ© aprĂšs un ralentissement nocturne. Objectif : obtenir rapidement les volumes les plus suspects.

Incident batch analysis
python rmf_cmf_analyzer_v2.py input/batch_window_0200_0400.rmf \
  --html output/reports/batch_window_0200_0400.html \
  --csv-issues output/csv/batch_window_issues.csv

ScĂ©nario 2 – Comparaison avant/aprĂšs migration storage

La V2 ne fait pas encore le diff automatique, mais ses exports CSV/JSON permettent dĂ©jĂ  de comparer deux fenĂȘtres dans Excel, Python, SQL ou Power BI.

Before after analysis
python rmf_cmf_analyzer_v2.py input/before_migration.rmf \
  --csv-records output/csv/before_records.csv \
  --csv-issues output/csv/before_issues.csv \
  --html output/reports/before_migration.html

python rmf_cmf_analyzer_v2.py input/after_migration.rmf \
  --csv-records output/csv/after_records.csv \
  --csv-issues output/csv/after_issues.csv \
  --html output/reports/after_migration.html

ScĂ©nario 3 – ExĂ©cution nocturne automatisĂ©e

Exemple de lancement quotidien avec conservation du rapport HTML et du CSV des anomalies.

Cron entry
0 5 * * * /opt/rmf-cmf/bin/python /opt/rmf-cmf/rmf_cmf_analyzer_v2.py \
  /data/rmf/nightly_dasd_activity.rmf \
  --html /var/www/reports/rmf/nightly_dasd_activity.html \
  --csv-issues /var/log/rmf/nightly_dasd_issues.csv \
  --json /var/log/rmf/nightly_dasd_analysis.json \
  --fail-on-critical >> /var/log/rmf/rmf_cmf_analyzer.log 2>&1

ScĂ©nario 4 – Test de non-rĂ©gression du parser

À chaque Ă©volution du parser, relancer le sample synthĂ©tique et vĂ©rifier que les records et issues attendus sont produits.

Regression test
python rmf_cmf_analyzer_v2.py input/sample_rmf_shared_dasd_activity.rmf \
  --json output/json/sample_analysis.json \
  --csv-records output/csv/sample_records.csv \
  --csv-issues output/csv/sample_issues.csv \
  --html output/reports/sample_report.html
Bonne pratique : garder une bibliothÚque de samples synthétiques : IOSQ élevé, pending élevé, disconnect dominant, connect élevé, hot volume, faible activité mais forte latence, etc.

Exports et exploitation des résultats

La V2 produit quatre familles de sorties. Elles n’ont pas le mĂȘme usage : le HTML pour lecture humaine, le JSON pour intĂ©gration technique, les CSV pour Excel/SQL/BI.

Rapport HTML

Vue synthétique avec compteur de records, sévérités, top suspects et détails des anomalies.

Analyse JSON

Format complet pour API, ingestion SQL, stockage historique ou comparaison automatique.

Records CSV

Une ligne par device ou volume normalisé, pratique pour pivot table et audit brut.

Issues CSV

Une ligne par anomalie détectée, avec sévérité, code et explication courte.

1. Exemple de synthĂšse console

Console output
RMF / CMF records parsed : 36
Devices                 : 12
Volumes                 : 12
Issues                  : 105
Critical                : 44
Warnings                : 61

TOP BY SCORE
LOG001   RESP=18.400 IOSQ=0.400 PEND=0.650 DISC=14.200 CONN=3.150 UTIL=88.90
PAY003   RESP=12.800 IOSQ=0.120 PEND=8.700 DISC=2.100  CONN=1.880 UTIL=81.00
PAY002   RESP=8.920  IOSQ=5.100 PEND=0.220 DISC=1.700  CONN=1.900 UTIL=76.20

2. Exploitation SQL possible

Les CSV peuvent ĂȘtre chargĂ©s dans MariaDB, PostgreSQL, DB2 LUW ou SQLite pour historisation. Une table simple peut suffire pour commencer.

SQL model idea
CREATE TABLE rmf_dasd_record (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    run_id BIGINT NOT NULL,
    device VARCHAR(32),
    volume VARCHAR(32),
    lcu VARCHAR(32),
    activity_rate DECIMAL(18,6),
    response_time_ms DECIMAL(18,6),
    iosq_time_ms DECIMAL(18,6),
    pending_time_ms DECIMAL(18,6),
    disconnect_time_ms DECIMAL(18,6),
    connect_time_ms DECIMAL(18,6),
    device_util_pct DECIMAL(18,6),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

3. Roadmap naturelle V3

  • Diff engine comparaison automatique avant/aprĂšs migration storage.
  • Expert rules rĂšgles dĂ©diĂ©es EMC Symmetrix/VMAX, IBM DS8K, HDS/VSP.
  • HTML dashboard heatmaps par heure, LCU, volume, device type.
  • SQL history historisation des runs et tendances sur plusieurs semaines.
  • AI summary rĂ©sumĂ© exĂ©cutif automatique pour manager ou consultant.
Vision produit : le parseur n’est que la premiĂšre brique. La valeur rĂ©elle est dans le moteur de diagnostic, le scoring, l’historisation et la synthĂšse actionnable pour ingĂ©nieurs storage/mainframe.

Dépannage et bonnes pratiques

1. Le script ne parse aucune ligne

Cause possibleCorrection
Le fichier est un PDF scanné ou une image.Exporter en texte brut depuis le spool ou utiliser un OCR avant le parser.
Les colonnes ont été cassées par copier/coller.Utiliser un export fixe, conserver les espaces et éviter les conversions Word.
Le rapport n’est pas un rapport DASD/Device Activity.VĂ©rifier que les colonnes RESP, IOSQ, PEND, DISC, CONN existent.
Format RMF/CMF diffĂ©rent.CrĂ©er un nouveau parser sectionnel dĂ©diĂ© et l’ajouter au moteur V2.

2. Les scores semblent trop agressifs

Ajuster les seuils. En environnement rĂ©el, il faut calibrer avec plusieurs jours de rapports, sĂ©parer les fenĂȘtres online et batch, puis fixer des seuils par contexte.

Less aggressive thresholds
python rmf_cmf_analyzer_v2.py input/production_window.rmf \
  --warn-response-ms 15 \
  --critical-response-ms 35 \
  --warn-iosq-ms 3 \
  --critical-iosq-ms 8 \
  --warn-pending-ms 3 \
  --critical-pending-ms 8 \
  --html output/reports/production_window.html

3. Check-list avant analyse d’un vrai rapport client

  • Anonymiser les noms de volumes, systĂšmes, pools, applications et horaires sensibles.
  • Conserver une copie brute non modifiĂ©e pour vĂ©rifier les erreurs de parsing.
  • Noter la fenĂȘtre de temps du rapport : online, batch, clĂŽture, sauvegarde, fin de mois.
  • Comparer les mĂ©triques avec le contexte mĂ©tier : un volume trĂšs actif n’est pas forcĂ©ment anormal.
  • Ne jamais conclure uniquement avec %UTIL : toujours corrĂ©ler RESP, IOSQ, PEND, DISC, CONN.
Point critique : un diagnostic RMF/CMF sérieux ne doit jamais se limiter à une alerte isolée. La bonne analyse consiste à reconstruire la chaßne I/O : attente systÚme, pathing, contrÎleur, cache, backend et workload.