https://a.storyblok.com/f/270183/30795/1d99f2aa7e/disk-usage-monitoring-system.png

Crie um sistema de monitoramento do uso de disco usando a Messages API do Vonage

Publicado em July 20, 2023

Tempo de leitura: 4 minutos

Introdução

O uso do disco é uma métrica importante a ser monitorada na infraestrutura de TI de qualquer organização. Sem estar ciente do uso do disco a qualquer momento, uma organização corre o risco de enfrentar problemas de desempenho nas aplicações em produção, bem como sobrecargas financeiras decorrentes de custos inesperados incorridos na atualização da infraestrutura existente.

Os provedores modernos de infraestrutura em nuvem, como a AWS, oferecem sistemas avançados de métricas com alarmes configurados, mas isso acarreta um custo adicional. O uso de disco é uma métrica fundamental e, por uma fração do custo cobrado pelos provedores de nuvem, você pode desenvolver seu próprio sistema de monitoramento de uso de disco, completo com alertas. Legal, né?

Neste guia, vamos explicar detalhadamente como criar um sistema personalizado de monitoramento do uso de disco usando a linguagem de programação Python e a Messages API do Vonage. Observe que você poderá executar esse programa em seus servidores e até mesmo em sua máquina de desenvolvimento local.

Pré-requisitos:

Configurar uma aplicação da Vonage por meio da CLI da Vonage

  1. Instale a versão mais recente da CLI da Vonage em sua máquina de desenvolvimento: npm install --location=global @vonage/cli

  2. Obtenha sua API_KEY e API_SECRET da Vonage acessando a página de configurações no painel de controle

  3. Configure seu Vonage API_KEY e API_SECRET a partir da última etapa: vonage config:set --apiKey=API_KEY --apiSecret=API_SECRET

  4. Crie um aplicativo de mensagens do Vonage: use o comando vonage apps:create e siga as instruções no modo CLI interativo, conforme mostrado abaixo:

✔ Application Name … <insert any appropriate name>
✔ Select App Capabilities › <select Messages>
✔ Create messages webhooks? › (y/N)
✔ Allow use of data for AI training? Read data collection disclosure - https://help.nexmo.com/hc/en-us/articles/4401914566036<select either y/N>

Nossos objetivos

Queremos desenvolver uma aplicação leve que faça o seguinte:

  • Obter nossas estatísticas de uso do disco (seja no servidor ou na máquina de desenvolvimento local). Vamos utilizar uma biblioteca do Python, psutil para nos fornecer as estatísticas de uso do disco.

  • Defina um limite arbitrário, por exemplo, 50% do uso do disco, que nos permita enviar notificações quando esse limite for atingido.

  • Personalize uma mensagem que nos avise quando o uso do disco estiver acima do nosso limite. Contamos com a API da Vonage para nos enviar essa mensagem.

Etapas

  1. Crie um diretório de projeto localmente: Por exemplo, mkdir disk_usage_monitor && cd disk_usage_monitor.

  2. Dentro do diretório do nosso projeto, crie um ambiente virtual para manter as dependências do nosso projeto separadas das dependências globais do Python: python3 -m venv .venv.

  3. Ative nosso ambiente virtual usando o seguinte comando: source .venv/bin/activate.

  4. Dentro do diretório do nosso projeto, crie um arquivo requirements.txt usando o comando touch requirements.txt e copie as seguintes dependências do projeto para o arquivo:

vonage==3.5.1
python-dotenv==1.0.0
psutil==5.9.5
  1. Para instalar as dependências em nosso ambiente virtual, execute o seguinte comando: pip3 install -r requirements.txt

  2. Crie um arquivo .env que irá conter nossas variáveis de ambiente usando o seguinte comando touch .env e copie o seguinte conteúdo:

Observação: Alterar YOUR_VONAGE_API_KEY, YOUR_VONAGE_API_SECRET, THE_SENDER_NUMBER e THE_RECIPIENT_NUMBER pelas informações encontradas no Painel da Vonage.

# Vonage Credentials
VONAGE_API_KEY=YOUR_VONAGE_API_KEY
VONAGE_API_SECRET=YOUR_VONAGE_API_SECRET
VONAGE_SENDER=THE_SENDER_NUMBER
RECIPIENT=THE_RECIPIENT_NUMBER
  1. Adicione um arquivo chamado monitor.py usando o comando touch monitor.py no diretório do nosso projeto e cole o seguinte conteúdo:

