Improve the HTTP JSON plugin README with more examples.
This commit is contained in:
parent
422d240afb
commit
befc906167
|
@ -2,7 +2,8 @@
|
||||||
|
|
||||||
The httpjson plugin can collect data from remote URLs which respond with JSON. Then it flattens JSON and finds all numeric values, treating them as floats.
|
The httpjson plugin can collect data from remote URLs which respond with JSON. Then it flattens JSON and finds all numeric values, treating them as floats.
|
||||||
|
|
||||||
For example, if you have a service called _mycollector_, which has HTTP endpoint for gathering stats http://my.service.com/_stats:
|
For example, if you have a service called _mycollector_, which has HTTP endpoint for gathering stats at http://my.service.com/_stats, you would configure the HTTP JSON
|
||||||
|
plugin like this:
|
||||||
|
|
||||||
```
|
```
|
||||||
[[httpjson.services]]
|
[[httpjson.services]]
|
||||||
|
@ -16,11 +17,11 @@ For example, if you have a service called _mycollector_, which has HTTP endpoint
|
||||||
method = "GET"
|
method = "GET"
|
||||||
```
|
```
|
||||||
|
|
||||||
The name is used as a prefix for the measurements.
|
`name` is used as a prefix for the measurements.
|
||||||
|
|
||||||
The `method` specifies HTTP method to use for requests.
|
`method` specifies HTTP method to use for requests.
|
||||||
|
|
||||||
You can specify which keys from server response should be considered as tags:
|
You can also specify which keys from server response should be considered tags:
|
||||||
|
|
||||||
```
|
```
|
||||||
[[httpjson.services]]
|
[[httpjson.services]]
|
||||||
|
@ -32,8 +33,6 @@ You can specify which keys from server response should be considered as tags:
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
||||||
**NOTE**: tag values should be strings.
|
|
||||||
|
|
||||||
You can also specify additional request parameters for the service:
|
You can also specify additional request parameters for the service:
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -47,11 +46,30 @@ You can also specify additional request parameters for the service:
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
# Sample
|
# Example:
|
||||||
|
|
||||||
|
Let's say that we have a service named "mycollector" configured like this:
|
||||||
|
|
||||||
|
```
|
||||||
|
[httpjson]
|
||||||
|
[[httpjson.services]]
|
||||||
|
name = "mycollector"
|
||||||
|
|
||||||
|
servers = [
|
||||||
|
"http://my.service.com/_stats"
|
||||||
|
]
|
||||||
|
|
||||||
|
# HTTP method to use (case-sensitive)
|
||||||
|
method = "GET"
|
||||||
|
|
||||||
|
tag_keys = ["service"]
|
||||||
|
```
|
||||||
|
|
||||||
|
which responds with the following JSON:
|
||||||
|
|
||||||
Let's say that we have a service named "mycollector", which responds with:
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
|
"service": "service01",
|
||||||
"a": 0.5,
|
"a": 0.5,
|
||||||
"b": {
|
"b": {
|
||||||
"c": "some text",
|
"c": "some text",
|
||||||
|
@ -63,7 +81,68 @@ Let's say that we have a service named "mycollector", which responds with:
|
||||||
|
|
||||||
The collected metrics will be:
|
The collected metrics will be:
|
||||||
```
|
```
|
||||||
httpjson_mycollector_a value=0.5
|
httpjson_mycollector_a,service='service01',server='http://my.service.com/_stats' value=0.5
|
||||||
httpjson_mycollector_b_d value=0.1
|
httpjson_mycollector_b_d,service='service01',server='http://my.service.com/_stats' value=0.1
|
||||||
httpjson_mycollector_b_e value=5
|
httpjson_mycollector_b_e,service='service01',server='http://my.service.com/_stats' value=5
|
||||||
|
```
|
||||||
|
|
||||||
|
# Example 2, Multiple Services:
|
||||||
|
|
||||||
|
There is also the option to collect JSON from multiple services, here is an
|
||||||
|
example doing that.
|
||||||
|
|
||||||
|
```
|
||||||
|
[httpjson]
|
||||||
|
[[httpjson.services]]
|
||||||
|
name = "mycollector1"
|
||||||
|
|
||||||
|
servers = [
|
||||||
|
"http://my.service1.com/_stats"
|
||||||
|
]
|
||||||
|
|
||||||
|
# HTTP method to use (case-sensitive)
|
||||||
|
method = "GET"
|
||||||
|
|
||||||
|
[[httpjson.services]]
|
||||||
|
name = "mycollector2"
|
||||||
|
|
||||||
|
servers = [
|
||||||
|
"http://service.net/json/stats"
|
||||||
|
]
|
||||||
|
|
||||||
|
# HTTP method to use (case-sensitive)
|
||||||
|
method = "POST"
|
||||||
|
```
|
||||||
|
|
||||||
|
The services respond with the following JSON:
|
||||||
|
|
||||||
|
mycollector1:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"a": 0.5,
|
||||||
|
"b": {
|
||||||
|
"c": "some text",
|
||||||
|
"d": 0.1,
|
||||||
|
"e": 5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
mycollector2:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"load": 100,
|
||||||
|
"users": 1335
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The collected metrics will be:
|
||||||
|
|
||||||
|
```
|
||||||
|
httpjson_mycollector1_a,server='http://my.service.com/_stats' value=0.5
|
||||||
|
httpjson_mycollector1_b_d,server='http://my.service.com/_stats' value=0.1
|
||||||
|
httpjson_mycollector1_b_e,server='http://my.service.com/_stats' value=5
|
||||||
|
|
||||||
|
httpjson_mycollector2_load,server='http://service.net/json/stats' value=100
|
||||||
|
httpjson_mycollector2_users,server='http://service.net/json/stats' value=1335
|
||||||
```
|
```
|
||||||
|
|
|
@ -127,7 +127,11 @@ func (h *HttpJson) Gather(acc plugins.Accumulator) error {
|
||||||
//
|
//
|
||||||
// Returns:
|
// Returns:
|
||||||
// error: Any error that may have occurred
|
// error: Any error that may have occurred
|
||||||
func (h *HttpJson) gatherServer(acc plugins.Accumulator, service Service, serverURL string) error {
|
func (h *HttpJson) gatherServer(
|
||||||
|
acc plugins.Accumulator,
|
||||||
|
service Service,
|
||||||
|
serverURL string,
|
||||||
|
) error {
|
||||||
resp, err := h.sendRequest(service, serverURL)
|
resp, err := h.sendRequest(service, serverURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -74,7 +74,11 @@ func (k *Kafka) Gather(acc plugins.Accumulator) error {
|
||||||
k.Consumer.Close()
|
k.Consumer.Close()
|
||||||
}()
|
}()
|
||||||
|
|
||||||
go readFromKafka(k.Consumer.Messages(), metricQueue, k.BatchSize, k.Consumer.CommitUpto, halt)
|
go readFromKafka(k.Consumer.Messages(),
|
||||||
|
metricQueue,
|
||||||
|
k.BatchSize,
|
||||||
|
k.Consumer.CommitUpto,
|
||||||
|
halt)
|
||||||
}
|
}
|
||||||
|
|
||||||
return emitMetrics(k, acc, metricQueue)
|
return emitMetrics(k, acc, metricQueue)
|
||||||
|
@ -105,7 +109,13 @@ const millisecond = 1000000 * time.Nanosecond
|
||||||
|
|
||||||
type ack func(*sarama.ConsumerMessage) error
|
type ack func(*sarama.ConsumerMessage) error
|
||||||
|
|
||||||
func readFromKafka(kafkaMsgs <-chan *sarama.ConsumerMessage, metricProducer chan<- []byte, maxBatchSize int, ackMsg ack, halt <-chan bool) {
|
func readFromKafka(
|
||||||
|
kafkaMsgs <-chan *sarama.ConsumerMessage,
|
||||||
|
metricProducer chan<- []byte,
|
||||||
|
maxBatchSize int,
|
||||||
|
ackMsg ack,
|
||||||
|
halt <-chan bool,
|
||||||
|
) {
|
||||||
batch := make([]byte, 0)
|
batch := make([]byte, 0)
|
||||||
currentBatchSize := 0
|
currentBatchSize := 0
|
||||||
timeout := time.After(500 * millisecond)
|
timeout := time.After(500 * millisecond)
|
||||||
|
|
Loading…
Reference in New Issue