Updated on 2026-05-12 GMT+08:00

nginx-ingress Dashboard Templates

LTS can collect nginx-ingress logs and analyze them from multiple dimensions. LTS provides a one-stop wizard to collect nginx-ingress logs. It also enables structuring and offers dashboards for nginx-ingress logs. nginx-ingress is an ingress controller designed for Kubernetes clusters. It manages routing rules about how Services within a cluster can be accessed from outside the cluster.

nginx-ingress dashboard templates support Viewing nginx-ingress Monitoring by Second, Viewing nginx-ingress Access Center, and Viewing nginx-ingress Monitoring Center.

Prerequisites

Viewing nginx-ingress Monitoring by Second

  1. Log in to the LTS console.
  2. In the navigation pane, choose Dashboards.
  3. Choose nginx-ingress Dashboard Templates under Dashboard Templates and click nginx-ingress Monitoring by Second to view the detailed charts.

    Figure 1 nginx-ingress Monitoring by Second
    • Filter by application name. The associated query and analysis statement is:
      * | SELECT appName group by appName
    • QPS. The associated query and analysis statement is:
      * | SELECT  TIME_FORMAT(TIME_CEIL(__time,'PT1S'),'yyyy-MM-dd HH:mm:ss','+08:00') AS _time_ , COUNT(*) as QPS from log where req_id is not null group by _time_
    • Success Rate. The associated query and analysis statement is:
      * | SELECT __time,round(CASE WHEN "Success rate" > 0 THEN "Success rate" else 0 end,2) as "Success rate" from (select TIME_FORMAT(TIME_CEIL(__time,'PT5S'),'yyyy-MM-dd HH:mm:ss','+08:00') as __time, sum(case when status < 400 then 1 else 0 end) * 100.0 / count(1) as 'Success rate' from log where req_id is not null group by __time)
    • Latency. The associated query and analysis statement is:
      * | SELECT __time,round(CASE WHEN "Access latency" > 0 THEN "Access latency" else 0 end,2) as "Access latency",round(CASE WHEN "Upstream latency" > 0 THEN "Upstream latency" else 0 end,2) as "Upstream latency" from (select TIME_FORMAT(TIME_CEIL(__time,'PT5S'),'yyyy-MM-dd HH:mm:ss','+08:00') as __time, avg(request_time)* 1000 as 'Access latency',avg(upstream_response_time)* 1000 as 'Upstream latency' from log where req_id is not null group by __time)
    • Traffic. The associated query and analysis statement is:
      * | SELECT TIME_FORMAT(TIME_CEIL(__time,'PT5S'),'yyyy-MM-dd HH:mm:ss','+08:00') as __time , sum("request_length") as "Incoming", sum("body_bytes_sent") as "Outgoing body" where req_id is not null group by __time
    • Status Codes. The associated query and analysis statement is:
      * | SELECT t.t as "time",
            CASE WHEN a."2XX" IS NOT NULL THEN  CAST(a."2XX" AS BIGINT) ELSE 0 END as "2XX",
            CASE WHEN b."3XX" IS NOT NULL THEN  CAST(b."3XX" AS BIGINT) ELSE 0 END as "3XX",
            CASE WHEN c."4XX" IS NOT NULL THEN  CAST(c."4XX" AS BIGINT) ELSE 0 END as "4XX",
            CASE WHEN d."5XX" IS NOT NULL THEN  CAST(d."5XX" AS BIGINT) ELSE 0 END as "5XX",
            CASE WHEN e."Other" IS NOT NULL THEN  CAST(e."Other" AS BIGINT)  ELSE 0 END as "Other" 
            from (select TIME_CEIL(__time,'PT5S') as t from log where req_id is not null group by t order by t asc  ) t left join (select TIME_CEIL(__time,'PT5S') as t , CAST(COUNT(1) as VARCHAR) as "2XX" from log WHERE "status" >= 200 and "status" < 300 and req_id is not null group by t order by t asc ) a on t.t =a.t left join (select TIME_CEIL(__time,'PT5S') as t , CAST(COUNT(1) as VARCHAR) as "3XX" from log WHERE "status" >= 300 and "status" < 400 and req_id is not null group by t order by t asc) b on t.t =b.t left join (select TIME_CEIL(__time,'PT5S') as t , CAST(COUNT(1) as VARCHAR) as "4XX" from log WHERE "status" >= 400 and "status" < 500 and req_id is not null group by t order by t asc) c on t.t =c.t left join (select TIME_CEIL(__time,'PT5S') as t , CAST(COUNT(1) as VARCHAR) as "5XX" from log WHERE "status" >= 500 and "status" < 600 and req_id is not null group by t order by t asc) d on t.t =d.t left join (select TIME_CEIL(__time,'PT5S') as t , CAST(COUNT(1) as VARCHAR) as "Other" from log WHERE "status" < 200 or "status" >= 600 and req_id is not null group by t order by t asc) e on t.t =e.t
    • Backend Response Code. The associated query and analysis statement is:
      * | SELECT t.t as "time",
            CASE WHEN a."2XX" IS NOT NULL THEN  CAST(a."2XX" AS BIGINT) ELSE 0 END as "2XX",
            CASE WHEN b."3XX" IS NOT NULL THEN  CAST(b."3XX" AS BIGINT) ELSE 0 END as "3XX",
            CASE WHEN c."4XX" IS NOT NULL THEN  CAST(c."4XX" AS BIGINT) ELSE 0 END as "4XX",
            CASE WHEN d."5XX" IS NOT NULL THEN  CAST(d."5XX" AS BIGINT) ELSE 0 END as "5XX",
            CASE WHEN e."Other" IS NOT NULL THEN  CAST(e."Other" AS BIGINT)  ELSE 0 END as "Other"
            from (
            select TIME_CEIL(__time,'PT5S') as t from log where req_id is not null group by t order by t asc  
            ) t
            left join(
            SELECT TIME_CEIL(__time,'PT5S') as t , CAST(COUNT(1) as VARCHAR) as "2XX" from log WHERE "upstream_status" >= 200 and "upstream_status" < 300 and req_id is not null group by t order by t asc) a 
            on t.t = a.t
            left join (
            SELECT TIME_CEIL(__time,'PT5S') as t , CAST(COUNT(1) as VARCHAR) as "3XX" from log WHERE "upstream_status" >= 300 and "upstream_status" < 400 and req_id is not null group by t order by t asc) b 
            on t.t =b.t
            left join (
            SELECT TIME_CEIL(__time,'PT5S') as t , CAST(COUNT(1) as VARCHAR) as "4XX" from log WHERE "upstream_status" >= 400 and "upstream_status" < 500 and req_id is not null group by t order by t asc) c 
            on t.t =c.t
            left join (
            SELECT TIME_CEIL(__time,'PT5S') as t , CAST(COUNT(1) as VARCHAR) as "5XX" from log WHERE "upstream_status" >= 500 and "upstream_status" < 600 and req_id is not null group by t order by t asc) d
            on t.t =d.t
            left join (
            SELECT TIME_CEIL(__time,'PT5S') as t , CAST(COUNT(1) as VARCHAR) as "Other" from log WHERE "upstream_status" < 200 or "upstream_status" >= 600 and req_id is not null group by t order by t asc) e 
            on t.t =e.t

