Add support for new nginx plus api endpoints (#6508)
This commit is contained in:
parent
17a84ab4b4
commit
b380c65c15
|
@ -29,6 +29,24 @@ Nginx Plus is a commercial version of the open source web server Nginx. The use
|
||||||
| nginx_plus_stream_upstream_peer | nginx_plus_api_stream_upstream_peers |
|
| nginx_plus_stream_upstream_peer | nginx_plus_api_stream_upstream_peers |
|
||||||
| nginx.stream.zone | nginx_plus_api_stream_server_zones |
|
| nginx.stream.zone | nginx_plus_api_stream_server_zones |
|
||||||
|
|
||||||
|
### Measurements by API version
|
||||||
|
|
||||||
|
| Measurement | API version (api_version) |
|
||||||
|
|--------------------------------------|---------------------------|
|
||||||
|
| nginx_plus_api_processes | >= 3 |
|
||||||
|
| nginx_plus_api_connections | >= 3 |
|
||||||
|
| nginx_plus_api_ssl | >= 3 |
|
||||||
|
| nginx_plus_api_http_requests | >= 3 |
|
||||||
|
| nginx_plus_api_http_server_zones | >= 3 |
|
||||||
|
| nginx_plus_api_http_upstreams | >= 3 |
|
||||||
|
| nginx_plus_api_http_upstream_peers | >= 3 |
|
||||||
|
| nginx_plus_api_http_caches | >= 3 |
|
||||||
|
| nginx_plus_api_stream_upstreams | >= 3 |
|
||||||
|
| nginx_plus_api_stream_upstream_peers | >= 3 |
|
||||||
|
| nginx_plus_api_stream_server_zones | >= 3 |
|
||||||
|
| nginx_plus_api_http_location_zones | >= 5 |
|
||||||
|
| nginx_plus_api_resolver_zones | >= 5 |
|
||||||
|
|
||||||
### Measurements & Fields:
|
### Measurements & Fields:
|
||||||
|
|
||||||
- nginx_plus_api_processes
|
- nginx_plus_api_processes
|
||||||
|
@ -129,7 +147,29 @@ Nginx Plus is a commercial version of the open source web server Nginx. The use
|
||||||
- connections
|
- connections
|
||||||
- received
|
- received
|
||||||
- sent
|
- sent
|
||||||
|
- nginx_plus_api_location_zones
|
||||||
|
- requests
|
||||||
|
- responses_1xx
|
||||||
|
- responses_2xx
|
||||||
|
- responses_3xx
|
||||||
|
- responses_4xx
|
||||||
|
- responses_5xx
|
||||||
|
- responses_total
|
||||||
|
- received
|
||||||
|
- sent
|
||||||
|
- discarded
|
||||||
|
- nginx_plus_api_resolver_zones
|
||||||
|
- name
|
||||||
|
- srv
|
||||||
|
- addr
|
||||||
|
- noerror
|
||||||
|
- formerr
|
||||||
|
- servfail
|
||||||
|
- nxdomain
|
||||||
|
- notimp
|
||||||
|
- refused
|
||||||
|
- timedout
|
||||||
|
- unknown
|
||||||
|
|
||||||
### Tags:
|
### Tags:
|
||||||
|
|
||||||
|
@ -142,7 +182,7 @@ Nginx Plus is a commercial version of the open source web server Nginx. The use
|
||||||
- source
|
- source
|
||||||
- port
|
- port
|
||||||
|
|
||||||
- nginx_plus_api_http_server_zones, nginx_plus_api_upstream_server_zones
|
- nginx_plus_api_http_server_zones, nginx_plus_api_upstream_server_zones, nginx_plus_api_http_location_zones, nginx_plus_api_resolver_zones
|
||||||
- source
|
- source
|
||||||
- port
|
- port
|
||||||
- zone
|
- zone
|
||||||
|
@ -174,41 +214,40 @@ When run with:
|
||||||
|
|
||||||
It produces:
|
It produces:
|
||||||
```
|
```
|
||||||
> nginx_plus_api_processes,host=localhost,port=80,source=localhost respawned=0i 1539163505000000000
|
> nginx_plus_api_processes,port=80,source=demo.nginx.com respawned=0i 1570696321000000000
|
||||||
> nginx_plus_api_connections,host=localhost,port=80,source=localhost accepted=120890747i,active=6i,dropped=0i,idle=67i 1539163505000000000
|
> nginx_plus_api_connections,port=80,source=demo.nginx.com accepted=68998606i,active=7i,dropped=0i,idle=57i 1570696322000000000
|
||||||
> nginx_plus_api_ssl,host=localhost,port=80,source=localhost handshakes=2983938i,handshakes_failed=54350i,session_reuses=2485267i 1539163506000000000
|
> nginx_plus_api_ssl,port=80,source=demo.nginx.com handshakes=9398978i,handshakes_failed=289353i,session_reuses=1004389i 1570696322000000000
|
||||||
> nginx_plus_api_http_requests,host=localhost,port=80,source=localhost current=12i,total=175270198i 1539163506000000000
|
> nginx_plus_api_http_requests,port=80,source=demo.nginx.com current=51i,total=264649353i 1570696322000000000
|
||||||
> nginx_plus_api_http_server_zones,host=localhost,port=80,source=localhost,zone=hg.nginx.org discarded=45i,processing=0i,received=35723884i,requests=134102i,responses_1xx=0i,responses_2xx=96890i,responses_3xx=6892i,responses_4xx=30270i,responses_5xx=5i,responses_total=134057i,sent=3681826618i 1539163506000000000
|
> nginx_plus_api_http_server_zones,port=80,source=demo.nginx.com,zone=hg.nginx.org discarded=5i,processing=0i,received=24123604i,requests=60138i,responses_1xx=0i,responses_2xx=59353i,responses_3xx=531i,responses_4xx=249i,responses_5xx=0i,responses_total=60133i,sent=830165221i 1570696322000000000
|
||||||
> nginx_plus_api_http_server_zones,host=localhost,port=80,source=localhost,zone=trac.nginx.org discarded=4034i,processing=9i,received=282399663i,requests=336129i,responses_1xx=0i,responses_2xx=101264i,responses_3xx=25454i,responses_4xx=68961i,responses_5xx=136407i,responses_total=332086i,sent=2346677493i 1539163506000000000
|
> nginx_plus_api_http_server_zones,port=80,source=demo.nginx.com,zone=trac.nginx.org discarded=250i,processing=0i,received=2184618i,requests=12404i,responses_1xx=0i,responses_2xx=8579i,responses_3xx=2513i,responses_4xx=583i,responses_5xx=479i,responses_total=12154i,sent=139384159i 1570696322000000000
|
||||||
> nginx_plus_api_http_server_zones,host=localhost,port=80,source=localhost,zone=lxr.nginx.org discarded=4i,processing=1i,received=7223569i,requests=29661i,responses_1xx=0i,responses_2xx=28584i,responses_3xx=73i,responses_4xx=390i,responses_5xx=609i,responses_total=29656i,sent=5811238975i 1539163506000000000
|
> nginx_plus_api_http_server_zones,port=80,source=demo.nginx.com,zone=lxr.nginx.org discarded=1i,processing=0i,received=1011701i,requests=4523i,responses_1xx=0i,responses_2xx=4332i,responses_3xx=28i,responses_4xx=39i,responses_5xx=123i,responses_total=4522i,sent=72631354i 1570696322000000000
|
||||||
> nginx_plus_api_http_upstreams,host=localhost,port=80,source=localhost,upstream=trac-backend keepalive=0i,zombies=0i 1539163506000000000
|
> nginx_plus_api_http_upstreams,port=80,source=demo.nginx.com,upstream=trac-backend keepalive=0i,zombies=0i 1570696322000000000
|
||||||
> nginx_plus_api_http_upstream_peers,host=localhost,id=0,port=80,source=localhost,upstream=trac-backend,upstream_address=10.0.0.1:8080 active=0i,backup=false,downtime=53870i,fails=5i,header_time=421i,healthchecks_checks=17275i,healthchecks_fails=0i,healthchecks_last_passed=true,healthchecks_unhealthy=0i,received=1885213684i,requests=88476i,response_time=423i,responses_1xx=0i,responses_2xx=50997i,responses_3xx=205i,responses_4xx=34344i,responses_5xx=2076i,responses_total=87622i,sent=189938404i,state="up",unavail=5i,weight=1i 1539163506000000000
|
> nginx_plus_api_http_upstream_peers,id=0,port=80,source=demo.nginx.com,upstream=trac-backend,upstream_address=10.0.0.1:8080 active=0i,backup=false,downtime=0i,fails=0i,header_time=235i,healthchecks_checks=0i,healthchecks_fails=0i,healthchecks_unhealthy=0i,received=88581178i,requests=3180i,response_time=235i,responses_1xx=0i,responses_2xx=3168i,responses_3xx=5i,responses_4xx=6i,responses_5xx=0i,responses_total=3179i,sent=1321720i,state="up",unavail=0i,weight=1i 1570696322000000000
|
||||||
> nginx_plus_api_http_upstream_peers,host=localhost,id=1,port=80,source=localhost,upstream=trac-backend,upstream_address=10.0.0.1:8081 active=0i,backup=true,downtime=173957231i,fails=0i,healthchecks_checks=17394i,healthchecks_fails=17394i,healthchecks_last_passed=false,healthchecks_unhealthy=1i,received=0i,requests=0i,responses_1xx=0i,responses_2xx=0i,responses_3xx=0i,responses_4xx=0i,responses_5xx=0i,responses_total=0i,sent=0i,state="unhealthy",unavail=0i,weight=1i 1539163506000000000
|
> nginx_plus_api_http_upstream_peers,id=1,port=80,source=demo.nginx.com,upstream=trac-backend,upstream_address=10.0.0.1:8081 active=0i,backup=true,downtime=0i,fails=0i,healthchecks_checks=0i,healthchecks_fails=0i,healthchecks_unhealthy=0i,received=0i,requests=0i,responses_1xx=0i,responses_2xx=0i,responses_3xx=0i,responses_4xx=0i,responses_5xx=0i,responses_total=0i,sent=0i,state="up",unavail=0i,weight=1i 1570696322000000000
|
||||||
> nginx_plus_api_http_upstreams,host=localhost,port=80,source=localhost,upstream=hg-backend keepalive=0i,zombies=0i 1539163506000000000
|
> nginx_plus_api_http_upstreams,port=80,source=demo.nginx.com,upstream=hg-backend keepalive=0i,zombies=0i 1570696322000000000
|
||||||
> nginx_plus_api_http_upstream_peers,host=localhost,id=0,port=80,source=localhost,upstream=hg-backend,upstream_address=10.0.0.1:8088 active=0i,backup=false,downtime=0i,fails=0i,header_time=22i,healthchecks_checks=17319i,healthchecks_fails=0i,healthchecks_last_passed=true,healthchecks_unhealthy=0i,received=3724240605i,requests=89563i,response_time=44i,responses_1xx=0i,responses_2xx=81996i,responses_3xx=6886i,responses_4xx=639i,responses_5xx=5i,responses_total=89526i,sent=31597952i,state="up",unavail=0i,weight=5i 1539163506000000000
|
> nginx_plus_api_http_upstream_peers,id=0,port=80,source=demo.nginx.com,upstream=hg-backend,upstream_address=10.0.0.1:8088 active=0i,backup=false,downtime=0i,fails=0i,header_time=22i,healthchecks_checks=0i,healthchecks_fails=0i,healthchecks_unhealthy=0i,received=909402572i,requests=18514i,response_time=88i,responses_1xx=0i,responses_2xx=17799i,responses_3xx=531i,responses_4xx=179i,responses_5xx=0i,responses_total=18509i,sent=10608107i,state="up",unavail=0i,weight=5i 1570696322000000000
|
||||||
> nginx_plus_api_http_upstream_peers,host=localhost,id=1,port=80,source=localhost,upstream=hg-backend,upstream_address=10.0.0.1:8089 active=0i,backup=true,downtime=173957231i,fails=0i,healthchecks_checks=17394i,healthchecks_fails=17394i,healthchecks_last_passed=false,healthchecks_unhealthy=1i,received=0i,requests=0i,responses_1xx=0i,responses_2xx=0i,responses_3xx=0i,responses_4xx=0i,responses_5xx=0i,responses_total=0i,sent=0i,state="unhealthy",unavail=0i,weight=1i 1539163506000000000
|
> nginx_plus_api_http_upstream_peers,id=1,port=80,source=demo.nginx.com,upstream=hg-backend,upstream_address=10.0.0.1:8089 active=0i,backup=true,downtime=0i,fails=0i,healthchecks_checks=0i,healthchecks_fails=0i,healthchecks_unhealthy=0i,received=0i,requests=0i,responses_1xx=0i,responses_2xx=0i,responses_3xx=0i,responses_4xx=0i,responses_5xx=0i,responses_total=0i,sent=0i,state="up",unavail=0i,weight=1i 1570696322000000000
|
||||||
> nginx_plus_api_http_upstreams,host=localhost,port=80,source=localhost,upstream=lxr-backend keepalive=0i,zombies=0i 1539163506000000000
|
> nginx_plus_api_http_upstreams,port=80,source=demo.nginx.com,upstream=lxr-backend keepalive=0i,zombies=0i 1570696322000000000
|
||||||
> nginx_plus_api_http_upstream_peers,host=localhost,id=0,port=80,source=localhost,upstream=lxr-backend,upstream_address=unix:/tmp/cgi.sock active=0i,backup=false,downtime=0i,fails=609i,header_time=111i,healthchecks_checks=0i,healthchecks_fails=0i,healthchecks_unhealthy=0i,received=6220215064i,requests=28278i,response_time=172i,responses_1xx=0i,responses_2xx=27665i,responses_3xx=0i,responses_4xx=0i,responses_5xx=0i,responses_total=27665i,sent=21337016i,state="up",unavail=0i,weight=1i 1539163506000000000
|
> nginx_plus_api_http_upstream_peers,id=0,port=80,source=demo.nginx.com,upstream=lxr-backend,upstream_address=unix:/tmp/cgi.sock active=0i,backup=false,downtime=0i,fails=123i,header_time=91i,healthchecks_checks=0i,healthchecks_fails=0i,healthchecks_unhealthy=0i,received=71782888i,requests=4354i,response_time=91i,responses_1xx=0i,responses_2xx=4230i,responses_3xx=0i,responses_4xx=0i,responses_5xx=0i,responses_total=4230i,sent=3088656i,state="up",unavail=0i,weight=1i 1570696322000000000
|
||||||
> nginx_plus_api_http_upstream_peers,host=localhost,id=1,port=80,source=localhost,upstream=lxr-backend,upstream_address=unix:/tmp/cgib.sock active=0i,backup=true,downtime=0i,fails=0i,healthchecks_checks=0i,healthchecks_fails=0i,healthchecks_unhealthy=0i,max_conns=42i,received=0i,requests=0i,responses_1xx=0i,responses_2xx=0i,responses_3xx=0i,responses_4xx=0i,responses_5xx=0i,responses_total=0i,sent=0i,state="up",unavail=0i,weight=1i 1539163506000000000
|
> nginx_plus_api_http_upstream_peers,id=1,port=80,source=demo.nginx.com,upstream=lxr-backend,upstream_address=unix:/tmp/cgib.sock active=0i,backup=true,downtime=0i,fails=0i,healthchecks_checks=0i,healthchecks_fails=0i,healthchecks_unhealthy=0i,max_conns=42i,received=0i,requests=0i,responses_1xx=0i,responses_2xx=0i,responses_3xx=0i,responses_4xx=0i,responses_5xx=0i,responses_total=0i,sent=0i,state="up",unavail=0i,weight=1i 1570696322000000000
|
||||||
> nginx_plus_api_http_upstreams,host=localhost,port=80,source=localhost,upstream=demo-backend keepalive=0i,zombies=0i 1539163506000000000
|
> nginx_plus_api_http_upstreams,port=80,source=demo.nginx.com,upstream=demo-backend keepalive=0i,zombies=0i 1570696322000000000
|
||||||
> nginx_plus_api_http_upstream_peers,host=localhost,id=0,port=80,source=localhost,upstream=demo-backend,upstream_address=10.0.0.2:15431 active=0i,backup=false,downtime=0i,fails=0i,healthchecks_checks=173640i,healthchecks_fails=0i,healthchecks_last_passed=true,healthchecks_unhealthy=0i,received=0i,requests=0i,responses_1xx=0i,responses_2xx=0i,responses_3xx=0i,responses_4xx=0i,responses_5xx=0i,responses_total=0i,sent=0i,state="up",unavail=0i,weight=1i 1539163506000000000
|
> nginx_plus_api_http_upstream_peers,id=0,port=80,source=demo.nginx.com,upstream=demo-backend,upstream_address=10.0.0.2:15431 active=0i,backup=false,downtime=0i,fails=0i,healthchecks_checks=0i,healthchecks_fails=0i,healthchecks_unhealthy=0i,received=0i,requests=0i,responses_1xx=0i,responses_2xx=0i,responses_3xx=0i,responses_4xx=0i,responses_5xx=0i,responses_total=0i,sent=0i,state="up",unavail=0i,weight=1i 1570696322000000000
|
||||||
> nginx_plus_api_http_caches,cache=http_cache,host=localhost,port=80,source=localhost bypass_bytes=0i,bypass_bytes_written=0i,bypass_responses=0i,bypass_responses_written=0i,cold=false,expired_bytes=133671410i,expired_bytes_written=129210272i,expired_responses=15721i,expired_responses_written=15213i,hit_bytes=2459840828i,hit_responses=231195i,max_size=536870912i,miss_bytes=18742246i,miss_bytes_written=85199i,miss_responses=2816i,miss_responses_written=69i,revalidated_bytes=0i,revalidated_responses=0i,size=774144i,stale_bytes=0i,stale_responses=0i,updating_bytes=0i,updating_responses=0i 1539163506000000000
|
> nginx_plus_api_http_caches,cache=http_cache,port=80,source=demo.nginx.com bypass_bytes=0i,bypass_bytes_written=0i,bypass_responses=0i,bypass_responses_written=0i,cold=false,expired_bytes=381518640i,expired_bytes_written=363449785i,expired_responses=42114i,expired_responses_written=39954i,hit_bytes=6321885979i,hit_responses=596730i,max_size=536870912i,miss_bytes=48512185i,miss_bytes_written=155600i,miss_responses=6052i,miss_responses_written=136i,revalidated_bytes=0i,revalidated_responses=0i,size=765952i,stale_bytes=0i,stale_responses=0i,updating_bytes=0i,updating_responses=0i 1570696323000000000
|
||||||
> nginx_plus_api_stream_server_zones,host=localhost,port=80,source=localhost,zone=postgresql_loadbalancer connections=173639i,processing=0i,received=17884817i,sent=33685966i 1539163506000000000
|
> nginx_plus_api_stream_server_zones,port=80,source=demo.nginx.com,zone=postgresql_loadbalancer connections=0i,processing=0i,received=0i,sent=0i 1570696323000000000
|
||||||
> nginx_plus_api_stream_server_zones,host=localhost,port=80,source=localhost,zone=dns_loadbalancer connections=97255i,processing=0i,received=2699082i,sent=16566552i 1539163506000000000
|
> nginx_plus_api_stream_server_zones,port=80,source=demo.nginx.com,zone=dns_loadbalancer connections=0i,processing=0i,received=0i,sent=0i 1570696323000000000
|
||||||
> nginx_plus_api_stream_upstreams,host=localhost,port=80,source=localhost,upstream=postgresql_backends zombies=0i 1539163507000000000
|
> nginx_plus_api_stream_upstreams,port=80,source=demo.nginx.com,upstream=postgresql_backends zombies=0i 1570696323000000000
|
||||||
> nginx_plus_api_stream_upstream_peers,host=localhost,id=0,port=80,source=localhost,upstream=postgresql_backends,upstream_address=10.0.0.2:15432 active=0i,backup=false,connect_time=4i,connections=57880i,downtime=0i,fails=0i,first_byte_time=10i,healthchecks_checks=34781i,healthchecks_fails=0i,healthchecks_last_passed=true,healthchecks_unhealthy=0i,received=11228720i,response_time=10i,sent=5961640i,state="up",unavail=0i,weight=1i 1539163507000000000
|
> nginx_plus_api_stream_upstream_peers,id=0,port=80,source=demo.nginx.com,upstream=postgresql_backends,upstream_address=10.0.0.2:15432 active=0i,backup=false,connections=0i,downtime=0i,fails=0i,healthchecks_checks=0i,healthchecks_fails=0i,healthchecks_unhealthy=0i,received=0i,sent=0i,state="up",unavail=0i,weight=1i 1570696323000000000
|
||||||
> nginx_plus_api_stream_upstream_peers,host=localhost,id=1,port=80,source=localhost,upstream=postgresql_backends,upstream_address=10.0.0.2:15433 active=0i,backup=false,connect_time=3i,connections=57880i,downtime=0i,fails=0i,first_byte_time=9i,healthchecks_checks=34781i,healthchecks_fails=0i,healthchecks_last_passed=true,healthchecks_unhealthy=0i,received=11228720i,response_time=10i,sent=5961640i,state="up",unavail=0i,weight=1i 1539163507000000000
|
> nginx_plus_api_stream_upstream_peers,id=1,port=80,source=demo.nginx.com,upstream=postgresql_backends,upstream_address=10.0.0.2:15433 active=0i,backup=false,connections=0i,downtime=0i,fails=0i,healthchecks_checks=0i,healthchecks_fails=0i,healthchecks_unhealthy=0i,received=0i,sent=0i,state="up",unavail=0i,weight=1i 1570696323000000000
|
||||||
> nginx_plus_api_stream_upstream_peers,host=localhost,id=2,port=80,source=localhost,upstream=postgresql_backends,upstream_address=10.0.0.2:15434 active=0i,backup=false,connect_time=2i,connections=57879i,downtime=0i,fails=0i,first_byte_time=9i,healthchecks_checks=34781i,healthchecks_fails=0i,healthchecks_last_passed=true,healthchecks_unhealthy=0i,received=11228526i,response_time=9i,sent=5961537i,state="up",unavail=0i,weight=1i 1539163507000000000
|
> nginx_plus_api_stream_upstream_peers,id=2,port=80,source=demo.nginx.com,upstream=postgresql_backends,upstream_address=10.0.0.2:15434 active=0i,backup=false,connections=0i,downtime=0i,fails=0i,healthchecks_checks=0i,healthchecks_fails=0i,healthchecks_unhealthy=0i,received=0i,sent=0i,state="up",unavail=0i,weight=1i 1570696323000000000
|
||||||
> nginx_plus_api_stream_upstream_peers,host=localhost,id=3,port=80,source=localhost,upstream=postgresql_backends,upstream_address=10.0.0.2:15435 active=0i,backup=false,connections=0i,downtime=0i,fails=0i,healthchecks_checks=0i,healthchecks_fails=0i,healthchecks_unhealthy=0i,received=0i,sent=0i,state="down",unavail=0i,weight=1i 1539163507000000000
|
> nginx_plus_api_stream_upstream_peers,id=3,port=80,source=demo.nginx.com,upstream=postgresql_backends,upstream_address=10.0.0.2:15435 active=0i,backup=false,connections=0i,downtime=0i,fails=0i,healthchecks_checks=0i,healthchecks_fails=0i,healthchecks_unhealthy=0i,received=0i,sent=0i,state="down",unavail=0i,weight=1i 1570696323000000000
|
||||||
> nginx_plus_api_stream_upstreams,host=localhost,port=80,source=localhost,upstream=dns_udp_backends zombies=0i 1539163507000000000
|
> nginx_plus_api_stream_upstreams,port=80,source=demo.nginx.com,upstream=dns_udp_backends zombies=0i 1570696323000000000
|
||||||
> nginx_plus_api_stream_upstream_peers,host=localhost,id=0,port=80,source=localhost,upstream=dns_udp_backends,upstream_address=10.0.0.5:53 active=0i,backup=false,connect_time=0i,connections=64837i,downtime=0i,fails=0i,first_byte_time=17i,healthchecks_checks=34761i,healthchecks_fails=0i,healthchecks_last_passed=true,healthchecks_unhealthy=0i,received=10996616i,response_time=17i,sent=1791693i,state="up",unavail=0i,weight=2i 1539163507000000000
|
> nginx_plus_api_stream_upstream_peers,id=0,port=80,source=demo.nginx.com,upstream=dns_udp_backends,upstream_address=10.0.0.5:53 active=0i,backup=false,connections=0i,downtime=0i,fails=0i,healthchecks_checks=0i,healthchecks_fails=0i,healthchecks_unhealthy=0i,received=0i,sent=0i,state="up",unavail=0i,weight=2i 1570696323000000000
|
||||||
> nginx_plus_api_stream_upstream_peers,host=localhost,id=1,port=80,source=localhost,upstream=dns_udp_backends,upstream_address=10.0.0.2:53 active=0i,backup=false,connect_time=0i,connections=32418i,downtime=0i,fails=0i,first_byte_time=17i,healthchecks_checks=34761i,healthchecks_fails=0i,healthchecks_last_passed=true,healthchecks_unhealthy=0i,received=5569936i,response_time=17i,sent=907389i,state="up",unavail=0i,weight=1i 1539163507000000000
|
> nginx_plus_api_stream_upstream_peers,id=1,port=80,source=demo.nginx.com,upstream=dns_udp_backends,upstream_address=10.0.0.2:53 active=0i,backup=false,connections=0i,downtime=0i,fails=0i,healthchecks_checks=0i,healthchecks_fails=0i,healthchecks_unhealthy=0i,received=0i,sent=0i,state="up",unavail=0i,weight=1i 1570696323000000000
|
||||||
> nginx_plus_api_stream_upstream_peers,host=localhost,id=2,port=80,source=localhost,upstream=dns_udp_backends,upstream_address=10.0.0.7:53 active=0i,backup=false,connections=0i,downtime=0i,fails=0i,healthchecks_checks=0i,healthchecks_fails=0i,healthchecks_unhealthy=0i,received=0i,sent=0i,state="down",unavail=0i,weight=1i 1539163507000000000
|
> nginx_plus_api_stream_upstream_peers,id=2,port=80,source=demo.nginx.com,upstream=dns_udp_backends,upstream_address=10.0.0.7:53 active=0i,backup=false,connections=0i,downtime=0i,fails=0i,healthchecks_checks=0i,healthchecks_fails=0i,healthchecks_unhealthy=0i,received=0i,sent=0i,state="down",unavail=0i,weight=1i 1570696323000000000
|
||||||
> nginx_plus_api_stream_upstreams,host=localhost,port=80,source=localhost,upstream=unused_tcp_backends zombies=0i 1539163507000000000
|
> nginx_plus_api_stream_upstreams,port=80,source=demo.nginx.com,upstream=unused_tcp_backends zombies=0i 1570696323000000000
|
||||||
> nginx_plus_api_stream_upstream_peers,host=localhost,id=1,port=80,source=localhost,upstream=unused_tcp_backends,upstream_address=95.211.80.227:80 active=0i,backup=false,connections=0i,downtime=0i,fails=0i,healthchecks_checks=0i,healthchecks_fails=0i,healthchecks_unhealthy=0i,received=0i,sent=0i,state="down",unavail=0i,weight=1i 1539163507000000000
|
> nginx_plus_api_http_location_zones,port=80,source=demo.nginx.com,zone=swagger discarded=0i,received=1622i,requests=8i,responses_1xx=0i,responses_2xx=7i,responses_3xx=0i,responses_4xx=1i,responses_5xx=0i,responses_total=8i,sent=638333i 1570696323000000000
|
||||||
> nginx_plus_api_stream_upstream_peers,host=localhost,id=2,port=80,source=localhost,upstream=unused_tcp_backends,upstream_address=206.251.255.63:80 active=0i,backup=false,connections=0i,downtime=0i,fails=0i,healthchecks_checks=0i,healthchecks_fails=0i,healthchecks_unhealthy=0i,received=0i,sent=0i,state="down",unavail=0i,weight=1i 1539163507000000000
|
> nginx_plus_api_http_location_zones,port=80,source=demo.nginx.com,zone=api-calls discarded=64i,received=337530181i,requests=1726513i,responses_1xx=0i,responses_2xx=1726428i,responses_3xx=0i,responses_4xx=21i,responses_5xx=0i,responses_total=1726449i,sent=1902577668i 1570696323000000000
|
||||||
> nginx_plus_api_stream_upstream_peers,host=localhost,id=3,port=80,source=localhost,upstream=unused_tcp_backends,upstream_address=[2001:1af8:4060:a004:21::e3]:80 active=0i,backup=false,connections=0i,downtime=0i,fails=0i,healthchecks_checks=0i,healthchecks_fails=0i,healthchecks_unhealthy=0i,received=0i,sent=0i,state="down",unavail=0i,weight=1i 1539163507000000000
|
> nginx_plus_api_resolver_zones,port=80,source=demo.nginx.com,zone=resolver1 addr=0i,formerr=0i,name=0i,noerror=0i,notimp=0i,nxdomain=0i,refused=0i,servfail=0i,srv=0i,timedout=0i,unknown=0i 1570696324000000000
|
||||||
> nginx_plus_api_stream_upstream_peers,host=localhost,id=4,port=80,source=localhost,upstream=unused_tcp_backends,upstream_address=[2606:7100:1:69::3f]:80 active=0i,backup=false,connections=0i,downtime=0i,fails=0i,healthchecks_checks=0i,healthchecks_fails=0i,healthchecks_unhealthy=0i,received=0i,sent=0i,state="down",unavail=0i,weight=1i 1539163507000000000
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Reference material
|
### Reference material
|
||||||
|
|
|
@ -33,9 +33,12 @@ const (
|
||||||
|
|
||||||
httpRequestsPath = "http/requests"
|
httpRequestsPath = "http/requests"
|
||||||
httpServerZonesPath = "http/server_zones"
|
httpServerZonesPath = "http/server_zones"
|
||||||
|
httpLocationZonesPath = "http/location_zones"
|
||||||
httpUpstreamsPath = "http/upstreams"
|
httpUpstreamsPath = "http/upstreams"
|
||||||
httpCachesPath = "http/caches"
|
httpCachesPath = "http/caches"
|
||||||
|
|
||||||
|
resolverZonesPath = "resolvers"
|
||||||
|
|
||||||
streamServerZonesPath = "stream/server_zones"
|
streamServerZonesPath = "stream/server_zones"
|
||||||
streamUpstreamsPath = "stream/upstreams"
|
streamUpstreamsPath = "stream/upstreams"
|
||||||
)
|
)
|
||||||
|
|
|
@ -29,6 +29,11 @@ func (n *NginxPlusApi) gatherMetrics(addr *url.URL, acc telegraf.Accumulator) {
|
||||||
addError(acc, n.gatherHttpCachesMetrics(addr, acc))
|
addError(acc, n.gatherHttpCachesMetrics(addr, acc))
|
||||||
addError(acc, n.gatherStreamServerZonesMetrics(addr, acc))
|
addError(acc, n.gatherStreamServerZonesMetrics(addr, acc))
|
||||||
addError(acc, n.gatherStreamUpstreamsMetrics(addr, acc))
|
addError(acc, n.gatherStreamUpstreamsMetrics(addr, acc))
|
||||||
|
|
||||||
|
if n.ApiVersion >= 5 {
|
||||||
|
addError(acc, n.gatherHttpLocationZonesMetrics(addr, acc))
|
||||||
|
addError(acc, n.gatherResolverZonesMetrics(addr, acc))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func addError(acc telegraf.Accumulator, err error) {
|
func addError(acc telegraf.Accumulator, err error) {
|
||||||
|
@ -221,6 +226,53 @@ func (n *NginxPlusApi) gatherHttpServerZonesMetrics(addr *url.URL, acc telegraf.
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Added in 5 API version
|
||||||
|
func (n *NginxPlusApi) gatherHttpLocationZonesMetrics(addr *url.URL, acc telegraf.Accumulator) error {
|
||||||
|
body, err := n.gatherUrl(addr, httpLocationZonesPath)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
var httpLocationZones HttpLocationZones
|
||||||
|
|
||||||
|
if err := json.Unmarshal(body, &httpLocationZones); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
tags := getTags(addr)
|
||||||
|
|
||||||
|
for zoneName, zone := range httpLocationZones {
|
||||||
|
zoneTags := map[string]string{}
|
||||||
|
for k, v := range tags {
|
||||||
|
zoneTags[k] = v
|
||||||
|
}
|
||||||
|
zoneTags["zone"] = zoneName
|
||||||
|
acc.AddFields(
|
||||||
|
"nginx_plus_api_http_location_zones",
|
||||||
|
func() map[string]interface{} {
|
||||||
|
result := map[string]interface{}{
|
||||||
|
"requests": zone.Requests,
|
||||||
|
"responses_1xx": zone.Responses.Responses1xx,
|
||||||
|
"responses_2xx": zone.Responses.Responses2xx,
|
||||||
|
"responses_3xx": zone.Responses.Responses3xx,
|
||||||
|
"responses_4xx": zone.Responses.Responses4xx,
|
||||||
|
"responses_5xx": zone.Responses.Responses5xx,
|
||||||
|
"responses_total": zone.Responses.Total,
|
||||||
|
"received": zone.Received,
|
||||||
|
"sent": zone.Sent,
|
||||||
|
}
|
||||||
|
if zone.Discarded != nil {
|
||||||
|
result["discarded"] = *zone.Discarded
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}(),
|
||||||
|
zoneTags,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (n *NginxPlusApi) gatherHttpUpstreamsMetrics(addr *url.URL, acc telegraf.Accumulator) error {
|
func (n *NginxPlusApi) gatherHttpUpstreamsMetrics(addr *url.URL, acc telegraf.Accumulator) error {
|
||||||
body, err := n.gatherUrl(addr, httpUpstreamsPath)
|
body, err := n.gatherUrl(addr, httpUpstreamsPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -394,6 +446,50 @@ func (n *NginxPlusApi) gatherStreamServerZonesMetrics(addr *url.URL, acc telegra
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Added in 5 API version
|
||||||
|
func (n *NginxPlusApi) gatherResolverZonesMetrics(addr *url.URL, acc telegraf.Accumulator) error {
|
||||||
|
body, err := n.gatherUrl(addr, resolverZonesPath)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
var resolverZones ResolverZones
|
||||||
|
|
||||||
|
if err := json.Unmarshal(body, &resolverZones); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
tags := getTags(addr)
|
||||||
|
|
||||||
|
for zoneName, resolver := range resolverZones {
|
||||||
|
zoneTags := map[string]string{}
|
||||||
|
for k, v := range tags {
|
||||||
|
zoneTags[k] = v
|
||||||
|
}
|
||||||
|
zoneTags["zone"] = zoneName
|
||||||
|
acc.AddFields(
|
||||||
|
"nginx_plus_api_resolver_zones",
|
||||||
|
map[string]interface{}{
|
||||||
|
"name": resolver.Requests.Name,
|
||||||
|
"srv": resolver.Requests.Srv,
|
||||||
|
"addr": resolver.Requests.Addr,
|
||||||
|
|
||||||
|
"noerror": resolver.Responses.Noerror,
|
||||||
|
"formerr": resolver.Responses.Formerr,
|
||||||
|
"servfail": resolver.Responses.Servfail,
|
||||||
|
"nxdomain": resolver.Responses.Nxdomain,
|
||||||
|
"notimp": resolver.Responses.Notimp,
|
||||||
|
"refused": resolver.Responses.Refused,
|
||||||
|
"timedout": resolver.Responses.Timedout,
|
||||||
|
"unknown": resolver.Responses.Unknown,
|
||||||
|
},
|
||||||
|
zoneTags,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (n *NginxPlusApi) gatherStreamUpstreamsMetrics(addr *url.URL, acc telegraf.Accumulator) error {
|
func (n *NginxPlusApi) gatherStreamUpstreamsMetrics(addr *url.URL, acc telegraf.Accumulator) error {
|
||||||
body, err := n.gatherUrl(addr, streamUpstreamsPath)
|
body, err := n.gatherUrl(addr, streamUpstreamsPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -35,6 +35,45 @@ const sslPayload = `
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
|
const resolverZonesPayload = `
|
||||||
|
{
|
||||||
|
"resolver_zone1": {
|
||||||
|
"requests": {
|
||||||
|
"name": 25460,
|
||||||
|
"srv": 130,
|
||||||
|
"addr": 2580
|
||||||
|
},
|
||||||
|
"responses": {
|
||||||
|
"noerror": 26499,
|
||||||
|
"formerr": 0,
|
||||||
|
"servfail": 3,
|
||||||
|
"nxdomain": 0,
|
||||||
|
"notimp": 0,
|
||||||
|
"refused": 0,
|
||||||
|
"timedout": 243,
|
||||||
|
"unknown": 478
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"resolver_zone2": {
|
||||||
|
"requests": {
|
||||||
|
"name": 325460,
|
||||||
|
"srv": 1130,
|
||||||
|
"addr": 12580
|
||||||
|
},
|
||||||
|
"responses": {
|
||||||
|
"noerror": 226499,
|
||||||
|
"formerr": 0,
|
||||||
|
"servfail": 283,
|
||||||
|
"nxdomain": 0,
|
||||||
|
"notimp": 0,
|
||||||
|
"refused": 0,
|
||||||
|
"timedout": 743,
|
||||||
|
"unknown": 1478
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
||||||
const httpRequestsPayload = `
|
const httpRequestsPayload = `
|
||||||
{
|
{
|
||||||
"total": 10624511,
|
"total": 10624511,
|
||||||
|
@ -77,6 +116,39 @@ const httpServerZonesPayload = `
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
|
const httpLocationZonesPayload = `
|
||||||
|
{
|
||||||
|
"site1": {
|
||||||
|
"requests": 736395,
|
||||||
|
"responses": {
|
||||||
|
"1xx": 0,
|
||||||
|
"2xx": 727290,
|
||||||
|
"3xx": 4614,
|
||||||
|
"4xx": 934,
|
||||||
|
"5xx": 1535,
|
||||||
|
"total": 734373
|
||||||
|
},
|
||||||
|
"discarded": 2020,
|
||||||
|
"received": 180157219,
|
||||||
|
"sent": 20183175459
|
||||||
|
},
|
||||||
|
"site2": {
|
||||||
|
"requests": 185307,
|
||||||
|
"responses": {
|
||||||
|
"1xx": 0,
|
||||||
|
"2xx": 112674,
|
||||||
|
"3xx": 45383,
|
||||||
|
"4xx": 2504,
|
||||||
|
"5xx": 4419,
|
||||||
|
"total": 164980
|
||||||
|
},
|
||||||
|
"discarded": 20326,
|
||||||
|
"received": 51575327,
|
||||||
|
"sent": 2983241510
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
||||||
const httpUpstreamsPayload = `
|
const httpUpstreamsPayload = `
|
||||||
{
|
{
|
||||||
"trac-backend": {
|
"trac-backend": {
|
||||||
|
@ -591,6 +663,58 @@ func TestGatherHttpServerZonesMetrics(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGatherHttpLocationZonesMetrics(t *testing.T) {
|
||||||
|
ts, n := prepareEndpoint(t, httpLocationZonesPath, defaultApiVersion, httpLocationZonesPayload)
|
||||||
|
defer ts.Close()
|
||||||
|
|
||||||
|
var acc testutil.Accumulator
|
||||||
|
addr, host, port := prepareAddr(t, ts)
|
||||||
|
|
||||||
|
require.NoError(t, n.gatherHttpLocationZonesMetrics(addr, &acc))
|
||||||
|
|
||||||
|
acc.AssertContainsTaggedFields(
|
||||||
|
t,
|
||||||
|
"nginx_plus_api_http_location_zones",
|
||||||
|
map[string]interface{}{
|
||||||
|
"discarded": int64(2020),
|
||||||
|
"received": int64(180157219),
|
||||||
|
"requests": int64(736395),
|
||||||
|
"responses_1xx": int64(0),
|
||||||
|
"responses_2xx": int64(727290),
|
||||||
|
"responses_3xx": int64(4614),
|
||||||
|
"responses_4xx": int64(934),
|
||||||
|
"responses_5xx": int64(1535),
|
||||||
|
"responses_total": int64(734373),
|
||||||
|
"sent": int64(20183175459),
|
||||||
|
},
|
||||||
|
map[string]string{
|
||||||
|
"source": host,
|
||||||
|
"port": port,
|
||||||
|
"zone": "site1",
|
||||||
|
})
|
||||||
|
|
||||||
|
acc.AssertContainsTaggedFields(
|
||||||
|
t,
|
||||||
|
"nginx_plus_api_http_location_zones",
|
||||||
|
map[string]interface{}{
|
||||||
|
"discarded": int64(20326),
|
||||||
|
"received": int64(51575327),
|
||||||
|
"requests": int64(185307),
|
||||||
|
"responses_1xx": int64(0),
|
||||||
|
"responses_2xx": int64(112674),
|
||||||
|
"responses_3xx": int64(45383),
|
||||||
|
"responses_4xx": int64(2504),
|
||||||
|
"responses_5xx": int64(4419),
|
||||||
|
"responses_total": int64(164980),
|
||||||
|
"sent": int64(2983241510),
|
||||||
|
},
|
||||||
|
map[string]string{
|
||||||
|
"source": host,
|
||||||
|
"port": port,
|
||||||
|
"zone": "site2",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func TestHatherHttpUpstreamsMetrics(t *testing.T) {
|
func TestHatherHttpUpstreamsMetrics(t *testing.T) {
|
||||||
ts, n := prepareEndpoint(t, httpUpstreamsPath, defaultApiVersion, httpUpstreamsPayload)
|
ts, n := prepareEndpoint(t, httpUpstreamsPath, defaultApiVersion, httpUpstreamsPayload)
|
||||||
defer ts.Close()
|
defer ts.Close()
|
||||||
|
@ -841,6 +965,60 @@ func TestGatherHttpCachesMetrics(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGatherResolverZonesMetrics(t *testing.T) {
|
||||||
|
ts, n := prepareEndpoint(t, resolverZonesPath, defaultApiVersion, resolverZonesPayload)
|
||||||
|
defer ts.Close()
|
||||||
|
|
||||||
|
var acc testutil.Accumulator
|
||||||
|
addr, host, port := prepareAddr(t, ts)
|
||||||
|
|
||||||
|
require.NoError(t, n.gatherResolverZonesMetrics(addr, &acc))
|
||||||
|
|
||||||
|
acc.AssertContainsTaggedFields(
|
||||||
|
t,
|
||||||
|
"nginx_plus_api_resolver_zones",
|
||||||
|
map[string]interface{}{
|
||||||
|
"name": int64(25460),
|
||||||
|
"srv": int64(130),
|
||||||
|
"addr": int64(2580),
|
||||||
|
"noerror": int64(26499),
|
||||||
|
"formerr": int64(0),
|
||||||
|
"servfail": int64(3),
|
||||||
|
"nxdomain": int64(0),
|
||||||
|
"notimp": int64(0),
|
||||||
|
"refused": int64(0),
|
||||||
|
"timedout": int64(243),
|
||||||
|
"unknown": int64(478),
|
||||||
|
},
|
||||||
|
map[string]string{
|
||||||
|
"source": host,
|
||||||
|
"port": port,
|
||||||
|
"zone": "resolver_zone1",
|
||||||
|
})
|
||||||
|
|
||||||
|
acc.AssertContainsTaggedFields(
|
||||||
|
t,
|
||||||
|
"nginx_plus_api_resolver_zones",
|
||||||
|
map[string]interface{}{
|
||||||
|
"name": int64(325460),
|
||||||
|
"srv": int64(1130),
|
||||||
|
"addr": int64(12580),
|
||||||
|
"noerror": int64(226499),
|
||||||
|
"formerr": int64(0),
|
||||||
|
"servfail": int64(283),
|
||||||
|
"nxdomain": int64(0),
|
||||||
|
"notimp": int64(0),
|
||||||
|
"refused": int64(0),
|
||||||
|
"timedout": int64(743),
|
||||||
|
"unknown": int64(1478),
|
||||||
|
},
|
||||||
|
map[string]string{
|
||||||
|
"source": host,
|
||||||
|
"port": port,
|
||||||
|
"zone": "resolver_zone2",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func TestGatherStreamUpstreams(t *testing.T) {
|
func TestGatherStreamUpstreams(t *testing.T) {
|
||||||
ts, n := prepareEndpoint(t, streamUpstreamsPath, defaultApiVersion, streamUpstreamsPayload)
|
ts, n := prepareEndpoint(t, streamUpstreamsPath, defaultApiVersion, streamUpstreamsPayload)
|
||||||
defer ts.Close()
|
defer ts.Close()
|
||||||
|
@ -1023,6 +1201,7 @@ func TestGatherStreamServerZonesMetrics(t *testing.T) {
|
||||||
"zone": "dns",
|
"zone": "dns",
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUnavailableEndpoints(t *testing.T) {
|
func TestUnavailableEndpoints(t *testing.T) {
|
||||||
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
w.WriteHeader(http.StatusNotFound)
|
w.WriteHeader(http.StatusNotFound)
|
||||||
|
|
|
@ -17,6 +17,24 @@ type Ssl struct { // added in version 6
|
||||||
SessionReuses int64 `json:"session_reuses"`
|
SessionReuses int64 `json:"session_reuses"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ResolverZones map[string]struct {
|
||||||
|
Requests struct {
|
||||||
|
Name int64 `json:"name"`
|
||||||
|
Srv int64 `json:"srv"`
|
||||||
|
Addr int64 `json:"addr"`
|
||||||
|
} `json:"requests"`
|
||||||
|
Responses struct {
|
||||||
|
Noerror int64 `json:"noerror"`
|
||||||
|
Formerr int64 `json:"formerr"`
|
||||||
|
Servfail int64 `json:"servfail"`
|
||||||
|
Nxdomain int64 `json:"nxdomain"`
|
||||||
|
Notimp int64 `json:"notimp"`
|
||||||
|
Refused int64 `json:"refused"`
|
||||||
|
Timedout int64 `json:"timedout"`
|
||||||
|
Unknown int64 `json:"unknown"`
|
||||||
|
} `json:"responses"`
|
||||||
|
}
|
||||||
|
|
||||||
type HttpRequests struct {
|
type HttpRequests struct {
|
||||||
Total int64 `json:"total"`
|
Total int64 `json:"total"`
|
||||||
Current int64 `json:"current"`
|
Current int64 `json:"current"`
|
||||||
|
@ -40,6 +58,14 @@ type HttpServerZones map[string]struct {
|
||||||
Sent int64 `json:"sent"`
|
Sent int64 `json:"sent"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type HttpLocationZones map[string]struct {
|
||||||
|
Requests int64 `json:"requests"`
|
||||||
|
Responses ResponseStats `json:"responses"`
|
||||||
|
Discarded *int64 `json:"discarded"` // added in version 6
|
||||||
|
Received int64 `json:"received"`
|
||||||
|
Sent int64 `json:"sent"`
|
||||||
|
}
|
||||||
|
|
||||||
type HealthCheckStats struct {
|
type HealthCheckStats struct {
|
||||||
Checks int64 `json:"checks"`
|
Checks int64 `json:"checks"`
|
||||||
Fails int64 `json:"fails"`
|
Fails int64 `json:"fails"`
|
||||||
|
|
Loading…
Reference in New Issue