Журналы очень полезны для устранения неполадок и отладки проблем на ваших сайтах WordPress. В Kinsta вы можете получить доступ к трем типам журналов: журналы ошибок, журналы kinsta-cache-perf (производительность кэша) и журналы доступа.

Доступ к журналам через панель управления MyKinsta очень прост: перейдите к Сайты WordPressвыберите нужный сайт и нажмите кнопку Журналы вкладка, чтобы открыть Просмотр журнала страница.

Теперь, с появлением API Kinsta, вы можете программно получить доступ к этим журналам. Как агентство, вы можете создавать собственные интерфейсы для доступа к журналам, а более крупные команды могут использовать такие инструменты, как Slack, для создания собственного Slackbot. Этот бот может взаимодействовать с API с помощью Slash-команд, оптимизируя получение журналов и управление ими.

В этом руководстве подробно рассматривается конечная точка журналов, доступная через API, ее потенциальное использование и способы беспрепятственного доступа к этим журналам в среде Slack.

Понимание API Kinsta

Kinsta API — это мощный инструмент, который позволяет вам программно взаимодействовать со службами Kinsta, такими как размещенные сайты WordPress. Он может помочь автоматизировать различные задачи, связанные с управлением WordPress, включая создание сайта, получение информации о сайте, получение статуса сайта, просмотр и восстановление резервных копий, получение журналов сайта и многое другое.

Чтобы использовать API Kinsta, у вас должна быть учетная запись хотя бы на одном сайте, приложении или базе данных WordPress в MyKinsta. Вам также необходимо сгенерировать ключ API для аутентификации и доступа к вашей учетной записи.

Чтобы сгенерировать ключ API:

  1. Перейдите на панель управления MyKinsta.
  2. Перейдите к API-ключи страница (Ваше имя > Настройки компании > API-ключи).
  3. Нажмите Создать ключ API.
  4. Выберите срок действия или установите собственную дату начала и количество часов, в течение которых истечет срок действия ключа.
  5. Дайте ключу уникальное имя.
  6. Нажмите Генерировать.

После создания ключа API скопируйте его и сохраните в безопасном месте (рекомендуется использовать менеджер паролей), так как это только время это раскрывается в MyKinsta. Вы можете создать несколько ключей API, которые будут перечислены на странице API-ключи страница. Если вам нужно отозвать ключ API, нажмите кнопку Отозвать кнопку рядом с его названием и датой истечения срока действия.

Доступ к журналам сервера с помощью Kinsta API

Чтобы получить доступ к журналам с помощью Kinsta API, вам необходимо указать идентификатор среды сайта, тип журнала, который вы хотите получить (например, error, accessили kinsta-cache-perf) и количество строк журнала, которые необходимо получить.

Давайте рассмотрим эту конечную точку, а затем интегрируем ее в Slackbot, чтобы вы могли использовать команды Slack Slash для взаимодействия с Kinsta API.

Вы можете получить идентификатор среды вашего сайта программным путем через конечную точку get site Environment, которая возвращает сведения о среде вашего сайта, включая ее идентификатор:

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

Получив идентификатор среды вашего сайта, вы можете отправить 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 '

Это вернет строку с указанным количеством строк журнала:

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

Затем вы можете отформатировать вывод, чтобы разделить каждую строку с помощью n Разрыв строки. Например, с помощью JavaScript вы можете использовать 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);

Реализация команд Slack Slash для получения журналов сервера с помощью Kinsta API

В недавнем руководстве был объяснен процесс создания Slackbot с использованием Node.js и Kinsta API для управления сайтом. В руководстве описано создание Slackbot и установление взаимодействия с API Kinsta через приложение Node.js, размещенное на нашей платформе хостинга приложений.

В этом руководстве давайте создадим новую команду Slack Slash, чтобы получить конечные точки журнала вашего сайта. Чтобы следовать инструкциям, сначала просмотрите приведенное выше руководство, чтобы понять приложение Node.js и узнать, как настроить персонализированного Slackbot.

