Artículo original publicado el miércoles 1 de febrero de 2012

El equipo de soporte técnico de Exchange recibe con relativa frecuencia casos en que los dispositivos móviles que usan el protocolo Exchange ActiveSync (EAS) envían demasiadas solicitudes al servidor de Exchange, lo que provoca una situación en que el servidor se queda sin recursos y causa un ataque por denegación de servicio (DOS). El peor resultado de tal situación es que el servidor tampoco esté disponible para otros usuarios que pueden no estar usando el protocolo EAS para conectarse. Hemos documentado este problema con posibles mitigaciones en el siguiente artículo de Knowledge Base:

2469722 No se puede conectar mediante Exchange ActiveSync debido al consumo de recursos de Exchange

Un ejemplo reciente de este problema es el caso de los dispositivos Apple iOS 4.0 , que reintentaban una sincronización completa cada 30 segundos (véase TS3398). Otro ejemplo es el caso de algunos dispositivos que no comprenden cómo tratar una respuesta de ‘buzón lleno’ del servidor de Exchange, lo que provoca varios intentos de reconexión. Esto puede causar que estos dispositivos intenten conectarse y sincronizarse con el buzón más de 60 veces en un minuto, lo que acaba con la vida de la batería del dispositivo y provoca problemas de rendimiento en el servidor.

Administrar dispositivos móviles y equilibrar los recursos del servidor disponibles entre los distintos tipos de clientes puede ser un reto imponente para los administradores de TI. Intentar encontrar qué dispositivos causan problemas de agotamiento de recursos en el servidor de acceso de cliente (CAS) de Exchange 2010/2007 o en el servidor front-end (FE) de Exchange 2003 no es una tarea fácil. Como se menciona en el artículo de arriba, puede usar Log Parser para extraer estadísticas útiles de registros de IIS (véase la nota de abajo), pero la mayoría de administradores no tienen el tiempo y las habilidades para generar consultas para extraer dicha información de registros largos.

La finalidad de esta entrada de blog es presentar a los miembros de la comunidad de Exchange un nuevo script de PowerShell que se puede usar para identificar dispositivos que causan problemas de agotamiento de recursos, ayudar a identificar tendencias de rendimiento y generar automáticamente informes para la supervisión continua. Mediante el uso de este script, puede explorar de manera fácil y rápida la actividad de EAS de sus usuarios, lo cual puede ser una tarea importante cuando se trata de registros de IIS que pueden llegar a ser de un tamaño de varios gigabytes. El script facilita la identificación de usuarios con varios dispositivos de EAS. Puede usarlo como herramienta para establecer una línea base durante períodos de actividad de EAS normal y después usar esta para realizar comparaciones y elaborar informes cuando las cosas toman otra dirección. Además, proporciona una característica de supervisión automática que puede usar para recibir notificaciones de correo electrónico.

Nota: el script funciona con registros de IIS en servidores de Exchange 2010, Exchange 2007 y Exchange 2003.
Todas las comunicaciones entre dispositivos móviles que usan el protocolo EAS y Microsoft Exchange se registran en registros de IIS en servidores CAS/FE en formato W3C. Los campos predeterminados de W3C habilitados para el registro varían entre IIS 6.0 y 7.0/7.5 (IIS 7.0 tiene los mismos campos que 7.5). Este script funciona con respecto a ambas versiones.

Registros de IIS

Puesto que EAS usa HTTP, todas las solicitudes de EAS se registran en registros de IIS, que están habilitados de manera predeterminada. En ocasiones, los administradores pueden deshabilitar el registro de IIS para guardar espacio en los servidores. Puede comprobar si el registro está habilitado o no y buscar la ubicación de los archivos de registro mediante los pasos siguientes:

IIS 7

  1. En Administrador de IIS, expanda el nombre de servidor, p. ej., ExchangeServer (Contoso\Administrador)
  2. En la Vista Características, haga doble clic en Registro en la sección IIS.

IIS 6

  1. En Administrador de IIS, haga clic con el botón secundario en el nombre del sitio web (para la mayoría debería ser Sitio web predeterminado) y elija Propiedades
  2. Haga clic en la pestaña Sitio web.

¿De qué son responsables los dispositivos móviles en las comunicaciones con el servidor?

