Inventaire CMDB (EasyVista)

De SOS Paris
Aller à : navigation, rechercher

Le projet consiste à récupérer les informations systèmes des machines Unix pour les injecter dans EasyVista. Concrètement, cela se résume à faire plus de 200 fois quelque chose de très similaire:

  1. exécuter une commande ssh
  2. récupérer le fichier
  3. le déposer sur un partage

Vous retrouverez les définitions de ces traitements dans la partie jobs du module Graphviz.

[Graphviz] Définition des objets JobScheduler

Cartographie

Dans ce contexte, JobScheduler est particulièrement efficace car on va créer une chaîne de trois jobs qui seront déclenchés par un ordre contenant le nom du serveur sur lequel sera exécuté la commande. Pour chaque nouvelle demande, il suffira de créer un nouvel ordre par simple copie de fichier.

En suivant les conseils des bonnes pratiques, on va créer nos objets dans le répertoire /Exploitation/EasyVista car ces traitements sont strictement utilisés par les équipes d'infrastructure.

Jobs

Prenons l'exemple du job SSH sur lequel nous pouvons faire quelques remarques:

  • Le nom du serveur est SCHEDULER_ORDER_ID qui correspond au nom de l'ordre
  • un accès avec un compte de service pour lequel on aura déployé une clé ssh
  • Un sudo qui donnes les droits strictement limité aux commandes d'extractions

ssh.job.xml

<job  order="yes" title="Commande SSH sur le serveur distant" stop_on_error="no">
    <script  language="shell">
         <![CDATA[
echo === SSH ${SCHEDULER_ORDER_ID} =================================================================
ssh -tt  -o "StrictHostKeyChecking no" s-evista@${SCHEDULER_ORDER_ID} "sudo /usr/local/bin/evkernel"
         ]]>
    </script>
    <run_time />
</job>

Le Get et le Put reposent sur l'outil de transferts de fichiers.

get.job.xml

<job  order="yes" title="Envoi du fichier sur le serveur de rapports" stop_on_error="no">
    <script  language="shell">
        <![CDATA[
echo === GET ${SCHEDULER_ORDER_ID} =================================================================		
export HOST=$SCHEDULER_ORDER_ID
export XROOT=/transfers/prod
${XROOT}/tools/yade/bin/arii.sh vaudoise easyvista ezv_get_inventory.prod
]]>
   </script>
   <run_time />
</job>

Chaîne de Jobs

Les trois traitements sont enchainés comme indiqués dans le schéma ci-contre.

Inventaire.job_chain.xml

<job_chain  orders_recoverable="yes" visible="yes" title="Inventaire de la machine" max_orders="3">
    <job_chain_node  job="ssh" next_state="GET" error_state="!SSH" state="SSH"/>
    <job_chain_node  job="get" next_state="PUT" error_state="!GET" state="GET"/>
    <job_chain_node  job="put" next_state="SUCCESS" error_state="!PUT" state="PUT"/>
    <job_chain_node  state="SUCCESS"/>
    <job_chain_node  state="!SSH"/>
    <job_chain_node  state="!GET"/>
    <job_chain_node  state="!PUT"/>
</job_chain>

Déclenchement

Le déclenchement est exécuté par un ordre dont le contenu générique est générique mais dont le nom va nous servir à identifier la machine distante:

Inventaire,HOST.order.xml

<order  title="Lancement hebdomadaire">
    <run_time  schedule="go"/>
</order>

La création d'un nouvel inventaire pour HOST2 se fera par copie de fichier:

copy Inventaire,HOST.order.xml Inventaire,HOST2.order.xml

Planification

On a indiqué une planification à cet ordre pour pouvoir simplement replanifier l'ensemble de l'inventaire à n'importe quel moment.

go.schedule.xml

<schedule  title="heure de départ">
    <weekdays >
        <day  day="1 2 3 4 5">
            <period  single_start="04:00"/>
        </day>
    </weekdays>
</schedule>

[JID] Suivi des traitements

Filtre dédié

Communication des erreurs

Un rapport va permettre de faire un état des erreurs d'inventaire, ce rapport est à destination de l'administrateur système qui pourra effectuer les corrections.

Rapport inventaire.PNG

Ce rapport est le résultat de la requête suivante: erreurs_inventaire.yml

title:          Erreurs d'inventaire
description:    Erreurs sur la récupération d'informations pour l'inventaire de la CMDB.
header:         HOST,END(localtime),STATE,LOG(log)
icon:           job
sql:
    oracle: |
        SELECT  ORDER_ID as "HOST",
                START_TIME,
                END_TIME as END, 
                STATE,
                LOG
        FROM SCHEDULER_ORDER_HISTORY
        WHERE HISTORY_ID IN 
        (
            SELECT MAX(HISTORY_ID) 
            FROM SCHEDULER_ORDER_HISTORY 
            WHERE START_TIME >= SYSDATE - 0.5 AND JOB_CHAIN='Exploitation/EasyVista/Inventaire' AND (STATE like '!%') 
            GROUP BY ORDER_ID
        )
        ORDER BY ORDER_ID

On notera le type de champs 'log' pour le champ LOG qui permet de décompresser et afficher le journal de l'ordre afin de fournir toutes les informations nécessaires à la résolution de l'incident.