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

Générer des stats sur son infra salt

  • 1.
    Générer des statssur son infra Salt • Arthur Lutz (Logilab) @arthurlutz Diapos : http://slides.logilab.fr/salt-meetup-stats/ 1
  • 2.
    Problématique • Plusde 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
  • 3.
    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
  • 4.
    On va toucherà • Runners • Outputters • Schedulers • Intégration à un logiciel tiers (munin) • Returners (pas fini) 4
  • 5.
    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
  • 6.
    Run # salt-runstats.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
  • 7.
    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
  • 8.
    Output JSON { "local": { "changes": 0, "total": 80, "todo": 3, "failed": 0, "no_changes": 77 } 8
  • 9.
    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
  • 10.
    Problèmes rencontrés •_outputters • salt.loader • state > module > outputter > retuner > etc • __salt__ et __opts__ • silent fails (fallbacks) 10
  • 11.
    Bon points •Liste de discussion réactive • Code source facile à lire • Réactifs sur les rapports de bugs 11
  • 12.
    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
  • 13.
    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
  • 14.
    Fin • Desquestions ? • Des feature requests ? • Des patches ? Arthur Lutz (Logilab) @arthurlutz 14