Aller au contenu

Cas d'usage du driver API (import-context-graph)

La documentation de référence du programme import-context-graph est accessible par ce lien.

Ce cas d'usage décrit une organisation de services et de composants répartis sur 3 niveaux.

Le schéma ci-après présente ces niveaux :

classDiagram Applications <|-- Composants Composants <|-- Serveurs class Serveurs{ type: component name : codeServeur category: Serveur infos.codeComposant = codeComposant infos.type = type } class Composants{ type: service name: codeComposant category: Composant infos.applications: applications ['app1', 'app2'] pattern(): infos.codeComposant eq code } class Applications{ type: service name: codeApplication category: Application infos.libelle: libelle pattern(): infos.applications has_one_of codeApplication }

Information

Les composants décrits dans cette organisation n'ont pas de lien avec les entités de type composant de Canopsis. Ils représentent ici un ensemble de Serveurs applicatifs.

Les imports sont lancés via une ligne de commande qu'il vous faut adapter à votre configuration.
Voici un exemple pour les serveurs d'applications.

docker run \
-e EXTERNAL_API_USERNAME='[testuser]' \
-e EXTERNAL_API_PASSWORD='[testpassword]' \
-e CPS_MONGO_URL='mongodb://cpsmongo:canopsis@mongodb:27017/canopsis' \
-e CPS_AMQP_URL='amqp://cpsrabbit:canopsis@rabbitmq:5672/canopsis' \
-e CPS_POSTGRES_URL='postgresql://cpspostgres:canopsis@timescaledb:5432/canopsis' \
--network=canopsis-pro_default -it --rm -v \
"${PWD}/import-serveursapplications.yml:/opt/canopsis/share/config/import-context-graph/api.yml" \
docker.canopsis.net/docker/pro/import-context-graph:'23.04.1'

Import des Serveurs d'applications

API

Réponse de l'API
{
  "took": 1724,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 3,
      "relation": "eq"
    },
    "hits": [
      {
    "_id": "Doc-ServeurAPP1",
    "_source": {
      "id": "Doc-ServeurAPP1",
      "desc": "Serveur Application1",
      "type": "WEBSERVICE",
      "env" : "Production",
      "codeComposant" : "Doc-Composant1"
    }
      },
      {
    "_id": "Doc-ServeurAPP2",
    "_source": {
      "id": "Doc-ServeurAPP2",
      "desc": "Serveur Application2",
      "type": "WEBSERVICE",
      "env" : "Production",
      "codeComposant" : "Doc-Composant1"
    }
      },
      {
    "_id": "Doc-ServeurAPP3",
    "_source": {
      "id": "Doc-ServeurAPP3",
      "desc": "Serveur Application3",
      "type": "WEBSERVICE",
      "env" : "Production",
      "codeComposant" : "Doc-Composant2"
    }
      }
    ]
  }
}

Mapping

La configuration suivante de mapping est utilisée :

mapping:
  path: hits.hits
  is_map: false
  component:
    name: 
      type: copy
      value: _id
    description: 
      type: template
      field: _source.desc
      value: '{{uppercase .Field}}'
    category:
      type: set
      value: ServeurApplication
    infos:
      codeComposant:
        value:
          type: template
          field: _source.codeComposant
          value: '{{uppercase .Field}}'
        description: Code composant
      env:
        value:
          type: copy
          value: _source.env
        description: Environnement

Résultats

Une fois l'import exécuté, vous retrouvez les Serveurs d'applications dans l'explorateur de contexte de Canopsis.

SA1

Import des Composants

API

Réponse de l'API
{
  "took": 43,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 3,
      "relation": "eq"
    },
    "hits": [
      {
    "_id": "Doc-Composant1",
    "_source": {
      "codeComposant": "Doc-Composant1",
      "env": "Production",
      "desc" : "Composant 1",
      "applications": [
        "Doc-APP1"
      ]
    }
      },
      {
    "_id": "Doc-Composant2",
    "_source": {
      "codeComposant": "Doc-Composant2",
      "env": "Production",
      "desc" : "Composant 2",
      "applications": [
        "Doc-APP1"
      ]
    }
      },
      {
    "_id": "Doc-Composant3",
    "_source": {
      "codeComposant": "Doc-Composant3",
      "env": "Production",
      "desc" : "Composant 3",
      "applications": [
        "Doc-APP2"
      ]
    }
      }
    ]
  }
}

