diff --git a/modules/nginxplus/README.md b/modules/nginxplus/README.md index 8c9ffa39d..fd5f92493 100644 --- a/modules/nginxplus/README.md +++ b/modules/nginxplus/README.md @@ -65,6 +65,8 @@ Labels per scope: | http_upstream_server_connections_count | http upstream server | active | connections | | http_upstream_server_downtime | http upstream server | downtime | seconds | | http_cache_state | http cache | warm, cold | state | +| http_cache_iops | http cache | served, written, bypass | responses/s | +| http_cache_io | http cache | served, written, bypass | bytes/s | | http_cache_size | http cache | size | bytes | | stream_server_zone_connections_rate | stream server zone | accepted | connections/s | | stream_server_zone_sessions_per_code_class_rate | stream server zone | 2xx, 4xx, 5xx | sessions/s | diff --git a/modules/nginxplus/charts.go b/modules/nginxplus/charts.go index 8834646bd..2087d1e75 100644 --- a/modules/nginxplus/charts.go +++ b/modules/nginxplus/charts.go @@ -49,6 +49,8 @@ const ( prioHTTPUpstreamServerTrafficRate prioHTTPCacheState + prioHTTPCacheIOPS + prioHTTPCacheIO prioHTTPCacheSize prioStreamServerZoneConnectionsRate @@ -456,6 +458,8 @@ var ( var ( httpCacheChartsTmpl = module.Charts{ httpCacheStateChartTmpl.Copy(), + httpCacheIOPSChartTmpl.Copy(), + httpCacheIOChartTmpl.Copy(), httpCacheSizeChartTmpl.Copy(), } httpCacheStateChartTmpl = module.Chart{ @@ -481,6 +485,32 @@ var ( {ID: "http_cache_%s_size", Name: "size"}, }, } + httpCacheIOPSChartTmpl = module.Chart{ + ID: "http_cache_%s_iops", + Title: "HTTP Cache IOPS", + Units: "responses/s", + Fam: "http cache", + Ctx: "nginxplus.http_cache_iops", + Priority: prioHTTPCacheIOPS, + Dims: module.Dims{ + {ID: "http_cache_%s_served_responses", Name: "served", Algo: module.Incremental}, + {ID: "http_cache_%s_written_responses", Name: "written", Algo: module.Incremental}, + {ID: "http_cache_%s_bypassed_responses", Name: "bypassed", Algo: module.Incremental}, + }, + } + httpCacheIOChartTmpl = module.Chart{ + ID: "http_cache_%s_io", + Title: "HTTP Cache IO", + Units: "bytes/s", + Fam: "http cache", + Ctx: "nginxplus.http_cache_io", + Priority: prioHTTPCacheIO, + Dims: module.Dims{ + {ID: "http_cache_%s_served_bytes", Name: "served", Algo: module.Incremental}, + {ID: "http_cache_%s_written_bytes", Name: "written", Algo: module.Incremental}, + {ID: "http_cache_%s_bypassed_bytes", Name: "bypassed", Algo: module.Incremental}, + }, + } ) var ( diff --git a/modules/nginxplus/collect.go b/modules/nginxplus/collect.go index a27675932..5ccad27dd 100644 --- a/modules/nginxplus/collect.go +++ b/modules/nginxplus/collect.go @@ -92,6 +92,12 @@ func (n *NginxPlus) collectHTTPCache(mx map[string]int64, ms *nginxMetrics) { mx[px+"state_cold"] = boolToInt(cache.Cold) mx[px+"state_warm"] = boolToInt(!cache.Cold) mx[px+"size"] = cache.Size + mx[px+"served_responses"] = cache.Hit.Responses + cache.Stale.Responses + cache.Updating.Responses + cache.Revalidated.Responses + mx[px+"written_responses"] = cache.Miss.ResponsesWritten + cache.Expired.ResponsesWritten + cache.Bypass.ResponsesWritten + mx[px+"bypassed_responses"] = cache.Miss.Responses + cache.Expired.Responses + cache.Bypass.Responses + mx[px+"served_bytes"] = cache.Hit.Bytes + cache.Stale.Bytes + cache.Updating.Bytes + cache.Revalidated.Bytes + mx[px+"written_bytes"] = cache.Miss.BytesWritten + cache.Expired.BytesWritten + cache.Bypass.BytesWritten + mx[px+"bypassed_bytes"] = cache.Miss.Bytes + cache.Expired.Bytes + cache.Bypass.Bytes } } diff --git a/modules/nginxplus/nginxplus_test.go b/modules/nginxplus/nginxplus_test.go index 5092a1d0d..9cac451fd 100644 --- a/modules/nginxplus/nginxplus_test.go +++ b/modules/nginxplus/nginxplus_test.go @@ -148,9 +148,15 @@ func TestNginxPlus_Collect(t *testing.T) { "connections_active": 1, "connections_dropped": 0, "connections_idle": 8, + "http_cache_cache_backend_bypassed_bytes": 67035, + "http_cache_cache_backend_bypassed_responses": 109, + "http_cache_cache_backend_served_bytes": 0, + "http_cache_cache_backend_served_responses": 0, "http_cache_cache_backend_size": 0, "http_cache_cache_backend_state_cold": 0, "http_cache_cache_backend_state_warm": 1, + "http_cache_cache_backend_written_bytes": 0, + "http_cache_cache_backend_written_responses": 0, "http_location_zone_server_api_bytes_received": 1854427, "http_location_zone_server_api_bytes_sent": 4668778, "http_location_zone_server_api_requests": 9188, @@ -297,9 +303,15 @@ func TestNginxPlus_Collect(t *testing.T) { "connections_active": 1, "connections_dropped": 0, "connections_idle": 8, + "http_cache_cache_backend_bypassed_bytes": 67035, + "http_cache_cache_backend_bypassed_responses": 109, + "http_cache_cache_backend_served_bytes": 0, + "http_cache_cache_backend_served_responses": 0, "http_cache_cache_backend_size": 0, "http_cache_cache_backend_state_cold": 0, "http_cache_cache_backend_state_warm": 1, + "http_cache_cache_backend_written_bytes": 0, + "http_cache_cache_backend_written_responses": 0, "http_location_zone_server_api_bytes_received": 1854427, "http_location_zone_server_api_bytes_sent": 4668778, "http_location_zone_server_api_requests": 9188,