간단한 bash 트릭으로 cron 모니터링을 단순화하는 방법

4775 단어 cronbashdevopswebdev
오랫동안 소프트웨어 시스템으로 작업했다면 crons으로 작업한 것이 확실합니다. Cron은 UNIX 계열 운영 체제의 시간 기반 작업 스케줄러입니다. 예를 들어 매일 오전 9시 30분에 일부 작업/스크립트를 주기적으로 실행하는 데 사용합니다.

cron 설정 및 실행은 지난 몇 년 동안 crontab 명령에서 이제 Kubernetes에서 CronJob으로 실행하는 것으로 변경되었지만 여전히 기본 사항은 동일하며 cron 작업을 모니터링하는 것이 매우 중요합니다. CronJob이 실행되지 않았기 때문에 일부 클라이언트가 지불되지 않은 상태에서 깨어나고 싶지 않을 것입니다.

이 게시물은 cron 모니터링을 단순화하는 하나의 멋진 bash 트릭을 강조할 것입니다. 솔루션은 명령 자체에서 수행되므로 언어와 프레임워크에 구애받지 않습니다. 크론을 모니터링하는 이 방법에 대해 자세히 알아보겠습니다.



Cron 모니터링이 중요합니다.



우리는 하나는 6시간마다 실행되고 다른 하나는 2주마다 실행되는 두 개의 CronJob이 있는 프로젝트에서 작업하고 있었습니다. 이 프로젝트는 Symfony에서 수행되었으며 cron은 Kubernetes에서 CronJob으로 실행되는 Symfony 명령으로 설정되었습니다.

As we monitor our applications with New Relic, we monitor and get notified if the Crons don’t run in time with OpsGenie Heartbeat Monitoring.



필요에 따라 Healthchecks 또는 Cronitor 을 사용할 수 있습니다. 가장 중요한 것은 크론이 예상 시간과 빈도로 실행되지 않을 때 경고를 받는 것입니다.

지금까지는 괜찮았지만 OpsGenie를 ping하는 코드를 살펴보았을 때 여러 가지 방법을 보았습니다. 대부분 최신 OpsGenie API/SDK를 가져와 애플리케이션에서 호출하는 것과 같았습니다. 누군가는 이 하트비트 핑 및 기타 작업을 수행하기 위해 래퍼 라이브러리를 구축하기도 했습니다.

문제



다음은 이 접근 방식의 문제점입니다.
  • 해결책은 응용 프로그램에서 하트비트REST API를 호출하는 것이었습니다. 이로 인해 응용 프로그램
  • 에 대한 추가 종속성과 추가 코드가 발생했습니다.
  • 성공적인 cron 실행 후 API 호출은 언어/프레임워크에 따라 다릅니다. 예를 들어 PHP용으로 작성된 코드는 NodeJs/Typescript에서 작동하지 않습니다.
  • API가 새 버전으로 업그레이드되는 경우 호출이 응용 프로그램 코드에 따라 달라지므로 각 응용 프로그램에 다른 변경 세트가 필요합니다
  • .

    해결책



    위의 모든 문제에 대한 해결책은 매우 간단합니다. bash를 && operator와 함께 사용하면 cron 실행이 성공한 경우에만 ping이 실행됩니다.

    “&&” is used to chain commands together, such that the next command is run if and only if the preceding command exited without errors (or, more accurately, exits with a return code of 0). — Source



    아래와 같이 OpsGenie에 ping을 사용하여 Symfony cron 명령을 실행했습니다.

        bin/console our-cron:command \
        && curl -X GET 'https://api.opsgenie.com/v2/heartbeats/our-cron/ping' --header 'Authorization: GenieKey '"$OPSGENIE_API_KEY"''
    


    우리는 위의 명령에 대해 약간 다른 변형을 수행하고 하트비트의 명령과 이름이 매개 변수로 전송되는 bash 스크립트를 만들었습니다.

    또 다른 SAAS



    우리는 OpsGenie를 사용하고 있지만 cron 모니터링 공간에도 다른 SAAS 공급자가 있습니다. 단일 모니터에 무료로 사용할 수 있는 것은 Cronitor.io 입니다. cron monitoring 외에도 Cronitor는 웹 사이트 및 API에 간단한 uptime monitoring을 제공합니다. 또한 기존 crontab을 가져와 Cronitor로 보낼 수 있는 편리한 CLI 도구도 있습니다.

    그래서 어떤 문제가 해결되었나요?


  • 컬을 수행하기 위해 추가 라이브러리/패키지를 가져올 필요가 없습니다. OpsGenie PHP client 처음에 끌어들이려고 생각했던 것 같아요 :)
  • 솔루션은 언어/프레임워크에 구애받지 않습니다. 도커 컨테이너에 bash/sh 또는 쉘(일반적으로 있음)이 있는 한 솔루션은 PHP, NodeJs(typescript), Python 또는 GoLang에서도 작동합니다.
  • API가 업그레이드되면 모든 저장소에서 변경 사항이 동일합니다.

  • 결론



    즉시 사용할 수 있는 솔루션을 찾으십시오. 이전에 수행된 것처럼 문제를 해결하려면 새 라이브러리를 가져오거나 일종의 자체 OpsGenie 클라이언트를 구축했을 것입니다. 그것은 문제를 해결하지만 미래를 위해 유지해야 할 더 많은 종속성과 코드를 제공합니다.

    When trying to find a fix for a problem, step back and think of solutions that are not very obvious.




    자세한 내용은 Geshan.com.np에서 확인하세요.

    좋은 웹페이지 즐겨찾기