Logs sind sehr hilfreich bei der Fehlersuche und -behebung auf deinen WordPress-Seiten. Bei Kinsta kannst du auf drei Arten von Logs zugreifen: Fehlerlogs, kinsta-cache-perf (Cache-Leistung) und Zugriffslogs.

Der Zugriff auf die Logs über das MyKinsta-Dashboard ist ganz einfach: Navigiere zu WordPress-Websites, wähle die gewünschte Website aus und klicke auf die Registerkarte Logs, um die Seite Log Viewer zu öffnen.

Mit der Einführung der Kinsta-API kannst du jetzt auch programmatisch auf diese Logs zugreifen. Als Agentur kannst du eigene Schnittstellen für den Zugriff auf die Logs erstellen, während größere Teams Tools wie Slack nutzen können, um einen eigenen Slackbot zu erstellen. Dieser Bot kann über Slash-Befehle mit der API interagieren und so das Abrufen und Verwalten von Protokollen vereinfachen.

Dieser Leitfaden befasst sich mit dem über die API verfügbaren Log-Endpunkt, seinen potenziellen Einsatzmöglichkeiten und dem nahtlosen Zugriff auf diese Logs in einer Slack-Umgebung.

Die Kinsta-API verstehen

Die Kinsta-API ist ein leistungsstarkes Tool, mit dem du programmatisch mit Kinsta-Diensten wie gehosteten WordPress-Websites interagieren kannst. Sie kann dir dabei helfen, verschiedene Aufgaben im Zusammenhang mit der WordPress-Verwaltung zu automatisieren, z. B. das Erstellen von Websites, das Abrufen von Website-Informationen, das Abrufen des Status einer Website, das Durchsuchen und Wiederherstellen von Backups, das Abrufen von Website-Logs und vieles mehr.

Um die Kinsta-API zu nutzen, musst du ein Konto mit mindestens einer WordPress-Website, -Anwendung oder -Datenbank in MyKinsta haben. Außerdem musst du einen API-Schlüssel erstellen, um dich zu authentifizieren und auf dein Konto zuzugreifen.

So generierst du einen API-Schlüssel:

  1. Gehe zu deinem MyKinsta-Dashboard.
  2. Navigiere zur Seite mit den API-Schlüsseln (Dein Name > Unternehmenseinstellungen > API-Schlüssel).
  3. Klicke auf API-Schlüssel generieren.
  4. Wähle ein Ablaufdatum oder lege ein benutzerdefiniertes Startdatum und die Anzahl der Stunden fest, nach denen der Schlüssel abläuft.
  5. Gib dem Schlüssel einen eindeutigen Namen.
  6. Klicke auf Generieren.

Nachdem du einen API-Schlüssel generiert hast, kopiere ihn und bewahre ihn an einem sicheren Ort auf (wir empfehlen die Verwendung eines Passwortmanagers), denn dies ist das einzige Mal, dass er innerhalb von MyKinsta sichtbar ist. Du kannst mehrere API-Schlüssel erstellen, die dann auf der Seite API-Schlüssel aufgelistet werden. Wenn du einen API-Schlüssel widerrufen möchtest, klicke auf die Schaltfläche Widerrufen neben dem Namen und dem Ablaufdatum des Schlüssels.

Zugriff auf Serverprotokolle mit der Kinsta-API

Um mit der Kinsta-API auf die Logs zuzugreifen, musst du die ID der Website-Umgebung, den Typ des Logs, den du abrufen möchtest (z. B. error, access oder kinsta-cache-perf), und die Anzahl der abzurufenden Log-Zeilen angeben.

Wir werden diesen Endpunkt untersuchen und ihn später in einen Slackbot integrieren, damit du die Slash-Befehle von Slack zur Interaktion mit der Kinsta-API nutzen kannst.

Du kannst die Umgebungs-ID deiner Website programmatisch über den Endpunkt get site environment abrufen, der Details über die Umgebung deiner Website, einschließlich ihrer ID, zurückgibt:

{
  "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"
        }
      }
    ]
  }
}

Sobald du die Umgebungs-ID deiner Website kennst, kannst du eine GET Anfrage an /sites/environments/{env_id}/logs?file_name=error&lines=100 senden:

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

Diese gibt einen String mit der angegebenen Anzahl von Log-Zeilen zurück:

{
    "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"
        }
    }
}

Du kannst die Ausgabe dann so formatieren, dass jede Zeile mit dem n Zeilenumbruch getrennt wird. Mit JavaScript kannst du zum Beispiel die Methode split() verwenden:

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);

Implementierung von Slack Slash-Befehlen zum Abrufen von Server-Logs mit der Kinsta-API

In einem kürzlich erschienenen Leitfaden wurde erklärt, wie man einen Slackbot mit Node.js und der Kinsta-API für die Website-Verwaltung erstellt. Der Leitfaden beschreibt die Erstellung eines Slackbots und die Interaktion mit der Kinsta-API über eine Node.js-Anwendung, die auf unserer Anwendungs-Hosting-Plattform gehostet wird.

Für diese Anleitung erstellen wir einen neuen Slack Slash-Befehl, um die Log-Endpunkte deiner Website abzurufen. Um hier mitzumachen, solltest du zuerst den obigen Leitfaden lesen, um zu verstehen, wie die Node.js-Anwendung funktioniert und wie du deinen persönlichen Slackbot konfigurierst.

