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
- nginx-ingress logs have been collected to LTS.
- Logs have been structured. For details, see Setting Cloud Structuring Parsing.
Viewing nginx-ingress Monitoring by Second
- Log in to the LTS console.
- In the navigation pane, choose Dashboards.
- 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
- Filter by application name. The associated query and analysis statement is:
Viewing nginx-ingress Access Center
- 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
- Filter by application name. The associated query and analysis statement is:
Viewing nginx-ingress Monitoring Center
- 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
- Filter by application name. The associated query and analysis statement is:
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.See the reply and handling status in My Cloud VOC.
For any further questions, feel free to contact us through the chatbot.
Chatbot