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_thresolde nenhuma métrica tenha atingido obottom_thresold, nada será feito; - Caso nenhuma métrica atingiu o
top_thresolde alguma métrica tenha atingido obottom_thresold, uma máquina será liberada;