Comment surveiller les métriques système avec la pile TICK sur CentOS 7

introduction

The TICK stack est une collection de produits des développeurs de la base de données chronologiqueInfluxDB. Il est composé des composants suivants:

  • Telegraf collecte des données chronologiques à partir de diverses sources.

  • InfluxDB stocke les données chronologiques.

  • Chronograf visualise et trace les données chronologiques.

  • Kapacitor fournit des alertes et détecte les anomalies dans les données chronologiques.

Vous pouvez utiliser chacun de ces composants séparément, mais si vous les utilisez ensemble, vous disposerez d'un système open source intégré et évolutif pour le traitement des données de séries chronologiques.

Dans ce tutoriel, vous allez configurer et utiliser cette plate-forme en tant que système de contrôle open-source. Vous allez générer un peu d'utilisation du processeur et recevoir une alerte par e-mail lorsque l'utilisation devient trop importante.

Conditions préalables

Avant de commencer, vous aurez besoin des éléments suivants:

  • Un serveur CentOS 7 configuré en suivantthe CentOS 7 initial server setup guide, y compris un utilisateur sudo non root et un pare-feu.

  • Si vous souhaitez sécuriser l'interface utilisateur de Chronograf comme expliqué à l'étape 7, vous aurez besoin d'un compteGitHub faisant partie d'une organisation GitHub. Suivezthis tutorial pour créer une organisation GitHub.

[[step-1 -—- ajoutant-the-tick-stack-repository]] == Étape 1 - Ajout du référentiel TICK Stack

Les composants de la pile TICK ne sont pas disponibles via le gestionnaire de paquets par défaut. Tous les composants de la pile TICK utilisent le même référentiel. Nous allons donc configurer un fichier de configuration du référentiel pour rendre l’installation transparente.

Créez ce nouveau fichier:

sudo vi /etc/yum.repos.d/influxdata.repo

Placez la configuration suivante dans le nouveau fichier:

/etc/yum.repos.d/influxdata.repo

[influxdb]
name = InfluxData Repository - RHEL $releasever
baseurl = https://repos.influxdata.com/rhel/$releasever/$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key

Enregistrez le fichier et quittez l'éditeur. Maintenant nous pouvons installer et configurer InfluxDB

[[step-2 -—- Installing-influxdb-and-configuring-authentication]] == Étape 2 - Installation d'InfluxDB et configuration de l'authentification

InfluxDB est une base de données open source optimisée pour un stockage rapide, à haute disponibilité et pour la récupération de données de séries chronologiques. InfluxDB est idéal pour la surveillance des opérations, les métriques d'application et les analyses en temps réel.

Exécutez la commande suivante pour installer InfluxDB:

sudo yum install influxdb

Au cours du processus d'installation, il vous sera demandé d'importer une clé GPG. Confirmez que vous souhaitez importer cette clé pour que l'installation puisse continuer.

Une fois l'installation terminée, démarrez le service InfluxDB:

sudo systemctl start influxdb

Ensuite, assurez-vous que le service fonctionne correctement:

systemctl status influxdb

Vous verrez l'état suivant, vérifiant que le service est en cours d'exécution:

