<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Incident Management on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/incident-management/</link><description>Recent content in Incident Management on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr-fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Mon, 15 Jun 2020 06:40:00 +0000</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/incident-management/index.xml" rel="self" type="application/rss+xml"/><item><title>redalert : gérer les incidents avec un bot Slack</title><link>https://blog.zwindler.fr/2020/06/15/redalert-gerer-des-incidents-avec-un-bot-slack/</link><pubDate>Mon, 15 Jun 2020 06:40:00 +0000</pubDate><guid>https://blog.zwindler.fr/2020/06/15/redalert-gerer-des-incidents-avec-un-bot-slack/</guid><description>&lt;img src="https://blog.zwindler.fr/2020/06/Enterprise-D-bridge_2371-640x266-1.webp" alt="Featured image of post redalert : gérer les incidents avec un bot Slack" /&gt;&lt;p&gt;Il y a quelques mois, j’ai vu passer cet article écrit par un SRE de chez ManoMano : &lt;a class="link" href="https://medium.com/manomano-tech/incident-management-with-a-bot-7e80deb5b5e5" target="_blank" rel="noopener"
&gt;Incident Management with a bot&lt;/a&gt;. Il a été pas mal partagé et il m’a beaucoup plus, car il me permettait de creuser 2 sujets qui m’intéressaient justement à ce moment-là : les bots slack et la gestion d’incidents.&lt;/p&gt;
&lt;p&gt;Dans mon équipe actuelle, nous utilisons énormément Slack pour communiquer en interne. Au-delà du chit-chat quotidien, nous avons également pour habitude de créer des channels dédiés et d’y inviter les personnes concernées lors d’incidents sur la plateforme que nous administrons, de manière à centraliser les efforts entre les Ops, les Devs et les équipes support client.&lt;/p&gt;
&lt;p&gt;L’idée de pouvoir avoir un tool permettant à la fois de nous éviter de gérer à la main ces incidents tout en restant dans Slack était hyper séduisante&amp;hellip; Malheureusement, après avoir contacté l’auteur, celui-ci m’a confirmé qu’à l’heure actuelle, le tool de ManoMano n’était pas Open Source.&lt;/p&gt;
&lt;p&gt;Moult déceptions.&lt;/p&gt;
&lt;h2 id="yet-another-standard"&gt;Yet another standard
&lt;/h2&gt;&lt;p&gt;Clairement, j’étais grognon à l’idée de passer à côté d’un tool qui faisait EXACTEMENT ce que je voulais. Comme je n’aime pas réinventer la roue, je suis allé voir sur les Internets ce qui se fait ailleurs.&lt;/p&gt;
&lt;p&gt;Grosso modo, la solution qui m’a le plus plu est un outil qui a été open sourcé par Netflix et qui s’appelle &lt;strong&gt;Dispatch&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Dispatch est &lt;a class="link" href="https://netflixtechblog.com/introducing-dispatch-da4b8a2a8072" target="_blank" rel="noopener"
&gt;un VRAI outil d’Incident Management&lt;/a&gt;, avec des workflows et de nombreuses interactions avec des outils tiers. C’est très très classe, &lt;a class="link" href="https://hawkins.gitbook.io/dispatch/" target="_blank" rel="noopener"
&gt;il y a une doc superbe&lt;/a&gt;. Bref, c’est Netflix.&lt;/p&gt;
&lt;p&gt;Mais ce n’était pas tout à fait ce que je voulais. Aujourd’hui, Dispatch est clairement overkill pour les besoins de l’équipe. A l’heure actuelle, un simple workflow « j’ouvre un channel, j’invite des gens, j’archive le channel » nous suffit. D’où l’idée du bot slack de ManoMano.&lt;/p&gt;
&lt;h2 id="make-it-so"&gt;Make it so
&lt;/h2&gt;&lt;p&gt;Bon&amp;hellip; ManoMano a pondu l’idée du bot slack&amp;hellip; j’ai toujours eu envie d’écrire un bot slack&amp;hellip; et je suis en train de me (re)former à Python. Vous me voyez venir ?&lt;/p&gt;
&lt;p&gt;Et c’est ainsi que naquit &lt;a class="link" href="https://github.com/zwindler/redalert" target="_blank" rel="noopener"
&gt;Redalert, mon propre bot slack d’Incident Management&lt;/a&gt; (très&amp;hellip; très très) basique.&lt;/p&gt;
&lt;p&gt;Pour ceux qui ont un doute sur l’inspiration pour le nom, sachez que j’ai l’infâme défaut de n’avoir jamais joué à « Command and Conquer » (pas tapper), mais qu’en revanche je suis très fan de Star Trek.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/06/Enterprise-D-bridge_2371-640x266-1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="a-quoi-ça-ressemble-"&gt;A quoi ça ressemble ?
&lt;/h2&gt;&lt;p&gt;Assez de teasing, voilà à quoi ressemble l’outil une fois installé. Lorsqu’un incident arrive, n’importe qui peut écrire dans le channel slack « /incident open » et une fenêtre de dialogue va s’ouvrir dans Slack avec un certain nombre d’options.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/06/redalert_slash_incident.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/06/screen_redalert.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Quand on tape « /incident open » dans un channel, voilà la popup qui s’ouvre&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;C’est simple (voire simpliste) mais efficace.&lt;/p&gt;
&lt;h2 id="ce-que-loutil-fait"&gt;Ce que l’outil fait
&lt;/h2&gt;&lt;p&gt;Je ne vais pas vous copier-coller le contenu du README.md du projet, mais grosso modo les features actuelles (le « MVP » comme on dit dans le milieu) sont :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ouvrir une popup dans Slack via une commande « /incident open », permettant d’entrer un certain nombre d’informations puis d’ouvrir un channel Slack en fonction de ces paramètres&lt;/li&gt;
&lt;li&gt;configurer soit même les différents niveaux d’incident possibles&lt;/li&gt;
&lt;li&gt;ajouter de manière automatique une liste d’individus dans certains ou tous les niveaux d’incidents (de manière configurable)&lt;/li&gt;
&lt;li&gt;lister tous les incidents ouverts et/ou fermés (archivés)&lt;/li&gt;
&lt;li&gt;fermer un incident (en utilisant la fonction archiver de Slack)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ce-que-loutil-ne-fait-pas-encore"&gt;Ce que l’outil ne fait pas (encore)
&lt;/h2&gt;&lt;p&gt;Idéalement, dans le futur j’aimerais ajouter les fonctionnalités suivantes (quelque part entre « un jour » et « jamais »).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Faciliter l’installation de redalert via une application packagée slack&lt;/li&gt;
&lt;li&gt;ajouter de manière optionnelle une base externalisée des incidents pour permettre des analyses a posteriori&lt;/li&gt;
&lt;li&gt;une gestion du « problem management » (au sens ITIL du terme, càd relier des incidents entre eux, entre autre)&lt;/li&gt;
&lt;li&gt;interagir avec des systèmes tiers tels que PagerDuty (prévenir l’OPS en astreinte), Trello, Confluence (Postmortems), &amp;hellip;&lt;/li&gt;
&lt;li&gt;Permettre dans le dialog d’ouverture d’incident d’ajouter plusieurs personnes d’un coup (a priori &lt;a class="link" href="https://stackoverflow.com/questions/48523512/slack-interactive-message-menu-select-multiple" target="_blank" rel="noopener"
&gt;pas techniquement possible pour l’instant dans l’API Slack&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Un vrai fichier de configuration custom qui remplace les valeurs par défaut du config.py pour ne pas avoir à le réécrire complètement.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="comment-linstaller-"&gt;Comment l’installer ?
&lt;/h2&gt;&lt;p&gt;Comme je suis sympa avec vous, j’ai mis à disposition sur le projet Github zwindler/redalert &lt;a class="link" href="https://github.com/zwindler/redalert" target="_blank" rel="noopener"
&gt;toute la documentation d’installation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Actuellement, le projet est distribué de 3 manières :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;les sources du code python, que vous pouvez lancer sur n’importe quelle machine disposant de python 3.6+ avec les modules (pip) slack et flask&lt;/li&gt;
&lt;li&gt;une image Docker préconfigurée, disponible sur le Dockerhub&lt;/li&gt;
&lt;li&gt;un Chart que vous pouvez déployer sur Kubernetes avec Helm&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tout est décrit pas à pas dans le &lt;a class="link" href="https://github.com/zwindler/redalert" target="_blank" rel="noopener"
&gt;README.md&lt;/a&gt; du projet.&lt;/p&gt;
&lt;p&gt;Je pense que le plus important a été dit. Donc en attendant vos retours =&amp;gt; Have fun :D&lt;/p&gt;
&lt;h2 id="bonus--comment-ça-marche-"&gt;Bonus : comment ça marche ?
&lt;/h2&gt;&lt;p&gt;Je ne vais pas passer trop de temps là-dessus (quitte à faire un article un peu plus long dédié à ça une autre fois), mais l&lt;a class="link" href="https://api.slack.com/#read_the_docs" target="_blank" rel="noopener"
&gt;‘API mise à disposition par Slack est relativement bien documentée&lt;/a&gt; et il existe des modules dans la plupart des langages courants qui intègrent des méthodes pour toutes les appels qui existent sur l’API.&lt;/p&gt;
&lt;p&gt;Autant dire que même pour un OPS, c’est accessible, si jamais vous avez une autre idée de bot slack en tête.&lt;/p&gt;
&lt;p&gt;Le seul vrai souci que j’ai rencontré a été que &lt;a class="link" href="https://api.slack.com/tutorials" target="_blank" rel="noopener"
&gt;les exemples donnés&lt;/a&gt; pour le sdk python du client Slack le sont dans 2 versions, et que les premiers exemples de code sur lesquels je suis tombé (les plus approchant de ce que je voulais faire) sont en version 1 alors que la version actuelle est la 2 (bien sûr&amp;hellip;).&lt;/p&gt;
&lt;p&gt;Le code source du projet en lui-même est relativement trivial. Mon serveur Flask écoute sur 3 URLs :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un /, notamment pour les healthchecks dans Kubernetes&lt;/li&gt;
&lt;li&gt;un /incident qui reçoit toutes les commandes « /incident open|list|close » et qui redispatche ensuite en fonction du contexte&lt;/li&gt;
&lt;li&gt;un /dialog qui, comme son nom laisse penser, permet de gérer le retour POST du dialog qui est popé après le /incident open&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="bonus-2--contribuer-"&gt;Bonus 2 : contribuer ?
&lt;/h2&gt;&lt;p&gt;Pour être parfaitement honnête, il y a peu de chance que je bosse énormément dessus. Ce projet a été développé sur mon temps perso initialement, en side project un peu bébête. Et même si au final, on a fini par l’adopter en production sur notre Slack pro, pour l’instant il nous suffit tel qu’il est.&lt;/p&gt;
&lt;p&gt;Néanmoins, je suis plus qu’ouvert à toutes les propositions d’amélioration ou de contributions, dans le cas où cet outil vous plairait.&lt;/p&gt;
&lt;p&gt;Cela se fera en best effort et sans aucune garantie, mais si on est d’accords sur ce point, moi ça me fera plaisir de savoir que ça peut être utile à quelqu’un !&lt;/p&gt;</description></item></channel></rss>