Article ID: 117158, created on Feb 6, 2014, last review on Apr 11, 2016

  • Applies to:
  • Operations Automation 5.5
  • Operations Automation 5.4
  • Business Automation 5.4
  • Virtuozzo
  • Virtuozzo containers for Linux
  • Virtuozzo hypervisor
  • Virtual Automation

Síntomas

Cuando se examina el tráfico en un contenedor, como por en Parallels Panel para los dominios alojados, la cantidad de tráfico es inferior a la cantidad de tráfico mostrada en el panel de control de POA, PBA-S o Power Panel.

¿Existe alguna forma de que el propietario de un contenedor pueda verificar el tráfico contabilizado?

Causa

  1. Detalles del proceso de cálculo del tráfico en Parallels Panel.

    Parallels Panel comprueba los archivos de registro de los servicios en el contenedor de forma individual para cada dominio. Pero esto es sólo una parte del tráfico gestionado. Por ejemplo, cuando cualquier aplicación CGI se conecte a algún host externo, este tráfico no se refleja en los archivos de registro.

    Asimismo, si no se ha definido ningún dominio como dominio predeterminado para las direcciones IP en Parallels Panel, el tráfico HTTP(s) gestionado por el sitio Parallels Panel predeterminado no será contabilizado en Parallels Panel.

    Como consecuencia, los puntos detallados anteriormente dan un resultado incompleto.

  2. ¿De qué forma calcula el kernel de Parallels Containers el tráfico de las VMs y de los contenedores?

    El kernel calcula el tráfico, que es el número de paquetes y la cantidad de datos en dichos paquetes, para ambas direcciones (desde el contenedor y hacia el contenedor). El tráfico se contabiliza de forma individualizada para cada clase de red definida en el sistema.

    La definición de las clases de red se configura con el archivo /etc/sysconfig/vz-scripts/networks_classes. Si la dirección IP peer coincide con una red de la clase específica, el paquete correspondiente sólo se contabiliza para dicha clase de red (cálculo exclusivo).

    No existe ninguna forma de definir los servicio o puertos a contabilizar. El tráfico no se divide de esta forma, puesto que sólo es posible una segregación por red.

    El número contabilizado de paquetes y la cantidad de datos puede recuperarse mediante los comandos vznetstat o pnetstat, que utilizan la syscall al kernel.

  3. ¿De qué forma PVA Agent obtiene y almacena esta información?

    PVA Agent solicita periódicamente las estadísticas de tráfico del kernel (cada minuto), comprueba estos cálculos e incluye la diferencia (relativa a la información que se recuperó la última vez) en su base de datos. Generalmente, esta se almacena en /var/opt/pva/agent/etc/VZAgentDB.sqldb.

    El administrador del nodo puede solicitar las estadísticas de tráfico de la base de datos tal y como se describe a continuación.

    1. Descubra el EID del contenedor, que en nuestro ejemplo es #1929:

      ~# /opt/pva/agent/bin/findByVeid.sh 1929
      c03d9bb7-b4ff-ab4f-bfe5-8ea32b2040b4
      
    2. Solicite los detalles de tráfico de la base de datos de forma individualizada para cada mes (es necesario crear una copia para evitar el bloqueo de la misma):

      ~# cp -f /var/opt/pva/agent/etc/VZAgentDB.sqldb /root/VZAgentDB.sqldb
      ~# EID=$(/opt/pva/agent/bin/findByVeid.sh 1929)
      ~# echo "select strftime('%Y-%m', datetime(ldat.startTime, 'unixepoch', 'localtime')), ldef.counter, sum(ldat.avg) from log_def ldef join log_data ldat on ldat.defid=ldef.id where ldef.eid='${EID}' and ldef.lclass='counters_vz_net' and ldef.instance='' and ldef.counter like '%_bytes' group by 1, 2;" | sqlite3 -separator " " VZAgentDB.sqldb
      

      La salida podría ser parecida a la siguiente:

      2013-01 counter_net_incoming_bytes 687322275
      2013-01 counter_net_outgoing_bytes 9975158133
      2013-02 counter_net_incoming_bytes 367518150
      2013-02 counter_net_outgoing_bytes 5290068106
      2013-03 counter_net_incoming_bytes 524999712
      2013-03 counter_net_outgoing_bytes 7306852350
      2013-04 counter_net_incoming_bytes 614414197
      2013-04 counter_net_outgoing_bytes 9153944033
      2013-05 counter_net_incoming_bytes 622662523
      2013-05 counter_net_outgoing_bytes 9077983708
      2013-06 counter_net_incoming_bytes 128571718401
      2013-06 counter_net_outgoing_bytes 79157203480
      2013-07 counter_net_incoming_bytes 121901158967
      2013-07 counter_net_outgoing_bytes 143672611791
      2013-08 counter_net_incoming_bytes 205573570015
      2013-08 counter_net_outgoing_bytes 168925814349
      2013-09 counter_net_incoming_bytes 248664202
      2013-09 counter_net_outgoing_bytes 4235004876
      
    3. Recupere la información de forma individualizada para cada día:

      ~# cp -f /var/opt/pva/agent/etc/VZAgentDB.sqldb /root/VZAgentDB.sqldb
      ~# EID=$(/opt/pva/agent/bin/findByVeid.sh 1929)
      ~# echo "select strftime('%Y-%m-%d', datetime(ldat.startTime, 'unixepoch', 'localtime')), ldef.counter, sum(ldat.avg) from log_def ldef join log_data ldat on ldat.defid=ldef.id where ldef.eid='${EID}' and ldef.lclass='counters_vz_net' and ldef.instance='' and ldef.counter like '%_bytes' group by 1, 2;" | sqlite3 -separator " " VZAgentDB.sqldb
      

      En nuestro caso, la salida es la siguiente:

      ...
      2013-09-01 counter_net_incoming_bytes 119501615
      2013-09-01 counter_net_outgoing_bytes 2138801965
      2013-09-02 counter_net_incoming_bytes 98970769
      2013-09-02 counter_net_outgoing_bytes 1666390529
      2013-09-03 counter_net_incoming_bytes 30191818
      2013-09-03 counter_net_outgoing_bytes 429812382
      

    Asimismo, pueden usarse peticiones API a PVA Agent para obtener los detallas del tráfico, obteniendo información para el contador counters_vz_net tal y como se describe en la documentación (EN).

  4. El router muestra menos tráfico saliente. ¿Cómo puede ser?

    El kernel calcula el tráfico a medida que lo va recibiendo desde un entorno virtual.

    • En el caso de un contenedor en modo enrutado, esto se lleva a cabo en el interfaz venet0.
    • En el caso de un contenedor en modo bridge, esto se realiza en el interfaz apropiado, vethCTID.N.
    • En el caso de una máquina virtual, esto se realiza en el interfaz apropiado, vmeN.M.

    El ancho de banda efectivo de estos interfaces virtuales es superior al ancho de banda del interfaz físico del nodo y algunos paquetes se eliminan cuando se experimenta una elevada carga de red. Esto es especialmente visible si el nodo tiene activado el control de tráfico para los entornos virtuales.

    Por ejemplo, no se garantiza el tráfico UDP e ICMP y puede que los paquetes se eliminen. De existir algún proceso malintencionado que envíe grandes cantidades de este tráfico, la cantidad de tráfico contabilizada no será la misma en el kernel que en el router.

    • En este caso, revise la salida del siguiente comando acerca de los paquetes de salida de ICMP y UDP:

      [root@virtual.env ~]# netstat -as
      

    Otro punto a tener en cuenta es la comunicación con un entorno virtual cercano que se aloje en el mismo nodo hardware: los paquetes no abandonan el nodo. En términos de configuración, esto puede evitarse configurando la clase de red adecuada.

