Notification d’évènement

Un évènement est essentiellement un changement important ou significatif de l’état des ressources virtuelles ou physiques associées à l’environnement cloud.

Journal d’évènements

Il y a deux types d’évènements consignés dans le journal des évènements de CloudStack. Les évènements standard enregistrent le succès ou l’échec d’un évènement et peuvent être utilisés pour identifier les travaux ou les processus qui ont échoué. Il peut aussi y avoir des évènements de travaux longs. Les évènements pour les travaux asynchrones enregistrent lorsque le travail est programmé, lorsqu’il démarre et lorsqu’il est terminé. Les autres travaux long synchrones enregistrent quand le travail démarre et quand il est terminé. Les enregistrements d’évènements long synchrones et asynchrones peuvent être utilisés pour obtenir plus d’informations sur le statut d’un travail en cours ou peuvent être utilisés pour identifier un travail qui est suspendu ou qui n’a pas démarré. Les sections suivantes fournissent plus d’informations sur ces évènements.

Notification

Le framework de notification d’évènement fournit un moyen pour les composants du Serveur de Gestion de publier des évènements ou d’y souscrire. La notification d’évènement est obtenue en implémentant le concept d’abstraction de bus d’évènement dans le Serveur de Gestion.

Un nouvel évènement par changement d’état de ressource est inséré au sein du framework de notification d’évènements. Chaque ressource, comme une VM utilisateur, un volume, une interface réseau, une IP publique, un instantané ou un modèle, est associé avec un état de machine et génère des évènements en tant que partie du changement d’état. Cela implique qu’un changement dans l’état d’une ressource résulte à un évènement de changement d’état et que l’évènement est publié dans l’état de la machine correspondant sur le bus d’évènement. Tous les évènements CloudStack (alertes, évènements d’action, évènements d’utilisation) et la catégorie additionnelle des évènements de changement des états de ressources sont publiés sur le bus d’évènements.

Implémentations

Un bus d’évènement est introduit dans le Serveur de Gestion ce qui autorise les composants CloudStack et ses plug-ins d’extension à souscrire aux évènements en utilisant le client Advanced Message Queuing Protocol (AMQP). Dans CloudStack, une implémentation par défaut du bus d’évènement est fourni comme un plug-in qui utilise le client AMQP RabbitMQ. Le client AMQP pousse les évènements publiés à un serveur AMQP compatible. Par conséquent, tous les évènements CloudStack sont publiés sur un échange du serveur AMQP.

En complément, une implémentation en mémoire et une implémentation Apache Kafka sont toutes deux disponibles.

Cas d’usages

Les exemples suivants sont des cas d’usages :

  • Moteurs de facturation ou d’utilisation. Une solution tiers d’utilisation du cloud peut implémenter un plugin qui peut se connecter à CloudStack pour s’abonner aux évènements CloudStack et généré des données d’utilisation. La donnée d’utilisation est utilisée par leur logiciel d’utilisation.

  • Le plugin AMQP place tous les évènements dans une file de messages, un courtier de messages AMQP peut ensuite fournir une notification basée sur les sujets aux abonnés.

  • Publier et souscrire au service de notifications peut être implémenté comme un service enfichable dans CloudStack qui peut fournir un ensemble riche d’API pour la notification d’évènements, comme une souscription ou une notification par sujets.

Configuration AMQP

