Simple Log Service recopila y analiza los registros de acceso de Nginx en múltiples dimensiones. Esto le permite monitorear el tráfico del sitio web, diagnosticar problemas de latencia y configurar alertas mediante consultas de ejemplo integradas.
Requisitos previos
Los registros de acceso de Nginx ya se han recopilado. Collect text logs by using the Nginx configuration mode.
El asistente de importación de datos genera automáticamente un índice basado en los campos del registro. Para modificar el índice, siga las instrucciones en Create an index.
Descripción general
Los registros de Nginx son fundamentales para la operación de sitios web. Los métodos tradicionales, como CNZZ, requieren la inyección de JavaScript en el frontend, mientras que los enfoques basados en flujos o en cómputo por lotes exigen una infraestructura compleja y sacrifican ya sea la capacidad de tiempo real o la flexibilidad analítica.
Simple Log Service recopila los registros de Nginx a través del asistente de importación de datos y crea automáticamente un índice y un panel. El panel nginx_Nginx access log muestra la distribución de IP de origen, los estados de las solicitudes, los agentes de usuario, las tendencias de PV/UV, estadísticas de tráfico, los principales referentes y las URL más visitadas. También puede escribir consultas personalizadas para analizar patrones de latencia y configurar alertas ante errores o anomalías en el tráfico.
Análisis del tráfico del sitio web
Inicie sesión en la consola de Simple Log Service.
-
En la sección Projects, haga clic en el proyecto deseado.

