RMF / CMF Analyzer V2 â Analyseur intelligent des rapports DASD mainframe
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.
Bouton principal vers le script Python à déposer dans /static/toolbox/rmf_cmf_analyzer_v2.py.
Ce que le moteur analyse
| Métrique | Lecture opérationnelle | SymptÎme possible |
|---|---|---|
RESP | Temps de rĂ©ponse global de lâI/O. | Latence visible par le workload. |
IOSQ | Temps passĂ© en file dâattente I/O cĂŽtĂ© systĂšme. | Contention locale, queue depth, mauvais Ă©quilibrage. |
PEND | Temps dâattente avant prise en charge par le sous-systĂšme. | Pathing, control unit, saturation front-end ou FICON. |
DISC | Temps oĂč le device est dĂ©connectĂ© pendant le service de lâI/O. | Backend delay, activitĂ© contrĂŽleur, comportement cache. |
CONN | Temps réel de connexion channel-device. | Transfert long, device lent, charge séquentielle lourde. |
% DEV UTIL | Taux dâutilisation du volume ou device. | Hot volume, volume trop sollicitĂ©, dĂ©sĂ©quilibre. |
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
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/.
Ce bouton pointe explicitement vers /static/toolbox/rmf_cmf_analyzer_v2.py.
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 --demoNew-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 --demo3. 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.
static/
toolbox/
rmf_cmf_analyzer_v2.py
sample_rmf_shared_dasd_activity.rmf
rmf_cmf_analyzer_v2_guide.htmlpython 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
TĂ©lĂ©charger dâabord le script Python, puis lancer lâanalyse sur le fichier .rmf ci-dessous.
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.902. Sources possibles
| Source | Format attendu | Usage |
|---|---|---|
| RMF Postprocessor | Listing texte DASD Activity / Shared DASD Activity. | Analyse de performance z/OS classique. |
| CMF Analyzer | Listing texte Device Activity / Shared Device Activity. | Analyse BMC équivalente ou complémentaire. |
| Export spool | Fichier texte issu de JES / SDSF / outil interne. | Analyse offline hors mainframe. |
| Fichier synthétique | Rapport 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.
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.
python rmf_cmf_analyzer_v2.py --demo2. Analyse simple dâun fichier RMF
python rmf_cmf_analyzer_v2.py input/sample_rmf_shared_dasd_activity.rmf3. Analyse avec tous les exports
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.html4. 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.
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-criticalParamĂš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Ăštre | Description | Exemple |
|---|---|---|
input_file | Fichier RMF/CMF texte Ă analyser. | input/rmf_report.rmf |
--demo | Lance une analyse avec un jeu de données interne. | --demo |
--json | GénÚre le résumé complet en JSON. | --json output/rmf.json |
--csv-records | Exporte les lignes normalisées, une ligne par device/volume. | --csv-records output/records.csv |
--csv-issues | Exporte les anomalies détectées par le rules engine. | --csv-issues output/issues.csv |
--html | GénÚre un rapport HTML lisible par un ingénieur ou un manager. | --html output/report.html |
--fail-on-critical | Retourne une erreur si au moins une anomalie critique existe. | --fail-on-critical |
2. ParamĂštres de seuils
| ParamĂštre | Mesure | Quand lâutiliser |
|---|---|---|
--warn-response-ms | Seuil warning du temps de rĂ©ponse global. | Pour rendre lâoutil plus ou moins sensible Ă la latence globale. |
--critical-response-ms | Seuil critique du temps de réponse global. | Pour déclencher les alertes majeures. |
--warn-iosq-ms | Seuil warning du temps IOSQ. | Pour détecter la contention ou les queues locales. |
--critical-iosq-ms | Seuil critique du temps IOSQ. | Pour isoler les volumes avec attente systĂšme importante. |
--warn-pending-ms | Seuil warning du temps pending. | Pour repérer les problÚmes potentiels cÎté path/control unit. |
--critical-pending-ms | Seuil critique du temps pending. | Pour classer les anomalies storage/pathing les plus sérieuses. |
--warn-utilization-pct | Seuil warning dâutilisation device. | Pour dĂ©tecter les hot volumes. |
--critical-utilization-pct | Seuil critique dâutilisation device. | Pour isoler les devices trĂšs sollicitĂ©s. |
3. Exemple avec seuils personnalisés
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.htmlExemples 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.
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.csvScĂ©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.
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.htmlScĂ©nario 3 â ExĂ©cution nocturne automatisĂ©e
Exemple de lancement quotidien avec conservation du rapport HTML et du CSV des anomalies.
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>&1ScĂ©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.
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.htmlExports 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.
Vue synthétique avec compteur de records, sévérités, top suspects et détails des anomalies.
Format complet pour API, ingestion SQL, stockage historique ou comparaison automatique.
Une ligne par device ou volume normalisé, pratique pour pivot table et audit brut.
Une ligne par anomalie détectée, avec sévérité, code et explication courte.
1. Exemple de synthĂšse console
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.202. 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.
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.
Dépannage et bonnes pratiques
1. Le script ne parse aucune ligne
| Cause possible | Correction |
|---|---|
| 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.
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.html3. 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élerRESP,IOSQ,PEND,DISC,CONN.