En tant qu’administrateur CloudStack, effectuer la configuration suivante une fois pour activer le framework de notification d’évènement. En fonctionnement, aucun changement ne peut contrôler le comportement.

  1. Créer le dossier /etc/cloudstack/management/META-INF/cloudstack/core

  2. Dans ce dossier, ouvrir spring-event-bus-context.xml.

  3. Définir un bean appelé eventNotificationBus comme ceci :

    • name : Spécifier un nom pour le bean.

    • server : Le nom ou l’adresse IP du serveur RabbitMQ AMQP.

    • port : Le port sur lequel le serveur RabbitMQ fonctionne.

    • username : Le nom d’utilisateur associé avec le compte pour accéder au serveur RabbitMQ.

    • password : Le mot de passe associé avec le nom d’utilisateur du compte pour accéder au serveur RabbitMQ.

    • exchange : Le nom d’échange sur le serveur RabbitMQ où les évènements sont publiés.

      Un exemple de bean est donné ci-dessous :

      <beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:context="http://www.springframework.org/schema/context"
      xmlns:aop="http://www.springframework.org/schema/aop"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-3.0.xsd">
         <bean id="eventNotificationBus" class="org.apache.cloudstack.mom.rabbitmq.RabbitMQEventBus">
            <property name="name" value="eventNotificationBus"/>
            <property name="server" value="127.0.0.1"/>
            <property name="port" value="5672"/>
            <property name="username" value="guest"/>
            <property name="password" value="guest"/>
            <property name="exchange" value="cloudstack-events"/>
         </bean>
      </beans>
      

      Le bean eventNotificationBus bean représente la classe org.apache.cloudstack.mom.rabbitmq.RabbitMQEventBus.

      Si vous voulez utiliser une valeur chiffré pour le nom d’utilisateur et le mot de passe, vous devez inclure un bean pour fournir ceux-ci comme variable depuis un fichier d’identification.

      Un exemple est donné ci-dessous

      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:context="http://www.springframework.org/schema/context"
             xmlns:aop="http://www.springframework.org/schema/aop"
             xsi:schemaLocation="http://www.springframework.org/schema/beans
              http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
              http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
              http://www.springframework.org/schema/context
              http://www.springframework.org/schema/context/spring-context-3.0.xsd"
      >
      
         <bean id="eventNotificationBus" class="org.apache.cloudstack.mom.rabbitmq.RabbitMQEventBus">
            <property name="name" value="eventNotificationBus"/>
            <property name="server" value="127.0.0.1"/>
            <property name="port" value="5672"/>
            <property name="username" value="${username}"/>
            <property name="password" value="${password}"/>
            <property name="exchange" value="cloudstack-events"/>
         </bean>
      
         <bean id="environmentVariablesConfiguration" class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
            <property name="algorithm" value="PBEWithMD5AndDES" />
            <property name="passwordEnvName" value="APP_ENCRYPTION_PASSWORD" />
         </bean>
      
         <bean id="configurationEncryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
            <property name="config" ref="environmentVariablesConfiguration" />
         </bean>
      
         <bean id="propertyConfigurer" class="org.jasypt.spring3.properties.EncryptablePropertyPlaceholderConfigurer">
            <constructor-arg ref="configurationEncryptor" />
            <property name="location" value="classpath:/cred.properties" />
         </bean>
      </beans>
      

      Créer un nouveau fichier dans le même dossier appelé cred.properties et spécifier les valeurs pour le nom d’utilisateur et le mot de passe avec des chaînes de caractères javascripts cryptées.

      Par exemple, avec guest comme valeurs pour les deux champs :

      username=nh2XrM7jWHMG4VQK18iiBQ==
      password=nh2XrM7jWHMG4VQK18iiBQ==
      
  4. Redémarrez votre serveur de gestion.

Configuration Kafka

En tant qu’administrateur CloudStack, effectuer la configuration suivante une fois pour activer le framework de notification d’évènement. En fonctionnement, aucun changement ne peut contrôler le comportement.

  1. Créer un fichier de configuration approprié dans /etc/cloudstack/management/kafka.producer.properties qui contient les propriétés de configuration valides comme documenté dans http://kafka.apache.org/documentation.html#newproducerconfigs. Les propriétés peuvent contenir une propriété additionnelle topic qui, si elle n’est pas fournie, sera par défaut cloudstack. Comme key.serializer et value.serializer sont en général requis pour un producteur pour démarrer correctement, ils peuvent être omis et prendront par défaut la valeur org.apache.kafka.common.serialization.StringSerializer.

  2. Créer le dossier /etc/cloudstack/management/META-INF/cloudstack/core

  3. Dans ce dossier, ouvrir spring-event-bus-context.xml.

  4. Définir un bean appelé eventNotificationBus``avec un seul attribut ``name. Un exemple de bean est donné ci-dessous :

    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                               http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                               http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
                               http://www.springframework.org/schema/context
                               http://www.springframework.org/schema/context/spring-context-3.0.xsd">
       <bean id="eventNotificationBus" class="org.apache.cloudstack.mom.kafka.KafkaEventBus">
         <property name="name" value="eventNotificationBus"/>
       </bean>
     </beans>
    
  5. Redémarrez votre serveur de gestion.