En el panel de navegación izquierdo, seleccione . Haga clic en el icono > situado a la izquierda del logstore deseado.
-
En Dashboard, haga clic en nginx_Nginx access log.
El panel nginx_Nginx access log incluye los siguientes gráficos:
-
El gráfico Distribution of source IP addresses muestra la distribución geográfica de las IP de solicitud durante el último día. Consulta:
* | select count(1) as c, ip_to_province(remote_addr) as address group by address limit 100 -
El gráfico Distribution of request statuses muestra el porcentaje de cada código de estado HTTP durante el último día. Consulta:
* | select count(1) as pv, status group by status
-
El gráfico Distribution of request methods muestra el porcentaje de cada método de solicitud durante el último día. Consulta:
* | select count(1) as pv ,request_method group by request_method
-
El gráfico Distribution of user agents muestra el porcentaje de los distintos navegadores durante el último día. Consulta:
* | select count(1) as pv, case when http_user_agent like '%Chrome%' then 'Chrome' when http_user_agent like '%Firefox%' then 'Firefox' when http_user_agent like '%Safari%' then 'Safari' else 'unKnown' end as http_user_agent group by case when http_user_agent like '%Chrome%' then 'Chrome' when http_user_agent like '%Firefox%' then 'Firefox' when http_user_agent like '%Safari%' then 'Safari' else 'unKnown' end order by pv desc limit 10
-
El gráfico Top 10 referrers muestra las 10 páginas de referencia principales por PV durante el último día. Consulta:
* | select count(1) as pv , http_referer group by http_referer order by pv desc limit 10
-
El gráfico Inbound and outbound traffic statistics muestra el tráfico entrante y saliente durante el último día. Consulta:
* | select sum(body_bytes_sent) as net_out, sum(request_length) as net_in ,date_format(date_trunc('hour', __time__), '%m-%d %H:%i') as time group by date_format(date_trunc('hour', __time__), '%m-%d %H:%i') order by time limit 10000
-
El gráfico PV/UV statistics muestra los conteos de PV y UV durante el último día. Consulta:
*| select approx_distinct(remote_addr) as uv ,count(1) as pv , date_format(date_trunc('hour', __time__), '%m-%d %H:%i') as time group by date_format(date_trunc('hour', __time__), '%m-%d %H:%i') order by time limit 1000
-
El gráfico PV forecast predice las PV para las próximas 4 horas. Consulta:
* | select ts_predicate_simple(stamp, value, 6, 1, 'sum') from (select __time__ - __time__ % 60 as stamp, COUNT(1) as value from log GROUP BY stamp order by stamp) LIMIT 1000
-
El gráfico Top 10 accessed URLs muestra las 10 URL más solicitadas por PV durante el último día. Consulta:
* | select count(1) as pv, split_part(request_uri,'?',1) as path group by path order by pv desc limit 10
-
Diagnóstico y optimización del rendimiento del sitio web
Monitoree la latencia de las solicitudes para identificar páginas lentas y optimizar el rendimiento. Utilice consultas personalizadas para analizar los patrones de latencia. Para consultar la sintaxis de las consultas, consulte Quick start for search and analysis.
-
Calcule la latencia promedio y máxima de las solicitudes en intervalos de 5 minutos para comprender las tendencias generales de latencia.
* | select from_unixtime(__time__ -__time__% 300) as time, avg(request_time) as avg_latency , max(request_time) as max_latency group by __time__ -__time__% 300 -
Identifique las páginas con mayor latencia para orientar los esfuerzos de optimización.
* | select from_unixtime(__time__ - __time__% 60) , max_by(request_uri,request_time) group by __time__ - __time__%60 -
Agrupe los valores de latencia en 10 intervalos para visualizar la distribución.
* |select numeric_histogram(10,request_time) -
Obtenga los 10 valores de latencia más altos y sus solicitudes correspondientes.
* | select max(request_time,10) -
Optimice la página con mayor latencia.
Por ejemplo, si /url2 presenta la mayor latencia, optimice la página /url2 calculando sus métricas de PV, UV, métodos de solicitud, códigos de estado, navegadores, latencia promedio y latencia máxima para /url2.
request_uri:"/url2" | select count(1) as pv, approx_distinct(remote_addr) as uv, histogram(method) as method_pv, histogram(status) as status_pv, histogram(user_agent) as user_agent_pv, avg(request_time) as avg_latency, max(request_time) as max_latency -
Compare las vistas de página (PV) de hoy con las de ayer (Debug).
* | select diff [1] as today, round((diff [3] -1.0) * 100, 2) as growth FROM ( SELECT compare(pv, 86400) as diff FROM ( SELECT COUNT(1) as pv FROM log ) ) -
Calcule el cambio diario en las vistas de página (PV).
* | select t, diff [1] as today, diff [2] as yestoday, diff [3] as percentage from( select t, compare(pv, 86400) as diff from ( select count(1) as pv, date_format(from_unixtime(__time__), '%H:%i') as t from log group by t limit 10000 ) group by t order by t limit 10000 )
Configuración de alertas
Configure alertas para picos de latencia, errores del servidor y anomalías en el tráfico. Para consultar el procedimiento completo, consulte Set up an alert.
-
Alerta de error
Monitoree las respuestas HTTP 500 (error del servidor). La siguiente consulta cuenta los errores (c) por unidad de tiempo. Establezca la condición de activación de la alerta en c > 0.
status:500 | select count(1) as cNotaPara servicios con alto tráfico donde se esperan errores 500 ocasionales, establezca el Notification Trigger Threshold en 2. Esto activa una alerta solo cuando se cumple la condición en dos comprobaciones consecutivas.
En el cuadro de diálogo para crear alertas, establezca Alert Name en
Error Alert. En Add to Dashboard, seleccione Create y especifique el nombre del panel comoNginx. Establezca Chart Name enError Alert, Query Interval en 1 Day (On the Hour) y Check Frequency en un Fixed Interval de 15 Minutes. Finalmente, configure Notification Interval en 5 Minutes. -
Alerta de rendimiento
Cree una alerta de latencia. La siguiente consulta calcula la latencia promedio de todas las solicitudes
Postal endpoint/adduser. Establezca la condición de activación en l > 300000 para generar una alerta cuando la latencia promedio supere los 300 ms.Method:Post and URL:"/adduser" | select avg(request_time) as lLas alertas basadas en promedios pueden ocultar solicitudes individuales con alta latencia. Utilice un percentil, como P99, como condición de activación. La siguiente consulta calcula la latencia del percentil 99.
Method:Post and URL:"/adduser" | select approx_percentile(request_time, 0.99) as p99Para fines de monitoreo, calcule la latencia promedio, P50 y P99 por minuto durante una ventana de un día de 1,440 minutos.
* | select avg(request_time) as l, approx_percentile(request_time, 0.5) as p50, approx_percentile(request_time, 0.99) as p99, date_trunc('minute', time) as t group by t order by t desc limit 1440
-
Alerta de pico o caída de tráfico
Las caídas o picos repentinos de tráfico suelen indicar anomalías. Detéctelas comparando el tráfico actual con una de las siguientes líneas base:
La ventana de tiempo anterior.
La misma ventana de tiempo del día anterior.
La misma ventana de tiempo de la semana anterior.
El siguiente ejemplo utiliza el primer método para calcular la tasa de cambio en un rango de consulta de 5 minutos.
-
Defina una ventana de cálculo.
Defina una ventana de 1 minuto para calcular el tráfico por minuto.
* | select sum(inflow)/(max(__time__)-min(__time__)) as inflow , __time__-__time__%60 as window_time from log group by window_time order by window_time limit 15El resultado contiene dos columnas:
window_timeyinflow. La columnainflowmuestra el valor de tráfico para cada ventana de 1 minuto. -
Calcule la diferencia dentro de la ventana.
-
Calcule la razón entre el valor máximo o mínimo y el valor promedio. Este ejemplo utiliza la razón máxima (max_ratio).
En este ejemplo,
max_ratioes 1.02. Establezca la condición de alerta en max_ratio > 1.5 (la tasa de cambio supera el 50%) para activar una alerta.* | select max(inflow)/avg(inflow) as max_ratio from (select sum(inflow)/(max(__time__)-min(__time__)) as inflow , __time__-__time__%60 as window_time from log group by window_time order by window_time limit 15) -
Calcule la tasa de cambio del valor más reciente para comprobar si el tráfico fluctúa o ha vuelto a la normalidad.
Utilice la función max_by para obtener el tráfico máximo en la ventana. Un valor de
latest_ratiode 0.97 significa que el tráfico más reciente representa el 97% del promedio.* | select max_by(inflow, window_time)/1.0/avg(inflow) as latest_ratio from (select sum(inflow)/(max(__time__)-min(__time__)) as inflow , __time__-__time__%60 as window_time from log group by window_time order by window_time limit 15)NotaEl resultado de la función max_by es de tipo cadena y debe convertirse a un tipo numérico. Si desea calcular la tasa de cambio relativa, puede usar (1.0-max_by(inflow, window_time)/1.0/avg(inflow)) as latest_ratio.
-
Calcule la volatilidad, que corresponde al cambio entre el valor de la ventana actual y el de la ventana anterior.
Utilice la función de ventana
lagpara calcular la diferencia entre el tráfico actual inflow y el del periodo anterior inflow "lag(inflow, 1, inflow)over() ", dividida por el inflow actual. Una caída significativa (como la de las 11:39) muestra una tasa de cambio superior al 40%.NotaUtilice la función abs para calcular una tasa de cambio absoluta.
* | select (inflow- lag(inflow, 1, inflow)over() )*1.0/inflow as diff, from_unixtime(window_time) from (select sum(inflow)/(max(__time__)-min(__time__)) as inflow , __time__-__time__%60 as window_time from log group by window_time order by window_time limit 15)
-