Todos los productos
Search
Centro de documentos

Simple Log Service:Análisis de registros de acceso de Nginx

Última actualización: Sep 02, 2026

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

  1. Inicie sesión en la consola de Simple Log Service.

  2. En la sección Projects, haga clic en el proyecto deseado.

    image

  3. En el panel de navegación izquierdo, seleccione Log Storage > Logstores. Haga clic en el icono > situado a la izquierda del logstore deseado.

  4. 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

      Nginx access logs - request status distribution

    • 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

      Nginx access logs - request method distribution

    • 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

      Nginx access logs - user agent distribution

    • 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

      Nginx access logs - top 10 referrers

    • 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

      Traffic statistics

    • 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

      Nginx access logs - PV/UV statistics

    • 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

      PV forecast

    • 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 c
    Nota

    Para 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 como Nginx. Establezca Chart Name en Error 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 Post al 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 l

    Las 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 p99

    Para 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

    Latency distribution chart

  • 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.

    1. 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 15

      El resultado contiene dos columnas: window_time y inflow. La columna inflow muestra el valor de tráfico para cada ventana de 1 minuto.

    2. 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_ratio es 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_ratio de 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) 
        Nota

        El 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 lag para 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%.

        Nota

        Utilice 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) 

        Window difference calculation