Logs zijn erg handig voor het oplossen van problemen op je WordPress sites. Bij Kinsta heb je toegang tot drie soorten logs: foutlogs, kinsta-cache-perf (cacheprestaties) logs en toegangslogs.

Toegang tot logs via het MyKinsta dashboard is eenvoudig: navigeer naar WordPress sites, selecteer de gewenste site en klik op de Logs tab om de Log viewer pagina te openen.

Nu, met de introductie van de Kinsta API, kun je programmatisch toegang krijgen tot deze logs. Als agentschap kun je aangepaste interfaces maken voor toegang tot logs, terwijl grotere teams gebruik kunnen maken van tools zoals Slack om een aangepaste Slackbot te maken. Deze bot kan communiceren met de API via Slash commando’s, waardoor het ophalen en beheren van logs gestroomlijnd wordt.

Deze handleiding gaat in op het endpoint voor logs dat beschikbaar is via de API, de gebruiksmogelijkheden ervan en hoe je naadloos toegang kunt krijgen tot deze logs binnen een Slack omgeving.

De Kinsta API

De Kinsta API is een krachtige tool  waarmee je programmatisch kunt communiceren met Kinsta diensten zoals gehoste WordPress sites. Het kan helpen bij het automatiseren van verschillende taken met betrekking tot WordPress beheer, waaronder het maken van sites, het ophalen van site informatie, het opvragen van de status van een site, het bladeren door en herstellen van backups, het ophalen van site logs, en nog veel meer.

Om de API van Kinsta te gebruiken, moet je een account hebben met ten minste één WordPress site, applicatie of database in MyKinsta. Je moet ook een API sleutel genereren om je te authenticeren en toegang te krijgen tot je account.

Om een API sleutel te genereren:

  1. Ga naar je MyKinsta dashboard.
  2. Navigeer naar de pagina API-sleutels (Je naam > Bedrijfsinstellingen > API-sleutels).
  3. Klik op Maak Maak API-sleutel.
  4. Kies een vervaldatum of stel een aangepaste begindatum in en het aantal uren dat de sleutel moet verlopen.
  5. Geef de sleutel een unieke naam.
  6. Klik op Genereer.

Nadat je een API sleutel hebt gemaakt, moet je deze kopiëren en ergens veilig opslaan (het gebruik van een wachtwoordmanager wordt aanbevolen), omdat dit de enige keer is dat de sleutel wordt getoond binnen MyKinsta. Je kunt meerdere API sleutels genereren, die worden weergegeven op de pagina API-sleutels. Als je een API sleutel wilt intrekken, klik dan op de knop Intrekken naast de naam en vervaldatum.

Serverlogs openen met Kinsta API

Om toegang te krijgen tot logs met de Kinsta API, moet je de site omgeving ID, het type log dat je wilt ophalen (bijv. error, access, of kinsta-cache-perf), en het aantal logregels dat je wilt ophalen opgeven.

Laten we eens beter kijken naar dit endpoint en hem dan integreren in een Slackbot, zodat je de Slash commando’s van Slack kunt gebruiken voor interactie met de Kinsta API.

Je kunt het omgevings-ID van je site programmatisch verkrijgen via het get site environment endpoint, dat details over de omgeving van je site retourneert, inclusief het 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"
        }
      }
    ]
  }
}

Zodra je de omgevings-ID van je site hebt, kun je een GET verzoek sturen naar /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 '

Dit zal een String terugsturen met het opgegeven aantal logregels:

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

Je kunt dan de uitvoer opmaken om elke regel te scheiden met de n regeleinde. Met JavaScript kun je bijvoorbeeld de methode split() gebruiken:

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

Slack Slash commando’s gebruiken voor het ophalen van serverlogs met Kinsta API

In een recente gids werd het proces uitgelegd om een Slackbot te maken met behulp van Node.js en de Kinsta API voor sitebeheer. De gids beschreef het maken van een Slackbot en het tot stand brengen van interactie met de Kinsta API via een Node.js applicatie die gehost wordt op ons Applicatie Hosting platform.

Voor deze gids maken we een nieuw Slack Slash commando om de log endpoints van je site op te halen. Om dit te volgen, moet je eerst de bovenstaande gids doornemen om de Node.js applicatie te begrijpen en hoe je je persoonlijke Slackbot configureert.

Eenmaal klaar, kun je doorgaan met het klonen van ons startproject met Git:

  1. Navigeer naar de map van je voorkeur voor het opslaan van je code en voer het volgende commando uit in je terminal:
    git clone -b tutorial-1 --single-branch https://github.com/olawanlejoel/SlackBot-KinstaAPI.git
  2. Ga naar de projectmap en installeer alle vereiste dependencies:
    cd SlackBot-KinstaAPI
    npm install

