[LaTeX] Mon rapport de stage ST40
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

963 lines
57KB

  1. %%
  2. %
  3. % Skia
  4. % skia@libskia.so
  5. %
  6. %%
  7. \documentclass[a4paper]{report}
  8. %packages
  9. \usepackage[utf8]{inputenc}
  10. \usepackage[francais]{babel}
  11. \usepackage{graphicx}\graphicspath{{pix/}}
  12. \usepackage{float}
  13. \usepackage[T1]{fontenc}
  14. \usepackage{color}
  15. \usepackage{fancyhdr}
  16. %Options: Sonny, Lenny, Glenn, Conny, Rejne, Bjarne, Bjornstrup
  17. \usepackage[Bjornstrup]{fncychap}
  18. \usepackage[procnames]{listings}
  19. \usepackage[colorlinks=true,linkcolor=black]{hyperref}
  20. \usepackage{pdfpages}
  21. \usepackage{titlesec, blindtext, color}
  22. %pdf metadata
  23. \hypersetup{
  24. unicode=true,
  25. colorlinks=true,
  26. citecolor=black,
  27. filecolor=black,
  28. linkcolor=black,
  29. urlcolor=black,
  30. pdfauthor={Skia <skia@libskia.so>},
  31. pdftitle={},
  32. pdfcreator={pdftex},
  33. pdfsubject={},
  34. pdfkeywords={},
  35. }
  36. \definecolor{keywords}{RGB}{200,0,90}
  37. \definecolor{comments}{RGB}{0,0,113}
  38. \definecolor{red}{RGB}{160,0,0}
  39. \definecolor{green}{RGB}{0,150,0}
  40. \lstset{
  41. language=Python,
  42. basicstyle=\ttfamily\small,
  43. numbers=left,
  44. numberstyle=\color{red},
  45. keywordstyle=\color{keywords},
  46. commentstyle=\color{comments},
  47. stringstyle=\color{green},
  48. showstringspaces=false,
  49. }
  50. %inner meta
  51. \title{Monitoring et inventaire au sein de l'ERP SAP}
  52. \author{Florent JACQUET}
  53. \date{\today}
  54. \begin{document}
  55. \includepdf[pages={1}]{Couvertures.pdf}
  56. \tableofcontents
  57. \listoffigures
  58. \chapter*{Introduction}
  59. \addcontentsline{toc}{chapter}{Introduction}
  60. \par
  61. Le cursus UTBM que je suis me mène à devoir partir en stage, et celui-ci est mon deuxième. Le premier était un simple
  62. stage ouvrier d'un mois, mais celui-ci, le ST40, s'étend sur un semestre, tout comme le dernier que j'aurai à effectuer
  63. au Printemps 2017.
  64. \par
  65. Lorsque j'ai postulé auprès de plusieurs entreprises pour décrocher un stage au Printemps dernier, \textbf{Faurecia} est une de
  66. celles à m'avoir répondu. J'ai donc eu un entretien avec M. Jean-Noël Gueutal, qui s'était très bien passé, et le sujet
  67. m'avait alors beaucoup interessé. Mais très peu de temps après, le sujet a du changer pour de multiples raisons, et je
  68. restais quelque peu sceptique quant à l'interêt de ce stage. Les procédures étant engagées, j'ai tout de même signé ma
  69. convention, et le 7 Septembre 2015, je me suis présenté au Centre Technique de Seloncourt pour débuter ma période de stage
  70. qui devait durer jusqu'au 19 Février 2016.
  71. \par
  72. C'est Jean-Noël qui m'a accueilli, et lorsque Mme Murielle Mathieu, ma tutrice, m'a pris en charge, j'ai alors commencé
  73. à découvrir ce qu'on attendait de moi au travers du sujet que l'on m'avait proposé. Cela s'annoncait peu technique, mais
  74. toutefois fort enrichissant, car j'allais découvrir les dessous du fonctionnement de l'informatique d'une grande
  75. entreprise, dont le domaine d'activité est tout autre que ce que je connaissais.
  76. \par
  77. Par la suite, j'ai donc eu à m'intégrer entre plusieurs équipes afin d'accomplir en premier lieu un travail enrichissant
  78. pour ma connaissance de l'entreprise, et dans un second temps une tâche très épanouissante d'un point de vue technique.
  79. \vskip 1em
  80. \par
  81. C'est cette double mission qui va donc être détaillée dans ce rapport.
  82. \chapter*{Remerciements}
  83. \addcontentsline{toc}{chapter}{Remerciements}
  84. \par
  85. Je tiens avant tout à addresser mes remerciements aux nombreuses personnes avec qui j'ai travaillé pendant ces derniers
  86. mois.
  87. \par
  88. Plus spécifiquement, je tiens à remercier Mme. Murielle Mathieu pour avoir été ma tutrice tout au long de ce stage, et
  89. pour m'avoir fait confiance dans les missions qu'elle a pu me confier.
  90. \par
  91. Je remercie également M. Jean-Noël Gueutal pour m'avoir proposé ce stage, et pour m'avoir fait découvrir l'entreprise
  92. durant mes débuts chez \textbf{Faurecia}. Son équipe, avec entre autre Vincent et Yves m'a également permis d'avoir un
  93. environnement de travail sous GNU/Linux avec lequel j'ai pu être efficace très rapidement, doit également être
  94. remerciée.
  95. \par
  96. Merci aussi à Mohamed, pour m'avoir aidé dans ma mission concernant le monitoring, et merci à Joël pour ses conseils
  97. des plus utiles sur le développement de \textbf{Sappin}.
  98. \par
  99. Enfin, merci à tous les collègues avec qui j'ai pu passer des bons moments pendant les pauses de midi, notamment
  100. l'équipe du PLM avec qui j'ai pu tous les jours aller boire un thé en échangeant sur les sujets les plus variés.
  101. \chapter{Faurecia}
  102. \section{Un groupe mondial}
  103. \subsection{Historique}
  104. \par
  105. Si \textbf{Faurecia} est aujourd'hui un groupe de dimension mondiale, c'est avant tout grâce à son passé. Ce groupe fait
  106. suite aux associations successives de plusieurs autres entreprises, qui ont toutes évolué dans leur domaine pour devenir
  107. des leaders.
  108. \par
  109. À l'origine une filiale de \textbf{Peugeot}, le groupe \textbf{ECIA} (Équipements et Composants pour l'Industrie
  110. Automobile), créé en 1987, fabrique des échappements, des sièges, des éléments d'intérieur, ou encore des blocs avant.
  111. En 1997, \textbf{ECIA} rachète le groupe \textbf{Faure}, alors leader européen dans tout ce qui concerne les sièges, et
  112. c'est la fusion des deux noms qui donne naissance à "Faurecia".
  113. \par
  114. Par la suite, \textbf{Faurecia} acquiert la société \textbf{Sommer-Allibert} en 2000, spécialiste de l'aménagement
  115. intérieur des véhicules. Cette société était déjà la fusion des sociétés \textbf{Sommer} et \textbf{Allibert}, qui
  116. s'étaient rassemblées en 1972 pour se spécialiser dans l'industrie automobile.
  117. \par
  118. \textbf{Faurecia} continue de s'agrandir après cela en rachetant différents groupes, comme \textbf{EMCON Technologies},
  119. spécialiste de l'échappement, en 2010, ou encore des activités de \textbf{Plastal} en 2012, qui produit des équipements
  120. d'extérieur et des produits de carosserie.
  121. \par
  122. Ce n'est donc pas le fruit du hasard si aujourd'hui, \textbf{Faurecia} se retrouve leader mondial sur bon nombres de
  123. marchés spécialisés en ce qui concerne l'équipement automobile. Il s'agit de l'évolution sur de nombreuses années de
  124. savoir-faire précis qui se sont développés en même temps que l'industrialisation française, mais qui ont su s'exporter,
  125. se renouveler, et se maintenir à la pointe dans chacun de leur domaine d'expertise.
  126. \subsection{Quelques chiffres}
  127. \par
  128. Il peut être interessant de voir quelques chiffres pour mieux se représenter l'impact de \textbf{Faurecia} au niveau
  129. mondial dans le secteur de l'automobile.
  130. \begin{figure}[H]
  131. \centering
  132. \includegraphics[width=1\linewidth]{repartition_faurecia_monde.png}
  133. \caption{Repartition des sites de \textbf{Faurecia}}
  134. Janvier 2015
  135. \end{figure}
  136. \par
  137. Présent dans 34 pays, avec plus de 330 sites de production, la société n'a pas de mal à traiter directement avec des
  138. constructeurs du monde entier.
  139. \par
  140. L'Europe se place comme le premier marché de \textbf{Faurecia}, mais les Amériques et l'Asie sont aujourd'hui des
  141. secteurs en pleine expansion:
  142. \begin{description}
  143. \item[Europe:] \hfill \\
  144. \begin{itemize}
  145. \item 56\% des ventes totales du Groupe
  146. \item 55 200 collaborateurs
  147. \item 151 sites de production / 15 centres de R\&D
  148. \end{itemize}
  149. \vskip 1.5em
  150. \item[Amérique du Nord:] \hfill \\
  151. \begin{itemize}
  152. \item 25\% des ventes totales du Groupe
  153. \item 20 400 collaborateurs
  154. \item 39 sites de production / 6 centres de R\&D
  155. \end{itemize}
  156. \vskip 1.5em
  157. \item[Asie:] \hfill \\
  158. \begin{itemize}
  159. \item 14\% des ventes totales du Groupe
  160. \item 15 200 collaborateurs
  161. \item 54 sites de production / 6 centres de R\&D
  162. \end{itemize}
  163. \vskip 1.5em
  164. \item[Amérique du Sud et le reste du monde:] \hfill \\
  165. \begin{itemize}
  166. \item 5\% des ventes totales du Groupe
  167. \item 8 700 collaborateurs
  168. \item 27 sites de production / 3 centres de R\&D
  169. \end{itemize}
  170. \end{description}
  171. \begin{figure}[H]
  172. \centering
  173. \includegraphics[width=1\linewidth]{repartition_vente_faurecia.png}
  174. \caption{Repartition des ventes de \textbf{Faurecia}}
  175. Mars 2015
  176. \end{figure}
  177. \subsection{Présentation des activités}
  178. \par
  179. Les activités de \textbf{Faurecia} sont au nombre de quatre. Ces \emph{Business Groups} sont tous des domaines
  180. d'expertise dans lesquel l'entreprise est leader du marché mondial.
  181. \subsubsection{Emissions Control Technologies}
  182. \par
  183. Les composants et systèmes d'échappements:
  184. \begin{itemize}
  185. \item catalyseurs
  186. \item systèmes de dépollution
  187. \item lignes d'échappement complètes
  188. \item silencieux
  189. \item collecteurs
  190. \end{itemize}
  191. \par
  192. Cette activité est présente dans 24 pays avec 77 sites de production et 7 centres de R\&D.
  193. \subsubsection{Automotive Seating}
  194. \par
  195. Les sièges automobile:
  196. \begin{itemize}
  197. \item armatures
  198. \item mécanismes et moteurs
  199. \item matelassures
  200. \item coiffes et accessoires
  201. \item systèmes électroniques et pneumatiques
  202. \end{itemize}
  203. \par
  204. Cette activité est présente dans 24 pays avec 77 sites de production et 12 centres de R\&D.
  205. \subsubsection{Interior Systems}
  206. \par
  207. L'intérieur des véhicules:
  208. \begin{itemize}
  209. \item planches de bord et consoles centrales
  210. \item cockpits
  211. \item panneaux et modules de portes
  212. \item produits et modules acoustiques
  213. \item pièces de décoration
  214. \end{itemize}
  215. \par
  216. Cette activité est présente dans 23 pays avec 85 sites de production et 8 centres de R\&D.
  217. \subsubsection{Automotive Exteriors}
  218. \par
  219. Structures et carroseries:
  220. \begin{itemize}
  221. \item pièces de carrosserie peinte (pare-choc, ailes, hayon\ldots)
  222. \item module de blocs avant (face avant technique/structurelle, groupe moto-ventilateur\ldots)
  223. \item pièces de structure e, composite (planchers, structure de toit, système d’absorption de crash\ldots)
  224. \end{itemize}
  225. \par
  226. Cette activité est présente dans 9 pays avec 32 sites de production et 9 centres de R\&D.
  227. \section{Le centre technique de Seloncourt}
  228. \par
  229. Construit en 1998, le Centre Technique de Seloncourt servait à l'origine comme plateforme de tests des différents
  230. produits \textbf{Faurecia}. On y trouvait entre autre une catapulte pour tester les sièges, mais aussi du benchmarking et de
  231. l'analyse de la concurrence.
  232. \par
  233. En 2001, le site devient un centre informatique, accueillant plusieurs services, dont le Centre de Support Informatique
  234. de \textbf{Faurecia} jusqu'en 2014, mais aussi les équipes Système, Application de Production, Applications
  235. Just-In-Time, ou encore des Centres de Compétence \emph{Windows}, et même \emph{AS/400}!
  236. \section{Mon service: Global Infrastructure and Systems Operations}
  237. \subsection{Un service de \textbf{GIS}}
  238. \par
  239. L'informatique est, au sein de \textbf{Faurecia}, un service transversal et central. Tout les autres services en ont
  240. besoin, et cela permet de maintenir une cohérence entre les différents Business Groups au niveau des méthodes et des
  241. outils informatiques.
  242. \par
  243. Ce service global est assuré par \textbf{GIS} (Group Information System), qui est composé de plus de 1100 personnes réparties au
  244. travers le monde, pour assurer une disponibilité 24H/24. Deux types de services existent et collaborent au sein de \textbf{GIS}:
  245. les services centraux et les services locaux.
  246. \par
  247. Les services locaux sont en charge de l'informatique sur chaque site. En revanche, les services centraux peuvent être
  248. répartis sur plusieurs sites, et sont en charge de la gestion, l'exploitation, le support, et tout ce qui grative autour
  249. des applications utilisées à grande échelle par le groupe, comme les réseaux, la messagerie, l'\textbf{ERP}, les applications de
  250. finance, de gestion des programmes clients, ou encore de la sécurité.
  251. \subsection{Rôle dans \textbf{Faurecia}}
  252. \par
  253. \textbf{GISO} (Global Infrastructure and Systems Operations) est le service dont je dépendais pendant mon stage. Il est
  254. responsable de la disponibilité des applications centrales, et de leur sécurité, c'est à dire que les applications dont
  255. \textbf{GISO} est en charge doivent être toujours opérationnelles, sans aucune défaillance visible pour les utilisateurs.
  256. \par
  257. Il doit aussi fournir un support pour ces applications en permanence, tout en étant prêt à réagir en cas de problème, ou
  258. que ce dernier soit dans l'infrastructure. C'est donc une tâche relativement lourde de responsabilité, car cela a des
  259. répercussion sur l'ensemble de la production mondiale de \textbf{Faurecia}.
  260. \subsection{Activités}
  261. \par
  262. Le service \textbf{GISO} est divisé en trois équipes:
  263. \begin{description}
  264. \item[Monitoring] qui assure la surveillance des machines et applications via des outils de monitoring tel
  265. \emph{Nagios}.
  266. \item[Systems] qui gère les infrastructures mise en œuvre pour supporter les applications centrales. Cela comporte
  267. par exemple les serveurs, physiques ou virtuels, les systèmes de clusters, le réseaux, etc...
  268. \item[Applications] qui gère les applications que les utilisateurs des sites de production et R\&D vont utiliser,
  269. comme par exemple l'\textbf{ERP} \emph{SAP}.
  270. \end{description}
  271. \chapter{Contexte du stage}
  272. \section{SAP}
  273. \subsection{Qu'est-ce qu'un \textbf{ERP}?}
  274. \par
  275. Un \textbf{ERP} (Enterprise Resource Planning) est un progiciel, c'est à dire un ensemble de logiciels n'en constituant qu'un
  276. seul, et capable de répondre au besoin d'une entreprise dans autant de domaines qu'il a de modules. Les plus courants de
  277. ces modules sont généralement les achats, les stocks, la production, les ventes, la distribution, les salaires, la
  278. comptabilité, les finances et la trésorerie.
  279. \par
  280. Pour faire simple, l'\textbf{ERP} est l'application centrale entre les très nombreux et divers services d'une entreprise. Les
  281. ouvriers sur les chaînes de fabrication, les comptables, les ingénieurs de recherche et développement, et beaucoup
  282. d'autre personnes sont amené à utiliser l'\textbf{ERP} pour synchroniser toutes les informations à partir d'un outil unique et
  283. global.
  284. \par
  285. \textbf{SAP} (Systems, Applications and Products for data processing) est un des \textbf{ERP} les plus connus. Son architecture modulaire
  286. et multi-fonctionnelle en font un outil d'une grande flexibilité pouvant s'adapter à la majorité des entreprises. De
  287. plus, si des fonctionnalités viennent à manquer il est toujours possible de les développer à l'aide de son environnement
  288. de développement et du language \emph{ABAP} qu'il intègre.
  289. \begin{figure}[H]
  290. \centering
  291. \includegraphics[width=1\linewidth]{sap.png}
  292. \caption{SAP}
  293. On voit ici l'architecture modulaire de SAP, et son universalité dans une entreprise.
  294. \end{figure}
  295. \subsection{SAP chez \textbf{Faurecia}}
  296. \subsubsection{Déploiement et historique}
  297. \par
  298. Le déploiement de \textbf{SAP} au sein de \textbf{Faurecia} remonte à 2009, avec le lancement du projet \textbf{FCS} (Faurecia Core System).
  299. L'application est mise en place dans un centre de données informatiques en Allemagne, à Hagenbach (HGB). L'entreprise
  300. bénéficie alors d'un \textbf{ERP} commun à toutes les usines, soit plus de 183 sites à travers le monde, pour environ 41500
  301. utilisateurs quotidiens.
  302. \par
  303. Les conséquences de l'utilisation de \textbf{SAP} sont nombreuses, en bien comme en mal. Il apporte certes, entre autre,
  304. l'avantage d'être centralisé, c'est à dire que tout le monde a le même outil, et on évite ainsi les problèmes de
  305. synchronisation de production, mais en revanche, cela apporte un point très critique pour la gestion informatique de cet
  306. \textbf{ERP}. En effet, la moindre indisponibilité ralenti, voir stoppe la production, ce qui empêche alors de livrer les
  307. clients, et a donc des conséquences financières directes.
  308. \subsubsection{Architecture}
  309. \par
  310. La quasi totalité des modules \textbf{SAP} existants sont utilisés chez \textbf{Faurecia}:
  311. \begin{description}
  312. \item[ECC] logistique, gestion comptable et ressources humaines
  313. \item[PI/PO] échange de fichiers (clients/fournisseurs en interne et en externe)
  314. \item[BW/BI4] reporting \& consolidation de données
  315. \item[SRM] achats
  316. \item[CPS] ordonnanceur des traitements informatiques
  317. \item[Portal] portail informatique permettant les connexions utilisateurs
  318. \item[VPSX] impression des documents
  319. \item[SolMan] gestion des comptes utilisateurs et outil de surveillance applicative
  320. \item[Archiving] gestion de l’archivage des données
  321. \item[HANA] accélérateur d’accès aux données
  322. \end{description}
  323. \vskip 7mm
  324. \par
  325. De plus, pour chaque module, plusieurs environnements, c'est à dire plusieurs instances, sont déployés:
  326. \begin{description}
  327. \item[Développement] permet de développer de nouvelles fonctionnalités
  328. \item[Simulation/Qualité] permet de valider les nouveaux développements
  329. \item[Pré-production] permet de tester et valider avant la mise en production les développements dans un contexte
  330. (physique, applicative et données) identique à l’environnement de production
  331. \item[Production] permet de délivrer les fonctionnalités aux utilisateurs
  332. \end{description}
  333. \vskip 3mm
  334. L'environnement de production étant utilisé en permanence par les utilisateurs finaux, c'est celui qui est le plus
  335. critique, contrairement aux autres, qui ne servent globalement que pour des tests.
  336. \begin{figure}[H]
  337. \centering
  338. \includegraphics[width=1\linewidth]{sap_landscape.jpg}
  339. \caption{Landscape SAP}
  340. \label{landscape}
  341. On voit ici clairement les différents modules et leurs environnement au sein de SAP.
  342. \end{figure}
  343. \section{FCS Business Continuity}
  344. \subsection{Origine}
  345. \par
  346. \textbf{FCS Business Continuity} (FCS BC) est le projet sur lequel j'ai travaillé pendant mon stage. Il a été démarré en Juin 2015,
  347. à la suite de plusieurs incidents au niveau de \textbf{SAP}. Ces incidents étaient d'ordre technique, liés principalement aux
  348. serveurs, et la versions des logiciels utilisés dessus. La décision fût donc prise de mettre en place une sécurisation
  349. de l'\textbf{ERP}, et le projet \textbf{FCS BC} fûr confié à Murielle.
  350. \subsection{Objectifs du projet}
  351. \par
  352. Il a pour but de supprimer les activités informatiques centrales du site de Hagenbach pour les transférer à Marcoussis
  353. (EDC), et de sécuriser les environnements \textbf{SAP}. Cela passe par plusieurs points critiques:
  354. \begin{itemize}
  355. \item Transférer les environnements \textbf{SAP} hébergés à Hagenbach dans le Data Center de Marcoussis
  356. \item Mettre en place une séparation physique et logique des environnements transférés entre les différentes régions
  357. géographiques de \textbf{Faurecia} (Europe/Asie/Amérique/Central)
  358. \item Déplacer les environnements \textbf{SAP} hors production dans le nouveau Data Center de Clichy (depuis HGB et/ou depuis
  359. EDC)
  360. \end{itemize}
  361. \vskip 3mm
  362. \par
  363. Ce projet apporte plusieurs avantages non négligeables:
  364. \begin{itemize}
  365. \item Éviter de perdre tous les modules \textbf{SAP} de toutes les régions en cas de problème en les séparant tant
  366. physiquement que logiquement
  367. \item Réduire les impacts pour les sites de production \textbf{Faurecia}:
  368. \begin{itemize}
  369. \item Limite du périmètre affecté en cas de problème
  370. \item Être capable de planifier des opérations plus facilement région par région
  371. \end{itemize}
  372. \item Standardiser les serveurs et solutions informatiques \textbf{SAP} quelque soit la région géographique qu'ils supportent
  373. \item Sécuriser la production \textbf{Faurecia} avec une solution de reprise d'activité disponible dans un Data Center distant
  374. \item Libérer le site d'Hagenbach des contraintes liées à un Data Center
  375. \end{itemize}
  376. \subsection{Ma position dans \textbf{FCS BC}}
  377. \par
  378. Mon rôle dans le projet Business Continuity a été d'assurer le suivi du monitoring pendant les phases de déplacement (ou
  379. \textbf{move}) des environnements \textbf{SAP}. J'étais une sorte de point central entre Murielle, qui coordonnait le projet,
  380. l'équipe système qui s'occupait de déplacer les machines, l'équipe \textbf{SAP} qui déplacait les applications une fois que les
  381. nouvelles machines étaient en place, et l'équipe monitoring, qui s'occupait de la configuration de \emph{Nagios}.
  382. \section{Nagios}
  383. \subsection{Le monitoring en général}
  384. \par
  385. Si l'on traduit le terme \emph{monitoring}, on obtient \emph{surveillance}, ou \emph{supervision}. Cela définit
  386. parfaitement le concept, puisque le but de mettre en place un système de monitoring dans une infrastructure est de
  387. surveiller en permanence. Surveiller le réseau, mais aussi les machines, ou encore les services et processus eux-même
  388. qui tournent sur ces dernières.
  389. \par
  390. Surveiller, c'est une chose, mais le rôle du monitoring est aussi beaucoup de prévenir, lorsque quelque chose ne va pas.
  391. Dans ce cas, des mails sont généralement envoyés automatiquement, mais on peut aussi faire beaucoup plus, comme par
  392. exemple déclancher des scripts qui vont tenter d'autoréparer le système.
  393. \subsection{Nagios chez \textbf{Faurecia}}
  394. \subsubsection{Nagios}
  395. \par
  396. \emph{Nagios} est une solution libre et open-source de monitoring apparut en 1996, et qui a depuis fait ses preuves dans
  397. bon nombre d'infrastructures. Il permet de surveiller la (quasi?) totalité des équipements, comme les machines
  398. physiques, virtuelles, mais aussi les routeurs et autre materiel réseau.
  399. \par
  400. Il se découpe généralement en trois partie:
  401. \begin{description}
  402. \item[Le moteur] qui sert de point central, traite la base de donnée, et synchronise le tout.
  403. \item[L'interface web] qui permet de visualiser l'état des système, et d'avoir une vue sur l'ensemble. Il y en a
  404. plusieurs de disponible.
  405. \item[Les plugins] qui sont les petits programmes servant à récupérer les informations de supervision pour les
  406. faire remonter au moteur. Il y en a une centaine officiels, mais on peut très facilement développer les siens
  407. pour superviser quelque chose de particulier.
  408. \end{description}
  409. C'est le logiciel qui a été retenu par \textbf{Faurecia} pour superviser l'ensemble de ses
  410. systèmes à l'échelle mondiale.
  411. \section{Cadre de travail}
  412. \subsection{Un grand open space}
  413. \par
  414. L'open space dans lequel j'ai été installé était relativement grand. En effet il ne comptait pas moins d'une trentaine de
  415. personne. Il était cependant assez calme, malgré les nombreuses discussions téléphoniques qui pouvaient durer plusieurs
  416. heures. Mon bureau était assez grand, et mon siège plutôt confortable, ce qui fait que je n'ai pas eu à souffrir d'une
  417. mauvaise installation, ou d'un mauvais cadre de travail.
  418. \subsection{Du matériel adapté}
  419. J'ai été équipé d'un laptop de prêt au début, installé avec \emph{Windows Seven}, afin de pouvoir dès le début
  420. accéder à ma messagerie fonctionnant avec \emph{Outlook} exclusivement. J'ai gardé ce laptop jusqu'à la fin de mon stage
  421. uniquement pour la messagerie.\\
  422. En revanche, j'ai rapidement demandé à être équipé d'un système \emph{Linux}, et j'ai donc dès le deuxième jour récupéré
  423. la tour d'un ancien stagiaire sur laquelle j'ai pu installer \emph{Ubuntu 14.04} avec \emph{Awesome WM}. Deux mois plus tard, j'ai pu
  424. troquer cette tour contre un laptop beaucoup plus récent, celui d'un salarié qui quittait \textbf{Faurecia}, sur lequel j'ai pu
  425. remettre ce même système.
  426. \par
  427. En bref, j'ai pu travailler avec un environnement et une suite logiciel que j'ai pu choisir à 100\%, totalement libre et
  428. open-source, en ayant juste la contrainte d'un second laptop sous \emph{Windows} pour la messagerie.
  429. \chapter{Travail réalisé}
  430. \section{Les sujets de travail}
  431. \begin{center}
  432. "Assistant gestion de projet FCS (SAP Application)"
  433. \end{center}
  434. \par
  435. Tel était le sujet marqué dans la fiche réponse, et pour lequel une convention a été signée. C'est en réalité assez
  436. vague, mais cela représente tout de même bien la réalité, puisque l'ensemble des tâches qui m'ont été attribuées
  437. tournaient autour de ce fameux outil, \textbf{SAP}, hormis les trois premières semaines.
  438. \subsection{Les débuts}
  439. \par
  440. Lorsque je suis arrivé dans l'entreprise, ma tutrice était alors en congés. C'est donc M. Gueutal qui m'a accueilli et
  441. qui m'a présenté aux équipes, fait visité les locaux, décrit le fonctionnement des différents services, en bref, qui m'a
  442. familiarisé avec mon environnement. Mme Mathieu n'étant pas de retour avant trois semaines, j'ai été provisoirement
  443. intégré à l'équipe de Jean-Noël, le PLM, afin de réaliser diverses tâches sans grand rapport les unes avec les autres,
  444. mais qui toutes allégaient un peu le travail de l'équipe, et surtout, qui me permettaient de me familiariser avec mon
  445. environnement.
  446. \par
  447. Il m'a principalement été demandé d'automatiser une procédure de génération de "Monthly report", c'est à dire aller
  448. collecter des données diverses pour en faire des statistiques et des graphiques utilisables, le tout très rapidement.
  449. C'est un travail qui est réalisé une fois par mois, et qui permet de présenter au management un résumé chiffré des
  450. actions des 30 derniers jours. Ce travail est fastidieux, car on a besoin de se connecter à de nombreuses pages Web, et
  451. d'en extraire des données sous la forme en général de tableaux \emph{Excel}. La contrainte était de ne pas avoir aux bases de
  452. données de façon direct, et l'on devait alors simuler les actions de l'utilisateur dans le naviguateur, ce que j'ai
  453. réalisé à l'aide de la bibliothèque \emph{Selenium}, et de son module pour \emph{Python}.
  454. \par
  455. Ce projet a marché pendant une petite période, de l'ordre de quelques semaines, mais par la suite, une mise à jour des
  456. pages Web a cassé toute la démarche du script et l'idée fût abandonnée. De plus, avec le départ de Jean-Noël pour un
  457. autre service, et le retour de Murielle, j'ai été affecté à d'autres missions.
  458. \par
  459. Par ailleurs, les autres tâches que j'ai eu à faire ont été plus courtes, mais néanmoins pas inintéressantes.
  460. \par
  461. J'ai eu à personnaliser la page d'accueil de l'instance de \emph{Etherpad}, un outil libre d'édition de texte collaboratif dont
  462. une instance venait d'être déployée.
  463. \par
  464. J'ai également réalisé deux petits scripts \emph{Python} à l'aide de \emph{Fabric}, une bibliothèque elle aussi libre servant à lancer
  465. facilement des commandes shells depuis \emph{Python}, que ce soit sur la machine locale, ou bien à distance à l'aide d'\emph{SSH}. Ces
  466. scripts servaient à automatiser la création de machines virtuelles dans \emph{VirtualBox} et de les convertir en environnement
  467. \emph{Vagrant}, afin de pouvoir rapidement réaliser des fichiers d'environnement virtuels à jour lors de la sortie de nouvelles
  468. versions des systèmes \emph{Ubuntu} et \emph{Cent OS}.
  469. \subsection{Première mission à long terme}
  470. \par
  471. Lorsque Murielle m'a pris en charge, fin Septembre, j'ai commencé à travailler sur ma première mission à long terme. Il
  472. s'agissait de servir de point centrale entre trois équipe.
  473. Premièrement, celle qui gérait le projet \textbf{FCS} Business Continuity, c'est à dire Murielle elle même, entre autres.
  474. Venaient ensuite les équipes systèmes qui gèraient les machines ciblées par le projet \textbf{FCS}.
  475. Enfin, il y avait les équipes monitoring, basées en Chine, mais dont le responsable était mon voisin de bureau, et dont
  476. le rôle était de gérer la configuration de l'outil \emph{Nagios} afin d'assurer le monitoring de ce que le système mettait en
  477. place.
  478. \par
  479. Mon rôle là dedans était d'observer ce que \emph{Nagios} monitorait réellement, de me renseigner sur ce qu'il y avait à
  480. monitorer et qui ne l'était pas, et de faire réagir les bonnes personnes en conséquence. En général, le schéma était
  481. toujours le même. Je constatais que quelque chose n'était pas monitoré, ou était mal monitoré. Je contactais donc la
  482. personne du système en charge de cette machine afin soit qu'elle me transmettre les informations manquantes, et je
  483. créais ensuite un ticket pour les équipes chinoises, soit qu'elle fasse elle-même le ticket dans le cas où il y aurait
  484. des informations trop complexes pour être relayées correctement.
  485. \par
  486. Cette première mission me familiarisa beaucoup avec ce qu'était \textbf{SAP}, et l'environnement gigantesque qui en découlait. Je
  487. découvrais aussi les différents problèmes qui faisaient perdre beaucoup de temps, notamment le manque cruel d'un
  488. inventaire des machines, commun aux différentes équipes. C'est ce qui m'a mené par la suite à faire évoluer un peu le
  489. sujet de mon stage.
  490. \subsection{Seconde mission à long terme}
  491. \par
  492. Lorsque j'ai eu passé un certain temps dans l'interface de \emph{Nagios}, à traquer les défauts, les manques, et les surplus
  493. d'informations, j'ai commencé à chercher comment je pourrais automatiser tout cela. Je me suis déjà renseigné à propos
  494. d'une interface qui me permettrait de faire des requêtes dans la base de donnée du monitoring, et on m'a dirigé vers
  495. \emph{Livestatus}, un module pour \emph{Nagios} qui fourni une API semblable à du \emph{SQL}, et que je pouvais requêter comme je le
  496. souhaitais.
  497. \par
  498. J'ai donc commencé, fin Octobre, par un petit script s'utilisant en ligne de commande qui me servait à classer les
  499. machines trouvées sur \emph{Nagios}, en les triant par environnements \textbf{SAP}. Cela fonctionnait bien, mais j'étais le seul à
  500. savoir m'en servir, et je constatais que certaines questions que l'on me posait avaient leur réponse facilement à
  501. travers ce petit script.
  502. \par
  503. Il a donc fallu réfléchir à un moyen de rendre ma petite base de donnée accessible facilement, tant à des personnes
  504. techniques, que parfois à des gens dont le corp de métier n'est pas l'informatique. Quoi de mieux qu'une interface Web
  505. pour arriver à cela!
  506. \par
  507. Ma seconde mission, qui a commmencé fin Novembre, a donc été de développer cette interface et de la rendre la plus
  508. ergonomique possible. J'ai même peu à peu abandonné la ligne de commande, puisqu'elle ne suivait plus les dernières
  509. fonctionnalités. Début Janvier, il m'a même été demandé d'installer cette interface sur un serveur dédié afin de
  510. continuer à la faire fonctionner après mon départ, ce qui fût plutôt gratifiant.
  511. \section{Rôles et objectifs des travaux}
  512. \subsection{Concernant le monitoring}
  513. \par
  514. Pour cette tâche, les objectifs étaient simples, mais c'est la tâche elle-même qui était délicate, pas sur le plan
  515. technique, mais plus au niveau des responsabilités. Le but était de s'assurer que pendant les phases de déplacement des
  516. environnement \textbf{SAP}, le monitoring soit toujours correctement assuré.
  517. Il y avait plusieurs cas quand je suis arrivé:
  518. \begin{itemize}
  519. \item Des environnements déjà déplacés, et il fallait alors s'assurer que \emph{Nagios} avait suivit le mouvement et
  520. monitorait donc les nouvelles machines tout en ayant supprimé les anciennes.
  521. \item Des environnements en cours de déplacement, qu'il fallait donc monitorer deux fois: la vieille instance, et la
  522. nouvelle, sans qu'il y ait de conflits, sur les noms de machines par exemple.
  523. \item Des environnements qui ne seraient pas déplacés, les plus facile, puisque normalement, le monitoring était
  524. déjà en place. J'ai cependant eu parfois quelques correctifs à faire.
  525. \end{itemize}
  526. \par
  527. La difficulté résidait donc dans le fait de ne pas se tromper lorsque l'on faisait une requête. Il fallait d'une part
  528. s'assurer que la requête avait bien lieu d'être, puis la créer en faisant attention à bien mettre l'ensemble des
  529. informations nécéssaires. En cas d'erreur, cela pouvait mener au mieux à une requête inutile, au pire à un service
  530. complet qui se serait retrouvé sans monitoring. Cela n'est heureusement jamais arrivé, mais la criticité des requêtes
  531. m'a forcé à beaucoup de communication avec les personnes concernées afin d'être sûr de toujours avoir les bonnes
  532. informations.
  533. \subsection{Objectif de l'outil d'inventaire}
  534. \par
  535. J'ai pu remarqué que lorsque je cherchais à me documenter sur les environnement \textbf{SAP}, il était très difficile, voire
  536. impossible d'obtenir une liste précise des machines. L'inexistence à travers plusieurs équipe d'un inventaire commun
  537. rendait la tâche particulièrement difficile, puisqu'il fallait toujours aller chercher les informations là où elles se
  538. trouvaient, et pas toujours là où l'on s'y attend.
  539. \par
  540. On m'avait demandé, lorsque l'on m'a chargé de vérifier le monitoring, de construire en même temps un diaporama
  541. \emph{Powerpoint} présentant chaque environnement, et contenant toutes les machines dans chacun d'eux, avec un certain nombre
  542. d'information. Mais le problème que j'ai constaté d'un tel document, est que d'une part, il n'est pas dynamique, et donc
  543. qu'il devra être maintenu à la main, et d'autre part, qu'il n'est pas centralisé, ce qui engendrera rapidement des
  544. différences de version chez chacune des personnes possédant le document.
  545. \par
  546. L'objectif de faire l'inventaire était donc clair: il fallait que je concoive un outil très simple à utiliser, construit
  547. sur une base de donnée dynamique se mettant à jour automatiquement, qui soit centralisé, et qui permettrait aux
  548. différentes équipes \textbf{SAP} d'accéder à tout moment et rapidement à la plupart des informations de base concernant les
  549. environnements.
  550. \section{Vérifier le monitoring}
  551. \subsection{Bien utiliser \emph{Nagios}} % Attention au rangement dans les bonnes sous-parties
  552. \par
  553. En réalité, ce n'est pas directement \emph{Nagios} que nous utilisions, mais simplement une de ses nombreuses interface
  554. Web\footnote{Voir impression d'écran en Annexe \ref{nagios_web_ui}, page \pageref{nagios_web_ui}}.
  555. Cette interface facilite grandement la surveillance en fournissant principalement un moteur de recherche très puissant
  556. permettant de trouver rapidement n'importe quelle machine, voire même des groupes de machines, pour ensuite accéder à
  557. des informations très détaillées sur les services de monitoring appliqués à cette ou ces machine(s).
  558. \par
  559. Je devais donc suivre le \textbf{paysage}, ou \textbf{landscape}\footnote{Voir Figure \ref{landscape}, page
  560. \pageref{landscape}}, c'est à dire une sorte de plan de \textbf{SAP}, et chercher environnement par environnement la
  561. liste des machines, en contactant à chaque fois les personnes responsable du dit environnement pour vérifier que
  562. l'ensemble existait bel et bien dans \emph{Nagios}.
  563. \par
  564. Lorsqu'une anomalie était détectée, elle pouvait être de plusieures sorte, avec différents niveaux de criticité:
  565. \begin{description}
  566. \item[Critique] \hfill \\
  567. Lorsqu'une machine est sensée exister, mais est introuvable. Cela la rend totalement
  568. invisible aux yeux du monitoring, et on ne peut absoluement pas savoir quand cette machine a un problème,
  569. excepté en allant voir manuellement.
  570. \item[Critique] \hfill \\
  571. La machine est trouvable, mais elle s'affiche en rouge, et le \emph{ping} échoue. Cela signifie
  572. généralement que la machine a subit un déplacement mais que le monitoring n'a pas été mis à jour. Il faut donc
  573. rapidement l'équipe systèmes pour trouver qui contrôle la machine et lui demander de transmettre les
  574. informations de base la concernant, comme son nom et son adresse IP, afin de régulariser au plus vite.
  575. \item[Peu critique] \hfill \\
  576. On voit la machine en vert, et celle-ci répond au \emph{ping}, mais un grand nombre de ses
  577. services sont rouges. Cela signifie qu'elle a subit un important changement d'architecture pendant le
  578. déplacement, et que les services à monitorer ont changé. Il faut donc contacter l'équipe applicative afin de
  579. savoir ce qu'il font tourner dessus, et donc demander à l'équipe monitoring de suivre les bons services.
  580. \item[Très peu critique] \hfill \\
  581. La machine est correctement monitorée, mais on s'appercoit qu'elle est rangée
  582. dans le mauvais groupe, ou que les commentaires sur cette machine sont incomplets. Ce n'est pas grave, mais cela
  583. peut être gênant quand on cherche une information précise, car cette dernière peut alors être éronnée. On
  584. cherche alors auprès de toutes les équipes concernées pour trouver qui possède les informations manquantes.
  585. \end{description}
  586. \begin{figure}[H]
  587. \centering
  588. \includegraphics[width=0.7\linewidth]{nagios_pb.png}
  589. \caption{Exemple de problèmes dans Nagios}
  590. On voit ici que toutes les machines fonctionnent sauf \emph{HADR\_SAP\_FW1} et \emph{WWFCSUNIA067} qui sont tombées.
  591. On voit aussi qu'elles ont toutes au moins un problème concernant un de leurs services.
  592. \end{figure}
  593. \subsection{Redmine, puis \emph{MosaiC}}
  594. \par
  595. \emph{Redmine} et \emph{MosaiC} sont les bugs-trackers utilisé dans le projet \textbf{FCS BC}. \emph{Redmine} était présent au début,
  596. puis le changement vers \emph{MosaiC} a été opéré en Novembre.
  597. \paragraph{Redmine} est un outil libre de bug tracking et gestion de projet, intégrable facilement avec le gestionnaire
  598. de révision \emph{Git}, et qui permettait de facilement trier les issues entre les différents projets. De plus, on pouvait
  599. suivre l'évolution des tickets dans le temps, on faisant évoluer la priorité, en ajoutant des informations si besoin, le
  600. tout dans une sorte de dialogue avec l'équipe affectée à la résolution du ticket.
  601. \paragraph{MosaiC} est arrivé début Novembre pour remplacer \emph{Redmine}. Il remplissait moins bien son rôle de bug tracker
  602. puisque c'est un outil de gestion du changement, mais avait une plus grande base de connaissance sur les projets, on
  603. triant jusqu'au niveau de l'environnement dans le projet \textbf{FCS}. Je m'en suis finalement peu servi. En effet, c'est à cette
  604. période que j'ai commencé à développer \emph{Sappin}.
  605. \par
  606. C'est au travers de ces deux outils que j'ai fait remonté les demandes de modifications de \emph{Nagios} pour assurer un
  607. monitoring optimal pendant les phases de \textbf{move}.
  608. \subsection{La communication: email et messagerie instantanée}
  609. \par
  610. La communication était une partie très importante de mon travail. En effect il me fallait en permanence contacter les
  611. différents responsables de tel ou tel service afin d'obtenir les informations là où elles se trouvaient. Par conséquent,
  612. plusieurs moyen de communication ont été mis à ma disposition dès le premier jour de mon stage.
  613. \par
  614. \emph{Microsoft Outlook} était mon client de mail principal, car le système d'utilisateur de \textbf{Faurecia} étant
  615. \emph{Active Directory}, il était très facile de disposer d'une messagerie dans cet outil. De plus, un certain nombre de
  616. plug-in y étaient installé, afin de pouvoir également gérer les conférences téléphoniques, ainsi que les rendez-vous, en
  617. synchronisation avec la liste des salles et le gestionnaire d'emploi du temps de chacun. L'annuaire interne de
  618. \textbf{Faurecia} y était évidemment présent également.
  619. \par
  620. L'autre moyen de communication utilisé était la messagerie instantanée. Le client officiel de \textbf{Faurecia} était
  621. \emph{Spark}, mais étant donnée que tout passait par un serveur \emph{XMPP}, et qu'il s'agit d'un protocol ouvert,
  622. n'importe quel client pouvait faire l'affaire, et j'ai donc utilisé \emph{Gajim}, ce dernier étant plus léger.
  623. \par
  624. Ce type de messagerie avait l'avantage d'être moins formel et beaucoup plus efficace pour poser une simple question à
  625. des personnes que je contactais régulièrement. Elle remplacait presque une discussion orale, avec même l'avantage de
  626. pouvoir transmettre des liens très facilement pour pointer un problème en particulier rapidement, tout en ayant chaque
  627. interlocuteur présent sur sa machine de travail, et ayant dont accès rapidement à ses informations numériques.
  628. \subsection{Fin de la mission}
  629. \par
  630. Pour mettre en place le monitoring, j'avais bien évidemment eu des dates à respecter, et un des plus gros \textbf{move} était
  631. prévu pour le week end du 21-22 Novembre. Mais suite à un problème dans l'environnement, le \textbf{move} a été reporté au
  632. premier trimestre de 2016, c'est à dire vers début Mars. Cependant, le monitoring était prêt, et ma mission prenait donc
  633. fin. J'allais pouvoir me centrer pleinement sur l'inventaire.
  634. \section{Développer un inventaire: \textbf{SAPPIN}}
  635. \par
  636. \emph{Bien que le nom fût trouvé tout à la fin de mon stage, je me référerai à l'application en l'appelant par son nom,
  637. \textbf{Sappin}.}
  638. \par
  639. \textbf{Sappin} est venu à la base de \textbf{SAPIN}, qui signifiait \emph{SAP INventory}. Je me suis ensuite dit que
  640. l'application pouvait tout à fait être déployée pour tout type d'infrastructure, et pas seulement \textbf{SAP}, et je l'ai donc
  641. renommé en \textbf{SAPPIN}, pour \emph{Simple APPlication INventory}.
  642. \par
  643. C'était là clairement ma mission la plus technique, d'un point de vue technologique d'une part, et d'un point de vue de
  644. gestion de projet également. En effet, j'ai été sur ce projet en totale autonomie, puisque c'est d'une initiative de ma
  645. part que le projet est parti.
  646. \subsection{Identifier le besoin}
  647. \par
  648. Lorsque je m'occupais du monitoring, j'ai remarqué que j'étais souvent confronté aux mêmes problèmes.
  649. \par
  650. Pour commencer, lorsque l'on regarde sur \emph{Nagios}, on peut voir une machine (un \emph{host}), mais on ne sait pas
  651. instantanément où elle est située, d'un point de vue physique, c'est à dire en pratique chez \textbf{Faurecia}, savoir si le
  652. serveur est à Hagenbach, Marcoussis, ou encore ailleurs.
  653. \par
  654. Ensuite, il pouvait arriver d'avoir à trouver toutes les machines qui répondaient à un critère. Un système d'expressions
  655. rationnelles dans l'interface permet d'avoir les filtres les plus fins qui soient, mais ce n'est guère ergonomique, et
  656. on se rend compte en pratique que l'on tri très souvent par module ou par environnement \textbf{SAP}.
  657. \par
  658. Vient alors un autre problème, qui est de savoir qui est responsable de cette machine. Où de manière plus générale, où
  659. sont les ressources concernant cette machine. Dans \emph{Nagios}, une machine est représenté par sont nom et quelques
  660. menues informations, mais surtout par les services qui sont monitorés, et les alertes qui en découlent. Or les alertes
  661. et services ne sont d'aucune utilité quand il s'agit de trouver la personne à contacter pour obtenir des renseignements.
  662. Il n'y avait de mis à disposition qu'un maigre lien vers des procédures d'urgence, ce qui est déjà pas mal, mais on
  663. pouvait faire mieux.
  664. \par
  665. Toutes ces tâches avaient donc besoin d'être simplifiées, ou automatisées quand c'était possible, et le besoin d'une
  666. petite application était là clairement définit.
  667. \subsection{La phase de développement}
  668. \subsubsection{Construire des requêtes}
  669. \par
  670. J'ai commencé la phase de développement en automatisant seulement quelques requêtes pour accéder plus rapidement aux
  671. informations sans avoir à passer par l'interface Web. Cette automatisation passait par l'outil \emph{Livestatus}, un
  672. plugin pour \emph{Nagios} qui fournit un socket sur lequel on peut effectuer des requêtes. Les requêtes se font alors
  673. dans un language, le \emph{LQL}, dont la syntaxe est proche de \emph{HTTP}, mais tout en ayant le paradigme du \emph{SQL}, ce qui permet de
  674. faire des requêtes très puissantes.
  675. \begin{figure}[H]
  676. \centering
  677. \begin{lstlisting}
  678. GET hostsbygroup
  679. Columns: host_name alias address
  680. Filter: host_name ~ FC1
  681. OutputFormat: python
  682. \end{lstlisting}
  683. \caption{Exemple de requête \emph{LQL}}
  684. Récupére au format \emph{Python}, depuis la table \textbf{hostsbygroup}, les \emph{host\_name}, \emph{alias}, et
  685. \emph{address}, de toutes les machines dont le \emph{host\_name} contient "FC1".
  686. \end{figure}
  687. C'est en partant de ce genre de requête que j'ai commencé à construire \textbf{Sappin}. Au départ, il ne faisait que formatter et
  688. filter le résultat des requêtes que l'on faisait. C'était donc très simpliste, et on l'utilisait de la façon suivante:
  689. \begin{lstlisting}
  690. ./cli.py -r FC1
  691. \end{lstlisting}
  692. Cela affichait l'ensemble des objets trouvés contenant FC1 dans leur nom, et c'était donc plus rapide de construire la
  693. recherche dans \emph{Nagios}.
  694. \par
  695. Puis j'ai voulu complexifier un peu l'affichage, en affichant en arborescence les environnements et leurs machines.
  696. S'est posé alors deux problème: comment générer cette arborescence d'un point de vue logique, c'est à dire simplement en
  697. mémoire, puis ensuite, comment l'afficher correctement pour ce soit lisible.
  698. \subsubsection{Inclure une base de données}
  699. \par
  700. Concernant la logique, je me suis rapidement dit qu'il me fallait l'aide d'une petite base de donnée, afin de stocker en
  701. grande partie mes requêtes, mais aussi et surtout pour stocker le temps de traitement des requêtes. En effet, il aurait
  702. été bête de devoir retraiter l'intégralité de l'inventaire à chaque requête. J'ai donc cherché du côté de \emph{SQLalchemy}, un
  703. module pour \emph{Python} fournissant un ORM (Object Relational Model), c'est à dire une interface objet pour interagir avec
  704. une base de donnée relationnelle. On évite par là d'avoir à écrire les requêtes \emph{SQL} à la main, et d'avoir à faire des
  705. jointures dès que l'on veut mettre en relation plusieurs tables.
  706. \par
  707. Concernant le gestionnaire de base de donnée, \emph{SQLalchemy} inclut par défaut \emph{SQLite}, qui est un gestionnaire très léger
  708. générant un simple fichier pour stocker la base, et qui est extrêmement simple à mettre en place, puisqu'il est
  709. automatique par défaut avec \emph{SQLalchemy}, et qu'il n'y a absoluement aucune application serveur à faire tourner pour
  710. l'utiliser.
  711. \par
  712. J'ai pu définir mes objets, de manière simple, avec juste une classe \textbf{Module}, une classe \textbf{Environment},
  713. et une classe \textbf{Host}\footnote{Voir en annexe \ref{python_class}, page \pageref{python_class}}. Je les ai mis dans une relation
  714. arborescente les uns avec les autres, et j'avais là ma logique: il suffisait de faire une requête récupérant l'ensemble
  715. des informations, des les trier et de les ranger, et à partir de là, on pouvait faire la plupart des requêtes sans même
  716. avoir à passer par \emph{Nagios}. Il suffisait simplement de mettre une fois la base de données à jour, avec
  717. \emph{Livestatus}, puis on pouvait requêter autant de fois que l'on voulait, et très rapidement, les données en local.
  718. \subsubsection{Générer un affichage correct}
  719. \par
  720. L'autre problème subsistait, celui de l'affichage. En effet, un affichage console n'est pas adapté à afficher des
  721. arbres. J'ai déjà essayé, et l'on obtient jamais quelque chose de satisfaisant sans passer par des bibliothèques comme
  722. \emph{(N)Curses}. De plus, cela ne permet pas de partager l'application avec d'autres utilisateur: c'est 100\% local.
  723. \par
  724. J'ai donc commencé à développer une simple page \emph{HTML} afin de pouvoir partager cette page avec notamment Mohamed, mon
  725. voisin de bureau, qui s'occupait de l'équipe monitoring, et qui pouvait avoir besoin de visualiser les mêmes
  726. informations que moi. L'avantage du \emph{HTML} est qu'il est très simple, et permet, grâce à \emph{CSS}, de générer très rapidement
  727. des interface jolies, et même dynamiques si on y inclut un peu de \emph{Javascript}.
  728. \par
  729. Je ne connaissais à l'époque que \emph{PHP} pour générer des pages \emph{HTML}, mais j'avais déjà entendu parlé de beaucoup d'autres
  730. technologie répondant à cette demande, dont \emph{Flask}, qui est un module pour \emph{Python} permettant de faire très simplement des
  731. petits sites dynamiques.
  732. \par
  733. Cela fonctionne en deux partie: un morceau s'occuper de réceptionner les requêtes \emph{HTTP} et les traite, avant demander
  734. ensuite à la deuxième partie de générer l'affichage. \emph{Flask} utilise pour cela \emph{Jinja2}, qui est un moteur de template très
  735. populaire en ce moment dans le monde de \emph{Python}, et qui permet d'écrire des fichiers contenant une grande partie de \emph{HTML},
  736. mais dans lequel on peut inclure des balises contenant du code très proche de \emph{Python}, à quelques contraintes près, et
  737. permettant de faire par exemple des boucles, ou des structures conditionnel, et l'on peut donc générer du \emph{HTML} de
  738. manière dynamique, en fonction des données que l'on a à afficher.
  739. \subsubsection{Améliorer \textbf{Sappin}}
  740. \par
  741. J'avais donc, pendant la première moitié de Décembre, une application fonctionnelle, que j'ai donc présenté à quelques
  742. personnes, dont Murielle et Mohamed. À partir de là, ils ont commencé à me faire des retours utilisateurs, et j'ai donc
  743. eu à ajouter de nouvelles fonctionnalités à \textbf{Sappin}.
  744. \par
  745. Fin Décembre, Murielle m'a dit qu'elle aimerait bien voir \textbf{Sappin} hébergé ailleurs que sur mon laptop, c'est à dire qu'il
  746. fallait que je le déploie sur un serveur. De plus, cela signifiait que \textbf{Sappin} serait encore utilisé après la fin de mon
  747. stage. Il fallait donc que je fasse en sorte qu'il soit le plus maintenable possible.
  748. \par
  749. En effet, lorsque je l'ai développé au début, je l'ai construit comme un script, que j'ai patché encore et encore, et
  750. qui ressemblait à la fin plus à un patchwork de morceaux de code qu'à un vrai programme. J'ai donc dès début Janvier
  751. pris en main une réorganisation complète du code afin d'inclure un fichier de configuration simple et documenté, et
  752. aussi pour améliorer la robustesse du code en cas d'incohérence dans la base de donnée.
  753. \par
  754. Mi-Janvier, j'avais là une application prête à la mise en production, et documentée, avec un README, c'est à dire une
  755. documentation, tant pour les utilisateurs que pour les administrateurs. J'ai donc demandé un serveur, et j'ai alors pu
  756. mettre \textbf{Sappin} en production, avec toutes les fonctionnalités suivante:
  757. \begin{itemize}
  758. \item Liste et vue en arbre de tous les modules, environnements, et machines de l'application
  759. \item Vue détaillée de chaque entité
  760. \item Graphiques simples montrant rapidement la répartition des machines par datacenter
  761. \item Possibilité d'ajouter des informations supplémentaires pour chaque entité, comme des liens, ou même des
  762. fichiers
  763. \item Un mode d'administration sécurisant l'accès en écriture aux informations supplémentaires des entités
  764. \item Vue d'administration listant les entités dont les informations ne sont pas complètes, et permettant un
  765. import/export de la base au format JSON
  766. \item Un seul fichier de configuration simple et commenté permettant de gérer facilement le programme sur le serveur
  767. \end{itemize}
  768. \subsection{La mise en production}
  769. \par
  770. La machine qui m'a été fournie tournait sous \emph{Windows 7}. Ce n'est pas le système le plus adapté pour un serveur, mais
  771. cela a tout de même faire l'affaire. J'ai donc installé les dépendances du projet, à savoir principalement \emph{Git} et
  772. Python3.
  773. \par
  774. Ce n'était pas des plus facile, car ces logiciels sont très adaptés à des environnement Unix/Linux, mais moins à du
  775. Windows. De plus, le proxy présent sur le réseau a encore un peu compliqué la tâche, mais j'ai tout de même réussi à
  776. mettre l'environnement en place, et à installer \textbf{Sappin}.
  777. \par
  778. Il ne restait alors qu'à sécuriser le mode d'administration, c'est à dire mettre un mot de passe sur une URL bien
  779. précise. Pour cela, j'ai installé le bien connu serveur \emph{Apache}, afin de le configurer en reverse-proxy, et de mettre une
  780. authentification \emph{HTTP} sur la fameuse URL.
  781. \par
  782. Enfin, pour être sûr que tout continue à fonctionner, j'ai installé ces deux programmes, \textbf{Sappin} et \emph{Apache}, en mode
  783. service, afin qu'ils soient démarrés automatiquement au lancement de la machine.
  784. \subsection{Quelques formations avant de partir}
  785. \par
  786. Pendant les quelques semaines qui restaient, en plus de la rédaction de ce rapport, on m'a demandé de dispenser quelques
  787. formations sur \textbf{Sappin}.
  788. \par
  789. J'ai donc pu présenter le programme tout d'abord à Murielle et aux autres managers. Ils se serviront de \textbf{Sappin} pour
  790. consulter rapidement l'architecture de \textbf{SAP} afin de prendre des décisions quant aux projets gravitant autour, comme \textbf{FCS
  791. BC} par exemple.
  792. \par
  793. Je l'ai également présenté à l'équipe applicative \textbf{SAP}, qui sont les premiers utilisateurs, puisque c'est eux qui
  794. remplissent les champs supplémentaires de chaque entité, et qui maintiennent toutes les machines. Cela leur permettra de
  795. consulter les environnements qu'ils ne connaissaient pas. En effet, ils ont tous la responsabilité d'un certain nombre
  796. de machines, mais aucun n'a connaissance de l'architecture des plus de 80 environnements, et ils auront donc une vue
  797. d'ensemble avec \textbf{Sappin}.
  798. \par
  799. Enfin, j'ai eu à animer une vidéoconférence avec l'équipe de "pilotes", située au Mexique. C'est eux qui fournissent les
  800. équipes disponiblent 24H/24 pour maintenir l'infrastructure en cas de problème courant, et pourront donc également
  801. visualiser les environnements avec des liens rapides vers les procédures qu'ils peuvent avoir à suivre.
  802. \chapter*{Conclusion}
  803. \addcontentsline{toc}{chapter}{Conclusion}
  804. \par
  805. Pour terminer ce rapport, je dirais que je suis avant tout très content de mon stage. Il m'a permis d'apprendre beaucoup
  806. de choses, sur beaucoup de points très différents les uns des autres, et j'ai pu découvrir le fonctionnement d'une
  807. grande entreprise sur bon nombre de ses aspects.
  808. \par
  809. En effet, j'ai pu voir que résoudre un problème simple en apparence peut vite se complexifier quand les équipes sont
  810. réparties autour de la planète. On doit parfois attendre le lendemain pour avoir une réponse dans sa boîte mail. Une
  811. simple demande de service peut avoir à inclure plus de quatre personnes pour réunir l'ensemble des informations. Toutes
  812. ces choses pratiques me sont désormais évidentes, mais je ne les avais pourtant jamais imaginées avant de commencer mon
  813. travail chez \textbf{Faurecia}.
  814. \par
  815. Finalement, j'ai eu la satisfaction d'avoir une grande liberté quant aux technologies que j'ai pu employer. C'est quelque
  816. chose que je n'aurais pas cru possible de la part d'une grande société ou tout me semblait très standardisé et codifié,
  817. de pouvoir travailler avec un environnement Linux dès le début, et de pouvoir développer une application en utilisant
  818. uniquement des outils libres et open-source. Je remercie d'ailleurs grandement \textbf{Faurecia} pour cela, et en garderai
  819. toujours un très bon souvenir.
  820. \chapter*{Bibliographie}
  821. \addcontentsline{toc}{chapter}{Bibliographie}
  822. \begin{itemize}
  823. \item Documentation de \emph{Livestatus}, le plugin de requêtes pour \emph{Nagios}
  824. \par \url{http://mathias-kettner.de/checkmk_livestatus.html}
  825. \item Documentation du language \emph{Python 3}
  826. \par \url{https://docs.python.org/3/}
  827. \item Documentation de la bibliothèque \emph{SQLalchemy}
  828. \par \url{http://docs.sqlalchemy.org/en/rel_1_0/}
  829. \item Documentation de la bibliothèque \emph{Flask}
  830. \par \url{http://flask.pocoo.org/}
  831. \item Documentation du moteur de template \emph{Jinja2}
  832. \par \url{http://jinja.pocoo.org/}
  833. \item Documentation du serveur Web \emph{Apache} pour \emph{Windows}
  834. \par \url{https://httpd.apache.org/docs/2.4/fr/platform/windows.html}
  835. \item \emph{Git} pour \emph{Windows}
  836. \par \url{http://git-scm.com/download/win}
  837. \item \emph{Python 3.5} pour \emph{Windows}
  838. \par \url{https://www.python.org/downloads/release/python-351/}
  839. \end{itemize}
  840. \appendix
  841. \addtolength{\textheight}{60mm}
  842. \part*{Annexes}
  843. \addtolength{\topmargin}{-50mm}
  844. \definecolor{gray75}{gray}{0.75}
  845. \newcommand{\hsp}{\hspace{20pt}}
  846. \titleformat{\chapter}[block]{\Huge\bfseries}{\thechapter\hsp\textcolor{gray75}{|}\hsp}{0pt}{\Huge\bfseries}[\vskip -2em]
  847. \chapter{Interface de Nagios}
  848. \label{nagios_web_ui}
  849. \begin{figure}[H]
  850. \centering
  851. \includegraphics[width=0.8\textheight,angle=90]{nagios.png}
  852. \caption{Interface Web de Nagios}
  853. \end{figure}
  854. \chapter{Interface de Sappin}
  855. \label{sappin_web_ui}
  856. \begin{figure}[H]
  857. \centering
  858. \includegraphics[width=0.8\textheight,angle=90]{sappin.png}
  859. \caption{Interface Web de Sappin}
  860. \end{figure}
  861. \chapter{Classe python}
  862. \label{python_class}
  863. \begin{figure}[H]
  864. \begin{lstlisting}[language=python,morekeywords={True,False}]
  865. host_to_host = Table("host_to_host", Base.metadata,
  866. Column("cluster_id", Integer, ForeignKey("host.host_id"), primary_key=True),
  867. Column("node_id", Integer, ForeignKey("host.host_id"), primary_key=True)
  868. )
  869. class Host(Base):
  870. __tablename__ = 'host'
  871. host_id = Column(Integer, primary_key=True, nullable=False)
  872. groups = Column(String(30), ForeignKey("env.name"))
  873. name = Column(String(30), unique=True, nullable=False,
  874. default="UNKNOWN HOST")
  875. address = Column(String(30), nullable=False, default="0.0.0.0")
  876. alias = Column(String(30), nullable=True, default="")
  877. state = Column(String(10), nullable=False, default=0)
  878. num_services = Column(Integer, nullable=False, default=0)
  879. num_services_crit = Column(Integer, nullable=False, default=0)
  880. num_services_unknown = Column(Integer, nullable=False, default=0)
  881. num_services_warn = Column(Integer, nullable=False, default=0)
  882. scheduled_downtime_depth = Column(Integer, nullable=False, default=0)
  883. _json_extra = Column(Text, nullable=True)
  884. _last_time = Column(DateTime, server_default=func.now(),
  885. onupdate=func.current_timestamp())
  886. _location = Column(String(4), nullable=True)
  887. _nodes = relationship("Host",
  888. backref="_clusters",
  889. secondary=host_to_host,
  890. primaryjoin=host_id==host_to_host.c.cluster_id,
  891. secondaryjoin=host_id==host_to_host.c.node_id,
  892. )
  893. \end{lstlisting}
  894. \caption{Classe python}
  895. \end{figure}
  896. \par
  897. On voit bien que l'on définit les attributs de la classe à la manière des colonnes d'une table dans une base de
  898. donnée.
  899. \par
  900. On met aussi ici en place une relation \emph{Many To Many} entre les Hosts à l'aide de la table de jointure définie
  901. juste avant: \emph{host\_to\_host}.
  902. \includepdf[pages={2}]{Couvertures.pdf}
  903. \end{document}
  904. %s/ \(SQLalchemy\|SQLite\)/ \\emph{\1}/