none
Medição de banda de VMs no Hyper-V RRS feed

  • Pergunta

  • Pessoal, bom dia.

     

    Temos algumas VMs rodando no Hyper-V e precisamos medir o uso de banda (bytes sent/sec e bytes received/sec).

     

    Já descobri que posso obter esta informação rodando o Performance Monitor, um script no PowerShell usando o cmdlet Get-Counter no host ou usando Rules no Operations Manager. Em todos os casos utilizo os contadores \Hyper-V Virtual Network Adapter(*)\Bytes Received/sec e \Hyper-V Virtual Network Adapter(*)\Bytes Sent/sec.

     

     

    O que está me preocupando é o resultado. O adaptador de rede da VM aparece no seguinte formato: Nome da VM_Ethernet Port_id gigantesco

     

    Exemplo: VMSQL01_Ethernet Port_14895e2c-1fe1-4e70-98a5-b7c9a0a0e823—10fdb526-f7df-4089-aa68-afbfcd750af4

     

    Se a VM tem somente um adaptador de rede, está tudo bem. Mas imagine uma VM com mais de um adaptador?

     

    Não fica fácil saber a qual adaptador pertence o resultado da medição.

     

     

    Algum de vocês já passou por isso e pode me orientar?

     

    Obrigado.


    Uellington Santos MCITP Enterpise Administrator
    sexta-feira, 27 de agosto de 2010 11:47

Respostas

  • Pessoal, conseguimos fazer.

    A amarração é feita com os campos antcedent e dependent que aparecem quando consultamos a classe Msvm_activeconnection via WMI. Essa classe mapeia as portas que as VMs estão usando no virtual switch do hyper-v e com isso podemos pegar a VLAN, depois com a ssociação pelo nome da VM e ID da interface, podemos fazer a associação da VLAN com o tráfego obtido via get-counter:

    Os principais comandos são,

    Para pegar a VLAN via WMI:

    gwmi -namespace "root\virtualization" -query "Select antecedent,dependent From Msvm_activeconnection" -ComputerName hyperv-server01 | select-object antecedent,dependent

    e

    Para pegar os contadores de Bytes enviados e recebidos:

    Get-Counter -Counter \\hyperv-server01\Hyper-V Virtual Network Adapter(*)\Bytes Received/sec

    Get-Counter -Counter \\hyperv-server01\Hyper-V Virtual Network Adapter(*)\Bytes Sent/sec

     

    Infelizmente eu não posso postar o script aqui, pois a empresa onde trabalho tem uma norma que diz que qualquer código desenvolvido usando os recursos da empresa (feito no horário comerical, usando os computadoes, rede e etc da empresa) são de sua propriedade e não podem ser divulgados sem autorização.

    Um forte abraço a todos.


    Uellington Santos MCITP Enterpise Administrator
    domingo, 5 de setembro de 2010 15:48

