sábado, 9 de janeiro de 2016

Monitoramento de Rede em Ambientes Virtualizados (Hyper-V)

Olá Pessoal!

Acredito que grande parte dos administradores de rede já se depararam com a seguinte situação: identificar o motivo pelo qual o servidor de determinada aplicação não responde como planejado. Todos nos sabemos que fatores como o uso do processador, memória RAM, velocidade das unidades de disco, qualidade da implantação física e lógica da rede influenciam diretamente no desempenho dos servidores, principalmente quando os mesmos são responsáveis por funções críticas (banco de dados, e-mail, entre outros). Em ambientes virtualizados, o processo de identificação se torna ainda mais complexo, afinal, o problema pode estar relacionado a falta de recursos no host físico, ao mal dimensionamento das máquinas virtuais ou ambos. Nesse artigo irei discutir como monitorar e detectar problemas relacionados a conectividade de rede.

Tipicamente, o sistema operacional de gerenciamento (host de virtualização) deve possuir diversas interfaces rede rede, algumas são dedicadas exclusivamente a atender uma ou mais máquinas virtuais, outras são compartilhadas entre as VMs e o host de virtualização, e ainda, algumas podem ser utilizadas unicamente para fins de gerenciamento. Confira atentamente a imagem abaixo:

Switch Virtual do Hyper-V - Modo Externo (fonte:
http://www.altaro.com/hyper-v/the-hyper-v-virtual-switch-explained-part-1/).






Note que existe uma interface de rede real (Physical NIC) conectada diretamente a uma rede física qualquer (Physical Network). Para que as máquinas virtuais possam se comunicar com outros hosts na rede física, as mesmas devem estar vinculadas a um switch virtual externo. Na figura acima, podemos notar que existem três maquinas virtuais conectadas a um único switch virtual. Observe que esse switch virtual está diretamente vinculado a um único adaptador de rede físico. É exatamente nesse ponto que devemos prestar bastante atenção! Será que a largura de banda oferecida pelo adaptador é suficiente para suportar o tráfego gerado pelas três máquinas virtuais? Quais das máquinas virtuais consomem mais recursos de rede? Todas essas respostas podem ser obtidas por meio de um utilitário muito conhecido: O Performance Monitor!

Performance Monitor
Essa ferramenta traz dois grandes desafios: saber o que monitorar (existem milhares de marcadores de desempenho) e analisar os resultados obtidos. Não entrarei em detalhes de como operar a ferramenta (o que é relativamente simples), concentrarei os esforços em contadores de desempenho específicos e analise dos resultados.

Comece monitorando as interfaces de rede físicas alocadas ao host de virtualização. Para isso, utilize os seguintes contadores de desempenho:

Network Interface(*)\Bytes Total/sec

Esse contador indica a quantidade total de bytes por segundo que "atravessam" determinada interface de rede. Use os seguintes parâmetros para concluir sua analise:
  • Interface de 10Gb: Máximo de 1.250.000.000 (1 bilhão duzentos e cinquenta milhões de Bytes/sec);
  • Interface de 1Gb: Máximo de 125.000.000 (cento e vinte e cinco milhões de Bytes/sec);
  • Interface de 100 Mb: Máximo de 12.500.000 (doze milhões e quinhentos mil Bytes/sec).
Para calcular a porcentagem de uso da interface de rede, utilize o seguinte exemplo:

Você monitorou sua rede durante um dia comum de trabalho e obtive o número médio de 100.850,637 para o contador Bytes Total/sec. Divida esse valor por mil e encontrará o valor de 100,85 MB/sec. Por fim, divida esse valor por 1,25 (1% da largura de banda de uma interface de 1Gb) e encontrará o valor aproximado de 81% de uso.

Em relação a porcentagem de uso da rede, a Microsoft adverte para os seguinte valores:
  •  Até 49% - Utilização considerada normal;
  • Entre 50% e 79% - Utilização alta;
  • Acima de 80% - Utilização extremamente alta. Possível degradação de desempenho.
Se você precisa de uma analise mais detalhada, pode usar os seguintes contadores para separar os dados recebidos dos dados enviados:
  •  Network Interface(*)\Bytes Received/sec
  • Network Interface(*)\Bytes Sent/sec
 
Network Interface(*)\Network Queue Length
 
Esse contador indica o número de pacotes aguardado na fila de saída de determinada interface de rede. Preferencialmente, esse contador deve ser sempre igual a 0. Valores entre 1 e 2 requerem atenção, valores superiores a 2 indicam uma sobrecarga da interface de rede.

Network Interface(*)\Current Bandwidth

Esse contador indica a largura de banda máxima suportada por cada interface (bits/sec). Ideal para detectar se realmente a interface está operando na velocidade adequada. Por exemplo, se você conectar uma interface de 1Gb em uma porta do switch limitada a 100Mb esse contador irá indicar a velocidade real, ou seja, 100Mb.
 
Se algum problema for detectado, como saber qual máquina virtual que esta consumindo um número maior de recursos de rede? Para isso, existem contadores específicos do Hyper-V:
 
Hyper-V Virtual Network Adapter(*)\Bytes/sec
 
Esse contador indica a quantidade total de bytes por segundo que "atravessam" determinada interface de rede virtual. Ideal para detectar a quantidade de bytes enviados e recebidos por cada VM.
 
Hyper-V Virtual Network Adapter(*)\Bytes Received/sec
 
Esse contador indica a quantidade de bytes recebidos por uma interface de rede virtual específica.
 
Hyper-V Virtual Network Adapter(*)\Bytes Sent/sec
 
Esse contador indica a quantidade de bytes enviados por uma interface de rede virtual específica.
 
Por fim, também é possível monitorar o tráfego de rede no switch virtual. Para isso, utilize os seguintes contadores:
 
Hyper-V Virtual Switch(*)\Bytes/sec
 
Esse contador indica a quantidade total de bytes por segundo que "atravessam" o switch virtual.

Hyper-V Virtual Switch(*)\Bytes Received/sec

Esse contador indica a quantidade de bytes recebidos pelo switch virtual.

Hyper-V Virtual Switch(*)\Bytes Sent/sec

Esse contador indica a quantidade de bytes enviados pelo switch virtual.
 
Importante: Os contadores relacionados ao switch virtual mostram o dobro de tráfego se comparado aos contadores de interfaces de rede física. Eles computam os dados de entrada/saída para cada porta. Por exemplo, se uma máquina virtual está enviando 1000 bytes/sec, isso quer dizer que o switch virtual visualiza 1000 bytes/sec na porta que a VM está conectada e 1000 bytes/sec na porta que o switch virtual está conectado à rede externa.