générer des stats sur son infra salt
TRANSCRIPT
Générer des stats sur son infra Salt• Arthur Lutz (Logilab) @arthurlutz
Diapos : http://slides.logilab.fr/salt-meetup-stats/
1
Problématique• Plus de 60 serveurs gérés par Salt
• Plus de 5000 states en production
• Pas de state.highstate automatique
• Des états qui génèrent des states à appliquer
• par exemple, ajouter un minion à notre master nécessite ensuite
d'aller appliquer des highstates sur d'autres minions
2
Ce qu'on veut• Identifier les zones de notre infrastructure qui nécessitent des
modifications
• Garder une distance courte entre l'état souhaité et l'état appliqué
• Intégrer ces métriques dans nos outils
3
On va toucher à• Runners
• Outputters
• Schedulers
• Intégration à un logiciel tiers (munin)
• Returners (pas fini)
4
Fichiers├── README
├── _outputters
│ ├── highstate_stats_json.py
│ └── highstate_stats.py
├── _modules
│ └── stats.py
├── runners
│ └── stats.py
├── pillars
│ └── schedule.sls
├── _returners
│ └── file.py
└── states
├── munin
│ ├── init.sls
│ ├── plugins
│ │ └── salt_distance
│ └── salt-distance.sls
└── top.sls
5
Run# salt-run stats.highstate_test
host1.logilab.fr : total 158, todo 20 (12.66%), no_changes 135 (85.44%), changes 0 (0.00%), failed 3 (1.90%)
host2.logilab.fr : total 564, todo 2 (0.35%), no_changes 562 (99.65%), changes 0 (0.00%), failed 0 (0.00%)
host3.logilab.fr : total 69, todo 3 (4.35%), no_changes 66 (95.65%), changes 0 (0.00%), failed 0 (0.00%)
[snip]
Total : total 5838, todo 332 (5.69%), no_changes 5488 (94.00%), changes 0 (0.00%), failed 12 (0.21%)
6
Interface utilisateur• Plusieurs points d'entrées
• salt 'host' --out highstate_stats state.highstate test=True
• salt-call --out highstate_stats state.highstate test=True
• salt-run stats.highstate_test 'host'
7
Output JSON{
"local": {
"changes": 0,
"total": 80,
"todo": 3,
"failed": 0,
"no_changes": 77
}
8
Intégration munin• 1ere version: le plugin munin lance le salt-runner et utilise le JSON
• 2ème version: scheduler salt + traitement du json produit par le plugin
munin
9
Problèmes rencontrés• _outputters
• salt.loader
• state > module > outputter > retuner > etc
• __salt__ et __opts__
• silent fails (fallbacks)
10
Bon points• Liste de discussion réactive
• Code source facile à lire
• Réactifs sur les rapports de bugs
11
Code source• https://bitbucket.org/arthurlogilab/salt-highstate-stats
• Contributions bienvenues
• Question ouverte : rester un projet tiers ou demander l'intégration dans
salt
12
Futur• Tris
• par nombre d'états à appliquer
• par état qui génère beaucoup
• Meilleure gestion du cache
• Output en couleur
• Progress bar
• Histogrammes curses avec sparkl
• Sonde nagios/shinken
13
Fin• Des questions ?
• Des feature requests ?
• Des patches ?
Arthur Lutz (Logilab) @arthurlutz
14