Django 어플리케이션 모니터링

일정 시간마다 사람들은 나에게 그들의 Django 사이트를 어떻게 감시하는지 문의한다.너는 너의 사이트가 언제 고장났는지 어떻게 알았니?어떻게 사용자가 주의하기 전에 문제를 해결합니까?
나의 대답은 상황을 보고 결정하는 것이다.
이 글에서 나는 내가 발견하고 Django 프로젝트에 사용한 서로 다른 모니터링 방법을 총괄할 것이다.어떤 방법은 언어와 플랫폼과 무관하다. Rails나 노드 코드를 작성하는 데 적용되고, 다른 방법은 Django에 특정된다.

크라우드 소싱 모니터링


이것은 가장 간단한 모니터링 형식이자 모든 웹 개발자의 입문 패키지이다.분노한 사용자가 당신의 사이트가 오프라인 상태라고 추측할 때까지 기다렸다가 고소를 받을 때 오류를 복구하세요.

장점: 값이 싸다. 왜냐하면 일을 필요로 하지 않기 때문이다.
단점: 수치와 비싸다.너는 고객을 잃을 수도 있다.이것은 좋지 않은 선전이다.만약 네 사장이 발견한다면, 그는 아마 너에게 큰소리로 외칠 것이다.
하도급 모니터링은 아마추어 취미 프로젝트와 초창기 회사에 가장 적합하다. 왜냐하면 응용 프로그램이 돈을 벌지 못하기 때문에 정상적인 운행 시간은 중요하지 않다.구축 기능에 시간을 투자할 수 있습니다. 감시 도구를 구축하는 것이 아니라.빠른 행동으로 교착 상태를 타개하다.

내장된 Django 버그 보고서


Django는 오류 보고서에 내장된 똑똑한 것들을 많이 포함하고 있다.사용자가 서버 오류를 트리거하면 Django는 자동으로 사이트 관리자에게 이메일을 보내고 오류에 대한 회상과 요청 상하문을 포함합니다.
오류 보고서를 사용하려면 보고서를 받을 관리자를 설정해야 합니다.
설정의 ADMINS 설정의 각 사용자.py에서 전자 우편을 받을 것입니다:
ADMINS = [('Jose', '[email protected]'), ('Adin', '[email protected]')]
전자 우편 서버를 설정해야 합니다.difficult이 자신의 서버를 어떻게 구성하는지를 고려하여 저는 보통 제3자 API를 사용합니다.MailgunSendgrid은 저렴한 가격으로 간편하게 통합할 수 있습니다.
저는 django-anymail을 이메일 백엔드로 사용합니다.이것은 Django와 연결되어 있어 다른 전자 우편 공급자와 쉽게 교환할 수 있습니다.이렇게 하면 당신은 공급업체에 의존하지 않고 공급업체의 잠금을 피할 수 있습니다.Sendgrid 가격 올랐어요?세 줄 코드를 변경하고 Amazon SES를 사용합니다.
e-메일 보고서에 대한 전체 설명서는 here입니다.
대부분의 사람들이 슬랙을 의사소통 수단으로 사용하기 때문에, 전자메일이 아닌 django-slack 패키지로 슬랙에 오류 보고서를 보낼 수 있습니다.

