Les journaux sont très utiles pour dépanner et déboguer les problèmes sur vos sites WordPress. Chez Kinsta, vous pouvez accéder à trois types de journaux: les journaux d’erreurs, les journaux kinsta-cache-perf (performance du cache) et les journaux d’accès.

L’accès aux journaux depuis le tableau de bord MyKinsta est simple : naviguez vers Sites WordPress, sélectionnez le site désiré, et cliquez sur l’onglet Journaux pour ouvrir la page de visualisation des journaux.

Maintenant, avec l’introduction de l’API Kinsta, vous pouvez accéder à ces journaux de manière programmatique. En tant qu’agence, vous pouvez créer des interfaces personnalisées pour accéder aux journaux, tandis que les grandes équipes peuvent utiliser des outils tels que Slack pour créer un Slackbot personnalisé. Ce robot peut interagir avec l’API par le biais de commandes Slash, ce qui simplifie la récupération et la gestion des journaux.

Ce guide présente le point de terminaison des journaux disponible via l’API, ses utilisations potentielles et la manière d’accéder de manière transparente à ces journaux dans un environnement Slack.

Comprendre l’API Kinsta

L’API Kinsta est un outil puissant qui vous permet d’interagir avec les services Kinsta tels que les sites WordPress hébergés de manière programmatique. Il peut aider à automatiser diverses tâches liées à la gestion de WordPress, y compris la création de site, la récupération d’informations sur le site, l’obtention du statut d’un site, la navigation et la restauration des sauvegardes, la récupération des journaux du site, et plus encore.

Pour utiliser l’API de Kinsta, vous devez avoir un compte avec au moins un site WordPress, une application ou une base de données dans MyKinsta. Vous devez également générer une clé API pour vous authentifier et accéder à votre compte.

Pour générer une clé API :

  1. Allez sur votre tableau de bord MyKinsta.
  2. Naviguez jusqu’à la page des clés API (Votre nom > Réglages de l’entreprise > Clés API).
  3. Cliquez sur Créer une clé API.
  4. Choisissez une date d’expiration ou définissez une date de début personnalisée et un nombre d’heures pour l’expiration de la clé.
  5. Donnez un nom unique à la clé.
  6. Cliquez sur Générer.

Après avoir créé une clé API, copiez-la et conservez-la en lieu sûr (l’utilisation d’un gestionnaire de mots de passe est recommandée), car c’est la seule fois où elle sera révélée dans MyKinsta. Vous pouvez générer plusieurs clés API, qui seront listées sur la page Clés API. Si vous devez révoquer une clé API, cliquez sur le bouton Révoquer à côté de son nom et de sa date d’expiration.

Accéder aux journaux du serveur avec l’API Kinsta

Pour accéder aux journaux avec l’API de Kinsta, vous devez spécifier l’ID de l’environnement du site, le type de journal que vous souhaitez récupérer (par exemple error, access, ou kinsta-cache-perf), et le nombre de lignes de journal à récupérer.

Nous allons explorer ce point de terminaison et l’intégrer plus tard dans un Slackbot afin que vous puissiez utiliser les commandes Slash de Slack pour interagir avec l’API Kinsta.

Vous pouvez obtenir l’ID de l’environnement de votre site de manière programmatique via le point de terminaison get site environment, qui renvoie des détails sur l’environnement de votre site, y compris son ID :

{
  "site": {
    "environments": [
      {
        "id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
        "name": "first-site",
        "display_name": "First site",
        "is_blocked": false,
        "id_edge_cache": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
        "cdn_cache_id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
        "is_premium": false,
        "domains": [
          {
            "id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
            "name": "example.com",
            "type": "live"
          }
        ],
        "primaryDomain": {
          "id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
          "name": "example.com",
          "type": "live"
        },
        "ssh_connection": {
          "ssh_port": "808080",
          "ssh_ip": {
            "external_ip": "1xx.1xx.1xx.1xx"
          }
        },
        "container_info": {
          "id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
          "php_engine_version": "php8.0"
        }
      }
    ]
  }
}

Une fois que vous avez obtenu l’ID de l’environnement de votre site, vous pouvez envoyer une requête GET à /sites/environments/{env_id}/logs?file_name=error&lines=100:

curl -i -X GET \
  'https://api.kinsta.com/v2/sites/environments/{env_id}/logs?file_name=access&lines=100' \
  -H 'Authorization: Bearer '