Mapping

La configuration suivante de mapping est utilisée :

mapping:
  path: hits.hits
  is_map: false
  service:
    name: 
      type: template
      field: _id
      value: '{{uppercase .Field}}'
    description: 
      type: template
      field: _source.desc
      value: '{{uppercase .Field}}'
    category:
      type: set
      value: Composant
    pattern:
      cond: eq
      field: infos.codeComposant
      field_type: string
      value:
        type: template
        field: _source.codeComposant
        value: '{{uppercase .Field}}'
    infos:
      env:
        value:
          type: copy
          value: _source.env
        description: Environnement
      applications:
        value:
          type: copy
          value: _source.applications
        description: Liste des applications

Résultats

Une fois l'import exécuté, vous retrouvez les Composants dans l'explorateur de contexte de Canopsis.

CO1

Import des Applications

API

Réponse de l'API
{
  "took": 23,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 3,
      "relation": "eq"
    },
    "hits": [
      {
    "_id": "Doc-APP1",
    "_source": {
      "codeApplication": "Doc-APP1",
      "env": "Production",
      "desc" : "Application 1"
    }
      },
      {
    "_id": "Doc-APP2",
    "_source": {
      "codeApplication": "Doc-APP2",
      "env": "Production",
      "desc" : "Application 2"
    }
      },
      {
    "_id": "Doc-APP3",
    "_source": {
      "codeApplication": "Doc-APP3",
      "env": "Production",
      "desc" : "Application 3"
    }
      }
    ]
  }
}

Mapping

La configuration suivante de mapping est utilisée :

mapping:
  path: hits.hits
  is_map: false
  service:
    name: 
      type: template
      field: _id
      value: '{{.Field}}'
    description: 
      type: template
      field: _source.desc
      value: '{{uppercase .Field}}'
    category:
      type: set
      value: Application
    pattern:
      cond: has_one_of
      field: infos.applications
      field_type: string_array
      value:
        type: copy
        value: _source.codeApplication
    infos:
      env:
        value:
          type: copy
          value: _source.env
        description: Environnement

Résultats

Une fois l'import exécuté, vous retrouvez les Applications dans l'explorateur de contexte de Canopsis.

APP1

Exploitation de cette organisation

Arbre de dépendances

Vous pouvez visualiser l'arbre de dépendances de l'application Doc-APP1 en vous rendant dans l'explorateur de contexte.

Exploit1

Vous constatez alors que Doc-APP1 dépend de DOC-COMPOSANT1 et DOC-COMPOSANT2 eux mêmes dépendants de Doc-ServeurAPP1, Doc-ServeurAPP2, et Doc-ServeurAPP3.

Vous pour également utiliser le widget Cartographie pour visualiser cet arbre :

Exploit2

Bac à alarmes

Si une alarme est émise sur une dépendance alors vous pourrez observer dans un bac à alarmes les conséquences.

curl -H "Content-Type: application/json" -X POST -u root:root -d '{
   "connector" : "doc-connector",
   "connector_name" : "doc",
   "event_type" : "check",
   "source_type" : "component",
   "component" : "Doc-ServeurAPP1",
   "state" : 2,
   "output" : "Instance KO|cpu=80%"
 }' 'http://localhost:8082/api/v4/event'

Exploit3

L'alarme émise à eu un impact sur le composant Doc-COMPOSANT1 qui lui-même a eu un impact sur l'application Doc-APP1.
L'arbre de dépendance est visible dans la colonne TRACK SOURCE des alarmes de services.

Par ailleurs, la cartographie est elle aussi mise à jour en conséquence

Exploit4


Dernière mise à jour: 2023-03-28
Retour en haut de la page