Antes de analizar en detalle los aspectos específicos del script, revisemos algunos requisitos importantes de dispositivos móviles que usan EAS para comunicarse con Microsoft Exchange.

  • Cuando en un dispositivo móvil se devuelve una respuesta inesperada del servidor, depende del dispositivo el tratar o no la respuesta y reintentarlo de manera apropiada en un intervalo razonable. Además, los dispositivos se encargan de tratar los tiempos de espera que ocurren fuera de IIS, que pueden estar causados por la latencia de red.
  • Con cada solicitud que un dispositivo envía a IIS/Exchange, debería informar también al Usuario-Agente.

¿Qué se ve al usar este script?

El script usa Microsoft Log Parser 2.2 para analizar registros de IIS y generar resultados. Crea distintas consultas SQL para Log Parser en función de los modificadores (véase la tabla de abajo) que use. Una entrada de blog anterior Exchange 2003: elaboración de informes de Active Sync que habla de Log Parser toca puntos similares. La información de esa entrada todavía se aplica a Exchange 2010 y 2007. Desde esa entrada de blog, se agregaron comandos adicionales al protocolo EAS), que también usa este nuevo script mientras procesa los registros.

A continuación se incluye una lista de los comandos de EAS sobre los que informará el script en los resultados:

Sync, SendMail, SmartForward, SmartReply, GetAttachment, GetHierarchy, CreateCollection, DeleteCollection, MoveCollection, FolderSync, FolderCreate, FolderDelete, FolderUpdate, MoveItems, GetItemEstimate, MeetingResponse, Search, Settings, Ping, ItemOperations, Provision, ResolveRecipients, ValidateCert

Para obtener más detalles sobre cada comando de EAS, vea Especificación del protocolo HTTP de ActiveSync en MSDN.

Además de estos comandos, el script también registra los parámetros siguientes.

  1. Usuario
  2. Nombre de usuario
  3. Tipo de dispositivo
  4. Id. de dispositivo
  5. Usuario-Agente
  6. sc-bytes: solo está disponible si ha habilitado esta etiqueta en el registro de IIS.
  7. cs-bytes: solo está disponible si ha habilitado esta etiqueta en el registro de IIS.
  8. tiempo-consumido (en milisegundos): solo está disponible si ha habilitado esta etiqueta en el registro de IIS.
  9. Número total de solicitudes o solicitudes por Id. de dispositivo
  10. Número total de todos los códigos de estado 4xx
  11. Número total de todos los códigos de estado 5xx (para obtener más información, vea KB: 318380 para IIS 6.0 y KB: 943891)
  12. Códigos de estado 409: 409 (Conflicto): una recopilación no se puede realizar en el URI solicitado hasta que no se hayan creado una o más recopilaciones intermedias. El servidor NO DEBE crear estas recopilaciones intermedias de manera automática (ref.: RFC 4918)
  13. Códigos de estado 500: después de que el dispositivo envíe el comando OPTIONS, es posible obtener una respuesta de código 500 del servidor con el error ‘MissingCscCacheEntry’. Esto puedo ocurrir como resultado de un problema con la afinidad cuando tiene una matriz de CAS orientada a Internet que crea una solicitud a una matriz de CAS interna. Cuando la matriz orientada a Internet envía la solicitud a la matriz interna, un servidor CAS responderá con el primer código 401. En la siguiente comunicación, la solicitud la administra un servidor CAS diferente en la matriz interna. Resolver el problema de afinidad con la matriz de CAS interna es la solución.
  14. Códigos de estado 503: el servidor no está actualmente disponible para tratar la solicitud debido a una sobrecarga o el mantenimiento temporal del servidor. Esto implica que se trata de una una condición temporal que se solucionará tras un retraso. Si se conoce, la longitud del retraso PUEDE indicarse en un encabezamiento. Si no se recibe el mensaje Retry-After, el cliente DEBERÍA tratar la respuesta como lo haría con una respuesta de código 500.

    Nota: la existencia del código de estado 503 no implica que un servidor lo use cuando esté sobrecargado. Algunos servidores pueden preferir rechazar la conexión simplemente. (ref.: RFC 2616)

  15. Códigos de estado 507: el código de estado 507 (almacenamiento insuficiente) significa que el método no ha podido llevar a cabo en el recurso porque el servidor no puede almacenar la representación necesaria para completar correctamente la solicitud. Esta condición se considera temporal. Si la solicitud que recibió este código de estado fue consecuencia de una acción del usuario, la solicitud NO DEBE repetirse hasta que la solicite una acción del usuario independiente. (ref.: RFC 4918)
  16. Códigos de estado 451: Exchange 2007/2010 devuelve una respuesta HTTP 451 a un cliente de EAS cuando determina que el dispositivo debería usar una CAS ‘mejor’ para la conectividad de EAS. La lógica usada para determinar una CAS ‘mejor’ se basa en sitios de Active Directory y en el hecho de si una CAS se considera ‘orientada a Internet’. Si se especifica la propiedad ExternalUrl del directorio virtual Microsoft-Server-ActiveSync, la CAS se considera orientada a Internet para la conectividad de EAS. (Ref: artículos de TechNet Exchange ActiveSync devolvió un error HTTP 451 y Descripción del uso de proxy y redirección)
  17. Errores TooManyJobsQueued: para obtener información sobre ‘TooManyJobsQueued’, consulte el artículo de KB: 2469722 mencionado arriba
  18. OverBudget: un presupuesto es la cantidad de acceso que un usuario o una aplicación pueden tener para una determinada configuración. Un presupuesto representa cuántas conexiones puede tener un usuario o cuánta actividad se le permite a un usuario para cada período de un minuto. (ref.: TechNet artículo)
  19. Siguiente subconjunto de códigos de estado comunes:
    InvalidContent, ServerError, ServerErrorRetryLater, MailboxQuotaExceeded, DeviceIsBlockedForThisUser, AccessDenied, SyncStateNotFound, DeviceNotFullyProvisionable, DeviceNotProvisioned, ItemNotFound, UserDisabledForSync

