Monitorar Continuamente Duas Métricas de Status dos Servidores

Lista de subtasks:

Implantação #497: Investigar Balanceador de Carga

Nesta tarefa, foi feita uma pesquisa sobre os atuais schedulers para o Open Nebula, entre eles, foram pesquisados: SVMSched e o Haizea.

Durante a pesquisada realizada, estes schedulers não implementavam recursos necessários para o projeto EduCloud, como monitoramento constante de métricas, instanciação e liberação de máquinas virtuais, dependendo dos resultados destas métricas.

Foi decidido então, que um "monitor/daemon/balanceador" seria desenvolvido, a este chamamos de educloud-mon.

Implantação #498: Desenvolver o Monitor e Balanceador de Carga (EduCloud-Mon)

O educloud-mon é atualmente um monitor do OpenNebula, porém com possibilidade para extender-se ao OpenStack, por exemplo. Ele foi feito em Python e utiliza-se da biblioteca: python-oca, para as tarefas de comunicação com o OpenNebula.

O educloud-mon precisa ser executado como root, em qualquer máquina na mesma rede dos nós do OpenNebula. Ele foi desenvolvido de modo que permita ao administrador configurar métricas e parâmetros, tornando ele um daemon bem flexível. Seu principal arquivo de configuração é o educloud-mon.conf.

Atualmente, em nosso ambiente de testes, o educloud-mon está funcionando na máquina 200.145.146.198, e encontra-se instalado em /usr/local/bin/educloud-mon/.

Aqui você encontra um exemplo de um arquivo de configuração educloud-mon.conf.

Além do arquivo de configuração você pode passar alguns parâmetro por meio de argumentos ao daemon. Para maiores informações, execute:

./educloud-mon.py --help

O educloud-mon, quando determina que precisa instanciar uma nova máquina virtual, lê o template da máquina virtual, e envia para o OpenNebula o comando para instanciar uma nova máquina virtual. Para isso, os templates das máquinas virtuais (arquivos de configuração), precisa estar na mesma máquina que o educloud-mon, e você deve configurar o parâmetro template em seu arquivo de configuração:

# Relative path to template to start when metrics get values >= top_thresolds
# This path is relative to the home of the user oneadmin on OpenNebula
# controller. This hardcoded path is necessary because we are using OpenNebula
# 2.2.1 version.
template = "/usr/local/bin/educloud-mon/templates/teste.template" 

Sistema de envio de alertas

O educloud-mon conta também com um sistema simples para envio de alertas por email. Caso alguma ação durante a sua execução falhe, um email de alerta será enviado.

Para isso configure a seção [notification] no educloud-mon.conf:

# Settings for email notification system
[notification]

# If enabled, emails will be sent to administrators when errors occur.
# Default is true.
enable_notifications = 0

# SMTP Server to use
smtp_server = 127.0.0.1

# SMTP Port
smtp_port = 25

# Use SMTP Authentication ? 
# Default is true.
smtp_auth = 0

# SMTP User for authentication
smtp_user = user

# SMTP Pass for authentication
smtp_pass = password

# Mail From
mail_from = "educloud-mon <educloud-mon@ncc.unes.pbr" 

# Mail to
mail_to = "admin@ncc.unesp.br" 

Implantação #499: Configurar Balanceador de Carga de Forma que Monitore duas Métricas de VMs Open Nebula

O educloud-mon, monitora N métricas passadas por arquivo de configuração (educloud-mon.conf). Até o momento do desenvolvimento, ele executa duas ações: criar uma nova máquina virtual e liberar uma nova máquina virtual, quando o top thresold é atingido e o bottom thresold, respectivamente.

Métricas são passadas via arquivo de configuração bem como seus valores de top e bottom. As métricas ficam em um diretório "scripts/" idependente do educloud-mon.

Exemplo de configuração de métricas e seus valores no arquivo de configuração do educloud-mon:

metrics = {
          'cpu-load': {
             'top_thresold': '70',
             'bottom_thresold': '2',
             'script': '/usr/local/bin/educloud-mon/scripts/web-cpu-usage.py',
             'check_interval': '2',
             'average_checks': '5',
          },
          'active-users': {
             'top_thresold': '20',
             'bottom_thresold': '0',
             'script': '/usr/local/bin/educloud-mon/scripts/web-active-users.py',
             'check_interval': '2',
             'average_checks': '5',
          },
    }

No exemplo acima, o educloud-mon irá monitorar duas métricas: "cpu-load" e "active-users". O parâmtro "script" de cada métrica, informa qual o script irá ser executado para coletar esta métrica.

Cada métrica tem o seus valores de top_thresold e bottom_thresold. No exemplo acima, caso o script retorne um valor superior a 70, o top_thresold é atingido. Caso ele retorne um valor abaixo de 2, o bottom_thresold é atingido.

A eurística para determinar se uma nova máquina será instanciada ou liberada é a seguinte:

  • Caso alguma métrica tenha atingido o top_thresold, uma nova máquina será instanciada;
  • Caso nenhuma métrica tenha atingido o top_thresold e nenhuma métrica tenha atingido o bottom_thresold, nada será feito;
  • Caso nenhuma métrica atingiu o top_thresold e alguma métrica tenha atingido o bottom_thresold, uma máquina será liberada;

Also available in: PDF HTML TXT