Vous obtiendrez une chaîne contenant le nombre spécifié de lignes de journal :

{
    "environment": {
        "container_info": {
            "logs": "mysite.kinsta.cloud ::1 [07/Dec/2023:00:02:01 +0000] HEAD \"/wp-cron.php?server_triggered_cronjob\" HTTP/2.0 200 \"-\" \"curl/7.68.0\" - \"/wp-cron.php\" - - 230 0.017 0.018\nmysite.kinsta.cloud ::1 [07/Dec/2023:00:17:01 +0000] HEAD \"/wp-cron.php?server_triggered_cronjob\" HTTP/2.0 200 \"-\" \"curl/7.68.0\" - \"/wp-cron.php\" - - 230 0.139 0.139\nmysite.kinsta.cloud ::1 [07/Dec/2023:00:32:01 +0000] HEAD \"/wp-cron.php?server_triggered_cronjob\" HTTP/2.0 200 \"-\" \"curl/7.68.0\" - \"/wp-cron.php\" - - 230 0.016 0.016\nmysite.kinsta.cloud ::1 [07/Dec/2023:00:47:01 +0000] HEAD \"/wp-cron.php?server_triggered_cronjob\" HTTP/2.0 200 \"-\" \"curl/7.68.0\" - \"/wp-cron.php\" - - 230 0.015 0.015\n"
        }
    }
}

Vous pouvez ensuite formater la sortie pour séparer chaque ligne avec le saut de ligne n. Par exemple, avec JavaScript, vous pouvez utiliser la méthode split():

const logsData = {
    "environment": {
        "container_info": {
            "logs": "string"
        }
    }
};

const logsString = logsData.environment.container_info.logs;

// Splitting the logs string into an array of log entries based on the newline character '\n'
const logEntries = logsString.split('\n');

console.log(logEntries);

Implémenter des commandes Slack Slash pour récupérer les journaux du serveur avec l’API Kinsta

Dans un guide récent, nous avons expliqué le processus de création d’un Slackbot à l’aide de Node.js et de l’API Kinsta pour la gestion du site. Le guide décrivait la création d’un Slackbot et l’établissement d’une interaction avec l’API Kinsta via une application Node.js hébergée sur notre plateforme d’hébergement d’applications.

Pour ce guide, nous allons créer une nouvelle commande Slack Slash pour obtenir les points de terminaison du journal de votre site. Pour suivre ce guide, lisez d’abord le guide ci-dessus pour comprendre l’application Node.js et comment configurer votre Slackbot personnalisé.

Une fois que vous avez terminé, vous pouvez cloner notre projet de départ avec Git :

  1. Naviguez vers votre répertoire préféré pour stocker votre code et exécutez la commande suivante dans votre terminal :
    git clone -b tutorial-1 --single-branch https://github.com/olawanlejoel/SlackBot-KinstaAPI.git
  2. Déplacez-vous dans le dossier du projet et installez toutes les dépendances nécessaires :
    cd SlackBot-KinstaAPI
    npm install

Créer des commandes Slash sur Slack pour récupérer les journaux du serveur

Dans le précédent guide Kinsta API Slackbot, cinq commandes slash ont été créées pour gérer les éléments suivants :

  • /site_id [site name]: Utilisé pour récupérer l’ID du site.
  • /environment_id [site name]: Utilisée pour récupérer l’ID de l’environnement.
  • /clear_site_cache [environment id]: Permet d’effacer le cache du site.
  • /restart_php_engine [environment id]: Permet de redémarrer le moteur PHP du site.
  • /operation_status [operation id]: Permet de vérifier l’état d’une opération.

Pour ce guide, vous créez une nouvelle commande. Pour configurer les commandes Slash sur Slack afin de récupérer les journaux du serveur, procédez comme suit :

  1. Ouvrez votre application Slack et allez dans le menu Slash Commands sur la colonne latérale de gauche.
  2. Cliquez sur le bouton Créer une nouvelle commande.
  3. Saisissez les détails comme suit :
    • Commande : /get_site_logs
    • Courte description : Récupérer les fichiers journaux de votre site, y compris error.log, kinsta-cache-perf.log, et access.log.
    • Conseil d’utilisation : [Environment ID] [File name] [Lines, e.g., 1000]