¿Qué se puede realizar con este script?

Puede procesar registros usando este script para recuperar los detalles siguientes:

  1. Solicitudes por usuario/Id. de dispositivo (usuarios/dispositivos con un número máximo de solicitudes enviadas al servidor)
  2. Solicitudes por hora/día (ayuda a determinar la frecuencia de solicitudes enviadas por usuario/dispositivo, el valor de tiempo se especifica en segundos)
  3. Solicitudes por dispositivo con límite de umbral especificado (aquí puede especificar un límite de solicitudes, p. ej., todos los usuarios que envían 1.000 solicitudes por hora/día, etc.)
  4. Exportación CSV de los resultados
  5. Informe HTML de los resultados
  6. Informes por correo electrónico de supervisión (formatos CSV/HTML)

Requisitos previos:

Asegúrese de que tiene instalado en la máquina lo siguiente antes de usar el script:

Parámetros del script

Parámetro Obligatorio Tipo Descripción
ActiveSyncOutputFolder Obligatorio System.String Directorio de salida CSV y HTML
ActiveSyncOutputPrefix Opcional System.String Prefija la cadena al nombre de archivo de salida
CreateZip Opcional System.Management.
Automation.SwitchParameter
Crea un archivo ZIP. Solo se puede usar con SendHTMLReport
CreateZipSize Opcional System.In32 Tamaño de archivo límite. El valor predeterminado es 2 MB. Una vez que se supere, el archivo se comprimirá.Requiere que SendHTMLReport y CreateZip estén establecidos en True
Date Opcional System.String Especifique una fecha a partir de la cual empezar el análisis. Escriba una fecha en el formato: MM-DD-AAAA
DeviceId Opcional System.String Id. de dispositivo ActiveSync para analizar
DisableColumnDetect Opcional System.Management.
Automation.SwitchParameter
Deshabilita la posibilidad de agregar columnas adicionales al informe que los usuarios pueden haber habilitado. Ejemplo: tiempo-consumido

Nota: si ejecuta varios archivos que pueden tener distintos encabezamientos de W3C, se debe usar este modificador.
Help Opcional System.Management.
Automation.SwitchParameter
Descripciones de modificadores de salida
ReportBySeconds Opcional System.Int32 Genera las bases de informe en el valor escrito en segundos
Hourly Opcional System.Management.
Automation.SwitchParameter
Genera el informe cada hora
HTMLReport Opcional System.Management.
Automation.SwitchParameter
Crea un informe HTML
HTMLCSVHeaders Opcional System.String

