Skip to content

django >= 2.2

Este projeto verifica várias condições e fornece relatórios quando comportamentos anômalos são detectados.

Os seguintes checks de saúde estão incluídos neste projeto:

  • cache
  • banco de dados
  • armazenamento
  • armazenamento AWS S3
  • Migrações

Escrever seus próprios checks de saúde personalizados também é rápido e fácil.

Também gostamos de contribuições, então não hesite em fazer um pull request.

Casos de Uso

O principal caso de uso pretendido é monitorar condições via HTTP(S), com respostas disponíveis em formatos HTML e JSON. Quando você recebe uma resposta que inclui um ou mais problemas, você pode então decidir a ação apropriada, que poderia incluir a geração de notificações e/ou a automação da substituição de um nó com falha por um novo. Se você estiver monitorando a saúde em um ambiente de alta disponibilidade com um balanceador de carga que retorna respostas de vários nós, observe que certas verificações (por exemplo, uso de disco e memória) retornarão respostas específicas ao nó selecionado pelo balanceador de carga.

Versões Suportadas

Oficialmente, suportamos apenas a última versão do Python, bem como a última versão do Django e a última versão LTS do Django.

Instalação

Primeiro, instale o pacote django-health-check:

.. code::

pip install django-health-check

Adicione o verificador de saúde a uma URL que você deseja usar:

.. code:: python

urlpatterns = [
    # ...
    path('health_check/', include('health_check.urls', namespace='health_check')),
]

Adicione os aplicativos health_check às suas INSTALLED_APPS:

.. code:: python

INSTALLED_APPS = [
    # ...
    'health_check',                             # obrigatório
    'health_check.db',                          # checkers padrão de saúde do Django
    'health_check.cache',
    'health_check.storage',
    'health_check.contrib.migrations',
    'health_check.contrib.s3boto3_storage',     # requer boto3 e backend S3BotoStorage
]

Nota: Se estiver usando o boto 2.x.x, use health_check.contrib.s3boto_storage

Se estiver usando o check do BD, execute as migrações:

.. code::

python manage.py migrate

Configuração do Monitoramento

Você pode usar ferramentas como o Pingdom_ ou outros robôs de disponibilidade para monitorar o status do serviço. A endpoint /health_check/ responderá com um HTTP 200 se todas as verificações passarem e um HTTP 500 se algum dos testes falhar.

.. code::

$ curl -v -X GET -H http://www.example.com/health_check/

> GET /ht/ HTTP/1.1
> Host: www.example.com
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: text/html; charset=utf-8

<!-- Este é um trecho -->
<div class="container">
    <h1>Status do sistema</h1>
    <table>
        <tr>
            <td class="status_1"></td>
            <td>CacheBackend</td>
            <td>funcionando</td>
        </tr>
        <tr>
            <td class="status_1"></td>
            <td>DatabaseBackend</td>
            <td>funcionando</td>
        </tr>
        <tr>
            <td class="status_1"></td>
            <td>S3BotoStorageHealthCheck</td>
            <td>funcionando</td>
        </tr>
    </table>
</div>

Obtendo Relatórios JSON Legíveis por Máquina

Se você deseja relatórios de status legíveis por máquina, pode solicitar a endpoint /health_check/ com o cabeçalho HTTP Accept definido como application/json ou passar format=json como um parâmetro de consulta.

O backend retornará uma resposta JSON:

.. code::

$ curl -v -X GET -H "Accept: application/json" http://www.example.com/health_check/

> GET /ht/ HTTP/1.1
> Host: www.example.com
> Accept: application/json
>
< HTTP/1.1 200 OK
< Content-Type: application/json

{
    "CacheBackend": "funcionando",
    "DatabaseBackend": "funcionando",
    "S3BotoStorageHealthCheck": "funcionando"
}

$ curl -v -X GET http://www.example.com/health_check/?format=json

> GET /ht/?format=json HTTP/1.1
> Host: www.example.com
>
< HTTP/1.1 200 OK
< Content-Type: application/json

{
    "CacheBackend": "funcionando",
    "DatabaseBackend": "funcionando",
    "S3BotoStorageHealthCheck": "funcionando"
}

Comando Django

Você pode executar o comando Django health_check para realizar seus checks de saúde via linha de comando, ou periodicamente com um cron, da seguinte forma:

.. code::

python manage.py health_check

Isso deve gerar a seguinte saída:

.. code::

DatabaseHealthCheck      ... funcionando
CustomHealthCheck        ... indisponível: Algo deu errado!

Semelhante à versão http, um erro crítico fará com que o comando saia com o código de saída 1.

Outros Recursos

  • django-watchman_ é um pacote que faz algumas das mesmas coisas de uma maneira ligeiramente diferente.
  • Veja este weblog_ sobre a configuração do Django e verificação de saúde com o AWS Elastic Load Balancer.