Skip to content

Commit adf2d03

Browse files
authored
Merge pull request #38 from mbobakov/master
Support for filter zones
2 parents ad91859 + e40ee9e commit adf2d03

File tree

3 files changed

+61
-15
lines changed

3 files changed

+61
-15
lines changed

README.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ Simple server that scrapes Nginx [vts](https://github.com/vozlt/nginx-module-vts
2020
* [Metrics](#metrics)
2121
* [Server main](#server-main)
2222
* [Server zones](#server-zones)
23+
* [Filter zones](#filter-zones)
2324
* [Upstreams](#upstreams)
2425

2526
## Dependency
@@ -121,6 +122,30 @@ nginx_server_bytes{direction="in",host="test.domain.com"} 21
121122
nginx_server_cache{host="test.domain.com",status="bypass"} 2
122123
```
123124

125+
### Filter zones
126+
127+
**Metrics details**
128+
129+
Nginx data | Name | Exposed informations
130+
------------------ | ------------------------------- | ------------------------
131+
**Requests** | `{NAMESPACE}_filter_requests` | code [2xx, 3xx, 4xx, 5xx and total], filter, filter name
132+
**Bytes** | `{NAMESPACE}_filter_bytes` | direction [in, out], filter, filter name
133+
**Response time** | `{NAMESPACE}_filter_response` | filter, filter name
134+
135+
**Metrics output example**
136+
137+
``` txt
138+
# Filter Requests
139+
nginx_upstream_requests{code="1xx", filter="country", filterName="BY"} 0
140+
141+
# Filter Bytes
142+
nginx_upstream_bytes{direction="in", filter="country", filterName="BY"} 0
143+
144+
# Filter Response time
145+
nginx_upstream_response{filter="country", filterName="BY"} 99
146+
```
147+
148+
124149
### Upstreams
125150

126151
**Metrics details**

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.6
1+
0.7

nginx_vts_exporter.go

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

3738
type Server struct {
@@ -138,7 +139,7 @@ type Cache struct {
138139
type 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

144145
func 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+
158166
func 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

Comments
 (0)