IIS CSV Headers to Export on in the –HTMLReport.

Valores predeterminados: "DeviceID,Hits,Ping,Sync,FolderSync,DeviceType,User-Agent"

IISLogs Obligatorio System.Array

Directorio del registro de IIS.
Ejemplo.- IISLogs D:\Server,'D:\Server 2'

LogParserExec Obligatorio System.String Ruta de acceso a LogParser.exe
MinimumHits Opcional System.Int32 Valor de umbral de solicitudes mínimo donde se generará el importe en CSV y HTML
SendEmailReport Opcional System.Management.
Automation.SwitchParameter
Habilitar la creación de informes por correo electrónico
SMTPRecipient Opcional System.String Destinatario SMTP
SMTPSender Opcional System.String Remitente SMTP
SMTPServer Opcional System.String Remitente SMTP
TopHits Opcional System.Int32

Primeras solicitudes a devolver.
Ejemplo: TopHits 50. Este parámetro no se puede usar con los parámetros Hourly o ReportBySeconds

¿Cómo se usa el script?

A continuación se incluyen algunos ejemplos (con comandos) sobre cómo usar el script y los motivos por los cuales podría usarlo.

Solicitudes superiores a 1.000

El siguiente comando analizará todos los registros de IIS en la carpeta W3SVC1 y solo informará de las solicitudes de usuarios y dispositivos que sean mayores que 1.000.

.\ActiveSyncReport.ps1 -IISLog "C:\inetpub\logs\LogFiles\W3SVC1" -LogparserExec “C:\Archivos de programa (x86)\Log Parser 2.2\LogParser.exe” -ActiveSyncOutputFolder c:\EASReports -MinimumHits 1000

[En el comando anterior, el script ‘ActiveSyncReport.ps1’ se ubica en la raíz de la unidad C, el modificador -IISLog especifica la ubicación predeterminada de los registros de IIS, el modificador -LogparserExec señala la ubicación del archivo de la aplicación ejecutable de Log Parser, el modificador -ActiveSyncOutputFolder proporciona la ubicación en que se debe guardar el archivo de resultados o salida, MinimumHits con un valor de ‘1000’ es el parámetro del script explicado en la tabla de arriba]

Salida:

imagen

Normalmente si un dispositivo envía unas 1.000 solicitudes al día, esto se considera un ‘uso alto’. Si las solicitudes están por encima de 1.500, puede haber un problema en el dispositivo o el entorno. En ese caso, el dispositivo y la actividad del usuario debe investigarse más.

Como ejemplo real, en un caso observamos que había varios usuarios que tenían muchas solicitudes en su servidor de Exchange a través de EAS (~25 K de solicitudes, 1 K de solicitudes por hora) lo que causaba un agotamiento de los recursos en el servidor. Después de investigar más, vimos que todas las solicitudes de esos usuarios provocaban el error 507 en los servidores Buzón de correo en el back-end. Al hablar con estos usuarios de EAS, descubrimos que durante ese período de tiempo alcanzaban los límites del tamaño del buzón (25 MB) e intentaban eliminar correo de distintas carpetas para situarse por debajo del límite de tamaño. En esas situaciones, también puede encontrar respuestas HTTP 503 (‘TooManyJobsQueued’) en registros de IIS para solicitudes de EAS como se describe en el artículo de KB: 2469722

Aislamiento del Id. de un dispositivo específico

Aquí el siguiente comando analizará todos los registros de IIS en la carpeta C:\IISLogs, buscará el Id. de dispositivo xxxxxx y mostrará las estadísticas por hora.

.\ActiveSyncReport.ps1 -IISLog " C:\inetpub\logs\LogFiles\W3SVC1" -LogparserExec “C:\Archivos de programa (x86)\Log Parser 2.2\LogParser.exe” -ActiveSyncOutputFolder c:\EASReports –DeviceID xxxxxx -Hourly

Salida:

imagen

Con la información de arriba puede seleccionar un usuario/dispositivo y ver las tendencias por hora. Esto puede ayudar a identificar si es una acción de usuario o una programática.