그래, 그럼 난 Django의 내장된 오류 보고서를 어떻게 볼까?
찬성 의견:
  • 단일 오류 및 버그 추적용
  • 모든 규모의 기업에 적용
  • 단점: 만약 응용 프로그램이 완전히 붕괴된다면 실제로는 작동하지 않을 것이다.데양고
    오류 보고서를 보내려면 를 실행해야 합니다.그렇다면 너는 그래도 괜찮다
    사용자로부터 온 분노의 트윗.

    건강검진: 우리 아직 살아있어요?


    좋습니다. 그래서 프로그램이 활성화되었는지 확인하기 위해 프로그램 이외의 것들이 필요할 수도 있습니다.DevOps 행화에서 이를'건강검진'이라고 부른다.간단하게 말하자면, 외부 프로그램이 프로그램에 요청을 보내서 활성 상태인지 물어본다. 프로그램이 OK에 응답하거나, 오류가 발생하거나, 응답을 되돌려 주지 않는다.프로그램이 오류를 받았거나 응답을 받지 못하면, 경보 (전화, 문자, 이메일) 를 울려 깨어나 문제를 해결해야 한다고 알려 준다.
    이를 실현하는 가장 간단한 방법은 루트 URL https://mycoolapp.com에 건강검진을 설정하는 것이다.만약 우리의 건강 검사 로봇이 루트 URL에 접근할 수 있다면 다른 사용자도 그것을 방문할 수 있을 것이다.


    지능 건강 검사
    더 복잡한 방법은 건강 검진에 사용되는 전용 URL을 추가하는 것이다.요청이 이 URL에 전송되었을 때, 프로그램이 의존하는 모든 외부 서비스를 확인하십시오.이것은 데이터베이스, 캐시, 마이크로 서비스에 대한 검사일 수도 있습니다.
    크리스티안 오레가드는 health checking app for Django형 비행기를 건조하는 어려운 일을 마쳤다./health/ URL에 django health check을 설치하고 다음과 같이 구성합니다.
    urlpatterns = [
        # ...
        url(r'^ht/', include('health_check.urls')),
    ]
    
    INSTALLED_APPS = [
        # ...
        'health_check',                             # required
        'health_check.db',                          # stock Django health checkers
        'health_check.cache',
        'health_check.contrib.celery',              # requires celery
    ]
    
    응용 프로그램에 정기적으로 요청을 보내고 응답이 없는지 보고하는 구성 요소가 필요합니다.자신의 서버에 도구를 배치하거나 제3자 공급자를 사용하는 두 가지 방법이 있다.
    나는 게으르고 똑똑하기 때문에 이 일을 제3자 공급업체에 하청을 주었다.도구를 위탁 관리하기로 결정하면, 귀속 문제에 부딪힐 것입니다. 누가 당신의 감시 도구를 감시합니까?
    다행히도 개발자들은 다른 개발자를 위해 도구를 구축하는 것을 좋아한다.그들 대다수의 사람들은 모두 공짜이다.다음은 제가 자주 사용하는 건강검진 제공자 목록입니다.
  • https://www.statuscake.com/
  • https://uptimerobot.com/
  • 자기 관리를 하고 싶은 물건을 원하고 프로메테우스를 사용하고 있다면 Blackbox exporter이 가장 좋은 선택이다.
    StatusCake는 오프라인 사이트에서 느슨한 보고서를 보내도록 구성할 수 있습니다.

    장점: 모든 프로젝트 규모에 적용.블로그가 있든 아마존이 있든일반 도메인 이름 형식.당신의 사이트가 언제 닫히는지 알게 되어 기쁩니다.그것은 집적하기 쉽고 배치 원가가 저렴하다.
    단점: 건강 검사는 기본이며 프로그램 실행 상황에 대한 자세한 정보는 알려주지 않습니다.그것은 통상적으로 온라인 또는 오프라인의 이진 응답이다.6번의 요청이 너무 느리거나 사용자가 건강검진 url 이외의 url에서 오류를 일으켰는지 알 수 없습니다.

    전문적인 모니터링 도구


    좋아, 만약 네가 이미 돈을 벌고 있다면, 나는 보통 이 종류를 추천할 거야.응용 프로그램의 오프라인 비용은 전용 모니터링 도구를 학습하고 배치하는 데 걸리는 시간을 초과해야 한다.
    이 공구들 중 대다수는 가파른 학습 곡선을 가지고 있지만, 강하고 상세한 내성이 필요할 때, 그것들은 당신에게 좋은 점을 가져다 줄 것이다.다음 질문에 대답하고 싶으면 유용합니다.
  • HTTP 요청의 몇 퍼센트가 5xx 서버 오류를 초래합니까?
  • 평균 서버 응답 요청 시간은 얼마입니까?
  • 우리 창고에서 가장 느린 중간부품은 무엇입니까?
  • 에서 가장 많이 업데이트된 모델/데이터베이스 테이블은 무엇입니까?
  • 데이터베이스 또는 애플리케이션 계층이 확장의 병목입니까?
  • SaaS 모니터링 솔루션에는 오픈 소스와 오프 소스가 있습니다.이것은 내부 배치와 유지 보수 비용과 구독 비용의 문제다.나는 그것들에 대해 더 경험이 있기 때문에, 개원 도구를 사용하는 경향이 있다.
    나는 프로메테우스와 그라파나를 좋아한다. 공부할 시간이 필요하지만, 그들의 힘은 믿기 어렵다.이러한 도구를 둘러싼 오픈 소스 커뮤니티는 Django부터 Bitcoin prices까지 다양한 플러그인을 사용할 수 있는 매우 강력하다.
    그러면 그것은 어떻게 일을 합니까?
    프로메테우스는 끌어당기는 모델을 바탕으로 응용 프로그램에서 지표를 추출한다.Django 애플리케이션은 메모리에서 메트릭을 수집하고 엔드포인트 /metrics에서 HTTP를 통해 이를 공개합니다.프로메테우스는 정기적으로 이 단점을 조회하여 내보낸 데이터를 데이터베이스에 저장한다.Grafana는 집합 도량을 시각화하는 데 사용되는 기이한 도형이다.

    프로메테우스는 사용자 정의 형식으로 데이터를 저장하고 자신의metrics SDK를 제공합니다. Uriel Corfa은 프로그램을 작성함으로써 Django 중간부품, ORM, 캐시층에 연결하고 도량 기준을 자동으로 공개합니다.django-prometheus을 설치하고 구성하기만 하면 됩니다.
    그것은 요청과 응답, 캐시, 데이터베이스 작업에 기존의 지표를 제공했다.사용자 정의 지표를 추가해서 사용자가 중요하게 생각하는 모든 내용을 추적할 수 있습니다. 예를 들어 사용자 등록과 매달 새 구독 등입니다.예를 들면 다음과 같습니다.

    # settings.py
    PROMETHEUS_USER_SIGNED_UP = Counter(
        "django_users_signed_up",
        "The number of users that signed up in total.",
    )
    
    # views.py
    from django.conf import settings
    from django.shortcuts import render
    
    def sign_up_view(request):
        settings.PROMETHEUS_USER_SIGNED_UP.inc()
        return render(request, 'welcome.html')
    
    프로메테우스는 자신의 검색 언어 PromQL을 가지고 왔다.우리는 다음과 같은 조회를 통해 프로메테우스의 사용자 등록 상황을 그려서 지난 24시간 동안 얼마나 많은 사용자가 등록했는지 알 수 있다.
    increase(django_users_signed_up_total[24h])
    
    장점: 응용 프로그램의 운행 상황에 대한 세립도 데이터를 제공합니다.개별 버그 보고/추적을 제외한 거의 모든 용례를 포함합니다.
    단점: 복잡한 모니터링 창고를 학습, 배치, 유지하는 데 시간이 걸린다.만약 당신이 취미 프로젝트나 소규모 초창기 회사에 종사하고 있다면, 당신은 이런 것들을 배치하는 데 시간을 낭비하고 있을 것이다.

    미나리 모니터링 임무


    내가 참여한 대부분의 중대형 Django 프로젝트는 미나리를 사용하여 배경 임무를 처리한다.통상적으로 우리는 그런 불필요한 임무를 하역할 것이다
  • 은 너무 느려서 HTTP 요청/응답 주기 내에 완료할 수 없습니다.예: 타사 API
  • 에서 청구서 생성 또는 데이터 읽기
  • 은 향후 실행될 예정입니다.예를 들어 독촉 우편물.
  • 미나리 임무는 Django의 상하문 밖에서 수행되기 때문에 우리는 미나리와 Django를 각각 감시해야 한다.나는 프로메테우스를 광범위하게 사용해서 my own exporter for Celery metrics을 썼다.

    대시보드에서 다음 지표에 주목하는 것을 좋아합니다.
  • 지난 24시간 동안 수행된 총 작업
  • 가장 일반적인 작업
  • 가장 실패한 작업(성공률%)
  • 자동 경고는 다음 기준에 따라 전송됩니다.
  • , N 개 이상의 작업이 지난 10분 동안 실패할 경우N은 중요도에 따라 다름
    이것은 임무다.영수증 = 매우 중요하기 때문에 이런 상황이 발생할 때 나에게 일깨워 준다
    발생타사 API 데이터 검색 = 중요하지 않습니다.
  • 모든 미나리 일꾼이 죽었을 때
  • exporter는 자동으로 생성된 경보를 덧붙였는데, 나는 일부 고객 사이트의 생산에서 이런 경보를 사용했다.너는 mixin subdirectory에서 그것들을 찾을 수 있다.

    좋은 웹페이지 즐겨찾기