h1. Monitorar Continuamente Duas Métricas de Status dos Servidores h2. Lista de subtasks: h3. 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":http://blog.opennebula.org/?p=1646 e o "Haizea":http://haizea.cs.uchicago.edu/. 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*. h3. 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":https://github.com/lukaszo/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 --helpO _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"h4. 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-monh3. 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;