Blog de Amazon Web Services (AWS)

Gestión de registros de IIS y resiliencia mediante Systems Manager, Cloudwatch y ElasticSearch

Por Caio Ribeiro César

 

Este blog se refiere al post de 2017 creado por Pawan Puthran.

 

IIS es un servicio de Microsoft Web Server (WWW) que ayuda a las empresas a lograr un mejor rendimiento, escalabilidad, Confiabilidad y seguridad para alojar aplicaciones y sitios web. Cuando operamos sitios a gran escala, los servicios de monitoreo son primordiales para garantizar una alta disponibilidad.

Para que exista alta disponibilidad, tenemos que comprobar los registros para asegurarnos de que los servicios funcionan como se esperaba. Cualquier mensaje anterior no visto es sospechoso y necesita atención, ya sea de rendimiento, paquetes descartados o incluso inicios de sesión fuera de las horas normales de trabajo.

Para sitios web y aplicaciones alojadas en IIS, es importante supervisar el registro de HttperR y W3C. Los registros tienen una entrada para cada solicitud en su sitio; también podemos encontrar entradas HTTP.sys cuando las solicitudes incluyen «rechazos», como:

HTTP 503 — Servicio no disponible

HTTP 400 — Solicitud incorrecta

En este escenario, utilizamos la creación de un entorno web IIS de alta disponibilidad con la opción Beanstalk .NET y alta disponibilidad.

 

Confirme que el sitio es accesible y valide que se han creado registros de acceso*:

C:\inetpub\logs\LogFiles\W3SVC1

*La mayoría de los administradores cambian la ubicación predeterminada de los registros de IIS para que este espacio no se asigne en el disco del sistema operativo, cambie la ubicación de los registros en el archivo JSON si es necesario.

Usaremos el Administrador de sistemas para configurar el agente de registros de CloudWatch en servidores IIS, con la configuración de exportar los registros de IIS. De forma predeterminada, AWS Systems Manager no puede realizar acciones en las instancias de EC2. Debe conceder acceso mediante un perfil de instancia de AWS Identity and Access Management (IAM).

Para este escenario, aplicamos las directivas CloudWatchAgentServerPolicy y AmazonSSMManagedInstanceCore.

Paso 1: Configuración de la integración de CloudWatch en instancias por parte de Systems Manager State Manager

a. Abra la consola de AWS Systems Manager en https://console.aws.amazon.com/systems-manager/.

b. En el panel de navegación, seleccione Instancias y nodos, Administrador de estado

c. Seleccione la opción Crear asociación

d. Agregue un nombre para su asociación, elija la opción «AWS-ConfigurecloudWatch»

e. Para la opción de parámetro, añadiremos el JSON a continuación:

{
"IsEnabled": true,
"EngineConfiguration": {
"PollInterval": "00:00:15",
"Components": [
{
"Id": "PerformanceCounter",
"FullName": "AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch",
"Parameters": {
"CategoryName": "Memory",
"CounterName": "Available MBytes",
"InstanceName": "",
"MetricName": "Memory",
"Unit": "Megabytes",
"DimensionName": "",
"DimensionValue": ""
}
},
{
"Id": "IISLogs",
"FullName": "AWS.EC2.Windows.CloudWatch.CustomLog.CustomLogInputComponent,AWS.EC2.Windows.CloudWatch",
"Parameters": {
	"LogDirectoryPath": "C:\\inetpub\\logs\\LogFiles\\W3SVC1",
	"TimestampFormat": "yyyy-MM-dd HH:mm:ss",
	"Encoding": "UTF-8",
	"Filter": "",
	"CultureName": "en-US",
	"TimeZoneKind": "UTC",
	"LineCount": "3"
			}
		},
{
"Id": "HttpErr",
"FullName": "AWS.EC2.Windows.CloudWatch.CustomLog.CustomLogInputComponent,AWS.EC2.Windows.CloudWatch",
"Parameters": {
	"LogDirectoryPath": "C:\\Windows\\System32\\LogFiles\\HTTPERR",
	"TimestampFormat": "yyyy-MM-dd HH:mm:ss",
	"Encoding": "UTF-8",
	"Filter": "",
	"CultureName": "en-US",
	"TimeZoneKind": "UTC",
	"LineCount": "3"
				}
			},
{
"Id": "IISCloudWatchLogs",
	"FullName": "AWS.EC2.Windows.CloudWatch.CloudWatchLogsOutput,AWS.EC2.Windows.CloudWatch",
	"Parameters": {
	"AccessKey": "",
	"SecretKey": "",
	"Region": "sa-east-1",
	"LogGroup": "WebServer",
	"LogStream": "{instance_id}-iis"
		}
},
{
"Id": "HttpErrCloudWatchLogs",
	"FullName": "AWS.EC2.Windows.CloudWatch.CloudWatchLogsOutput,AWS.EC2.Windows.CloudWatch",
	"Parameters": {
	"AccessKey": "",
	"SecretKey": "",
	"Region": "sa-east-1",
	"LogGroup": "WebServer",
	"LogStream": "{instance_id}-httpErr"
		}
},
{
"Id": "CloudWatch",
"FullName": "AWS.EC2.Windows.CloudWatch.CloudWatch.CloudWatchOutputComponent,AWS.EC2.Windows.CloudWatch",
"Parameters": 
{
"AccessKey": "",
"SecretKey": "",
"Region": "sa-east-1",
"NameSpace": "Windows/Default"
}
}
],
"Flows": {
"Flows": 
[
"PerformanceCounter,CloudWatch",
"IISLogs,IISCloudWatchLogs",
"HttpErr,HttpErrCloudWatchLogs"
]
}
}
}