Viewing nginx-ingress Access Center

  1. Choose nginx-ingress Dashboard Templates under Dashboard Templates and click nginx-ingress Access Center to view the detailed charts.

    Figure 2 nginx-ingress Access Center
    • Filter by application name. The associated query and analysis statement is:
      * | SELECT appName group by appName
    • Day-over-day PV Change. The associated query and analysis statement is:
      * | SELECT diff[1] as "total", round((diff[1] - diff[2]) / diff[2] * 100, 2) as inc from(select compare( "pv" , 86400) as diff from (select count(1) as "pv" from log where req_id is not null))
    • Week-on-week PV Change. The associated query and analysis statement is:
      * | SELECT diff[1] as "total", round((diff[1] - diff[2]) / diff[2] * 100, 2) as inc from(select compare( "pv" , 604800) as diff from (select count(1) as "pv" from log where req_id is not null))
    • Day-over-day UV Change. The associated query and analysis statement is:
      * | SELECT diff[1] as "total", round((diff[1] - diff[2]) / diff[2] * 100, 2) as inc from(select compare( "uv" , 86400) as diff from (select APPROX_COUNT_DISTINCT(remote_addr) as "uv" from log where req_id is not null))
    • Week-on-week UV Change. The associated query and analysis statement is:
      * | SELECT diff[1] as "total", round((diff[1] - diff[2]) / diff[2] * 100, 2) as inc from(select compare( "uv" , 604800) as diff from (select APPROX_COUNT_DISTINCT(remote_addr) as "uv" from log where req_id is not null))
    • PV Distribution (China). The associated query and analysis statement is:
      * | SELECT ip_to_province(remote_addr) as province, count(1) as pv where IP_TO_COUNTRY (remote_addr) = 'China' and req_id is not null  group by province HAVING province not in ('','Reserved address','*')
    • PV Distribution (Global). The associated query and analysis statement is:
      * | SELECT ip_to_country(remote_addr) as country,COUNT(1) as PV where req_id is not null GROUP BY country HAVING country not in ('','Reserved address','*')
    • UV Distribution (China). The associated query and analysis statement is:
      * | SELECT ip_to_province(remote_addr) as province, APPROX_COUNT_DISTINCT(remote_addr) as UV where IP_TO_COUNTRY (remote_addr) = 'China'  and req_id is not null group by province HAVING province not in ('','Reserved address','*')
    • UV Distribution (Global). The associated query and analysis statement is:
      * | SELECT ip_to_country(remote_addr) as country, APPROX_COUNT_DISTINCT(remote_addr) as uv where req_id is not null group by country HAVING country not in ('','Reserved address','*')
    • Average Latency Distribution (China). The associated query and analysis statement is:
      * | SELECT province,round( CASE WHEN "Average latency (ms)" > 0 THEN "Average latency (ms)" ELSE 0 END, 3 ) AS "Average latency (ms)"FROM (SELECT ip_to_province(remote_addr) as province,avg(request_time) * 1000 AS "Average latency (ms)" WHERE  IP_TO_COUNTRY (remote_addr) = 'China' and req_id is not null GROUP BY province HAVING province not in ('','Reserved address','*'))
    • Average Latency Distribution (Global). The associated query and analysis statement is:
      * | SELECT country,round( CASE WHEN "Average latency (ms)" > 0 THEN "Average latency (ms)" ELSE 0 END, 2 ) AS "Average latency (ms)"FROM (SELECT ip_to_country(remote_addr) as country,avg(request_time) * 1000 AS "Average latency (ms)" where req_id is not null GROUP BY country HAVING country not in ('','Reserved address','*'))
    • PV/UV Today. The associated query and analysis statement is:
      * | SELECT TIME_FORMAT( _time_, 'yyyy-MM-dd HH:mm:ss', '+08:00' ) as _time_,PV,UV FROM (select TIME_CEIL(__time,'PT600S') AS _time_ , count(1) as PV,  APPROX_COUNT_DISTINCT(remote_addr) as UV from log WHERE __time <= CURRENT_TIMESTAMP  and __time >= DATE_TRUNC( 'DAY',(CURRENT_TIMESTAMP + INTERVAL '8' HOUR)) - INTERVAL '8' HOUR and req_id is not null group by _time_ order by _time_) WHERE _time_ <= CURRENT_TIMESTAMP order by _time_ LIMIT 100000 OFFSET 1
    • PV/UV in 7 Days. The associated query and analysis statement is:
      * | SELECT TIME_FORMAT( _time_, 'yyyy-MM-dd HH:mm:ss', '+08:00' ) as _time_,PV,UV FROM (select  TIME_CEIL(__time,'PT600S') AS _time_ , count(1) as PV,  APPROX_COUNT_DISTINCT(remote_addr) as UV from log WHERE __time <= CURRENT_TIMESTAMP  and __time >= DATE_TRUNC( 'DAY',(CURRENT_TIMESTAMP + INTERVAL '8' HOUR)) - INTERVAL '8' HOUR - INTERVAL '7' DAY and req_id is not null group by _time_ order by _time_ ) WHERE _time_ <= CURRENT_TIMESTAMP order by _time_ LIMIT 100000 OFFSET 1
    • Top 10 Provinces by Visits. The associated query and analysis statement is:
      * | SELECT ip_to_province(remote_addr) as "province", count(1) as "Visits" where req_id is not null group by "province" HAVING "province" <> '-1' order by "Visits" asc limit 10
    • Top 10 Cities by Visits. The associated query and analysis statement is:
      * | SELECT ip_to_city(remote_addr) as "city", count(1) as "Visits" where req_id is not null group by "city" HAVING  "city" <> '-1' order by "Visits" asc  limit 10
    • Top 10 Hosts by Visits. The associated query and analysis statement is:
      * | SELECT  remote_addr as "Host", count(1) as "PV" where req_id is not null group by "Host" order by "PV" asc limit 10
    • Top 10 UserAgents by Visits. The associated query and analysis statement is:
      * | SELECT http_user_agent as "UserAgent", count(1) as "PV" where req_id is not null group by "UserAgent" order by "PV" asc limit 10
    • Device Distribution by Type. The associated query and analysis statement is:
      * | SELECT case when regexp_like(lower(http_user_agent), 'iphone|ipod|android|ios') then 'Mobile' else 'PC' end as type , count(1) as total where req_id is not null group by  type
    • Device Distribution by System. The associated query and analysis statement is:
      * | SELECT case when regexp_like(lower(http_user_agent), 'iphone|ipod|ios') then 'IOS' when regexp_like(lower(http_user_agent), 'android') then 'Android' else 'other' end as type , count(1) as total where req_id is not null group by  type HAVING type != 'other'
    • TOP URL. The associated query and analysis statement is:
      * | SELECT request_uri , count(1) as PV, APPROX_COUNT_DISTINCT(remote_addr) as UV, round(sum( case when status < 400 then 1 else 0 end ) * 100.0 / count(1), 2) as "Access Success Rate" where req_id is not null group by request_uri ORDER by PV desc
    • Top IP Addresses by Visits. The associated query and analysis statement is:
      * | SELECT remote_addr as "Source IP Address",ip_to_country(remote_addr) as "Country/Region",ip_to_province(remote_addr) as "Province",ip_to_city(remote_addr) as "City",ip_to_provider(remote_addr) as "Carrier",count(1) as "PV",http_user_agent as "UserAgent Sampling",request_uri as "URL Sampling" where req_id is not null group by remote_addr,http_user_agent,request_uri ORDER by "PV" desc