Todas as Respostas

  • Olá Uellington, como está?

    Pelo que você mencionou, as opções que foram escolhidas como Hyper-V Virtual Network Adapter(*) fazem referencia a todas placas de rede do servidor e por esse motivo você visualiza esse ID gigantesco. Isso se dá pelo asterisco (*) que significa todas as instâncias em um só contador. Se você tiver 4 placas de rede, as 4 serão capturadas e visualizadas em um só contador. Na hora de escolher o objeto, na parte inferior você tem a opção da instancia, que nesse caso seriam as placas de rede que você tem. Seria recomendado configurar um contador para cada instancia.

    Tente fazer o teste para ver se é isso mesmo e nos avise.

    Leandro Carvalho.
    http://leandroesc.spaces.live.com

     


    MCSA+M+S,MCSE+S,MCTS,MCITP,MCT,MCBMSS,MVP (Virtual Machine)
    sábado, 28 de agosto de 2010 00:46
    Moderador
  • Olá Leandro, bom dia.

    Obrigado pela resposta.

    Você está correto: Eu estou usando o (*) para visualizar todas as instâncias do contador.

    Mas você cometeu um equívoco: Quando eu uso o (*) eu não vejo o resumo de todas as instâncias (no caso todos os adaptadores de rede) em um valor só. Eu vejo o valor individual de cada instância.

    Então, eu vejo:

    1. Os adaptadores físicos do meu host hyper-v

    2. Os adaptadores virtuais de cada VM.

    O problema é quando uma VM possui mais de um adaptador de rede. Como cada instância vem com esse ID, eu não sei identificar de qual adaptador é aquela medição.

     

     

     


    Uellington Santos MCITP Enterpise Administrator
    terça-feira, 31 de agosto de 2010 15:00
  • Fala Cara,

    É verdade Uellington, usando o (*) você vê os valores separados, mas nesse caso da VM com 2 ou mais interfaces de rede você só visualiza um valor para várias placas.

    Existe a possibilidade de você monitorar pela própria VM, daí você poderia ter os valores mais detalhados. O que acha?

    Leandro Carvalho.
    http://msmvps.com/blogs/msvirtualization

     


    MCSA+M+S,MCSE+S,MCTS,MCITP,MCT,MCBMSS,MVP (Virtual Machine)
    terça-feira, 31 de agosto de 2010 23:11
    Moderador
  • Opa, bom dia Leandro.

    Bem, talvez eu não esteja sendo claro. Por isto vou colocar a saída do cmdlet Get-Counter:

    Get-Counter -Counter "\Hyper-V Virtual Network Adapter(*)\Bytes Received/sec"


    Timestamp                 CounterSamples                                                                              
    ---------                 --------------                                                                              
    01/09/2010 08:51:50                                                                                                                             
                              \\hyper-server01\hyper-v virtual network adapter(VM01_ethernet port_e7571b58-2496-491e-b61f-f5049fc04fee--441841c9-e573-47c7-a60c-36480f48b2d9)\bytes received/sec : 0                                                                                           
                                                                                                                          
                              \\hyperv-server01\hyper-v virtual network adapter(VM01_ethernet port_e7571b58-2496-491e-b61f-f5049fc04fee--8ff621b1-f137-40fe-bbc5-e0b8acf28a96)\bytes received/sec : 0                                                                                           
                                                                                                                          
                              \\hyperv-server01\hyper-v virtual network adapter(VM01_ethernet port_e7571b58-2496-491e-b61f-f5049fc04fee--2a6b1fac-e736-4a63-8fb6-cc90646b507a)\bytes received/sec : 0                                                                                           
                                                                                                                          
                              \\hyperv-server01\hyper-v virtual network adapter(VM01_ethernet port_e7571b58-2496-491e-b61f-f5049fc04fee--e4e49ec7-a262-421f-8763-6380251e638a)\bytes received/sec : 0   

     

    Observe:

    1. Que tenho um servidor chamado hyperv-server01;

    2. Tenho uma máquina virtual chamada VM01 com quadtro adapatadores de rede;

    3. Utilizei o comdlet get-counter para o contador Hyper-V Virtual Network Adapter(*)\Bytes Received/sec;

    4. O contador me retorna quatro medições (no meu caso com valor 0, pois a vm está em redes inválidas). Cada medição possui um ID diferente, cada ID representa uma interface da minha máquina virtual.

    Suponha que esta VM01 está em produção, uma interface é para Internet, outra é para becape, outra é para trafego iscsi e outra é para a rede interna (cada inteface em uma vlan). Com o resultado acima, eu não tenho como associar o tráfego à interface.

    No meu ambiente, eu tenho uma interface de rede no host (máquina física), que enxerga todas as VLANS da minha rede, quando eu ativo uma interface virtual na minha VM, eu defino em suas propriedades em qual VLAN que aquela interface virtual ficará.

    Meus colegas de trabalho e eu já percebemos que podemos pegar a VLAN que a interface virtual está através do WMI, com o cmdlet gwmi. Vimos que os IDs que vemos na saída do cmdlet get-counter, de alguma forma estão relacionados com os IDs que vemos com o gwmi. Para isto contamos com a ajuda da documentação das classes WMI que estão aqui: http://msdn.microsoft.com/en-us/library/cc136953(v=VS.85).aspx

    Ontem, no final do dia, acho que conseguimos fazer a amarração entre um comando e outro, hoje vamos quebrar a cabeça para achar a sintaxe correta, testar e montar um script.

    No final, teremos o resultado do Get-Counter, ou seja as instâncias acima com os IDs malucos e do lado de cada instância virá associada a VLAN que obtemos com o gwmi. Desta forma, conseguiremos ver a primeira instância está na VLAN de internet, a segunda na VLAN de becape, a terceira na VLAN iscsi e a quarta na VLAN interna.

    Infelizmente não posso medir de dentro de cada VM, pois não terei acesso a elas e seria necessário desenvolver um meio (software) para cada tipo de sistema operacional que rodasse na VM.

    E se o dono da VM resolvesse interromper o nosso meio de medição que roda em sua VM? Isto não seria legal, precisamos verificar o uso de banda de um ponto fora da VM, no nosso caso o melhor ponto seria no servidor físico, pois em sua memória estão todas as informações que precisamos. Só ta dificil aprender como interpretá-las, mas creio que chegaremos lá.

    Muito obrigado.

     

     

     


    Uellington Santos MCITP Enterpise Administrator
    quarta-feira, 1 de setembro de 2010 12:21
  • Olá Uellington.

    Obrigado pela ótima explicação, realmente tinha entendido outra coisa. Agora ficou claro. =)

    Eu nunca usei esses contadores em ambientes de VMs com mais de 1 placa de rede e eu também não sabia sobre essa consulta WMI para converter os valores.

    Por favor, se eles funcionarem, poste para nós. Será de grande valor pra gente.

    Obrigado pelo post.

    Até.

    Leandro Carvalho
    http://msmvps.com/blogs/msvirtualization


    MCSA+M+S,MCSE+S,MCTS,MCITP,MCT,MCBMSS,MVP (Virtual Machine)
    quinta-feira, 2 de setembro de 2010 04:26
    Moderador
  • Pessoal, conseguimos fazer.

    A amarração é feita com os campos antcedent e dependent que aparecem quando consultamos a classe Msvm_activeconnection via WMI. Essa classe mapeia as portas que as VMs estão usando no virtual switch do hyper-v e com isso podemos pegar a VLAN, depois com a ssociação pelo nome da VM e ID da interface, podemos fazer a associação da VLAN com o tráfego obtido via get-counter:

    Os principais comandos são,

    Para pegar a VLAN via WMI:

    gwmi -namespace "root\virtualization" -query "Select antecedent,dependent From Msvm_activeconnection" -ComputerName hyperv-server01 | select-object antecedent,dependent

    e

    Para pegar os contadores de Bytes enviados e recebidos:

    Get-Counter -Counter \\hyperv-server01\Hyper-V Virtual Network Adapter(*)\Bytes Received/sec

    Get-Counter -Counter \\hyperv-server01\Hyper-V Virtual Network Adapter(*)\Bytes Sent/sec

     

    Infelizmente eu não posso postar o script aqui, pois a empresa onde trabalho tem uma norma que diz que qualquer código desenvolvido usando os recursos da empresa (feito no horário comerical, usando os computadoes, rede e etc da empresa) são de sua propriedade e não podem ser divulgados sem autorização.

    Um forte abraço a todos.


    Uellington Santos MCITP Enterpise Administrator
    domingo, 5 de setembro de 2010 15:48