Como ejemplo real, en un caso tuvimos que averiguar qué dispositivos modificaban elementos del calendario. Observamos la actividad del usuario/dispositivo y la ordenamos por distintos comandos que enviaban al servidor. Después, nos centramos en los usuarios/dispositivos que enviaban el comando ‘MeetingResponse’ y su frecuencia, el período de tiempo y más detalles relacionados. Esto nos ayudó a cercar el problema para los usuarios relacionados y su actividad específica del calendario a fin de abordar mejor el problema de calendario subyacente.

Otro comando relacionado con el dispositivo y error por buscar es el comando ‘Options’; si no funciona correctamente para un dispositivo, se devuelve el código de error HTTP 409 en el registro de IIS.

Aislamiento de un solo día

El siguiente comando analizará solo los archivos que coinciden con la fecha 12-24-2011 en la carpeta W3SVC1 y solo informará de las solicitudes superiores a 1.000.

.\ActiveSyncReport.ps1 -IISLog "C:\inetpub\logs\LogFiles\W3SVC1" -LogparserExec “C:\Archivos de programa (x86)\Log Parser 2.2\LogParser.exe” -ActiveSyncOutputFolder c:\EASReports -MinimumHits 1000 –Date 12-24-2011

Salida:

imagen

Con la información de arriba puede identificar a los usuarios que envían un alto número de solicitudes. Además, dentro de las columnas, puede ver qué tipo de comandos envían dichos usuarios. Esto sirve para obtener técnicas de solución de problemas más directas y eficientes.

¿Qué debe buscar?

Al analizar registros de IIS con la ayuda de un script, debe buscar un comando específico que se envía una y otra vez. La frecuencia de envío de determinados comandos es importante; cualquier comando que provoque errores con frecuencia también es muy importante y se debe examinar con más atención. También se deben observar y comparar los tiempos de espera entre las ejecuciones de ciertos comandos. Normalmente, los comandos que tardan más en ejecutarse o que provocan una respuesta retrasada del servidor son sospechosos y se deberían investigar más. Sin embargo, hay que tener en cuenta que el comando Ping es una excepción, puesto que tarda más tiempo en ejecutarse (también lo verá con frecuencia en el registro), lo cual está previsto.

Si observa errores continuos para conectarse a un dispositivo que muestran el código de error 403, puede deberse a que el dispositivo no está habilitado para el acceso basado en EAS. A veces, los usuarios de dispositivos móviles se quejan de problemas de conectividad sin darse cuenta de que no escriben sus credenciales correctamente (comprensiblemente, es fácil hacer estos errores en dispositivos móviles). Al mirar los registros, puede centrarse en el usuario en cuestión y es posible encontrar que el dispositivo del usuario provoca un error después de emitir el comando ‘Provision’.

Creación de informes para supervisión

Es posible que desee crear un informe o generar un correo electrónico con los informes y los detalles de la actividad del usuario.

El siguiente comando analizará todos los registros de IIS en la carpeta W3SVC1 y solo informará de las solicitudes superiores a 1.000. Además, creará un informe HTML de los resultados.

.\ActiveSyncReport.ps1 -IISLog "C:\inetpub\logs\LogFiles\W3SVC1" -LogparserExec “C:\Archivos de programa (x86)\Log Parser 2.2\LogParser.exe” -ActiveSyncOutputFolder c:\EASReports -MinimumHits 1000 -HTMLReport

El siguiente comando analizará todos los archivos en las carpetas C:\Server1_Logs y D:\Server2_Logs y enviará por correo electrónico el informe generado a ‘usuario@contoso.com’.

.\ActiveSyncReport.ps1 -IISLog "C:\Server1_Logs",”D:\Server2_Logs” -LogparserExec “C:\Archivos de programa (x86)\Log Parser 2.2\LogParser.exe” -ActiveSyncOutputFolder c:\EASReports -SendEmailReport -SMTPRecipient user@contoso.com –SMTPSender user2@contoso.com -SMTPServer mail.contoso.com

Esperamos que los lectores hayan encontrado útil este script. Hágannos saber cómo facilitaron su vida estos scripts y qué podemos hacer para mejorarla aún más.

Konstantin Papadakis y Brian Drepaul

Agradecimiento especial a:
M. Amir Haque, Will Duff, Steve Swift, Angelique Conde, Kary Wall, Chris Lineback y Mike Lagase

Esta entrada de blog es una traducción. Puede encontrar el artículo original en A script to troubleshoot issues with Exchange ActiveSync