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.