En utilisant cette commande avec des paramètres tels que [Environment ID], [File name], et [Lines], les utilisateurs peuvent demander des fichiers journaux spécifiques, en s’assurant qu’ils accèdent aux informations nécessaires. De plus, nous avons configuré la commande pour qu’elle ait des valeurs par défaut au cas où l’utilisateur n’indiquerait pas le nom du fichier journal et le nombre de lignes, ce qui garantit une expérience plus fluide.

Implémenter des requêtes Node.js Fetch pour les opérations de journal du serveur

Une fois que vous avez créé la commande slash, vous pouvez modifier votre application Node.js pour répondre à la commande. Commencez par créer une fonction asynchrone pour interagir avec le point de terminaison.

Dans le fichier app.js, définissez une fonction getSiteLogs() qui reçoit trois paramètres de Slack :

async function getSiteLogs(environmentId, fileName, lines) {
    const query = new URLSearchParams({
        file_name: fileName || 'error',
        lines: lines || 1000,
    }).toString();
    const resp = await fetch(
        `https://api.kinsta.com/v2/sites/environments/${environmentId}/logs?${query}`,
        {
            method: 'GET',
            headers: getHeaders,
        }
    );
    const data = await resp.json();
    return data;
}

La fonction communique avec l’API Kinsta à l’aide de l’API Fetch de JavaScript. Les paramètres sont des entrées attendues, qui sont censées être reçues des commandes Slack, puis transmises à ces fonctions pour exécution.

Dans le code, vous remarquerez que les paramètres de la requête ont des valeurs par défaut, en supposant que le nom du fichier et les lignes de journal ne sont pas ajoutés via Slack.

Une fois la fonction getSiteLogs() en place, l’étape suivante consiste à configurer les commandes Slack. Cette configuration consiste à recevoir des valeurs d’entrée de Slack, à invoquer la fonction et à renvoyer une réponse spécifique à Slack.

Configuration des commandes Slash avec Node.js pour la récupération des journaux du serveur

Pour configurer une commande Slash, vous utilisez la fonction app.command(), qui fonctionne de la même manière que les récepteurs d’évènements en JavaScript. Vous indiquez la commande que vous souhaitez écouter, puis vous créez une fonction de rappel asynchrone pour définir l’action souhaitée. Cette fonction prend trois paramètres :

  • command: Contient les détails de la commande slash envoyée par l’utilisateur.
  • ack: Accuse réception de la commande slash.
  • say: Renvoie un message au canal Slack.

Voici la configuration de la commande /get_site_logs:

app.command('/get_site_logs', async ({ command, ack, say }) => {
    await ack();

    const [environmentId, fileName, lines] = command.text.split(' ');
    let response = await getSiteLogs(environmentId, fileName, lines);

    if (response) {
        const logs = response.environment.container_info.logs.split('\n');
        const formattedLogs = logs.join('\n\n'); // or any other formatting needed
        say(`Hey 👋, \n\nHere are the logs for ${fileName}:\n\n${formattedLogs}`);
    } else {
        say(`Sorry, no logs found for ${fileName}.`);
    }
});

Le code ci-dessus utilise la fonction getSiteLogs() pour récupérer les journaux en fonction des paramètres. Si les journaux sont récupérés avec succès, il les formate et envoie un message Slack affichant les journaux du fichier spécifié à l’aide de la fonction say(). Si aucun journal n’est trouvé, l’utilisateur en est informé.

Vous pouvez déployer le code du serveur Node.js sur Kinsta pour rendre votre Slackbot opérationnel.

Démonstration de l'interaction avec le point de terminaison des journaux du serveur avec la commande Slack Slash et l'API Kinsta.

Vous pouvez accéder au code complet de ce projet sur notre dépôt GitHub.

Résumé

Dans ce guide, vous avez appris à utiliser efficacement les points de terminaison des journaux de l’API Kinsta. Ce point de terminaison vous permet de récupérer les journaux du serveur de votre site de manière transparente pour un dépannage plus rapide.

L’API Kinsta offre de nombreuses possibilités au-delà de cela, vous êtes donc encouragé à explorer d’autres points de terminaison et à réfléchir à des façons innovantes de les exploiter dans vos projets.

Comment exploitez-vous actuellement l’API Kinsta ? Y a-t-il des fonctionnalités spécifiques que vous aimeriez voir introduites ou rendues accessibles à l’avenir ?

Joel Olawanle Kinsta

Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 200 technical articles majorly around JavaScript and it's frameworks.