f. Agregue instancias de EC2 con IIS (la recomendación es usar Tags para la administración de instancias).

g. Cree una programación para el intervalo de ejecución:

h. Cree la asociación.

i. Seleccione la opción «Aplicar asociación ahora»:

Después de aproximadamente 30 minutos, los registros de IIS WebServer estarán disponibles en la consola de CloudWatch en la opción «LogGroups»:

 

Paso 2 — Crear alertas con CloudWatch

a. Seleccione un Verbo HTTP para crear la alerta. Para el ejemplo de esta publicación, se seleccionó HTTP 401:

b. En la consola de CloudWatch, seleccione LogGroup «WebServer», opción «Crear filtro métrico»:

c. Añadir «401» como filtro:

d.  En la pestaña «Alarmas», seleccione la opción «Crear alarma»:

e. Seleccione la métrica creada anteriormente y elija un período de tiempo para el umbral:

f. Configure la acción para enviar una alarma mediante el servicio SNS:

g. Cree la alarma. Después de unos minutos, se puede realizar una prueba para validar que los correos electrónicos se reciben después de identificar la alerta:

Paso 3: Configuración de AWS ElasticSearch con Log Capture a través de CloudWatch

a. Abra la consola de CloudWatch en https://console.aws.amazon.com/cloudwatch/.

b. En el panel de navegación, seleccione Registros.

c.  Seleccione el grupo de registro de IIS.

d. Selecciona Acciones, Stream to Amazon Elasticsearch Service.

e. Si tiene configurado un clúster de Amazon Elasticsearch, vaya al paso» i». Si no tiene un clúster, seleccione la opción «Crear un clúster»:

f. En la pantalla de configuración de Amazon Elasticsearch, selecciona la opción «Crear un nuevo dominio»:

g. Seleccione el tipo de implementación y versión de servicio que se utilizará en el entorno. Para obtener más información, siga los pasos descritos en este artículo:

h. Cree su dominio con las opciones de nombre de dominio, tamaño de instancia, número de nodos, tipo de volumen de disco y tamaño y uso en una VPC de su entorno. A continuación se muestra la información de Elastisearch creada para el entorno de prueba:

i. Volver a CloudWatch, en la pantalla «Iniciar transmisión para Amazon Elasticsearch Service», seleccione su clúster de Amazon ES y, a continuación, elija Siguiente.

 

j. En Función de Lambda en Función de ejecución de Lambda para IAM, elija el rol de IAM que debe utilizar Lambda al ejecutar llamadas a Amazon ES y seleccione Siguiente:

k. Selecciona Siguiente y, a continuación, en la pantalla Revisar e iniciar transmisión en streaming para Amazon Elasticsearch Service, selecciona Iniciar transmisión en streaming.

 

l. Puede acceder a la interfaz de Kibana desde la URL proporcionada al crear ElasticSearch:

 

 

Luego podemos crear un panel personalizado, en el siguiente ejemplo utilicé la creación de gráficos preseleccionados con entradas de registro (recuento):

HTTP 200 — Visitas válidas del sitio Web.

HTTP 503 — Número de veces que el sitio ha estado inactivo.

HTTP 401 — Ver el número de visitas de registros.

En esta imagen, tenemos el panel de peticiones HTTP para el sitio web.

Conclusión

En esta publicación, discutimos cómo exportar registros de IIS a CloudWatch, utilizando las herramientas de administración de Systems Manager. También creamos alertas personalizadas y un streamer de registros mediante el servicio AWS ElasticSearch:

 


Sobre el autor

Caio Ribeiro Cesar
Caio comenzó su carrera hace 13 años como administrador de sistemas y trabajó en áreas como Seguridad, Identity Online y Plataformas de correo electrónico. Actualmente trabaja como arquitecto de soluciones especializadas para la tecnología de Microsoft en la nube de AWS.

 

 

Si tiene dudas, comuníquese con nuestro equipo a través del chat en línea.