Slash commando’s maken op Slack voor het ophalen van serverlogs

In de vorige Kinsta API Slackbot gids zijn vijf slash commando’s gemaakt om het volgende af te handelen:

  • /site_id [site name]: Gebruikt om site-ID op te halen.
  • /environment_id [site name]: Gebruikt om omgeving-ID op te halen.
  • /clear_site_cache [environment id]: Wordt gebruikt om site-cache te wissen.
  • /restart_php_engine [environment id]: Wordt gebruikt om de PHP-engine van een site opnieuw op te starten.
  • /operation_status [operation id]: Wordt gebruikt om de status van een bewerking te controleren.

Voor deze handleiding maak je een nieuw commando. Volg deze stappen om Slash Commando’s op Slack in te stellen voor het ophalen van serverlogs:

  1. Open je Slack applicatie en ga naar het Slash Commands menu in de linker zijbalk.
  2. Klik op de knop Create new task.
  3. Voer de gegevens als volgt in:
    • Command: /get_site_logs
    • Short Description: Haal de logbestanden van je site op, inclusief error.log, kinsta-cache-perf.log en access.log.
    • Usage Hint: [Environment ID] [File name] [Lines, e.g., 1000]

Door dit commando te gebruiken samen met parameters als [Environment ID], [File name], en [Lines], kunnen gebruikers specifieke logbestanden opvragen, zodat ze toegang krijgen tot de benodigde informatie. Bovendien hebben we het commando zo geconfigureerd dat het standaardwaarden heeft voor het geval de gebruiker de logbestandsnaam en het aantal regels niet invoert, wat zorgt voor een soepelere ervaring.

Node.js fetch requests gebruiken voor serverlogboekbewerkingen

Zodra je het slash commando hebt gemaakt, kun je je Node.js app aanpassen om op het commando te reageren. Begin met het maken van een asynchrone functie voor interactie met het endpoint.

Definieer in het app.js bestand een getSiteLogs() functie die drie parameters ontvangt van 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;
}

De functie communiceert met de Kinsta API met behulp van JavaScript’s Fetch API. De parameters zijn verwachte inputs, die bedoeld zijn om te worden ontvangen van Slack commando’s en vervolgens doorgegeven aan deze functies voor uitvoering.

In de code zul je zien dat de query parameters een aantal standaardwaarden hebben, ervan uitgaande dat de bestandsnaam en logregels niet via Slack zijn toegevoegd.

Met de getSiteLogs() functie op zijn plek is de volgende stap het configureren van de Slack commando’s. Deze configuratie bestaat uit het ontvangen van invoerwaarden van Slack, het callen van de functie en het terugsturen van een specifieke respons naar Slack.

Slash commando’s configureren met Node.js voor het ophalen van serverlogs

Om een Slash commando te configureren, gebruik je de functie app.command(), die net zo werkt als event listeners in JavaScript. Je specificeert het commando waar je naar wilt luisteren en maakt dan een asynchrone callback-functie om de gewenste actie te definiëren. Deze functie gebruikt drie parameters:

  • command: Bevat de details van het slash commando dat door de gebruiker is verzonden.
  • ack: Bevestigt de ontvangst van het slash commando.
  • say: Stuurt een bericht terug naar het Slack kanaal.

Hier is de configuratie voor het commando /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}.`);
    }
});

De bovenstaande code gebruikt de functie getSiteLogs() om logs op te halen op basis van de parameters. Als de logs met succes zijn opgehaald, worden ze opgemaakt en wordt er een Slack bericht verzonden met de logs voor het opgegeven bestand met behulp van de functie say(). Als er geen logs zijn gevonden, wordt de gebruiker hiervan op de hoogte gesteld. Als er geen logs worden gevonden, wordt de gebruiker hiervan op de hoogte gesteld.

Je kunt de Node.js servercode deployen naar Kinsta om je Slackbot live te zetten.

Demo van interactie met het server logs endpoint met Slack Slash commando en Kinsta API
Demo van interactie met het server logs endpoint met Slack Slash commando en Kinsta API

Je kunt de volledige code voor dit project vinden op onze GitHub repository.

Samenvatting

In deze handleiding heb je geleerd hoe je de Kinsta API logs endpoints effectief kunt inzetten. Met dit endpoint kun je naadloos de serverlogs van je site ophalen voor snellere probleemoplossing.

De Kinsta API biedt veel meer mogelijkheden dan dit, dus je wordt aangemoedigd om aanvullende endpoints te verkennen en innovatieve manieren te bedenken om ze in je projecten te gebruiken.

Hoe maak jij momenteel gebruik van de Kinsta API? Zijn er specifieke functies die je graag in de toekomst geïntroduceerd of toegankelijk gemaakt zou willen zien?

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.