mirror of
https://github.com/taigrr/nats.docs
synced 2025-01-18 04:03:23 -08:00
GitBook: [master] 326 pages and 16 assets modified
This commit is contained in:
committed by
gitbook-bot
parent
8b7ba5c3bb
commit
fb0d5c8355
67
nats-streaming-concepts/monitoring/README.md
Normal file
67
nats-streaming-concepts/monitoring/README.md
Normal file
@@ -0,0 +1,67 @@
|
||||
# Monitoring
|
||||
|
||||
To monitor the NATS Streaming system, a lightweight HTTP server is used on a dedicated monitoring port. The monitoring server provides several endpoints, all returning a JSON object.
|
||||
|
||||
## Enabling from the command line
|
||||
|
||||
To enable the monitoring server, start the NATS Streaming Server with the monitoring flag -m \(or -ms\) and specify the monitoring port.
|
||||
|
||||
Monitoring options
|
||||
|
||||
```text
|
||||
-m, --http_port PORT HTTP PORT for monitoring
|
||||
-ms,--https_port PORT Use HTTPS PORT for monitoring (requires TLS cert and key)
|
||||
```
|
||||
|
||||
To enable monitoring via the configuration file, use `http: "host:port"` or `https: "host:port"`. There is no explicit configuration flag for the monitoring interface.
|
||||
|
||||
For example, after running this:
|
||||
|
||||
```text
|
||||
nats-streaming-server -m 8222
|
||||
```
|
||||
|
||||
you should see that the NATS Streaming server starts with the HTTP monitoring port enabled:
|
||||
|
||||
```bash
|
||||
[19339] 2019/06/24 15:02:38.251091 [INF] STREAM: Starting nats-streaming-server[test-cluster] version 0.15.1
|
||||
[19339] 2019/06/24 15:02:38.251238 [INF] STREAM: ServerID: 0Z2HXClEM6BPsGaKcoHg5N
|
||||
[19339] 2019/06/24 15:02:38.251243 [INF] STREAM: Go version: go1.12
|
||||
[19339] 2019/06/24 15:02:38.251862 [INF] Starting nats-server version 2.0.0
|
||||
[19339] 2019/06/24 15:02:38.251873 [INF] Git commit [not set]
|
||||
[19339] 2019/06/24 15:02:38.252173 [INF] Starting http monitor on 0.0.0.0:8222
|
||||
[19339] 2019/06/24 15:02:38.252248 [INF] Listening for client connections on 0.0.0.0:4222
|
||||
(...)
|
||||
```
|
||||
|
||||
You can then point your browser \(or curl\) to [http://localhost:8222/streaming](http://localhost:8222/streaming)
|
||||
|
||||
## Enabling from the configuration file
|
||||
|
||||
To start via the configuration file you can define the monitoring port as follows:
|
||||
|
||||
```text
|
||||
http_port = 8222
|
||||
```
|
||||
|
||||
Then use the `-sc` flag to customize the NATS Streaming configuration:
|
||||
|
||||
```bash
|
||||
nats-streaming-server -sc nats-streaming.conf -ns nats://demo.nats.io:4222 -SDV
|
||||
```
|
||||
|
||||
Confirm that the monitoring endpoint is enabled by sending a request:
|
||||
|
||||
```bash
|
||||
curl 127.0.0.1:8222/streaming/channelsz
|
||||
{
|
||||
"cluster_id": "test-cluster",
|
||||
"server_id": "dXUsNRef1z25NpcFmZhBNj",
|
||||
"now": "2019-06-24T15:18:37.388938-07:00",
|
||||
"offset": 0,
|
||||
"limit": 1024,
|
||||
"count": 0,
|
||||
"total": 0
|
||||
}
|
||||
```
|
||||
|
||||
340
nats-streaming-concepts/monitoring/endpoints.md
Normal file
340
nats-streaming-concepts/monitoring/endpoints.md
Normal file
@@ -0,0 +1,340 @@
|
||||
# Endpoints
|
||||
|
||||
The following sections describe each supported monitoring endpoint: serverz, storez, clientsz, and channelsz.
|
||||
|
||||
## /serverz
|
||||
|
||||
The endpoint [http://localhost:8222/streaming/serverz](http://localhost:8222/streaming/serverz) reports various general statistics.
|
||||
|
||||
```text
|
||||
{
|
||||
"cluster_id": "test-cluster",
|
||||
"server_id": "JEzjfVQS4JIEzM7lZmWHm9",
|
||||
"version": "0.14.2",
|
||||
"go": "go1.11.10",
|
||||
"state": "STANDALONE",
|
||||
"now": "2019-05-21T11:09:35.364637-06:00",
|
||||
"start_time": "2019-05-21T11:09:24.204869-06:00",
|
||||
"uptime": "11s",
|
||||
"clients": 0,
|
||||
"subscriptions": 0,
|
||||
"channels": 0,
|
||||
"total_msgs": 0,
|
||||
"total_bytes": 0
|
||||
}
|
||||
```
|
||||
|
||||
In clustering mode, there is an additional field that indicates the RAFT role of the given node. Here is an example:
|
||||
|
||||
```text
|
||||
{
|
||||
"cluster_id": "test-cluster",
|
||||
"server_id": "t9W9zbOIIi5Y9Guppxl0lF",
|
||||
"version": "0.14.2",
|
||||
"go": "go1.11.10",
|
||||
"state": "CLUSTERED",
|
||||
"role": "Follower",
|
||||
"now": "2019-05-21T11:10:15.765261-06:00",
|
||||
"start_time": "2019-05-21T11:10:12.21284-06:00",
|
||||
"uptime": "3s",
|
||||
"clients": 0,
|
||||
"subscriptions": 0,
|
||||
"channels": 0,
|
||||
"total_msgs": 0,
|
||||
"total_bytes": 0
|
||||
}
|
||||
```
|
||||
|
||||
The possible values are: `Leader`, `Follower` or `Candidate`.
|
||||
|
||||
## /storez
|
||||
|
||||
The endpoint [http://localhost:8222/streaming/storez](http://localhost:8222/streaming/storez) reports information about the store.
|
||||
|
||||
```text
|
||||
{
|
||||
"cluster_id": "test-cluster",
|
||||
"server_id": "8AjZq57k4JY7cfKEvuZ8iF",
|
||||
"now": "2019-04-16T09:57:32.857406-06:00",
|
||||
"type": "MEMORY",
|
||||
"limits": {
|
||||
"max_channels": 100,
|
||||
"max_msgs": 1000000,
|
||||
"max_bytes": 1024000000,
|
||||
"max_age": 0,
|
||||
"max_subscriptions": 1000,
|
||||
"max_inactivity": 0
|
||||
},
|
||||
"total_msgs": 130691,
|
||||
"total_bytes": 19587140
|
||||
}
|
||||
```
|
||||
|
||||
## /clientsz
|
||||
|
||||
The endpoint [http://localhost:8222/streaming/clientsz](http://localhost:8222/streaming/clientsz) reports more detailed information about the connected clients.
|
||||
|
||||
It uses a paging mechanism which defaults to 1024 clients.
|
||||
|
||||
You can control these via URL arguments \(limit and offset\). For example: [http://localhost:8222/streaming/clientsz?limit=1&offset=1](http://localhost:8222/streaming/clientsz?limit=1&offset=1).
|
||||
|
||||
```text
|
||||
{
|
||||
"cluster_id": "test-cluster",
|
||||
"server_id": "J3Odi0wXYKWKFWz5D5uhH9",
|
||||
"now": "2017-06-07T14:47:44.495254605+02:00",
|
||||
"offset": 1,
|
||||
"limit": 1,
|
||||
"count": 1,
|
||||
"total": 11,
|
||||
"clients": [
|
||||
{
|
||||
"id": "benchmark-sub-0",
|
||||
"hb_inbox": "_INBOX.jAHSY3hcL5EGFQGYmfayQK"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
You can also report detailed subscription information on a per client basis using `subs=1`. For example: [http://localhost:8222/streaming/clientsz?limit=1&offset=1&subs=1](http://localhost:8222/streaming/clientsz?limit=1&offset=1&subs=1).
|
||||
|
||||
```text
|
||||
{
|
||||
"cluster_id": "test-cluster",
|
||||
"server_id": "J3Odi0wXYKWKFWz5D5uhH9",
|
||||
"now": "2017-06-07T14:48:06.157468748+02:00",
|
||||
"offset": 1,
|
||||
"limit": 1,
|
||||
"count": 1,
|
||||
"total": 11,
|
||||
"clients": [
|
||||
{
|
||||
"id": "benchmark-sub-0",
|
||||
"hb_inbox": "_INBOX.jAHSY3hcL5EGFQGYmfayQK",
|
||||
"subscriptions": {
|
||||
"foo": [
|
||||
{
|
||||
"client_id": "benchmark-sub-0",
|
||||
"inbox": "_INBOX.jAHSY3hcL5EGFQGYmfayvC",
|
||||
"ack_inbox": "_INBOX.J3Odi0wXYKWKFWz5D5uhem",
|
||||
"is_durable": false,
|
||||
"is_offline": false,
|
||||
"max_inflight": 1024,
|
||||
"ack_wait": 30,
|
||||
"last_sent": 505597,
|
||||
"pending_count": 0,
|
||||
"is_stalled": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
You can select a specific client based on its client ID with `client=<id>`, and get also get detailed statistics with `subs=1`. For example: [http://localhost:8222/streaming/clientsz?client=me&subs=1](http://localhost:8222/streaming/clientsz?client=me&subs=1).
|
||||
|
||||
```text
|
||||
{
|
||||
"id": "me",
|
||||
"hb_inbox": "_INBOX.HG0uDuNtAPxJQ1lVjIC2sr",
|
||||
"subscriptions": {
|
||||
"foo": [
|
||||
{
|
||||
"client_id": "me",
|
||||
"inbox": "_INBOX.HG0uDuNtAPxJQ1lVjIC389",
|
||||
"ack_inbox": "_INBOX.Q9iH2gsDPN57ZEvqswiYSL",
|
||||
"is_durable": false,
|
||||
"is_offline": false,
|
||||
"max_inflight": 1024,
|
||||
"ack_wait": 30,
|
||||
"last_sent": 0,
|
||||
"pending_count": 0,
|
||||
"is_stalled": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## /channelsz
|
||||
|
||||
The endpoint [http://localhost:8222/streaming/channelsz](http://localhost:8222/streaming/channelsz) reports the list of channels.
|
||||
|
||||
```text
|
||||
{
|
||||
"cluster_id": "test-cluster",
|
||||
"server_id": "J3Odi0wXYKWKFWz5D5uhH9",
|
||||
"now": "2017-06-07T14:48:41.680592041+02:00",
|
||||
"offset": 0,
|
||||
"limit": 1024,
|
||||
"count": 2,
|
||||
"total": 2,
|
||||
"names": [
|
||||
"bar"
|
||||
"foo"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
It uses a paging mechanism which defaults to 1024 channels.
|
||||
|
||||
You can control these via URL arguments \(limit and offset\). For example: [http://localhost:8222/streaming/channelsz?limit=1&offset=1](http://localhost:8222/streaming/channelsz?limit=1&offset=1).
|
||||
|
||||
```text
|
||||
{
|
||||
"cluster_id": "test-cluster",
|
||||
"server_id": "J3Odi0wXYKWKFWz5D5uhH9",
|
||||
"now": "2017-06-07T14:48:41.680592041+02:00",
|
||||
"offset": 1,
|
||||
"limit": 1,
|
||||
"count": 1,
|
||||
"total": 2,
|
||||
"names": [
|
||||
"foo"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
You can also get the list of subscriptions with `subs=1`. For example: [http://localhost:8222/streaming/channelsz?limit=1&offset=0&subs=1](http://localhost:8222/streaming/channelsz?limit=1&offset=0&subs=1).
|
||||
|
||||
```text
|
||||
{
|
||||
"cluster_id": "test-cluster",
|
||||
"server_id": "J3Odi0wXYKWKFWz5D5uhH9",
|
||||
"now": "2017-06-07T15:01:02.166116959+02:00",
|
||||
"offset": 0,
|
||||
"limit": 1,
|
||||
"count": 1,
|
||||
"total": 2,
|
||||
"channels": [
|
||||
{
|
||||
"name": "bar",
|
||||
"msgs": 0,
|
||||
"bytes": 0,
|
||||
"first_seq": 0,
|
||||
"last_seq": 0,
|
||||
"subscriptions": [
|
||||
{
|
||||
"client_id": "me",
|
||||
"inbox": "_INBOX.S7kTJjOcToXiJAzGWgINit",
|
||||
"ack_inbox": "_INBOX.Y04G5pZxlint3yPXrSTjTV",
|
||||
"is_durable": false,
|
||||
"is_offline": false,
|
||||
"max_inflight": 1024,
|
||||
"ack_wait": 30,
|
||||
"last_sent": 0,
|
||||
"pending_count": 0,
|
||||
"is_stalled": false
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
You can select a specific channel based on its name with `channel=name`. For example: [http://localhost:8222/streaming/channelsz?channel=foo](http://localhost:8222/streaming/channelsz?channel=foo).
|
||||
|
||||
```text
|
||||
{
|
||||
"name": "foo",
|
||||
"msgs": 649234,
|
||||
"bytes": 97368590,
|
||||
"first_seq": 1,
|
||||
"last_seq": 649234
|
||||
}
|
||||
```
|
||||
|
||||
And again, you can get detailed subscriptions with `subs=1`. For example: [http://localhost:8222/streaming/channelsz?channel=foo&subs=1](http://localhost:8222/streaming/channelsz?channel=foo&subs=1).
|
||||
|
||||
```text
|
||||
{
|
||||
"name": "foo",
|
||||
"msgs": 704770,
|
||||
"bytes": 105698990,
|
||||
"first_seq": 1,
|
||||
"last_seq": 704770,
|
||||
"subscriptions": [
|
||||
{
|
||||
"client_id": "me",
|
||||
"inbox": "_INBOX.jAHSY3hcL5EGFQGYmfayvC",
|
||||
"ack_inbox": "_INBOX.J3Odi0wXYKWKFWz5D5uhem",
|
||||
"is_durable": false,
|
||||
"is_offline": false,
|
||||
"max_inflight": 1024,
|
||||
"ack_wait": 30,
|
||||
"last_sent": 704770,
|
||||
"pending_count": 0,
|
||||
"is_stalled": false
|
||||
},
|
||||
{
|
||||
"client_id": "me2",
|
||||
"inbox": "_INBOX.jAHSY3hcL5EGFQGYmfaywG",
|
||||
"ack_inbox": "_INBOX.J3Odi0wXYKWKFWz5D5uhjV",
|
||||
"is_durable": false,
|
||||
"is_offline": false,
|
||||
"max_inflight": 1024,
|
||||
"ack_wait": 30,
|
||||
"last_sent": 704770,
|
||||
"pending_count": 0,
|
||||
"is_stalled": false
|
||||
},
|
||||
(...)
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
For durables that are currently running, the `is_offline` field is set to `false`. Here is an example:
|
||||
|
||||
```text
|
||||
{
|
||||
"name": "foo",
|
||||
"msgs": 0,
|
||||
"bytes": 0,
|
||||
"first_seq": 0,
|
||||
"last_seq": 0,
|
||||
"subscriptions": [
|
||||
{
|
||||
"client_id": "me",
|
||||
"inbox": "_INBOX.P23kNGFnwC7KRg3jIMB3IL",
|
||||
"ack_inbox": "_STAN.ack.pLyMpEyg7dgGZBS7jGXC02.foo.pLyMpEyg7dgGZBS7jGXCaw",
|
||||
"durable_name": "dur",
|
||||
"is_durable": true,
|
||||
"is_offline": false,
|
||||
"max_inflight": 1024,
|
||||
"ack_wait": 30,
|
||||
"last_sent": 0,
|
||||
"pending_count": 0,
|
||||
"is_stalled": false
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
When that same durable goes offline, `is_offline` is be set to `true`. Although the client is possibly no longer connected \(and would not appear in the `clientsz` endpoint\), the `client_id` field is still displayed here.
|
||||
|
||||
```text
|
||||
{
|
||||
"name": "foo",
|
||||
"msgs": 0,
|
||||
"bytes": 0,
|
||||
"first_seq": 0,
|
||||
"last_seq": 0,
|
||||
"subscriptions": [
|
||||
{
|
||||
"client_id": "me",
|
||||
"inbox": "_INBOX.P23kNGFnwC7KRg3jIMB3IL",
|
||||
"ack_inbox": "_STAN.ack.pLyMpEyg7dgGZBS7jGXC02.foo.pLyMpEyg7dgGZBS7jGXCaw",
|
||||
"durable_name": "dur",
|
||||
"is_durable": true,
|
||||
"is_offline": true,
|
||||
"max_inflight": 1024,
|
||||
"ack_wait": 30,
|
||||
"last_sent": 0,
|
||||
"pending_count": 0,
|
||||
"is_stalled": false
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user