[secondary_label Output
    ● influxdb.service - InfluxDB is an open-source, distributed, time series database
       Loaded: loaded (/usr/lib/systemd/system/influxdb.service; enabled; vendor preset: disabled)
       Active: active (running) since Tue 2017-02-07 13:19:31 EET; 2min 46s ago
         Docs: https://docs.influxdata.com/influxdb/
     Main PID: 14290 (influxd)

InfluxDB est en cours d'exécution, mais vous souhaiterez activer l'authentification utilisateur pour restreindre l'accès à la base de données. Permet de créer au moins un utilisateur administrateur.

Démarrez la console InfluxDB:

influx

Exécutez la commande suivante pour créer un nouvel utilisateur admin. Nous allons créer un utilisateursammy avec le mot de passesammy_admin, mais vous pouvez utiliser ce que vous voulez.

CREATE USER "sammy" WITH PASSWORD 'sammy_admin' WITH ALL PRIVILEGES

Vérifiez que l'utilisateur est créé:

show users

Vous verrez la sortie suivante, en vérifiant que votre utilisateur a été créé:

Output    user  admin
    ----  -----
    sammy true

Maintenant que l'utilisateur existe, quittez la console InfluxDB:

exit

Ouvrez maintenant le fichier/etc/influxdb/influxdb.conf dans votre éditeur. Ceci est le fichier de configuration pour InfluxDB.

sudo vi /etc/influxdb/influxdb.conf

Localisez la section[http], supprimez le commentaire de l'optionauth-enabled et définissez sa valeur surtrue:

/etc/influxdb/influxdb.conf

...
    [http]
      # Determines whether HTTP endpoint is enabled.
      # enabled = true

      # The bind address used by the HTTP service.
      # bind-address = ":8086"

      # Determines whether HTTP authentication is enabled.
      auth-enabled = true
...

Enregistrez ensuite le fichier, quittez l'éditeur et redémarrez le service InfluxDB:

sudo systemctl restart influxdb

InfluxDB étant maintenant configuré, installons Telegraf, un agent de collecte de métriques.

[[step-3 -—- installation-et-configuration-telegraf]] == Étape 3 - Installation et configuration de Telegraf

Telegraf est un agent open source qui collecte des métriques et des données sur le système sur lequel il s'exécute ou à partir d'autres services. Telegraf écrit ensuite les données dans InfluxDB ou d’autres sorties.

Exécutez la commande suivante pour installer Telegraf:

sudo yum install telegraf

Telegraf utilise des plugins pour entrer et sortir des données. Le plugin de sortie par défaut est pour InfluxDB. Depuis que nous avons activé l'authentification d'utilisateur pour IndexedDB, nous devons modifier le fichier de configuration de Telegraf pour spécifier le nom d'utilisateur et le mot de passe que nous avons configurés. Ouvrez le fichier de configuration Telegraf dans votre éditeur:

sudo vi /etc/telegraf/telegraf.conf

Localisez la section[outputs.influxdb] et indiquez le nom d'utilisateur et le mot de passe:

/etc/telegraf/telegraf.conf

    [[outputs.influxdb]]
      ## The full HTTP or UDP endpoint URL for your InfluxDB instance.
      ## Multiple urls can be specified as part of the same cluster,
      ## this means that only ONE of the urls will be written to each interval.
      # urls = ["udp://localhost:8089"] # UDP endpoint example
      urls = ["http://localhost:8086"] # required
      ## The target database for metrics (telegraf will create it if not exists).
      database = "telegraf" # required

      ...

      ## Write timeout (for the InfluxDB client), formatted as a string.
      ## If not provided, will default to 5s. 0s means no timeout (not recommended).
      timeout = "5s"
      username = "sammy"
      password = "sammy_admin"
      ## Set the user agent for HTTP POSTs (can be useful for log differentiation)
      # user_agent = "telegraf"
      ## Set UDP payload size, defaults to InfluxDB UDP Client default (512 bytes)
      # udp_payload = 512

Enregistrez le fichier, quittez l'éditeur et lancez Telegraf:

sudo systemctl start telegraf

Ensuite, vérifiez si le service fonctionne correctement:

systemctl status telegraf

Vous verrez l'état suivant, indiquant que Telegraf est en cours d'exécution.

Output    ● telegraf.service - The plugin-driven server agent for reporting metrics into InfluxDB
       Loaded: loaded (/usr/lib/systemd/system/telegraf.service; enabled; vendor preset: disabled)
       Active: active (running) since Tue 2017-02-07 13:32:36 EET; 3min 27s ago
         Docs: https://github.com/influxdata/telegraf
     Main PID: 14412 (telegraf)

Telegraf collecte maintenant des données et les écrit dans InfluxDB. Ouvrons la console InfluxDB et voyons quelles mesures Telegraf stocke dans la base de données. Connectez-vous avec le nom d'utilisateur et le mot de passe que vous avez précédemment configurés:

influx -username 'sammy' -password 'sammy_admin'

Une fois connecté, exécutez cette commande pour voir les bases de données disponibles:

show databases

Vous verrez la base de donnéestelegraf répertoriée dans la sortie:

Output    name: databases
    name
    ----
    _internal
    telegraf

[.note] #Note: Si vous ne voyez pas la base de donnéestelegraf, vérifiez les paramètres Telegraf que vous avez configurés pour vous assurer que vous avez spécifié le nom d'utilisateur et le mot de passe appropriés.
#

Voyons ce que Telegraf stocke dans cette base de données. Exécutez la commande suivante pour passer à la base de données Telegraf:

use telegraf

Affichez les différentes mesures collectées par Telegraf en exécutant cette commande:

show measurements

Vous verrez le résultat suivant:

Output    name: measurements
    name
    ----
    cpu
    disk
    diskio
    kernel
    mem
    processes
    swap
    system

Comme vous pouvez le constater, Telegraf a collecté et stocké de nombreuses informations dans cette base de données.

Il existe plus de 60 plugins d’entrée pour Telegraf. Il peut rassembler des mesures à partir de nombreux services et bases de données populaires, notamment:

  • Apache

  • Cassandra

  • Docker

  • Elasticsearch

  • Graylog

  • IPtables

  • MySQL

  • PostgreSQL

  • Redis

  • SNMP

  • et plein d'autres

Vous pouvez afficher les instructions d'utilisation de chaque plugin d'entrée en exécutanttelegraf -usage plugin-name dans une fenêtre de terminal.

Quittez la console InfluxDB:

exit

Maintenant que nous savons que Telegraf enregistre les mesures, configurons Kapacitor pour traiter les données.

[[step-4 -—- Installing-kapacitor]] == Étape 4 - Installation de Kapacitor

Kapacitor est un moteur de traitement de données. Il vous permet de connecter votre propre logique personnalisée pour traiter les alertes avec des seuils dynamiques, faire correspondre les métriques aux modèles ou identifier les anomalies statistiques. Nous utiliserons Kapacitor pour lire les données d’InfluxDB, générer des alertes et les envoyer à une adresse électronique spécifiée.

Exécutez la commande suivante pour installer Kapacitor:

sudo yum install kapacitor

Ouvrez le fichier de configuration Kapacitor dans votre éditeur:

sudo vi /etc/kapacitor/kapacitor.conf

Localisez la section[[influxdb]] et fournissez le nom d'utilisateur et le mot de passe pour vous connecter à la base de données InfluxDB:

/etc/kapacitor/kapacitor.conf

# Multiple InfluxDB configurations can be defined.
# Exactly one must be marked as the default.
# Each one will be given a name and can be referenced in batch queries and InfluxDBOut nodes.
[[influxdb]]
  # Connect to an InfluxDB cluster
  # Kapacitor can subscribe, query and write to this cluster.
  # Using InfluxDB is not required and can be disabled.
  enabled = true
  default = true
  name = "localhost"
  urls = ["http://localhost:8086"]
  username = "sammy"
  password = "sammy_admin"
...

Enregistrez le fichier, quittez l'éditeur et lancez Kapacitor:

sudo systemctl daemon-reload
sudo systemctl start kapacitor

Maintenant vérifions que Kapacitor est en cours d’exécution. Vérifiez la liste des tâches de Kapacitor à l’aide de la commande suivante:

kapacitor list tasks

Si Kapacitor est opérationnel, vous verrez une liste vide de tâches, comme celle-ci:

Output    ID                            Type      Status    Executing Databases and Retention Policies

Maintenant que Kapacitor est installé et configuré, installons le composant d’interface utilisateur de la pile TICK afin d’obtenir des résultats et de configurer certaines alertes.

[[step-5 -—- installation-et-configuration-chronograf]] == Étape 5 - Installation et configuration de Chronograf

Chronograf est une application de création de graphiques et de visualisation qui fournit des outils permettant de visualiser les données de surveillance et de créer des règles d'alerte et d'automatisation. Il inclut la prise en charge des modèles et dispose d'une bibliothèque de tableaux de bord intelligents préconfigurés pour des ensembles de données communs. Nous allons le configurer pour se connecter aux autres composants que nous avons installés.

Téléchargez et installez le dernier package:

wget https://dl.influxdata.com/chronograf/releases/chronograf-1.2.0~beta3.x86_64.rpm
sudo yum localinstall chronograf-1.2.0~beta3.x86_64.rpm

Puis démarrez le service Chronograf:

sudo systemctl start chronograf

[.Remarque]##

Note: Si vous utilisez FirewallD, configurez-le pour autoriser les connexions au port`8888`:

sudo firewall-cmd --zone=public --permanent --add-port=8888/tcp
sudo firewall-cmd --reload

Suivez le tutorielHow To Set Up a Firewall Using FirewallD on CentOS 7 pour en savoir plus sur les règles FirewallD.

Vous pouvez maintenant accéder à l'interface Chronograf en visitanthttp://your_server_ip:8888 dans votre navigateur Web.

Vous verrez une page de bienvenue comme celle de la figure suivante:

The Chronograf welcome screen with fields to connect to a data source

Entrez le nom d'utilisateur et le mot de passe de la base de données InfluxDB et cliquez surConnect New Source pour continuer.

Une fois connecté, vous verrez une liste d’hôtes. Cliquez sur le nom d'hôte de votre serveur pour ouvrir un tableau de bord avec une série de graphiques au niveau du système relatifs à votre hôte, comme indiqué dans l'image suivante:

The dashboard for your server

Connectons maintenant Chronograf à Kapacitor pour configurer une alerte. Survolez le dernier élément dans le menu de navigation de gauche et cliquez surKapacitor pour ouvrir la page de configuration.

Configuring Kapacitor

Utilisez les détails de connexion par défaut; nous n'avons pas configuré de nom d'utilisateur ni de mot de passe pour Kapacitor. Cliquez surConnect Kapacitor. Une fois Kapacitor connecté avec succès, vous verrez la sectionConfigure Alert Endpoints apparaître sous le formulaire.

Kapacitor prend en charge plusieurs points de terminaison d'alerte:

  • HipChat

  • OpsGenie

  • PagerDuty

  • Sensu

  • Mou

  • SMTP

  • Talk

  • Télégramme

  • VictorOps

La méthode de communication la plus simple estSMTP, qui est sélectionnée par défaut. Remplissez le champFrom email avec l'adresse à partir de laquelle les alertes seront envoyées et cliquez surSave. Vous pouvez laisser le reste des détails aux valeurs par défaut.

Une fois la configuration en place, créons des alertes.

[[step-6 -—- configuring-alerts]] == Étape 6 - Configuration des alertes

Mettons en place une alerte simple qui recherche une utilisation élevée du processeur.

Survolez le menu de navigation de gauche, recherchez la sectionALERTING et cliquez surKapacitor Rules. Cliquez ensuite surCreate New Rule.

Dans la première section, sélectionnez la série chronologique en cliquant surtelegraf.autogen. Sélectionnez ensuitesystem dans la liste qui apparaît. Sélectionnez ensuiteload1. Vous verrez immédiatement un graphique correspondant dans la section ci-dessous.

Au-dessus du graphique, localisez le champ qui ditSend Alert where load1 is Greater Than et entrez1.0 pour la valeur.

Collez ensuite le texte suivant dans le champAlert Message pour configurer le texte du message d'alerte:

{{ .ID }} is {{ .Level }} value: {{ index .Fields "value" }}

Vous pouvez passer votre souris sur les entrées de la sectionTemplates pour obtenir une description de chaque champ.

Choisissez ensuite l'optionSmtp dans la liste déroulanteSend this Alert to et saisissez votre adresse e-mail dans le champ associé.

Par défaut, vous recevrez des messages au format JSON, comme suit:

Exemple de message

{
    "Name":"system",
    "TaskName":"chronograf-v1-50c67090-d74d-42ba-a47e-45ba7268619f",
    "Group":"nil",
    "Tags":{
        "host":"centos-tick"
    },
    "ID":"TEST:nil",
    "Fields":{
        "value":1.25
    },
    "Level":"CRITICAL",
    "Time":"2017-03-08T12:09:30Z",
    "Message":"TEST:nil is CRITICAL value: 1.25"
}

Vous pouvez configurer davantage de messages lisibles par l'homme pour les alertes par courrier. Pour ce faire, entrez votre message dans la zone de texte avec l'espace réservéPut email body text here.

Vous pouvez renommer cette règle en cliquant sur son nom dans le coin supérieur gauche de la page et en entrant un nouveau nom.

Enfin, cliquez surSave Rule en haut à droite pour terminer la configuration de cette règle.

Pour tester cette alerte nouvellement créée, créez un pic de CPU en utilisant la commandedd pour lire les données de/dev/zero et les envoyer à/dev/null:

dd if=/dev/zero of=/dev/null

Laissez la commande s'exécuter pendant plusieurs minutes, ce qui devrait suffire à créer une pointe. Vous pouvez arrêter la commande à tout moment en appuyant surCTRL+C.

Au bout d'un moment, vous recevrez un message électronique. De plus, vous pouvez voir toutes vos alertes en cliquant surAlert history dans le menu de navigation de gauche de l'interface utilisateur de Chronograf.

[.note] #Note: une fois que vous avez vérifié que vous pouvez recevoir des alertes, assurez-vous d'arrêter la commandedd que vous avez démarrée avecCTRL+C.
#

Des alertes sont en cours d’exécution, mais tout le monde peut se connecter à Chronograf. Limitons l’accès.

[[step-7 -—- securing-chronograf-with-oauth]] == Étape 7 - Sécurisation de Chronograf avec OAuth

Par défaut, toute personne connaissant l'adresse du serveur exécutant l'application Chronograf peut visualiser toutes les données. C’est acceptable pour l’environnement de test mais pas pour la production. Chronograf prend en charge l'authentification OAuth pour Google, Heroku et GitHub. Nous allons configurer la connexion via un compteGitHub, vous en aurez donc besoin pour continuer.

Tout d'abord, enregistrez une nouvelle application avec GitHub. Connectez-vous à votre compte GitHub et accédez àhttps://github.com/settings/applications/new.

Puis remplissez le formulaire avec les détails suivants:

  1. RemplissezApplication name avecChronograf ou un nom descriptif approprié.

  2. Pour lesHomepage URL, utilisezhttp://your_server_ip:8888.

  3. Remplissez lesAuthorization callback URL avechttp://your_server_ip:8888/oauth/github/callback.

  4. Cliquez surRegister application pour enregistrer les paramètres.

  5. Copiez les valeursClient ID etClient Secret fournies sur l'écran suivant.

Ensuite, éditez le script systemd de Chronograf pour activer l’authentification. Ouvrez le fichier/usr/lib/systemd/system/chronograf.service:

sudo vi /usr/lib/systemd/system/chronograf.service

Recherchez ensuite la section[Service] et modifiez la ligne commençant parExecStart=:

/usr/lib/systemd/system/chronograf.service

[Service]
User=chronograf
Group=chronograf
ExecStart=/usr/bin/chronograf --host 0.0.0.0 --port 8888 -b /var/lib/chronograf/chronograf-v1.db -c /usr/share/chronograf/canned -t 'secret_token' -i 'your_github_client_id' -s 'your_github_client_secret' -o 'your_github_organization'
KillMode=control-group
Restart=on-failure

Lesecret_token est requis par tous les fournisseurs OAuth. Définissez-le sur une chaîne aléatoire. Utilisez votre identifiant client Github, votre secret client Github et votre organisation Github pour les autres valeurs.

[.warning] #Warning: Si vous omettez l'option d'organisation Github de la commande, tout utilisateur Github pourra se connecter à votre instance Chronograf. Créez une organisation Github et ajoutez les utilisateurs appropriés à l'organisation pour restreindre l'accès.
#

Enregistrez le fichier, quittez l'éditeur et redémarrez le service Chronograf:

sudo systemctl daemon-reload
sudo systemctl restart chronograf

Ouvrezhttp://your_server_ip:8888 pour accéder à l'interface Chronograf. Cette fois, un boutonLogin with Github vous sera présenté. Cliquez sur le bouton pour vous connecter et il vous sera demandé d'autoriser l'application à accéder à votre compte Github. Une fois l'accès autorisé, vous serez connecté.

Conclusion

Dans ce didacticiel, vous avez vu comment la pile TICK peut être un outil puissant pour stocker, analyser et visualiser des données de séries chronologiques. Il a de nombreuses fonctionnalités et cas d'utilisation. Par exemple, vous pouvez utiliser Kapacitor pour exécuteranomaly detection oubuild live leaderboard of game scores. Vous pouvez en savoir plus sur la pile TICK en lisant lesofficial documentation.