Observação:

  • psutil.disk_usage da psutil biblioteca Python, retorna uma tupla nomeada no formato: sdiskusage(total=xxxxx, used=xxxxx, free=xxxx, percent=47.0). O valor percentual será o que mais nos interessará.

import psutil
import vonage
from dotenv import dotenv_values

# load your environment variables
config = dotenv_values(".env")

client = vonage.Client(key=config["VONAGE_API_KEY"],  secret=config["VONAGE_API_SECRET"])

# get disk usage statistics for home directory
stats = psutil.disk_usage("/")


# device: give it an easily identifiable name e.g. server 1.89.200.4
device = "local dev machine"

# send out a message indicating the disk usage level
client.messages.send_message(
	{
    	"channel": "sms",
    	"message_type": "text",
    	"from": config["VONAGE_SENDER"],
    	"to": config["RECIPIENT"],
    	"text": f"Your Disk Usage is at {stats[-1]} % on {device}.",
	}
)

Com isso, você pode executar o monitor.py arquivo usando o seguinte comando: python3 monitor.py.

  1. Gostaríamos de receber notificações assim que um determinado limite for atingido em nosso dispositivo. Podemos modificar nosso monitor.py arquivo para que nos envie alertas assim que um determinado limite for atingido:

# our previous code remains as is on this section
...
# the disk usage threshold. Adjust this to an acceptable threshold of your choice
threshold = 50

# if disk usage is above given threshold, send out an sms alert
if stats[-1] > threshold:
	client.messages.send_message(
    	{
        	"channel": "sms",
        	"message_type": "text",
        	"from": config["VONAGE_SENDER"],
        	"to": config["RECIPIENT"],
        	"text": f"Your Disk Usage is at {stats[-1]} % on {device}. Delete some files soon to create some disk space!",
    	}
	)

Bônus

Em sistemas Unix, podemos configurar esse programa como uma tarefa cron que seja executada diariamente (ou de acordo com a frequência de sua preferência) para realizar verificações regulares do uso do disco:

Edite sua entrada no crontab em uma sessão de terminal usando o seguinte comando sudo crontab -e e adicione a seguinte entrada no cron para ser executada diariamente às 6h:

0 6 * * * cd <project_directory> && .venv/bin/python3 monitor.py

No Windows, podemos configurar nosso programa como uma tarefa agendada para ser executada diariamente, seguindo estas etapas:

  1. Abra o Agendador de Tarefas a partir do menu Iniciar.

  2. No painel de ações, selecione a opção “Criar tarefa” para criar uma nova tarefa cron.

  3. Na janela “Criar tarefa” que aparece na tela, insira um nome para a tarefa na guia “Geral” e mantenha as demais opções como estão por padrão.

  4. Selecione a aba “gatilhos” e clique em “novo” para adicionar um gatilho.

  5. Na janela “Iniciar tarefa”, selecione “diariamente” no painel lateral e defina a hora de início como 06:00:00 da manhã, por exemplo. Deixe as demais opções como estão por padrão.

  6. Crie uma nova ação no painel de ações e, no painel “Nova ação”, forneça o caminho para o executável do Python, que é o resultado da execução do seguinte comando no prompt de comando: where python.

  7. Na seção “Adicionar argumentos”, insira o nome do arquivo, por exemplo monitor.py.

  8. Na seção “Início”, adicione o caminho para o diretório do projeto: C:\Users\<user>\path\to\project-directory.

Conclusão

Criamos um sistema completo de monitoramento do uso de disco, com um componente de alertas que utiliza as APIs da Vonage para enviar alertas por SMS.

Se você gostou deste conteúdo ou tiver mais alguma dúvida, pode me enviar uma mensagem no e-mail ou ver o exemplo de código completo no GitHub.

A Vonage sempre valoriza a participação da comunidade. Fique à vontade para se juntar à Vonage no GitHub e no Slack da Comunidade Vonage.

Compartilhar:

https://a.storyblok.com/f/270183/400x400/d6b5221cb3/adrian-francis.png
Adrian Francis

Adrian is a problem solver and Python developer advocate. He works with various programming languages to solve engineering problems. Introduced to programming at age 16, Adrian has spent the last 8 years oscillating between backend development and automation. He lives in Nairobi and when not writing code he is most likely playing Call Of Duty or NBA 2K on his PlayStation, riding his bicycle or binge watching the latest series on Netflix.