Evènements standards :

Le journal d’évènements enregistre trois types d’évènements standards.

  • INFO. Cet évènement est généré lorsque une opération a été effectuée avec succès.

  • WARN. Cet évènement est généré dans les circonstances suivantes.

    • Quand un réseau est déconnecté lors de la surveillance du téléchargement d’un modèle.

    • Quand un téléchargement de modèle est abandonné.

    • Quand un problème sur le serveur de stockage provoque le basculement des volumes sur le serveur de stockage mirroir.

  • ERROR. Cet évènement est généré lorsqu’une opération n’a pas été effectuée avec succès.

Évènements de l’exécution des longs travaux

Le journal d’évènements enregistre trois types d’évènements standards.

  • INFO. Cet évènement est généré lorsque une opération a été effectuée avec succès.

  • WARN. Cet évènement est généré dans les circonstances suivantes.

    • Quand un réseau est déconnecté lors de la surveillance du téléchargement d’un modèle.

    • Quand un téléchargement de modèle est abandonné.

    • Quand un problème sur le serveur de stockage provoque le basculement des volumes sur le serveur de stockage mirroir.

  • ERROR. Cet évènement est généré lorsqu’une opération n’a pas été effectuée avec succès.

Requête sur le journal d’évènements

Les enregistrements de la base de données peuvent être requêtés depuis l’interface utilisateur. La liste des évènements capturés par le système incluent :

  • La création, suppression et les opérations de gestion en cours des machines virtuelles

  • La création, suppression et les opérations de gestion en cours des routeurs virtuels

  • La création et suppression de modèles

  • La création et suppression des règles de réseau/répartition de charge

  • La création et suppression de volume de stockage

  • La connexion et la déconnexion de l’utilisateur

La suppression et l’archivage des évènements et des alertes

CloudStack vous offre la possibilité de supprimé ou d’archiver les alertes et les évènements existant que vous ne voulez plus implémenter. Vous pouvez régulièrement supprimer ou archiver n’importe quelles alertes ou évènements que vous ne pouvez ou ne voulez plus résoudre depuis la base de données.

Vous pouvez supprimer ou archiver des alertes ou des évènements individuels soit en utilisant la vue rapide ou en utilisant la page Détails. Si vous voulez supprimer plusieurs alertes ou évènements en même temps, vous pouvez utiliser le menu contextuel respectif. Vous pouvez supprimer des alertes ou des évènements par catégories pour une période de temps. Par exemple, vous pouvez sélectionner les catégories comme USER.LOGOUT, VM.DESTROY, VM.AG.UPDATE, CONFIGURATION.VALUE.EDI etc. Vous pouvez également voir le nombre d’évènements ou d’alertes archivés ou supprimés.

Pour supporter la suppression ou l’archivage des alertes, les paramètres globaux suivants ont été ajoutés :

  • alert.purge.delay : Les alertes plus vieilles que le nombre de jours spécifié sont purgées. Mettre à 0 pour ne jamais purger les alertes.

  • alert.purge.interval : L’intervalle en secondes à attendre avant de lancer le processus de purge des alertes. Le défaut est de 86400 secondes (un jour).

Note

Les alertes les évènements archivés ne peuvent pas être visualisés dans l’interface ou en utilisant l’API. Ils sont conservés en base de données à des fins d’audits ou de conformités.

Permissions

Considérer ce qui suit :

  • L’administrateur racine peut supprimer ou archiver une ou plusieurs alertes et évènements.

  • L’administrateur de domaine ou l’utilisateur peuvent supprimer ou archiver un ou plusieurs évènements.

Procédure

  1. Se connecter en tant qu’administrateur dans l’interface de CloudStack.

  2. Dans le menu de navigation de gauche, cliquer sur Evènements.

  3. Effectuer au choix :

    • Pour archiver les évènements, cliquer sur Archiver les évènements et spécifier le type d’évènement et la date.

    • Pour archiver les évènements, cliquer sur Détruire les évènements et spécifier le type d’évènement et la date.

  4. Cliquer sur OK.