Viewing nginx-ingress Monitoring Center

  1. Choose nginx-ingress Dashboard Templates under Dashboard Templates and click nginx-ingress Monitoring Center to view the detailed charts.

    Figure 3 nginx-ingress Monitoring Center
    • Filter by application name. The associated query and analysis statement is:
      * | SELECT appName group by appName
    • PV. The associated query and analysis statement is:
      * | SELECT TIME_FORMAT( _time_, 'yyyy-MM-dd HH:mm:ss', '+08:00' ) as _time_,PV FROM ( SELECT TIME_CEIL ( __time, 'PT300S' ) AS _time_, count( 1 ) AS PV FROM log where req_id is not null GROUP BY _time_ )  WHERE _time_ <= CURRENT_TIMESTAMP  LIMIT 100000 OFFSET 1
    • Request Success Rate. The associated query and analysis statement is:
      * | SELECT ROUND(sum(case when status < 400 then 1 else 0 end) * 100.0 / count(1),2) as cnt where req_id is not null
    • Average Latency. The associated query and analysis statement is:
      * | SELECT round(avg(request_time) * 1000, 3) as cnt where req_id is not null
    • 4xx Requests. The associated query and analysis statement is:
      * | SELECT COUNT(1) as cnt WHERE "status" >= 400 and "status" < 500 and req_id is not null
    • 404 Requests. The associated query and analysis statement is:
      * | SELECT COUNT(1) as cnt WHERE "status" = 404 and req_id is not null
    • 429 Requests. The associated query and analysis statement is:
      * | SELECT COUNT(1) as cnt WHERE "status" = 429 and req_id is not null
    • 504 Requests. The associated query and analysis statement is:
      * | SELECT COUNT(1) as cnt WHERE "status" = 504 and req_id is not null
    • 5xx Requests. The associated query and analysis statement is:
      * | SELECT TIME_FORMAT( _time_, 'yyyy-MM-dd HH:mm:ss', '+08:00' ) as _time_,cnt FROM ( SELECT TIME_CEIL ( __time, 'PT300S' ) AS _time_, count( 1 ) AS cnt FROM log where "status" >= 500 and req_id is not null GROUP BY _time_ )  WHERE _time_ <= CURRENT_TIMESTAMP LIMIT 100000 OFFSET 1
    • Status Code Distribution. The associated query and analysis statement is:
      * | SELECT status, COUNT(1) AS rm where req_id is not null GROUP BY status
    • UV. The associated query and analysis statement is:
      * | SELECT TIME_FORMAT( _time_, 'yyyy-MM-dd HH:mm:ss', '+08:00' ) as _time_,UV FROM (select TIME_CEIL(__time,'PT600S') AS _time_ , APPROX_COUNT_DISTINCT(remote_addr) as UV  from log where req_id is not null group by _time_) WHERE _time_ <= CURRENT_TIMESTAMP LIMIT 100000 OFFSET 1
    • Traffic. The associated query and analysis statement is:
      * | SELECT TIME_FORMAT(_time_,'yyyy-MM-dd HH:mm:ss','+08:00') AS _time_,round( CASE WHEN "Inbound" > 0 THEN "Inbound" ELSE 0 END, 2 ) AS "Inbound",round( CASE WHEN "Outbound" > 0 THEN "Outbound" ELSE 0 END, 2 ) AS "Outbound" FROM (SELECT TIME_CEIL(__time,'PT600S') AS _time_,sum(request_length) / 1024.0 AS "Inbound",sum(body_bytes_sent) / 1024.0 AS "Outbound" where req_id is not null group by  _time_) WHERE _time_ <= CURRENT_TIMESTAMP LIMIT 100000 OFFSET 1
    • Access Failure Rate. The associated query and analysis statement is:
      * | SELECT TIME_FORMAT( _time_, 'yyyy-MM-dd HH:mm:ss', '+08:00' ) as _time_,round( CASE WHEN "Failure rate" > 0 THEN "Failure rate" ELSE 0 END, 2 ) AS "Failure rate",round( CASE WHEN "5XX" > 0 THEN "5XX" ELSE 0 END, 2 ) AS "5XX" from (select TIME_CEIL(__time,'PT600S') AS _time_,sum(case when status >= 400 then 1 else 0 end) * 100.0 / count(1) as 'Failure rate' , sum(case when status >=500 THEN 1 ELSE 0 END)*100.0/COUNT(1) as '5XX' where req_id is not null group by  _time_) WHERE _time_ <= CURRENT_TIMESTAMP LIMIT 100000 OFFSET 1
    • Latency. The associated query and analysis statement is:
      * | SELECT TIME_FORMAT( _time_, 'yyyy-MM-dd HH:mm:ss', '+08:00' ) as _time_,round( CASE WHEN "Avg." > 0 THEN "Avg." ELSE 0 END, 2 ) AS "Avg.",round( CASE WHEN "P50" > 0 THEN "P50" ELSE 0 END, 2 ) AS "P50",round( CASE WHEN "P90" > 0 THEN "P90" ELSE 0 END, 2 ) AS "P90",round( CASE WHEN "P99" > 0 THEN "P99" ELSE 0 END, 2 ) AS "P99",round( CASE WHEN "P9999" > 0 THEN "P9999" ELSE 0 END, 2 ) AS "P9999" from (select TIME_CEIL(__time,'PT600S') as _time_,avg(request_time) * 1000 as "Avg.", APPROX_QUANTILE_DS("request_time", 0.50)*1000 as "P50", APPROX_QUANTILE_DS("request_time", 0.90)*1000 as "P90" ,APPROX_QUANTILE_DS("request_time", 0.99)*1000 as 'P99',APPROX_QUANTILE_DS("request_time", 0.9999)*1000 as 'P9999' where req_id is not null group by  _time_) WHERE _time_ <= CURRENT_TIMESTAMP LIMIT 100000 OFFSET 1
    • Top Host Requests. The associated query and analysis statement is:
      * | SELECT "remote_addr", pv, uv, round( CASE WHEN "Access Success Rate (%)" > 0 THEN "Access Success Rate (%)" ELSE 0 END, 2 ) AS "Access Success Rate (%)", round( CASE WHEN "Average Latency (ms)" > 0 THEN "Average Latency (ms)" ELSE 0 END, 3 ) AS "Average Latency (ms)", round( CASE WHEN "Inbound (KB)" > 0 THEN "Inbound (KB)" ELSE 0 END, 3 ) AS "Inbound (KB)", round( CASE WHEN "Outbound (KB)" > 0 THEN "Outbound (KB)" ELSE 0 END, 3 ) AS "Outbound (KB)"  FROM ( SELECT "remote_addr", count( 1 ) AS pv, APPROX_COUNT_DISTINCT ( remote_addr ) AS uv, sum( CASE WHEN "status" < 400 THEN 1 ELSE 0 END ) * 100.0 / count( 1 ) AS "Access Success Rate (%)", avg( request_time ) * 1000 AS "Average Latency (ms)", sum( request_length ) / 1024.0 AS "Inbound (KB)", sum( body_bytes_sent ) / 1024.0 AS "Outbound (KB)"  WHERE "remote_addr" != '' and req_id is not null  GROUP BY "remote_addr" ) ORDER BY pv DESC
    • Top Host Latencies. The associated query and analysis statement is:
      * | SELECT "remote_addr", pv, round( CASE WHEN "Access Success Rate (%)" > 0 THEN "Access Success Rate (%)" ELSE 0 END, 2 ) AS "Access Success Rate (%)", round( CASE WHEN "Average Latency (ms)" > 0 THEN "Average Latency (ms)" ELSE 0 END, 3 ) AS "Average Latency (ms)", round( CASE WHEN "P90 Latency (ms)" > 0 THEN "P90 Latency (ms)" ELSE 0 END, 3 ) AS "P90 Latency (ms)", round( CASE WHEN "P99 Latency (ms)" > 0 THEN "P99 Latency (ms)" ELSE 0 END, 3 ) AS "P99 Latency (ms)" FROM ( SELECT "remote_addr", count( 1 ) AS pv, sum( CASE WHEN "status" < 400 THEN 1 ELSE 0 END ) * 100.0 / count( 1 ) AS "Access Success Rate (%)", avg( request_time ) * 1000 AS "Average Latency (ms)",APPROX_QUANTILE_DS(request_time, 0.9) * 1000 AS "P90 Latency (ms)", APPROX_QUANTILE_DS(request_time, 0.99) * 1000 AS "P99 Latency (ms)" WHERE "remote_addr" != '' and req_id is not null GROUP BY "remote_addr" ) ORDER BY "Average Latency (ms)" desc
    • Top Host Failure Rates. The associated query and analysis statement is:
      * | SELECT "remote_addr", pv,round( CASE WHEN "Access Failure Rate (%)" > 0 THEN "Access Failure Rate (%)" ELSE 0 END, 2 ) AS "Access Failure Rate (%)", round( CASE WHEN "Average Latency (ms)" > 0 THEN "Average Latency (ms)" ELSE 0 END, 3 ) AS "Average Latency (ms)", round( CASE WHEN "P90 Latency (ms)" > 0 THEN "P90 Latency (ms)" ELSE 0 END, 3 ) AS "P90 Latency (ms)", round( CASE WHEN "P99 Latency (ms)" > 0 THEN "P99 Latency (ms)" ELSE 0 END, 3 ) AS "P99 Latency (ms)"  FROM ( SELECT "remote_addr", count( 1 ) AS pv, sum( CASE WHEN "status" >= 400 THEN 1 ELSE 0 END ) * 100.0 / count( 1 ) AS "Access Failure Rate (%)", avg( request_time ) * 1000 AS "Average Latency (ms)", APPROX_QUANTILE_DS(request_time, 0.9) * 1000 AS "P90 Latency (ms)", APPROX_QUANTILE_DS(request_time, 0.99) * 1000 AS "P99 Latency (ms)" WHERE "remote_addr" != '' and req_id is not null GROUP BY "remote_addr"  ) ORDER BY "Access Failure Rate (%)" desc
    • Top URL Requests. The associated query and analysis statement is:
      * | SELECT request_uri, pv,uv, round( CASE WHEN "Access Success Rate (%)" > 0 THEN "Access Success Rate (%)" ELSE 0 END, 2 ) AS "Access Success Rate (%)", round( CASE WHEN "Average Latency (ms)" > 0 THEN "Average Latency (ms)" ELSE 0 END, 3 ) AS "Average Latency (ms)", round( CASE WHEN "Inbound (KB)" > 0 THEN "Inbound (KB)" ELSE 0 END, 3 ) AS "Inbound (KB)", round( CASE WHEN "Outbound (KB)" > 0 THEN "Outbound (KB)" ELSE 0 END, 3 ) AS "Outbound (KB)"  FROM ( SELECT request_uri, count( 1 ) AS pv, APPROX_COUNT_DISTINCT ( remote_addr ) AS uv, sum( CASE WHEN "status" < 400 THEN 1 ELSE 0 END ) * 100.0 / count( 1 ) AS "Access Success Rate (%)", avg( request_time ) * 1000 AS "Average Latency (ms)", sum( request_length ) / 1024.0 AS "Inbound (KB)", sum( body_bytes_sent ) / 1024.0 AS "Outbound (KB)"  WHERE "remote_addr" != '' and req_id is not null GROUP BY request_uri  ) ORDER BY pv desc
    • Top URL Latencies. The associated query and analysis statement is:
      * | SELECT request_uri, pv,round( CASE WHEN "Access Success Rate (%)" > 0 THEN "Access Success Rate (%)" ELSE 0 END, 2 ) AS "Access Success Rate (%)",round( CASE WHEN "Average Latency (ms)" > 0 THEN "Average Latency (ms)" ELSE 0 END, 3 ) AS "Average Latency (ms)",round( CASE WHEN "P90 Latency (ms)" > 0 THEN "P90 Latency (ms)" ELSE 0 END, 3 ) AS "P90 Latency (ms)",round( CASE WHEN "P99 Latency (ms)" > 0 THEN "P99 Latency (ms)" ELSE 0 END, 3 ) AS "P99 Latency (ms)" FROM (SELECT request_uri, count( 1 ) AS pv, sum( CASE WHEN "status" < 400 THEN 1 ELSE 0 END ) * 100.0 / count( 1 ) AS "Access Success Rate (%)", avg( request_time ) * 1000 AS "Average Latency (ms)", APPROX_QUANTILE_DS(request_time, 0.9) * 1000 AS "P90 Latency (ms)", APPROX_QUANTILE_DS(request_time, 0.99) * 1000 AS "P99 Latency (ms)" WHERE "remote_addr" != '' and req_id is not null GROUP BY request_uri  ) ORDER BY "Average Latency (ms)" desc
    • Top URL Failure Rates. The associated query and analysis statement is:
      * | SELECT request_uri, pv, round( CASE WHEN "Access Failure Rate (%)" > 0 THEN "Access Failure Rate (%)" ELSE 0 END, 2 ) AS "Access Failure Rate (%)", round( CASE WHEN "Average Latency (ms)" > 0 THEN "Average Latency (ms)" ELSE 0 END, 3 ) AS "Average Latency (ms)",round( CASE WHEN "P90 Latency (ms)" > 0 THEN "P90 Latency (ms)" ELSE 0 END, 3 ) AS "P90 Latency (ms)", round( CASE WHEN "P99 Latency (ms)" > 0 THEN "P99 Latency (ms)" ELSE 0 END, 3 ) AS "P99 Latency (ms)" FROM( SELECT request_uri, count( 1 ) AS pv, sum( CASE WHEN "status" >= 400 THEN 1 ELSE 0 END ) * 100.0 / count( 1 ) AS "Access Failure Rate (%)", avg( request_time ) * 1000 AS "Average Latency (ms)", APPROX_QUANTILE_DS(request_time, 0.9) * 1000 AS "P90 Latency (ms)", APPROX_QUANTILE_DS(request_time, 0.99) * 1000 AS "P99 Latency (ms)" WHERE "remote_addr" != '' and req_id is not null GROUP BY request_uri  )ORDER BY "Access Failure Rate (%)" desc
    • Top Backend Requests. The associated query and analysis statement is:
      * | SELECT addr, pv, uv, round( CASE WHEN "Access Success Rate (%)" > 0 THEN "Access Success Rate (%)" ELSE 0 END, 2 ) AS "Access Success Rate (%)", round( CASE WHEN "Average Latency (ms)" > 0 THEN "Average Latency (ms)" ELSE 0 END, 3 ) AS "Average Latency (ms)", round( CASE WHEN "Inbound (KB)" > 0 THEN "Inbound (KB)" ELSE 0 END, 3 ) AS "Inbound (KB)", round( CASE WHEN "Outbound (KB)" > 0 THEN "Outbound (KB)" ELSE 0 END, 3 ) AS "Outbound (KB)"  FROM ( SELECT upstream_addr as addr, count( 1 ) AS pv, APPROX_COUNT_DISTINCT ( remote_addr ) AS uv, sum( CASE WHEN "status" < 400 THEN 1 ELSE 0 END ) * 100.0 / count( 1 ) AS "Access Success Rate (%)", avg( request_time ) * 1000 AS "Average Latency (ms)", sum( request_length ) / 1024.0 AS "Inbound (KB)", sum( body_bytes_sent ) / 1024.0 AS "Outbound (KB)"  WHERE "remote_addr" != '' and req_id is not null GROUP BY addr  having length(upstream_addr) > 2) ORDER BY "pv" desc
    • Top Backend Latencies. The associated query and analysis statement is:
      * | SELECT addr,pv,round( CASE WHEN "Access Success Rate (%)" > 0 THEN "Access Success Rate (%)" ELSE 0 END, 2 ) AS "Access Success Rate (%)",round( CASE WHEN "Average Latency (ms)" > 0 THEN "Average Latency (ms)" ELSE 0 END, 3 ) AS "Average Latency (ms)",round( CASE WHEN "P90 Latency (ms)" > 0 THEN "P90 Latency (ms)" ELSE 0 END, 3 ) AS "P90 Latency (ms)",round( CASE WHEN "P99 Latency (ms)" > 0 THEN "P99 Latency (ms)" ELSE 0 END, 3 ) AS "P99 Latency (ms)" FROM (SELECT upstream_addr as addr,count( 1 ) AS pv,sum( CASE WHEN "status" < 400 THEN 1 ELSE 0 END ) * 100.0 / count( 1 ) AS "Access Success Rate (%)",avg( request_time ) * 1000 AS "Average Latency (ms)",APPROX_QUANTILE_DS(request_time, 0.9) * 1000 AS "P90 Latency (ms)",APPROX_QUANTILE_DS(request_time, 0.99) * 1000 AS "P99 Latency (ms)" WHERE "remote_addr" != '' and req_id is not null GROUP BY addr having length(upstream_addr) > 2) ORDER BY "Average Latency (ms)" desc
    • Top Backend Failure Rates. The associated query and analysis statement is:
      * | SELECT addr, pv, round( CASE WHEN "Access Failure Rate (%)" > 0 THEN "Access Failure Rate (%)" ELSE 0 END, 2 ) AS "Access Failure Rate (%)", round( CASE WHEN "Average Latency (ms)" > 0 THEN "Average Latency (ms)" ELSE 0 END, 3 ) AS "Average Latency (ms)", round( CASE WHEN "P90 Latency (ms)" > 0 THEN "P90 Latency (ms)" ELSE 0 END, 3 ) AS "P90 Latency (ms)", round( CASE WHEN "P99 Latency (ms)" > 0 THEN "P99 Latency (ms)" ELSE 0 END, 3 ) AS "P99 Latency (ms)"  FROM ( SELECT upstream_addr as addr, count( 1 ) AS pv, sum( CASE WHEN "status" >= 400 THEN 1 ELSE 0 END ) * 100.0 / count( 1 ) AS "Access Failure Rate (%)", avg( request_time ) * 1000 AS "Average Latency (ms)", APPROX_QUANTILE_DS(request_time, 0.9) * 1000 AS "P90 Latency (ms)", APPROX_QUANTILE_DS(request_time, 0.99) * 1000 AS "P99 Latency (ms)" WHERE "remote_addr" != '' and req_id is not null GROUP BY addr having length(upstream_addr) > 2)ORDER BY "Access Failure Rate (%)" desc