Los registros son muy útiles para solucionar y depurar problemas en tus sitios de WordPress. En Kinsta, puedes acceder a tres tipos de registros: registros de errores, registros kinsta-cache-perf (rendimiento de la caché) y registros de acceso.

Acceder a los registros a través del panel de control de MyKinsta es sencillo: navega a Sitios WordPress, selecciona el sitio deseado y haz clic en la pestaña Registros para abrir la página Visor de registros.

Ahora, con la introducción de la API de Kinsta, puedes acceder mediante programación a estos registros. Como agencia, puedes crear interfaces personalizadas para acceder a los registros, mientras que los equipos más grandes pueden aprovechar herramientas como Slack para crear un Slackbot personalizado. Este bot puede interactuar con la API mediante comandos de Slack, agilizando la recuperación y gestión de los registros.

Esta guía profundiza en el endpoint de registros disponible a través de la API, sus usos potenciales y cómo acceder sin problemas a estos registros dentro de un entorno Slack.

Comprender la API de Kinsta

La API de Kinsta es una potente herramienta que te permite interactuar con los servicios de Kinsta, como los sitios de WordPress alojados, mediante programación. Puede ayudarte a automatizar varias tareas relacionadas con la gestión de WordPress, incluyendo la creación de sitios, la recuperación de información del sitio, la obtención del estado de un sitio, la búsqueda y restauración de copias de seguridad, la obtención de registros del sitio y mucho más.

Para utilizar la API de Kinsta, debes tener una cuenta con al menos un sitio de WordPress, aplicación o base de datos en MyKinsta. También necesitas generar una clave API para autenticarte y acceder a tu cuenta.

Para generar una clave API:

  1. Ve a tu panel de MyKinsta.
  2. Ve a la página Claves API (Tu nombre > Configuración de la empresa > Claves API).
  3. Haz clic en Crear Clave API.
  4. Elige una fecha de caducidad o establece una fecha de inicio personalizada y un número de horas para que caduque la clave.
  5. Dale a la clave un nombre único.
  6. Haz clic en Generar.

Después de crear una clave API, cópiala y guárdala en un lugar seguro (se recomienda utilizar un gestor de contraseñas), ya que es la única vez que se revela dentro de MyKinsta. Puedes generar varias claves API, que aparecerán en la página Claves API. Si necesitas revocar una clave API, haz clic en el botón Revocar junto a su nombre y fecha de caducidad.

Acceder a los Registros del Servidor con la API de Kinsta

Para acceder a los registros con la API de Kinsta, debes especificar el ID del entorno del sitio, el tipo de registro que deseas recuperar (por ejemplo, error, access, o kinsta-cache-perf), y el número de líneas de registro que deseas recuperar.

Vamos a explorar este endpoint y más tarde lo integraremos en un Slackbot para que puedas utilizar los comandos Slash de Slack para interactuar con la API Kinsta.

Puedes obtener el ID del entorno de tu sitio mediante programación a través del endpoint get site environment (obtener el entorno del sitio), que devuelve detalles sobre el entorno de tu sitio, incluido su 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"
        }
      }
    ]
  }
}

Una vez que tengas el ID del entorno de tu sitio, puedes enviar una solicitud GET a /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 '

Esto devolverá una cadena con el número especificado de líneas de registro:

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

A continuación, puedes formatear la salida para separar cada línea con el salto de línea n. Por ejemplo, con JavaScript, puedes utilizar el método 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);

Implementación de Comandos Slash de Slack para Recuperar Registros del Servidor con la API de Kinsta

En una guía reciente, se explicaba el proceso de creación de un Slackbot utilizando Node.js y la API Kinsta para la gestión del sitio. La guía describía la creación de un Slackbot y el establecimiento de la interacción con la API de Kinsta a través de una aplicación Node.js alojada en nuestra plataforma de Alojamiento de Aplicaciones.

Para esta guía, vamos a crear un nuevo comando Slash de Slack para obtener los endpoints de registro de tu sitio. Para continuar, primero revisa la guía anterior para entender la aplicación Node.js y cómo configurar tu Slackbot personalizado.

Una vez completado, puedes proceder a clonar nuestro proyecto de inicio con Git:

  1. Navega a tu directorio preferido para almacenar tu código y ejecuta el siguiente comando en tu terminal:
    git clone -b tutorial-1 --single-branch https://github.com/olawanlejoel/SlackBot-KinstaAPI.git
  2. Desplázate a la carpeta del proyecto e instala todas las dependencias necesarias:
    cd SlackBot-KinstaAPI
    npm install