После завершения вы можете приступить к клонированию нашего стартового проекта с помощью Git:

  1. Перейдите в предпочитаемый каталог для хранения вашего кода и выполните следующую команду в своем терминале:
    git clone -b tutorial-1 --single-branch https://github.com/olawanlejoel/SlackBot-KinstaAPI.git
  2. Перейдите в папку проекта и установите все необходимые зависимости:
    cd SlackBot-KinstaAPI
    npm install

Создание слэш-команд в Slack для получения журналов сервера

В предыдущем руководстве Kinsta API Slackbot было создано пять косых команд для обработки следующего:

  • /site_id [site name]: используется для получения идентификатора сайта.
  • /environment_id [site name]: используется для получения идентификатора среды.
  • /clear_site_cache [environment id]: используется для очистки кэша сайта.
  • /restart_php_engine [environment id]: используется для перезапуска PHP-движка сайта.
  • /operation_status [operation id]: используется для проверки статуса операции.

В этом руководстве вы создадите новую команду. Чтобы настроить команды Slash в Slack для получения журналов сервера, выполните следующие действия:

  1. Откройте приложение Slack и перейдите в Слэш-команды меню на левой боковой панели.
  2. Нажмите кнопку Создать новую команду кнопка.
  3. Введите данные следующим образом:
    • Команда: /get_site_logs
    • Краткое описание: Получите файлы журналов вашего сайта, включая error.log, kinsta-cache-perf.log и access.log.
    • Подсказка по использованию: [Environment ID] [File name] [Lines, e.g., 1000]

Используя эту команду вместе с такими параметрами, как [Environment ID], [File name]и [Lines]пользователи могут запрашивать определенные файлы журналов, гарантируя, что они получат доступ к необходимой информации. Кроме того, мы настроили команду так, чтобы она имела значения по умолчанию на случай, если пользователь не вводит имя файла журнала и количество строк, что обеспечивает более плавную работу.

Реализация запросов на выборку Node.js для операций журналов сервера

Создав команду косой черты, вы можете изменить свое приложение Node.js, чтобы оно реагировало на эту команду. Начните с создания асинхронной функции для взаимодействия с конечной точкой.

в приложение.js файл, определите getSiteLogs() функция, которая получает три параметра от 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;
}

Функция взаимодействует с API Kinsta с помощью API Fetch JavaScript. Параметры — это ожидаемые входные данные, которые должны быть получены от команд Slack и затем переданы этим функциям для выполнения.

В коде вы заметите, что параметры запроса имеют некоторые значения по умолчанию, при условии, что имя файла и строки журнала не добавляются через Slack.

С getSiteLogs() функция на месте, следующий шаг включает настройку команд Slack. Эта конфигурация предполагает получение входных значений от Slack, вызов функции и отправку определенного ответа обратно в Slack.

Настройка слэш-команд с помощью Node.js для получения журналов сервера

Чтобы настроить команду Slash, вы используете команду app.command() функция, которая работает аналогично прослушивателям событий в JavaScript. Вы указываете команду, которую хотите прослушать, а затем создаете асинхронную функцию обратного вызова для определения желаемого действия. Эта функция принимает три параметра:

  • command: Содержит сведения о команде косой черты, отправленной пользователем.
  • ack: Подтверждает получение команды косой черты.
  • say: отправляет сообщение обратно в канал Slack.

Вот конфигурация для /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}.`);
    }
});

В приведенном выше коде используется getSiteLogs() функция для получения журналов на основе параметров. Если журналы получены успешно, он форматирует их и отправляет сообщение Slack, отображающее журналы для указанного файла, используя say() функция. Если журналы не найдены, он уведомляет пользователя соответствующим образом.

Вы можете развернуть серверный код Node.js в Kinsta, чтобы запустить свой Slackbot.

Вы можете получить доступ к полному коду этого проекта в нашем репозитории GitHub.

Краткое содержание

В этом руководстве вы узнали, как эффективно использовать конечные точки журналов Kinsta API. Эта конечная точка позволяет вам беспрепятственно получать журналы сервера вашего сайта для более быстрого устранения неполадок.

API Kinsta предлагает множество возможностей помимо этого, поэтому вам предлагается изучить дополнительные конечные точки и провести мозговой штурм инновационных способов их использования в ваших проектах.

Как вы сейчас используете Kinsta API? Есть ли какие-то особые функции, которые вы хотели бы видеть или сделать доступными в будущем?