Рубрики
Uncategorized

Мониторинг Cron для лучшего сна

Регулярное выполнение рабочих мест с Кроном распространено практически в каждой системе. Однако открытие работы … Tagged с мониторингом, DevOps, Tulciory, Laravel.

Регулярное выполнение рабочих мест с Кроном распространено практически в каждой системе. Тем не менее, обнаружение остановки выполнения работы может быть трудным и может занять некоторое время. Поэтому важно контролировать его.

🇨🇿 V čeШtině si lze článek přečíst na kutac.cz

Ошибки, которые происходят непосредственно перед глазами пользователя, кто -то в конце концов сообщит. Но когда фоновые задачи останавливаются, никто не мог бы заметить это даже месяцы. Таким образом, мониторинг необходим. И это может быть даже не так дорого или тяжело.

Все, вероятно, слышали какую-то историю неработающих резервных копий БД. Который был обнаружен только, когда резервная копия была действительно необходима. И один простой мониторинг спасет его.

В предыдущей статье я написал о Cron-Job Service Что может быть хорошо, чтобы вызвать задачи Cron. Однако, что происходит, когда код ответа составляет 200, но ничего не выполняется? Это действительно трудно обнаружить. Итак, услуги, как HealthChecks.io здесь, чтобы помочь. И с довольно щедрый бесплатный уровень Анкет

Сервис работает над принципом Dead’s Man Switch. Требуется уведомить службу в установленных интервалах, в противном случае уведомления отправляются. Например, по электронной почте, SMS, телефонному звонку, Slack, Discord, Teams, Trello, WhatsApp или одним из 16 служб.

Есть 2 типа проверки. Один называется Простой который принимает интервал, в котором система ожидает пингов. Второй — Крон , который поддерживает базовый синтаксис Cron, чтобы определить время, когда запустить. Оба поддержки также Время Грейс который определяет максимально возможную задержку.

Успех пинг, запуск, провал и выходит код

Только Успех пинг требуется как минимальная отправная точка. Отправляя пинг, вы говорите, что теперь задача была обработана. Если служба не получает пинг в данный момент или интервал, отправляются уведомления. Конечная точка Старт уведомляет, что задача только началась. Теперь служба ожидает Пинг в определенном пределе с начала. Это хорошо для обнаружения бесконечных петель или застрявших кода.

Конечные точки Неудача и Выход код Есть ли уведомление о неудаче. С помощью кода выхода вы можете указать числовой код выхода задания.

Можно прикрепить Сообщение журнала с размером до 10 КБ к запросам. Для получения дополнительной информации см. Документация Анкет

Http -запросы и повторение

Как утверждает документация, HTTP Pings не совсем надежны.

Отправка сигналов мониторинга через общедоступный интернет по своей природе ненадежна. HTTP -запросы иногда могут занимать чрезвычайно долгое время или полностью потерпеть неудачу по разным причинам.

Это необходимо установить разумные тайм -ауты и политику повторения. Вот упрощенный вспомогательный класс для рамки Laravel ниже. Было бы лучше использовать плагин Retry, но простой для здесь может быть достаточно.

client = new Client([ 'base_uri' => Config::get('healthchecks.api_endpoint') ]);
    }

    private function makeRequest(string $action, string $checkName, string $log = ""): void
    {
        $options = [
            'timeout' => 2,
            'connect_timeout' => 2,
            'body' => $log,
        ];

        $exception = null;
        $i = 0;
        for (; $i < 3; $i += 1) {
            try {
                $this->client->request('POST', \rtrim("/{$action}", '/'), $options);
                $exception = null;

                break;
            } catch (\Throwable $e) {
                $exception = $e;
                \usleep(\pow(2, $i) * 500000);
            }
        }
        if ($exception) {
            Log::warning(
                'Cannot perform HealthChecks request',
                ['checkName' => $checkName, 'action' => $action, 'exception' => $exception, 'retry' => $i + 1],
            );
        }
    }

    public function start(string $checkName): void
    {
        $this->makeRequest('start', $checkName);
    }

    public function success(string $checkName, string $log = ""): void
    {
        $this->makeRequest('', $checkName, $log);
    }

    public function exitStatus(string $checkName, $exitStatus, string $log = ""): void
    {
        $this->makeRequest("$exitStatus", $checkName, $log);
    }
}

Оригинал: «https://dev.to/arxeiss/cron-monitoring-for-better-sleep-3o4g»