Resolución

Como propietario de un contenedor, la única forma de verificar la información es examinar los contadores de IPtables.

root@ct-1929:/# uptime
 19:27:38 up 1 day,  4:15,  0 users,  load average: 0.00, 0.00, 0.00
root@ct-1929:/# iptables-save -t filter
# Generated by iptables-save v1.3.6 on Tue Sep  3 19:27:47 2013
*filter
:INPUT ACCEPT [357117:39056474]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [509801:552679387]
COMMIT
# Completed on Tue Sep  3 19:27:47 2013
root@ct-1929:/#

Los números entre corchetes para :INPUT y :OUTPUT muestran el número de paquetes y la cantidad de datos en dichos paquetes que fue gestionada en los sockets de red del contenedor.

En el caso del día 1 de tiempo de actividad, el tráfico recibido fue de 39056474 bytes y el tráfico enviado de 552679387. Esto también incluye el tráfico local, por lo que estos valores son un poco superiores a los que se contabilizaron en el nodo hardware. Lo mismo sucede en la base de datos de PVA Agent.

La forma más fácil de contabilizar el tráfico de forma individualizada para cada servicio sería configurar reglas por servicio/puerto en IPtables y volcar las estadísticas de forma periódica.

IPtables le permiten configurar reglas con distintos criterios coincidentes. Por ejemplo, para un determinado usuario, desde/hasta un determinado puerto/servicio o para un ejecutable específico. Muchas herramientas para el cálculo del tráfico utilizan IPtables para esta finalidad y configuran las reglas en consecuencia, por lo que puede configurar cualquiera de estos servicios en el contenedor. Por ejemplo, Shorewall puede ayudarle en esta misión.

a26b38f94253cdfbf1028d72cf3a498b 2897d76d56d2010f4e3a28f864d69223 319940068c5fa20655215d590b7be29b d02f9caf3e11b191a38179103495106f e8e50b42231236b82df27684e7ec0beb 0dd5b9380c7d4884d77587f3eb0fa8ef caea8340e2d186a540518d08602aa065 400e18f6ede9f8be5575a475d2d6b0a6 198398b282069eaf2d94a6af87dcb3ff 210d017ddc3a076d22f0f865b1cf0730 92711db0799e8aefe8e51f12dace0496 614fd0b754f34d5efe9627f2057b8642 5356b422f65bdad1c3e9edca5d74a1ae 5b048d9bddf8048a00aba7e0bdadef37 2554725ed606193dd9bbce21365bed4e ac82ce33439a9c1feec4ff4f2f638899

Email subscription for changes to this article
Save as PDF