Gestion centralisée des informations : Différence entre versions
(→Création des tables de liens) |
(→La BD) |
||
(58 révisions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
− | L’objectif pour centraliser les données est de convenir avec l’utilisation d’une base de données suffisamment performante pour répondre aux besoins futurs. Selon la topologie du réseau et la structure des appareils, les données peuvent être à la fois mise en cache sur les appareils et par la suite, | + | L’objectif pour centraliser les données est de convenir avec l’utilisation d’une base de données suffisamment performante pour répondre aux besoins futurs. Selon la topologie du réseau et la structure des appareils, les données peuvent être à la fois mise en cache sur les appareils et par la suite, être traitées localement, puis transférées; ou simplement transférer le lot des données brutes, afin qu'elles soient traitées par la suite.<br> |
− | :Le concept d'une CMDB | + | Les principes sont simples: |
− | '' | + | # Connaître les outils existants de l’entreprise |
+ | # Connaître les différents référentiels établis par l’entreprise | ||
+ | # Connaître les niveaux de services, idéalement des applications affaires et des logiciels | ||
+ | # Discuter avec les responsables des outils existants | ||
+ | ## Définir les API permettant la relation entre l’outil centralisé et les autres outils | ||
+ | ## Définir les champs nécessaires et les relations d’information | ||
+ | # S’assurer d’avoir une liste complète des rôles et responsabilités avec le processus de changement | ||
+ | |||
+ | :'''''Le concept d'une CMDB''''' | ||
*Le choix s'impose davantage sur la conservation locale, si la cache est chiffrée et invisible à l'utilisateur. | *Le choix s'impose davantage sur la conservation locale, si la cache est chiffrée et invisible à l'utilisateur. | ||
− | **Les données sensibles | + | **Les données sensibles sont traitées en priorité |
**Le traitement locale diminue la charge de travail du serveur et devient un bon compromis entre la relation client et serveur | **Le traitement locale diminue la charge de travail du serveur et devient un bon compromis entre la relation client et serveur | ||
− | **Les données brutes demeurent | + | **Les données brutes demeurent consultables au besoin du serveur, il les rapatrie lorsque nécessaire |
== Les Pré-requis == | == Les Pré-requis == | ||
*Infrastructure de serveurs assurant la redondance et la haute disponibilité | *Infrastructure de serveurs assurant la redondance et la haute disponibilité | ||
− | *Base de données: PostgreSQL --> | + | *Base de données: PostgreSQL --> Libre et Puissant, autres si les api sont présents (SQLIte ou MySQL, MariaDB) |
− | *Structure Web: NGINX, | + | *Structure Web: NGINX, Apache2, NodeJS, IIS |
− | *Connaissance des langages Scripts orientés aux OS: Shell (BSH/KSH), DOS, VBScript, PowerShell | + | *Connaissance des langages Scripts orientés aux OS: Shell (BSH/KSH), DOS, VBScript, PowerShell, JavaScript & SQL |
+ | |||
== Le prototype == | == Le prototype == | ||
− | Dans le cadre | + | Dans le cadre de projets nouveaux qui requiert une actualisation continue des données, tel que Windows 10, l'absence d'une CMDB, un cycle de mise à jour en continue, impose la mise en place d'un outil centralisé pour recueillir les informations des postes de travail, l'état, les logiciels, les applications Maisons/Missions, les intervenants et responsables. La solution la plus adaptée consiste à centraliser ces informations au sein d'une base de données, afin qu'elle soit traitée par la suite, par des requêtes adaptées aux besoins selon un mécanisme d’actualisation automatisé. |
[[Fichier:OW_ArchiComposants.png|300px|thumb|right|Schéma descriptif de l'outil de gestion de la continuité du Windows As A Service (WaaS)]] | [[Fichier:OW_ArchiComposants.png|300px|thumb|right|Schéma descriptif de l'outil de gestion de la continuité du Windows As A Service (WaaS)]] | ||
=== L'environnement === | === L'environnement === | ||
− | Les produits Microsoft sont majoritaires au sein du gouvernement québécois, ainsi il est préconisé d'utiliser les outils offerts par le fournisseur, lorsqu'ils sont accessibles. Dans le cadre de l'environnement présent, les accès sont très limités. Les points bloquant sont: | + | [''Contexte actuel'']Les produits Microsoft sont majoritaires au sein du gouvernement québécois, ainsi il est préconisé d'utiliser les outils offerts par le fournisseur, lorsqu'ils sont accessibles. Dans le cadre de l'environnement présent par exemple, les accès sont très limités. Les points bloquant sont: |
#Les utilisateurs ne peuvent installer de logiciels. | #Les utilisateurs ne peuvent installer de logiciels. | ||
#Les utilisateurs ne peuvent ainsi créer de services ou ouverture de ports | #Les utilisateurs ne peuvent ainsi créer de services ou ouverture de ports | ||
Ligne 22 : | Ligne 31 : | ||
#Les produits Microsoft ne sont pas toujours adaptés pour répondre au besoin | #Les produits Microsoft ne sont pas toujours adaptés pour répondre au besoin | ||
##Ils peuvent être moins performant dans certaines situations | ##Ils peuvent être moins performant dans certaines situations | ||
+ | #Le navigateur natif au système d'exploitation (SE) n'est pas forcément le meilleur, et pourtant, c'est le coeur de l'internet | ||
+ | ##Encourager les produits natifs et populaires dont la confiance et l'efficacité ne sont plus à refaire, par exemple un navigateur Chrome de Google | ||
+ | ##Voir l'infonuagique sous les services de Google Cloud et d'Amazon | ||
==== La BD ==== | ==== La BD ==== | ||
− | Mon choix s'est orienté vers des applications portables et légères: [https://github.com/garethflowers/postgresql-portable/releases/tag/v10.3.3 PostgreSQL] sur Windows 10<br> | + | ===== Autonome ===== |
+ | SQLite est la singularité par excellence, un exec un fichier de config. | ||
+ | ===== En Entreprise =====Mon choix s'est orienté vers des applications portables et légères: [https://github.com/garethflowers/postgresql-portable/releases/tag/v10.3.3 PostgreSQL] sur Windows 10<br> | ||
'''''Attention''''':''Choisir la version de la BD en fonction des outils qui la supporte. Exemple prendre une version 9.6 ou +, au lieu de la 10, car phpPgAdmin ne supporte que 9.6'' | '''''Attention''''':''Choisir la version de la BD en fonction des outils qui la supporte. Exemple prendre une version 9.6 ou +, au lieu de la 10, car phpPgAdmin ne supporte que 9.6'' | ||
− | #Extraire le fichier dans C:\ | + | #Extraire le fichier dans C:\WORK\PostgreSQL |
#Télécharger les drivers ODBC 32bit et 64bit de PostgreSQL adaptés à la version BD téléchargée, accéder au [https://www.postgresql.org/ftp/odbc/versions/msi/ source de PostgreSQL] | #Télécharger les drivers ODBC 32bit et 64bit de PostgreSQL adaptés à la version BD téléchargée, accéder au [https://www.postgresql.org/ftp/odbc/versions/msi/ source de PostgreSQL] | ||
#Installer ces Drivers ODBC '''!Attention, des droits Admins sont nécessaires!''' | #Installer ces Drivers ODBC '''!Attention, des droits Admins sont nécessaires!''' | ||
Ligne 73 : | Ligne 87 : | ||
Dans la même lancée que la base de donnée portable, mon choix s'est arrêté sur WNMP - la solution portable de Windows/Nginx/MySQL/PHP serveur. Nginx comme une plateforme Web nouvelle, solide et prometteuse. PHP comme langage simple , commun et connu par le grand publique.''La portion MySQL est inutile ici puisqu'on utilise PostgreSQL.'' | Dans la même lancée que la base de donnée portable, mon choix s'est arrêté sur WNMP - la solution portable de Windows/Nginx/MySQL/PHP serveur. Nginx comme une plateforme Web nouvelle, solide et prometteuse. PHP comme langage simple , commun et connu par le grand publique.''La portion MySQL est inutile ici puisqu'on utilise PostgreSQL.'' | ||
#[https://github.com/Xeoncross/wnmp/archive/master.zip Télécharger WNMP] | #[https://github.com/Xeoncross/wnmp/archive/master.zip Télécharger WNMP] | ||
− | #Décompresser WNMP dans le répertoire C:\ | + | #Décompresser WNMP dans le répertoire C:\WORK\WNMP |
#Maintenant, les composants principaux {Nginx|PHP|Memcache} doivent être télécharger et les fichiers binaires doivent être déposés dans leur répertoire respectif sous WNMP '''!Prendre les dernières versions''' | #Maintenant, les composants principaux {Nginx|PHP|Memcache} doivent être télécharger et les fichiers binaires doivent être déposés dans leur répertoire respectif sous WNMP '''!Prendre les dernières versions''' | ||
− | ##[https://windows.php.net/download/ PHP] prendre la version zip et décompresser les binaires dans le répertoire PHP (C:\ | + | ##[https://windows.php.net/download/ PHP] prendre la version zip et décompresser les binaires dans le répertoire PHP (C:\WORK\WNMP\PHP) |
− | ##[http://s3.amazonaws.com/downloads.northscale.com/memcached-win32-1.4.4-14.zip Memcached-32bit] et décompresser les binaires dans le répertoire memcached (C:\ | + | ##[http://s3.amazonaws.com/downloads.northscale.com/memcached-win32-1.4.4-14.zip Memcached-32bit] et décompresser les binaires dans le répertoire memcached (C:\WORK\WNMP\memcached) |
− | ##[http://nginx.org/en/download.html Nginx] et décompresser les binaires dans le répertoire Nginx (C:\ | + | ##[http://nginx.org/en/download.html Nginx] et décompresser les binaires dans le répertoire Nginx (C:\WORK\WNMP\Nginx) |
#Ajouter l'outil d'administration Web pour PostgreSQL: '''phpPgAdmin''' | #Ajouter l'outil d'administration Web pour PostgreSQL: '''phpPgAdmin''' | ||
− | ##[http://phppgadmin.sourceforge.net/doku.php?id=download phpPgAdmin] et décompresser les binaires dans le répertoire phpPgAdmin sous nginx\html (C:\ | + | ##[http://phppgadmin.sourceforge.net/doku.php?id=download phpPgAdmin] et décompresser les binaires dans le répertoire phpPgAdmin sous nginx\html (C:\WORK\WNMP\nginx\html\phpPgAdmin) |
#Maintenant il faut paramétrer les fichiers configs | #Maintenant il faut paramétrer les fichiers configs | ||
− | ##Nginx: sous le répertoire C:\ | + | ##Nginx: sous le répertoire C:\WORK\WNMP\nginx\conf, éditer le fichier [[nginx.conf]] |
###'''''Ouvrir les ports 80 et 9000 du FireWall Windows sur le poste''''' | ###'''''Ouvrir les ports 80 et 9000 du FireWall Windows sur le poste''''' | ||
− | ##PHP: Éditer le fichier [[php.ini]] sous C:\ | + | ##PHP: Éditer le fichier [[php.ini]] sous C:\WORK\WNMP\PHP\ et s'assurer d'avoir toutes les extensions nécessaires |
− | ##phpPgAdmin: Éditer le fichier config.inc.php sous C:\ | + | ##phpPgAdmin: Éditer le fichier config.inc.php sous C:\WORK\WNMP\nginx\html\phpPgAdmin\conf |
###Les valeurs suivantes doivent être présente: | ###Les valeurs suivantes doivent être présente: | ||
####$conf['servers'][0]['desc'] = 'PostgreSQL'; | ####$conf['servers'][0]['desc'] = 'PostgreSQL'; | ||
####$conf['servers'][0]['host'] = 'localhost'; | ####$conf['servers'][0]['host'] = 'localhost'; | ||
####$conf['servers'][0]['port'] = 5432; | ####$conf['servers'][0]['port'] = 5432; | ||
− | ####$conf['servers'][0]['pg_dump_path'] = 'C:\\ | + | ####$conf['servers'][0]['pg_dump_path'] = 'C:\\WORK\\PostgreSQLPortable\\App\\PgSQL\\bin\\pg_dump.exe'; |
− | ####$conf['servers'][0]['pg_dumpall_path'] = 'C:\\ | + | ####$conf['servers'][0]['pg_dumpall_path'] = 'C:\\WORK\\PostgreSQLPortable\\App\\PgSQL\\bin\\pg_dumpall.exe'; |
####$conf['servers'][0]['sslmode'] = 'allow'; | ####$conf['servers'][0]['sslmode'] = 'allow'; | ||
##Scripts de lancement: Éditer Start_server.bat | ##Scripts de lancement: Éditer Start_server.bat | ||
###Commenter la partie MySQL --> ajouter REM devant les 2 lignes pour obtenir ''REM :: Start MySQL using the mysql\my.ini config file'' | ''REM start mysql\bin\mysqld'' | ###Commenter la partie MySQL --> ajouter REM devant les 2 lignes pour obtenir ''REM :: Start MySQL using the mysql\my.ini config file'' | ''REM start mysql\bin\mysqld'' | ||
− | ###Ajouter Start C:\ | + | ###Ajouter Start C:\WORK\PostgreSQL\PostgreSQLPortable.exe |
###Reformuler le Nginx afin qu'il ressemble à ceci: | ###Reformuler le Nginx afin qu'il ressemble à ceci: | ||
####cd nginx | ####cd nginx | ||
Ligne 104 : | Ligne 118 : | ||
###NOTE: ''Pour l'arrêt de PostgreSQL portable, il faut exécuter manuellement dans la fenêtre de commande Windows. TAPER: '''\q''' | ###NOTE: ''Pour l'arrêt de PostgreSQL portable, il faut exécuter manuellement dans la fenêtre de commande Windows. TAPER: '''\q''' | ||
− | + | == La configuration == | |
Notre infrastructure est prête à recevoir du contenu, c.-à-d. que la coquille est vide pour le moment. | Notre infrastructure est prête à recevoir du contenu, c.-à-d. que la coquille est vide pour le moment. | ||
− | :Avant tout, créer un schéma permettant d'établir un plan d'ensemble des relations entre les différentes tables et fournir une projection des besoins [[Fichier:RelationDB.png|300px|thumb|right|Schéma des relations BD entre différentes tables/données de | + | :Avant tout, créer un schéma permettant d'établir un plan d'ensemble des relations entre les différentes tables et fournir une projection des besoins [[Fichier:RelationDB.png|300px|thumb|right|Schéma des relations BD entre différentes tables/données de l‘entreprise]] |
Nous alimenterons notre BD grâce aux différents scripts suivants qui vont, à la fois, créer la table si elle n'existe pas et injecter les données nécessaires. | Nous alimenterons notre BD grâce aux différents scripts suivants qui vont, à la fois, créer la table si elle n'existe pas et injecter les données nécessaires. | ||
#[[UIDexportSQL.ps1]] : Le script qui alimente la partie utilisateur en scannant l'Active Directory de l'entreprise | #[[UIDexportSQL.ps1]] : Le script qui alimente la partie utilisateur en scannant l'Active Directory de l'entreprise | ||
#[[SCCMexportSQL.ps1]] : Le script qui alimente la partie ordinateur en scannant l'export des données de la plateforme SCCM | #[[SCCMexportSQL.ps1]] : Le script qui alimente la partie ordinateur en scannant l'export des données de la plateforme SCCM | ||
#[[HPSMexportSQL.ps1]] : Le script qui alimente la partie statique de l'inventaire ordinateur en scannant l'export des données de la plateforme HPSM | #[[HPSMexportSQL.ps1]] : Le script qui alimente la partie statique de l'inventaire ordinateur en scannant l'export des données de la plateforme HPSM | ||
− | #[[GrpPrdAPPexportSQL.ps1]] : Le script qui alimente la partie Applicative (maison) des utilisateurs en scannant les groupes d'appartenance de l'Active Directory de l'entreprise | + | #[[GrpPrdAPPexportSQL.ps1]] : Le script qui alimente la partie Applicative (maison) des utilisateurs en scannant les groupes d'appartenance de l'Active Directory de l'entreprise |
− | #[[GrpPrdLOGexportSQL.ps1]] : Le script qui alimente la partie Logiciel des utilisateurs en scannant les groupes d'appartenance de l'Active Directory de l'entreprise | + | #[[GrpPrdLOGexportSQL.ps1]] : Le script qui alimente la partie Logiciel des utilisateurs en scannant les groupes d'appartenance de l'Active Directory de l'entreprise |
* Lancer ces scripts l'un après l'autre avec PowerShell. '''''Assurez-vous d'exécuter les scripts avec les droits d'Admin''''' | * Lancer ces scripts l'un après l'autre avec PowerShell. '''''Assurez-vous d'exécuter les scripts avec les droits d'Admin''''' | ||
* Vérifier les tables dans l'invite de commande de PostreSQL Portable: | * Vérifier les tables dans l'invite de commande de PostreSQL Portable: | ||
Ligne 124 : | Ligne 138 : | ||
public | SCCM | table | invposte | public | SCCM | table | invposte | ||
− | + | === La plateforme phpPgAdmin === | |
La BD est désormais alimentée, maintenant nous allons utiliser phpPgAdmin pour la consulter simplement: | La BD est désormais alimentée, maintenant nous allons utiliser phpPgAdmin pour la consulter simplement: | ||
#Dans un fureteur, taper: http://localhost/phpPgAdmin/ | #Dans un fureteur, taper: http://localhost/phpPgAdmin/ | ||
Ligne 134 : | Ligne 148 : | ||
##La liste des tables ci-dessous devraient s'afficher: | ##La liste des tables ci-dessous devraient s'afficher: | ||
###ADUID , SCCM , HPSM , GrpPrdAPP , GrpPrdLOG | ###ADUID , SCCM , HPSM , GrpPrdAPP , GrpPrdLOG | ||
− | + | ==== Création des tables de liens ==== | |
L'objectif est de simplifier la recherche et accélérer les requêtes. Ainsi la création de clefs primaires sera nécessaire pour accélérer la correspondance entre les différentes tables.<br> | L'objectif est de simplifier la recherche et accélérer les requêtes. Ainsi la création de clefs primaires sera nécessaire pour accélérer la correspondance entre les différentes tables.<br> | ||
Nous allons utiliser le langage natif SQL pour effectuer les requêtes et les commandes. Pour simplifier la vue, nous restons dans l'interface phpPgAdmin. ''Note: nous aurions pu utiliser l'interface PostgreSQL portable pour lancer les commandes. Elles doivent se terminer avec ";"'' | Nous allons utiliser le langage natif SQL pour effectuer les requêtes et les commandes. Pour simplifier la vue, nous restons dans l'interface phpPgAdmin. ''Note: nous aurions pu utiliser l'interface PostgreSQL portable pour lancer les commandes. Elles doivent se terminer avec ";"'' | ||
− | + | *Lancer phpPgAdmin - SQL en sélectionnant SQL à droite de la fenêtre. | |
− | + | **Une nouvelle fenêtre apparaît | |
− | + | *Créer la table ''appcomp'' | |
− | + | **Copier-coller les informations ci-dessous dans la fenêtre SQL | |
CREATE TABLE appcomp | CREATE TABLE appcomp | ||
( | ( | ||
− | + | "GroupeAPP" text, | |
− | + | "W7" numeric(5,0), | |
− | + | b1709 numeric(5,0), | |
− | + | b1803 numeric(5,0) | |
+ | ) | ||
+ | :Cliquer sur '''Lancer''' afin d'exécuter la commande | ||
+ | *Créer la table ''logcomp'' | ||
+ | **Copier-coller les informations ci-dessous dans la fenêtre SQL | ||
+ | CREATE TABLE logcomp | ||
+ | ( | ||
+ | "Logiciel" text, | ||
+ | "W7" numeric(5,0), | ||
+ | b1709 numeric(5,0), | ||
+ | b1803 numeric(5,0) | ||
+ | ) | ||
+ | :Cliquer sur '''Lancer''' afin d'exécuter la commande | ||
+ | *Créer la table ''app_log'' | ||
+ | **Copier-coller les informations ci-dessous dans la fenêtre SQL | ||
+ | CREATE TABLE app_log | ||
+ | ( | ||
+ | appli_logi text, | ||
+ | membres numeric(6,0), | ||
+ | refid text | ||
) | ) | ||
+ | :Cliquer sur '''Lancer''' afin d'exécuter la commande | ||
+ | *Créer les index de cette table: | ||
+ | CREATE INDEX fk1_applog ON app_log (appli_logi) | ||
+ | :Cliquer sur '''Lancer''' afin d'exécuter la commande | ||
+ | *Répéter à nouveau | ||
+ | CREATE INDEX fk2_applog ON app_log (refid) | ||
+ | :Cliquer sur '''Lancer''' afin d'exécuter la commande | ||
+ | *Créer la table ''poste_os'' | ||
+ | **Copier-coller les informations ci-dessous dans la fenêtre SQL | ||
+ | CREATE TABLE poste_os | ||
+ | ( | ||
+ | poste text, | ||
+ | os text, | ||
+ | uid text | ||
+ | ) | ||
+ | :Cliquer sur '''Lancer''' afin d'exécuter la commande | ||
+ | *Créer les index de cette table: | ||
+ | CREATE INDEX fk1_posteos ON poste_os (poste) | ||
+ | :Cliquer sur '''Lancer''' afin d'exécuter la commande | ||
+ | ===== Création des index ou clefs primaires===== | ||
+ | Pour chacun des index suivants, exécuter la commande SQL pour chaque ligne, c.-à-d. qu'il n'est pas possible d'exécuter toutes les lignes en même temps | ||
+ | CREATE INDEX fk1_ad ON "ADUID" ("UtilisateurID") | ||
+ | |||
+ | CREATE INDEX fk1_grplog ON "GrpPrdLOG" ("UID") | ||
+ | |||
+ | CREATE INDEX fk1_grpapp ON "GrpPrdAPP" ("UID") | ||
+ | |||
+ | CREATE INDEX fk1_logcomp ON logcomp ("Logiciel") | ||
+ | |||
+ | CREATE INDEX fk1_sccm ON "SCCM" ("PosteID") | ||
+ | |||
+ | CREATE INDEX fk1_hpsm ON "HPSM" ("PosteID","UtilisateurID") | ||
+ | |||
+ | === Validation des tables === | ||
+ | La liste des tables suivantes doivent être présente: | ||
+ | *ADUID | ||
+ | *SCCM | ||
+ | *HPSM | ||
+ | *GrpPrdAPP | ||
+ | *GrpPrdLOG | ||
+ | *app_log | ||
+ | *appcomp | ||
+ | *logcomp | ||
+ | *poste_os | ||
+ | |||
+ | === Mise à jours des données croisées === | ||
+ | Maintenant que nos scripts de base sont créés, un mécanisme d'exécution sous forme de tâches planifiées doit être mis en place, afin d'exécuter les scripts sur une base régulière. | ||
+ | :Exemple: Il faut convenir à exécuter l'extraction des données SCCM et HPSM à toutes les semaines, voir tous les jours, selon les besoins. | ||
+ | ::Convenir d'un répertoire de dépôt des extractions fichiers (.csv) | ||
+ | ::Convenir du système de tâches planifiées (CRON) avec journalisation lorsqu'il y a erreur d'exécution | ||
+ | ==== Automatisation des Mises à jours ==== | ||
+ | ''Requête de MAJ dans PostgreSQL''<br> | ||
+ | Ces requêtes doivent être exécutées lorsque les données sont mise à jour à travers les scripts de PowerShell. Elles sont exécutées dans le langage SQL. | ||
+ | ''Cette partie doit être évoluée vers des scripts exécuté par un ordonnanceur'' | ||
+ | |||
+ | ====MAJ Table logcomp==== | ||
+ | UPDATE logcomp | ||
+ | SET "b1709" = | ||
+ | (SELECT COUNT("Logiciel") | ||
+ | FROM "SCCM" | ||
+ | WHERE "OS"='W10' AND "Poste" LIKE 'B%' AND "SCCM"."Logiciel" = logcomp."Logiciel" | ||
+ | GROUP BY "Logiciel" | ||
+ | ORDER BY "Logiciel"), | ||
+ | "W7" = | ||
+ | (SELECT COUNT("Logiciel") | ||
+ | FROM "SCCM" | ||
+ | WHERE "OS"='W7' AND "Poste" LIKE 'B%' AND "SCCM"."Logiciel" = logcomp."Logiciel" | ||
+ | GROUP BY "Logiciel" | ||
+ | ORDER BY "Logiciel"); | ||
+ | ====MAJ Table poste_os==== | ||
+ | TRUNCATE TABLE poste_os; | ||
+ | |||
+ | INSERT INTO poste_os | ||
+ | SELECT DISTINCT "SCCM"."Poste" AS poste, | ||
+ | "SCCM"."OS" AS os, | ||
+ | CONCAT('U',"HPSM"."UtilisateurID") AS uid | ||
+ | FROM "SCCM" | ||
+ | JOIN "HPSM" ON "SCCM"."PosteID" = "HPSM"."PosteID" | ||
+ | WHERE "SCCM"."Poste" ~~ 'B%' OR "SCCM"."Poste" ~~ 'P%' | ||
+ | ====MAJ Table app_log==== | ||
+ | TRUNCATE TABLE app_log; | ||
+ | |||
+ | INSERT INTO app_log | ||
+ | SELECT "GroupeAPP" as appli_logi, count(*) OVER (PARTITION BY "GroupeAPP") AS membres, "UID" AS refid | ||
+ | FROM "GrpPrdAPP" | ||
+ | UNION | ||
+ | SELECT "Logiciel", count(*) OVER (PARTITION BY "Logiciel") AS membres, "Poste" as refid | ||
+ | FROM "SCCM" | ||
+ | WHERE "Logiciel" ~~ '!%' | ||
+ | AND ("Poste" ~~ 'B%' OR "Poste" ~~ 'P%') | ||
+ | |||
+ | == Le portail CMDB == | ||
+ | Le but est d'offrir un service dynamique, accessible par un bassin d'utilisateurs considérables, plus de 150 utilisateurs. | ||
+ | *Assurer un service rapide et complet, consolidant l'ensemble des données utilisateurs, ordinateurs, appartenances de groupes, logiciels et applications | ||
+ | *Connaître les niveaux de services applicatives et logiciels | ||
+ | **Les responsables, les pilotes, les développeurs, les techniciens, les analystes, les architectes, les gestionnaires | ||
+ | === Création d'un portail de recherche === | ||
+ | La structure Web permet de publier simplement et rapidement le résultat des recherches effectuées sur la BD PostgreSQL. Nous utilisons le langage PHP pour simplifier la création, puisque plusieurs modèles ont été développés dans ce langage. | ||
+ | *Le fichier [[C:\WORK\WNMP\nginx\html\index.php]] | ||
+ | **Ce fichier '''index.php''' sous C:\WORK\WNMP\nginx\html contient les informations permettant une introduction à la recherche et page d'accueil. | ||
+ | *Le fichier [[C:\WORK\WNMP\nginx\html\uid.php]] | ||
+ | **Ce fichier '''uid.php''' sous C:\WORK\WNMP\nginx\html contient les informations permettant d'exécuter les recherches des utilisateurs avec leurs appartenances tant au niveau applicatifs , logiciels, groupes AD et ordinateurs. | ||
+ | |||
+ | == L'utilisation == | ||
+ | Nous avons désormais les bases pour débuter nos recherches, l'accès principale: | ||
+ | :'''http://localhost/index.php''' | ||
+ | ''Voici l'exemple:'' | ||
+ | [[Fichier:BaseRechercheWaaS.png]]<br> | ||
+ | Par la suite, si l'on veut définir des requêtes, l'utilisation de phpPgAdmin est grandement utile: '''''http://localhost/phpPgAdmin/''''' |
Version actuelle datée du 2 octobre 2019 à 14:23
L’objectif pour centraliser les données est de convenir avec l’utilisation d’une base de données suffisamment performante pour répondre aux besoins futurs. Selon la topologie du réseau et la structure des appareils, les données peuvent être à la fois mise en cache sur les appareils et par la suite, être traitées localement, puis transférées; ou simplement transférer le lot des données brutes, afin qu'elles soient traitées par la suite.
Les principes sont simples:
- Connaître les outils existants de l’entreprise
- Connaître les différents référentiels établis par l’entreprise
- Connaître les niveaux de services, idéalement des applications affaires et des logiciels
- Discuter avec les responsables des outils existants
- Définir les API permettant la relation entre l’outil centralisé et les autres outils
- Définir les champs nécessaires et les relations d’information
- S’assurer d’avoir une liste complète des rôles et responsabilités avec le processus de changement
- Le concept d'une CMDB
- Le choix s'impose davantage sur la conservation locale, si la cache est chiffrée et invisible à l'utilisateur.
- Les données sensibles sont traitées en priorité
- Le traitement locale diminue la charge de travail du serveur et devient un bon compromis entre la relation client et serveur
- Les données brutes demeurent consultables au besoin du serveur, il les rapatrie lorsque nécessaire
Les Pré-requis
- Infrastructure de serveurs assurant la redondance et la haute disponibilité
- Base de données: PostgreSQL --> Libre et Puissant, autres si les api sont présents (SQLIte ou MySQL, MariaDB)
- Structure Web: NGINX, Apache2, NodeJS, IIS
- Connaissance des langages Scripts orientés aux OS: Shell (BSH/KSH), DOS, VBScript, PowerShell, JavaScript & SQL
Le prototype
Dans le cadre de projets nouveaux qui requiert une actualisation continue des données, tel que Windows 10, l'absence d'une CMDB, un cycle de mise à jour en continue, impose la mise en place d'un outil centralisé pour recueillir les informations des postes de travail, l'état, les logiciels, les applications Maisons/Missions, les intervenants et responsables. La solution la plus adaptée consiste à centraliser ces informations au sein d'une base de données, afin qu'elle soit traitée par la suite, par des requêtes adaptées aux besoins selon un mécanisme d’actualisation automatisé.
L'environnement
[Contexte actuel]Les produits Microsoft sont majoritaires au sein du gouvernement québécois, ainsi il est préconisé d'utiliser les outils offerts par le fournisseur, lorsqu'ils sont accessibles. Dans le cadre de l'environnement présent par exemple, les accès sont très limités. Les points bloquant sont:
- Les utilisateurs ne peuvent installer de logiciels.
- Les utilisateurs ne peuvent ainsi créer de services ou ouverture de ports
- Les demandes entre différents services peuvent prendre un temps important voir décourageant
- Facteur de démotivation vis-à-vis l'innovation
- Les produits Microsoft ne sont pas toujours adaptés pour répondre au besoin
- Ils peuvent être moins performant dans certaines situations
- Le navigateur natif au système d'exploitation (SE) n'est pas forcément le meilleur, et pourtant, c'est le coeur de l'internet
- Encourager les produits natifs et populaires dont la confiance et l'efficacité ne sont plus à refaire, par exemple un navigateur Chrome de Google
- Voir l'infonuagique sous les services de Google Cloud et d'Amazon
La BD
Autonome
SQLite est la singularité par excellence, un exec un fichier de config.
===== En Entreprise =====Mon choix s'est orienté vers des applications portables et légères: PostgreSQL sur Windows 10
Attention:Choisir la version de la BD en fonction des outils qui la supporte. Exemple prendre une version 9.6 ou +, au lieu de la 10, car phpPgAdmin ne supporte que 9.6
- Extraire le fichier dans C:\WORK\PostgreSQL
- Télécharger les drivers ODBC 32bit et 64bit de PostgreSQL adaptés à la version BD téléchargée, accéder au source de PostgreSQL
- Installer ces Drivers ODBC !Attention, des droits Admins sont nécessaires!
- Démarrer la BD en exécutant PostgreSQLPortable.exe
- Dans l'invite de commande, créer une table au nom de invposte
- postgres=# CREATE DATABASE invposte;
- Si ok = CREATE DATABASE
- Ensuite créer un utilisateur invposte avec le mot de passe invposte
- postgres=# CREATE USER invposte WITH password 'invposte';
- Si ok = CREATE ROLE
- Affecter les pleins droits du compte invposte sur la BD invposte:
- postgres=# GRANT ALL privileges ON DATABASE invposte TO invposte;
- Si ok = GRANT
- Valider votre installation en listant les BD existante avec \l
- postgres-# \l
Nom | Propriétaire | Encodage | Collationnement | Type caract. | Droits d'accès |
---|---|---|---|---|---|
invposte | postgres | UTF8 | C | C | =Tc/postgres + postgres=CTc/postgres + invposte=CTc/postgres |
postgres | postgres | UTF8 | C | C | |
template0 | postgres | UTF8 | C | C | =c/postgres + postgres=CTc/postgres |
template1 | postgres | UTF8 | C | C | =c/postgres + postgres=CTc/postgres |
Tester la connexion ODBC
- Lancer l'Administrateur de données ODBC (64bit)
- {Win + R} et taper: odbcad32.exe
- Sous l'onglet 'Source de données utilisateur, cliquer Ajouter
- Sélectionner PostgreSQL UNICODE (x64)
- Entrer les informations suivantes:
- Data Source: Test SQL
- Database: invposte
- Server: localhost
- User Name: invposte
- Port: 5432
- Password: invposte
- Cliquer sur Test
- Une fenêtre apparaît et indique Connection Successful
- Cliquer sur Save
La BD est désormais accessible en localhost, si on veut qu'elle soit ouverte pour l'extérieur, s'assurer d'ouvrir le port 5432 du Firewall Windows
Structure Web
Dans la même lancée que la base de donnée portable, mon choix s'est arrêté sur WNMP - la solution portable de Windows/Nginx/MySQL/PHP serveur. Nginx comme une plateforme Web nouvelle, solide et prometteuse. PHP comme langage simple , commun et connu par le grand publique.La portion MySQL est inutile ici puisqu'on utilise PostgreSQL.
- Télécharger WNMP
- Décompresser WNMP dans le répertoire C:\WORK\WNMP
- Maintenant, les composants principaux {Nginx|PHP|Memcache} doivent être télécharger et les fichiers binaires doivent être déposés dans leur répertoire respectif sous WNMP !Prendre les dernières versions
- PHP prendre la version zip et décompresser les binaires dans le répertoire PHP (C:\WORK\WNMP\PHP)
- Memcached-32bit et décompresser les binaires dans le répertoire memcached (C:\WORK\WNMP\memcached)
- Nginx et décompresser les binaires dans le répertoire Nginx (C:\WORK\WNMP\Nginx)
- Ajouter l'outil d'administration Web pour PostgreSQL: phpPgAdmin
- phpPgAdmin et décompresser les binaires dans le répertoire phpPgAdmin sous nginx\html (C:\WORK\WNMP\nginx\html\phpPgAdmin)
- Maintenant il faut paramétrer les fichiers configs
- Nginx: sous le répertoire C:\WORK\WNMP\nginx\conf, éditer le fichier nginx.conf
- Ouvrir les ports 80 et 9000 du FireWall Windows sur le poste
- PHP: Éditer le fichier php.ini sous C:\WORK\WNMP\PHP\ et s'assurer d'avoir toutes les extensions nécessaires
- phpPgAdmin: Éditer le fichier config.inc.php sous C:\WORK\WNMP\nginx\html\phpPgAdmin\conf
- Les valeurs suivantes doivent être présente:
- $conf['servers'][0]['desc'] = 'PostgreSQL';
- $conf['servers'][0]['host'] = 'localhost';
- $conf['servers'][0]['port'] = 5432;
- $conf['servers'][0]['pg_dump_path'] = 'C:\\WORK\\PostgreSQLPortable\\App\\PgSQL\\bin\\pg_dump.exe';
- $conf['servers'][0]['pg_dumpall_path'] = 'C:\\WORK\\PostgreSQLPortable\\App\\PgSQL\\bin\\pg_dumpall.exe';
- $conf['servers'][0]['sslmode'] = 'allow';
- Les valeurs suivantes doivent être présente:
- Scripts de lancement: Éditer Start_server.bat
- Commenter la partie MySQL --> ajouter REM devant les 2 lignes pour obtenir REM :: Start MySQL using the mysql\my.ini config file | REM start mysql\bin\mysqld
- Ajouter Start C:\WORK\PostgreSQL\PostgreSQLPortable.exe
- Reformuler le Nginx afin qu'il ressemble à ceci:
- cd nginx
- start nginx
- cd ..
- Fermer et Sauvegarder
- Script d'arrêt: Éditer Stop_server.bat
- Commenter la partie MySQL en ajoutant REM devant la ligne
- NOTE: Pour l'arrêt de PostgreSQL portable, il faut exécuter manuellement dans la fenêtre de commande Windows. TAPER: \q
- Nginx: sous le répertoire C:\WORK\WNMP\nginx\conf, éditer le fichier nginx.conf
La configuration
Notre infrastructure est prête à recevoir du contenu, c.-à-d. que la coquille est vide pour le moment.
- Avant tout, créer un schéma permettant d'établir un plan d'ensemble des relations entre les différentes tables et fournir une projection des besoins
Nous alimenterons notre BD grâce aux différents scripts suivants qui vont, à la fois, créer la table si elle n'existe pas et injecter les données nécessaires.
- UIDexportSQL.ps1 : Le script qui alimente la partie utilisateur en scannant l'Active Directory de l'entreprise
- SCCMexportSQL.ps1 : Le script qui alimente la partie ordinateur en scannant l'export des données de la plateforme SCCM
- HPSMexportSQL.ps1 : Le script qui alimente la partie statique de l'inventaire ordinateur en scannant l'export des données de la plateforme HPSM
- GrpPrdAPPexportSQL.ps1 : Le script qui alimente la partie Applicative (maison) des utilisateurs en scannant les groupes d'appartenance de l'Active Directory de l'entreprise
- GrpPrdLOGexportSQL.ps1 : Le script qui alimente la partie Logiciel des utilisateurs en scannant les groupes d'appartenance de l'Active Directory de l'entreprise
- Lancer ces scripts l'un après l'autre avec PowerShell. Assurez-vous d'exécuter les scripts avec les droits d'Admin
- Vérifier les tables dans l'invite de commande de PostreSQL Portable:
- Taper: \c invposte
- Taper: \dt
- La liste devrait apparaître comme suit:
Liste des relations Schéma | Nom | Type | Propriétaire --------+-------+-------+-------------- public | ADUID | table | invposte public | SCCM | table | invposte
La plateforme phpPgAdmin
La BD est désormais alimentée, maintenant nous allons utiliser phpPgAdmin pour la consulter simplement:
- Dans un fureteur, taper: http://localhost/phpPgAdmin/
- Sélectionner PostgreSQL à gauche et taper le login
- Utilisateur: invposte
- Mot de passe: invposte
- Sélectionner la BD invposte et agrandir
- Sélectionner 'Tables' sous 'Schémas->public'
- La liste des tables ci-dessous devraient s'afficher:
- ADUID , SCCM , HPSM , GrpPrdAPP , GrpPrdLOG
- La liste des tables ci-dessous devraient s'afficher:
Création des tables de liens
L'objectif est de simplifier la recherche et accélérer les requêtes. Ainsi la création de clefs primaires sera nécessaire pour accélérer la correspondance entre les différentes tables.
Nous allons utiliser le langage natif SQL pour effectuer les requêtes et les commandes. Pour simplifier la vue, nous restons dans l'interface phpPgAdmin. Note: nous aurions pu utiliser l'interface PostgreSQL portable pour lancer les commandes. Elles doivent se terminer avec ";"
- Lancer phpPgAdmin - SQL en sélectionnant SQL à droite de la fenêtre.
- Une nouvelle fenêtre apparaît
- Créer la table appcomp
- Copier-coller les informations ci-dessous dans la fenêtre SQL
CREATE TABLE appcomp ( "GroupeAPP" text, "W7" numeric(5,0), b1709 numeric(5,0), b1803 numeric(5,0) )
- Cliquer sur Lancer afin d'exécuter la commande
- Créer la table logcomp
- Copier-coller les informations ci-dessous dans la fenêtre SQL
CREATE TABLE logcomp ( "Logiciel" text, "W7" numeric(5,0), b1709 numeric(5,0), b1803 numeric(5,0) )
- Cliquer sur Lancer afin d'exécuter la commande
- Créer la table app_log
- Copier-coller les informations ci-dessous dans la fenêtre SQL
CREATE TABLE app_log ( appli_logi text, membres numeric(6,0), refid text )
- Cliquer sur Lancer afin d'exécuter la commande
- Créer les index de cette table:
CREATE INDEX fk1_applog ON app_log (appli_logi)
- Cliquer sur Lancer afin d'exécuter la commande
- Répéter à nouveau
CREATE INDEX fk2_applog ON app_log (refid)
- Cliquer sur Lancer afin d'exécuter la commande
- Créer la table poste_os
- Copier-coller les informations ci-dessous dans la fenêtre SQL
CREATE TABLE poste_os ( poste text, os text, uid text )
- Cliquer sur Lancer afin d'exécuter la commande
- Créer les index de cette table:
CREATE INDEX fk1_posteos ON poste_os (poste)
- Cliquer sur Lancer afin d'exécuter la commande
Création des index ou clefs primaires
Pour chacun des index suivants, exécuter la commande SQL pour chaque ligne, c.-à-d. qu'il n'est pas possible d'exécuter toutes les lignes en même temps
CREATE INDEX fk1_ad ON "ADUID" ("UtilisateurID")
CREATE INDEX fk1_grplog ON "GrpPrdLOG" ("UID")
CREATE INDEX fk1_grpapp ON "GrpPrdAPP" ("UID")
CREATE INDEX fk1_logcomp ON logcomp ("Logiciel")
CREATE INDEX fk1_sccm ON "SCCM" ("PosteID")
CREATE INDEX fk1_hpsm ON "HPSM" ("PosteID","UtilisateurID")
Validation des tables
La liste des tables suivantes doivent être présente:
- ADUID
- SCCM
- HPSM
- GrpPrdAPP
- GrpPrdLOG
- app_log
- appcomp
- logcomp
- poste_os
Mise à jours des données croisées
Maintenant que nos scripts de base sont créés, un mécanisme d'exécution sous forme de tâches planifiées doit être mis en place, afin d'exécuter les scripts sur une base régulière.
- Exemple: Il faut convenir à exécuter l'extraction des données SCCM et HPSM à toutes les semaines, voir tous les jours, selon les besoins.
- Convenir d'un répertoire de dépôt des extractions fichiers (.csv)
- Convenir du système de tâches planifiées (CRON) avec journalisation lorsqu'il y a erreur d'exécution
Automatisation des Mises à jours
Requête de MAJ dans PostgreSQL
Ces requêtes doivent être exécutées lorsque les données sont mise à jour à travers les scripts de PowerShell. Elles sont exécutées dans le langage SQL.
Cette partie doit être évoluée vers des scripts exécuté par un ordonnanceur
MAJ Table logcomp
UPDATE logcomp SET "b1709" = (SELECT COUNT("Logiciel") FROM "SCCM" WHERE "OS"='W10' AND "Poste" LIKE 'B%' AND "SCCM"."Logiciel" = logcomp."Logiciel" GROUP BY "Logiciel" ORDER BY "Logiciel"), "W7" = (SELECT COUNT("Logiciel") FROM "SCCM" WHERE "OS"='W7' AND "Poste" LIKE 'B%' AND "SCCM"."Logiciel" = logcomp."Logiciel" GROUP BY "Logiciel" ORDER BY "Logiciel");
MAJ Table poste_os
TRUNCATE TABLE poste_os;
INSERT INTO poste_os SELECT DISTINCT "SCCM"."Poste" AS poste, "SCCM"."OS" AS os, CONCAT('U',"HPSM"."UtilisateurID") AS uid FROM "SCCM" JOIN "HPSM" ON "SCCM"."PosteID" = "HPSM"."PosteID" WHERE "SCCM"."Poste" ~~ 'B%' OR "SCCM"."Poste" ~~ 'P%'
MAJ Table app_log
TRUNCATE TABLE app_log;
INSERT INTO app_log SELECT "GroupeAPP" as appli_logi, count(*) OVER (PARTITION BY "GroupeAPP") AS membres, "UID" AS refid FROM "GrpPrdAPP" UNION SELECT "Logiciel", count(*) OVER (PARTITION BY "Logiciel") AS membres, "Poste" as refid FROM "SCCM" WHERE "Logiciel" ~~ '!%' AND ("Poste" ~~ 'B%' OR "Poste" ~~ 'P%')
Le portail CMDB
Le but est d'offrir un service dynamique, accessible par un bassin d'utilisateurs considérables, plus de 150 utilisateurs.
- Assurer un service rapide et complet, consolidant l'ensemble des données utilisateurs, ordinateurs, appartenances de groupes, logiciels et applications
- Connaître les niveaux de services applicatives et logiciels
- Les responsables, les pilotes, les développeurs, les techniciens, les analystes, les architectes, les gestionnaires
Création d'un portail de recherche
La structure Web permet de publier simplement et rapidement le résultat des recherches effectuées sur la BD PostgreSQL. Nous utilisons le langage PHP pour simplifier la création, puisque plusieurs modèles ont été développés dans ce langage.
- Le fichier C:\WORK\WNMP\nginx\html\index.php
- Ce fichier index.php sous C:\WORK\WNMP\nginx\html contient les informations permettant une introduction à la recherche et page d'accueil.
- Le fichier C:\WORK\WNMP\nginx\html\uid.php
- Ce fichier uid.php sous C:\WORK\WNMP\nginx\html contient les informations permettant d'exécuter les recherches des utilisateurs avec leurs appartenances tant au niveau applicatifs , logiciels, groupes AD et ordinateurs.
L'utilisation
Nous avons désormais les bases pour débuter nos recherches, l'accès principale:
Voici l'exemple:
Par la suite, si l'on veut définir des requêtes, l'utilisation de phpPgAdmin est grandement utile: http://localhost/phpPgAdmin/