@@ -29,9 +29,10 @@ type NginxVts struct {
2929 Handled int `json:"handled"`
3030 Requests int `json:"requests"`
3131 } `json:"connections"`
32- ServerZones map [string ]Server `json:"serverZones"`
33- UpstreamZones map [string ][]Upstream `json:"upstreamZones"`
34- CacheZones map [string ]Cache `json:"cacheZones"`
32+ ServerZones map [string ]Server `json:"serverZones"`
33+ UpstreamZones map [string ][]Upstream `json:"upstreamZones"`
34+ FilterZones map [string ]map [string ]Upstream `json:"filterZones"`
35+ CacheZones map [string ]Cache `json:"cacheZones"`
3536}
3637
3738type Server struct {
@@ -138,7 +139,7 @@ type Cache struct {
138139type Exporter struct {
139140 URI string
140141
141- serverMetrics , upstreamMetrics , cacheMetrics map [string ]* prometheus.Desc
142+ serverMetrics , upstreamMetrics , filterMetrics , cacheMetrics map [string ]* prometheus.Desc
142143}
143144
144145func newServerMetric (metricName string , docString string , labels []string ) * prometheus.Desc {
@@ -155,6 +156,13 @@ func newUpstreamMetric(metricName string, docString string, labels []string) *pr
155156 )
156157}
157158
159+ func newFilterMetric (metricName string , docString string , labels []string ) * prometheus.Desc {
160+ return prometheus .NewDesc (
161+ prometheus .BuildFQName (* metricsNamespace , "filter" , metricName ),
162+ docString , labels , nil ,
163+ )
164+ }
165+
158166func newCacheMetric (metricName string , docString string , labels []string ) * prometheus.Desc {
159167 return prometheus .NewDesc (
160168 prometheus .BuildFQName (* metricsNamespace , "cache" , metricName ),
@@ -177,6 +185,11 @@ func NewExporter(uri string) *Exporter {
177185 "bytes" : newUpstreamMetric ("bytes" , "request/response bytes" , []string {"upstream" , "direction" }),
178186 "response" : newUpstreamMetric ("response" , "request response time" , []string {"upstream" , "backend" }),
179187 },
188+ filterMetrics : map [string ]* prometheus.Desc {
189+ "requests" : newFilterMetric ("requests" , "requests counter" , []string {"filter" , "filterName" , "code" }),
190+ "bytes" : newFilterMetric ("bytes" , "request/response bytes" , []string {"filter" , "filterName" , "direction" }),
191+ "response" : newFilterMetric ("response" , "request response time" , []string {"filter" , "filterName" }),
192+ },
180193 cacheMetrics : map [string ]* prometheus.Desc {
181194 "requests" : newCacheMetric ("requests" , "cache requests counter" , []string {"zone" , "status" }),
182195 "bytes" : newCacheMetric ("bytes" , "cache request/response bytes" , []string {"zone" , "direction" }),
@@ -191,6 +204,9 @@ func (e *Exporter) Describe(ch chan<- *prometheus.Desc) {
191204 for _ , m := range e .upstreamMetrics {
192205 ch <- m
193206 }
207+ for _ , m := range e .filterMetrics {
208+ ch <- m
209+ }
194210 for _ , m := range e .cacheMetrics {
195211 ch <- m
196212 }
@@ -265,16 +281,21 @@ func (e *Exporter) Collect(ch chan<- prometheus.Metric) {
265281
266282 ch <- prometheus .MustNewConstMetric (e .upstreamMetrics ["response" ], prometheus .GaugeValue , float64 (s .ResponseMsec ), name , s .Server )
267283 }
268-
269- ch <- prometheus .MustNewConstMetric (e .upstreamMetrics ["requests" ], prometheus .CounterValue , total , name , "total" )
270- ch <- prometheus .MustNewConstMetric (e .upstreamMetrics ["requests" ], prometheus .CounterValue , one , name , "1xx" )
271- ch <- prometheus .MustNewConstMetric (e .upstreamMetrics ["requests" ], prometheus .CounterValue , two , name , "2xx" )
272- ch <- prometheus .MustNewConstMetric (e .upstreamMetrics ["requests" ], prometheus .CounterValue , three , name , "3xx" )
273- ch <- prometheus .MustNewConstMetric (e .upstreamMetrics ["requests" ], prometheus .CounterValue , four , name , "4xx" )
274- ch <- prometheus .MustNewConstMetric (e .upstreamMetrics ["requests" ], prometheus .CounterValue , five , name , "5xx" )
275-
276- ch <- prometheus .MustNewConstMetric (e .upstreamMetrics ["bytes" ], prometheus .CounterValue , inbytes , name , "in" )
277- ch <- prometheus .MustNewConstMetric (e .upstreamMetrics ["bytes" ], prometheus .CounterValue , outbytes , name , "out" )
284+ }
285+ // FilterZones
286+ for filter , values := range nginxVtx .FilterZones {
287+ for name , stat := range values {
288+ ch <- prometheus .MustNewConstMetric (e .filterMetrics ["response" ], prometheus .GaugeValue , float64 (stat .ResponseMsec ), filter , name )
289+ ch <- prometheus .MustNewConstMetric (e .filterMetrics ["requests" ], prometheus .CounterValue , float64 (stat .RequestCounter ), filter , name , "total" )
290+ ch <- prometheus .MustNewConstMetric (e .filterMetrics ["requests" ], prometheus .CounterValue , float64 (stat .Responses .OneXx ), filter , name , "1xx" )
291+ ch <- prometheus .MustNewConstMetric (e .filterMetrics ["requests" ], prometheus .CounterValue , float64 (stat .Responses .TwoXx ), filter , name , "2xx" )
292+ ch <- prometheus .MustNewConstMetric (e .filterMetrics ["requests" ], prometheus .CounterValue , float64 (stat .Responses .ThreeXx ), filter , name , "3xx" )
293+ ch <- prometheus .MustNewConstMetric (e .filterMetrics ["requests" ], prometheus .CounterValue , float64 (stat .Responses .FourXx ), filter , name , "4xx" )
294+ ch <- prometheus .MustNewConstMetric (e .filterMetrics ["requests" ], prometheus .CounterValue , float64 (stat .Responses .FiveXx ), filter , name , "5xx" )
295+
296+ ch <- prometheus .MustNewConstMetric (e .filterMetrics ["bytes" ], prometheus .CounterValue , float64 (stat .InBytes ), filter , name , "in" )
297+ ch <- prometheus .MustNewConstMetric (e .filterMetrics ["bytes" ], prometheus .CounterValue , float64 (stat .OutBytes ), filter , name , "out" )
298+ }
278299 }
279300
280301 // CacheZones
0 commit comments