Creación de Comandos Slash en Slack para Recuperar los Registros del Servidor

En la anterior guía del Slackbot de la API de Kinsta, se crearon cinco comandos slash para gestionar lo siguiente:

  • /site_id [site name]: Utilizados para recuperar el ID del sitio.
  • /environment_id [site name]: Se utiliza para obtener el ID del entorno.
  • /clear_site_cache [environment id]: Se utiliza para borrar la caché del sitio.
  • /restart_php_engine [environment id]: Se utiliza para reiniciar el motor PHP de un sitio.
  • /operation_status [operation id]: Se utiliza para comprobar el estado de una operación.

Para esta guía, crea un nuevo comando. Para configurar Comandos Slash en Slack para recuperar los registros del servidor, sigue estos pasos:

  1. Abre tu aplicación Slack y ve al menú Comandos Slash de la barra lateral izquierda.
  2. Haz clic en el botón Crear Nuevo Comando.
  3. Introduce los detalles como se indica a continuación:
    • Comando: /get_site_logs
    • Descripción Abreviada: Recupera los archivos de registro de tu sitio, incluidos error.log, kinsta-cache-perf.log y access.log.
    • Sugerencia de Uso: [Environment ID] [File name] [Lines, e.g., 1000]

Utilizando este comando junto con parámetros como [Environment ID], [File name], y [Lines], los usuarios pueden solicitar archivos de registro específicos, asegurándose de que acceden a la información necesaria. Además, hemos configurado el comando para que tenga valores por defecto en caso de que el usuario no introduzca el nombre del archivo de registro y el recuento de líneas, lo que garantiza una experiencia más fluida.

Implementación de Solicitudes de Obtención de Node.js para Operaciones de Registros de Servidor

Una vez que hayas creado el comando slash, puedes modificar tu aplicación Node.js para que responda al comando. Empieza creando una función asíncrona para interactuar con el endpoint.

En el archivo app.js, define una función getSiteLogs() que reciba tres parámetros 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 función se comunica con la API Kinsta utilizando la API Fetch de JavaScript. Los parámetros son entradas esperadas, que deben recibirse de los comandos de Slack y luego pasarse a estas funciones para su ejecución.

En el código, observarás que los parámetros de consulta tienen algunos valores por defecto, suponiendo que el nombre del archivo y las líneas de registro no se añaden a través de Slack.

Con la función getSiteLogs() en su sitio, el siguiente paso consiste en configurar los comandos de Slack. Esta configuración implica recibir valores de entrada de Slack, invocar la función y enviar una respuesta específica a Slack.

Configurar Comandos Slash con Node.js para Recuperar Registros del Servidor

Para configurar un comando Slash, utiliza la función app.command(), que funciona de forma similar a los escuchadores de eventos en JavaScript. Especifica el comando que deseas escuchar y, a continuación, crea una función de devolución de llamada asíncrona para definir la acción deseada. Esta función recibe tres parámetros:

  • command: Contiene los detalles del comando slash enviado por el usuario.
  • ack: Acusa recibo del comando slash.
  • say: Envía un mensaje de vuelta al canal Slack.

Ésta es la configuración del comando /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}.`);
    }
});

El código anterior utiliza la función getSiteLogs() para recuperar los registros basándose en los parámetros. Si los registros se recuperan correctamente, los formatea y envía un mensaje Slack mostrando los registros del archivo especificado utilizando la función say(). Si no se encuentra ningún registro, se lo notifica al usuario.

Puedes desplegar el código del servidor Node.js en Kinsta para poner en marcha tu Slackbot.

Demo of interacting with the server logs endpoint with Slack Slash command and Kinsta API

Puedes acceder al código completo de este proyecto en nuestro repositorio de GitHub.

Resumen

En esta guía, has aprendido a utilizar eficazmente los endpoints de los registros de la API Kinsta. Este endpoint te permite recuperar los registros del servidor de tu sitio sin problemas para una resolución de problemas más rápida.

La API de Kinsta ofrece muchas capacidades más allá de esto, por lo que te animamos a explorar endpoints adicionales e idear formas innovadoras de aprovecharlos en tus proyectos.

¿Cómo aprovechas actualmente la API de Kinsta? ¿Hay alguna función específica que te gustaría ver introducida o accesible en el futuro?

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.