Wenn du damit fertig bist, kannst du unser Startprojekt mit Git klonen:

  1. Navigiere zu deinem bevorzugten Verzeichnis für die Speicherung deines Codes und führe den folgenden Befehl in deinem Terminal aus:
    git clone -b tutorial-1 --single-branch https://github.com/olawanlejoel/SlackBot-KinstaAPI.git
  2. Wechsle in den Projektordner und installiere alle erforderlichen Abhängigkeiten:
    cd SlackBot-KinstaAPI
    npm install

Slash-Befehle auf Slack zum Abrufen von Server-Logs erstellen

In der vorherigen Kinsta API Slackbot-Anleitung wurden fünf Slash-Befehle erstellt, um die folgenden Aufgaben zu erledigen:

  • /site_id [site name]: Zum Abrufen der Site-ID.
  • /environment_id [site name]: Zum Abrufen der Umgebungs-ID.
  • /clear_site_cache [environment id]: Zum Löschen des Website-Caches.
  • /restart_php_engine [environment id]: Zum Neustart der PHP-Engine einer Website.
  • /operation_status [operation id]: Überprüft den Status einer Operation.

Für diese Anleitung erstellst du einen neuen Befehl. Um Slash Commands auf Slack zum Abrufen von Server-Logs einzurichten, befolge diese Schritte:

  1. Öffne deine Slack-Anwendung und gehe zum Menü Slash Commands in der linken Seitenleiste.
  2. Klicke auf die Schaltfläche Neuen Befehl erstellen.
  3. Gib die Details wie folgt ein:
    • Befehl: /get_site_logs
    • Kurze Beschreibung: Rufe die Logdateien deiner Website ab, einschließlich error.log, kinsta-cache-perf.log und access.log.
    • Hinweis zur Verwendung: [Environment ID] [File name] [Lines, e.g., 1000]

Wenn du diesen Befehl zusammen mit Parametern wie [Environment ID], [File name] und [Lines] verwendest, können die Nutzer bestimmte Logdateien abfragen und so sicherstellen, dass sie die benötigten Informationen erhalten. Außerdem haben wir den Befehl so konfiguriert, dass er Standardwerte enthält, falls der Nutzer den Namen der Logdatei und die Anzahl der Zeilen nicht eingibt.

Implementierung von Node.js Fetch Requests für Server Logs Operationen

Sobald du den Slash-Befehl erstellt hast, kannst du deine Node.js-Anwendung so anpassen, dass sie auf den Befehl reagiert. Beginne damit, eine asynchrone Funktion zu erstellen, die mit dem Endpunkt interagiert.

In der Datei app.js definierst du eine Funktion getSiteLogs(), die drei Parameter von Slack erhält:

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;
}

Die Funktion kommuniziert mit der Kinsta-API über die Fetch-API von JavaScript. Bei den Parametern handelt es sich um erwartete Eingaben, die von Slack-Befehlen empfangen und dann zur Ausführung an diese Funktionen weitergegeben werden sollen.

Im Code wirst du feststellen, dass die Abfrageparameter einige Standardwerte haben, vorausgesetzt, der Dateiname und die Protokollzeilen werden nicht über Slack hinzugefügt.

Nachdem die Funktion getSiteLogs() eingerichtet ist, geht es im nächsten Schritt darum, die Slack-Befehle zu konfigurieren. Diese Konfiguration umfasst den Empfang von Eingabewerten von Slack, den Aufruf der Funktion und das Senden einer bestimmten Antwort an Slack.

Konfigurieren von Slash-Befehlen mit Node.js zum Abrufen von Server-Logs

Um einen Slash-Befehl zu konfigurieren, verwendest du die Funktion app.command(), die ähnlich wie Event-Listener in JavaScript funktioniert. Du gibst den Befehl an, auf den du hören willst, und erstellst dann eine asynchrone Callback-Funktion, um die gewünschte Aktion zu definieren. Diese Funktion benötigt drei Parameter:

  • command: Enthält die Details des Schrägstrich-Befehls, der vom Benutzer gesendet wurde.
  • ack: Bestätigt den Empfang des Slash-Befehls.
  • say: Sendet eine Nachricht zurück an den Slack-Kanal.

Hier ist die Konfiguration für den Befehl /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}.`);
    }
});

Der obige Code verwendet die Funktion getSiteLogs(), um die Logs anhand der Parameter abzurufen. Wenn die Logs erfolgreich abgerufen werden, formatiert er sie und sendet eine Slack-Nachricht, die die Logs für die angegebene Datei mit der Funktion say() anzeigt. Wenn keine Logs gefunden werden, wird der Benutzer entsprechend benachrichtigt.

Du kannst den Node.js-Servercode auf Kinsta bereitstellen, um deinen Slackbot live zu schalten.

Demo der Interaktion mit dem Server Logs Endpunkt mit dem Slack Slash Befehl und der Kinsta API

Den kompletten Code für dieses Projekt findest du in unserem GitHub-Repository.

Zusammenfassung

In dieser Anleitung hast du gelernt, wie du die Kinsta API Logs Endpunkte effektiv nutzen kannst. Mit diesem Endpunkt kannst du die Serverprotokolle deiner Website nahtlos abrufen, um die Fehlersuche zu beschleunigen.

Die Kinsta-API bietet noch viele weitere Möglichkeiten. Du kannst also gerne weitere Endpunkte erforschen und innovative Wege finden, sie in deinen Projekten zu nutzen.

Wie nutzt du derzeit die Kinsta-API? Gibt es bestimmte Funktionen, die du in Zukunft gerne einführen oder zugänglich machen würdest?

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.