Go to file
Ben Kochie 03abaa7e9c
Merge pull request #316 from prometheus-community/repo_sync
Synchronize common files from prometheus/prometheus
2024-08-01 11:06:28 +02:00
.circleci Update build 2024-07-01 09:07:11 +02:00
.github Update common Prometheus files 2024-07-14 17:51:47 +00:00
cmd Update build 2023-04-01 12:06:31 +02:00
config Update build 2023-04-01 12:06:31 +02:00
examples Fix example syntax and update documentation 2023-05-14 11:50:57 +09:00
exporter Update build 2023-04-01 12:06:31 +02:00
test Revert "Support Value Conversions (#172)" (#183) 2022-10-06 08:45:27 +02:00
.gitignore Initial import 2016-02-08 22:55:40 +09:00
.golangci.yml Update build 2024-07-01 09:07:11 +02:00
.promu.yml Update build 2024-07-01 09:07:11 +02:00
CHANGELOG.md Release v0.6.0 2023-06-06 04:12:10 +02:00
CODE_OF_CONDUCT.md Update common Prometheus files 2022-05-22 19:50:52 +00:00
Dockerfile Fix dockerfile 2020-06-12 00:01:42 +02:00
LICENSE Update common Prometheus files 2020-06-22 00:09:16 +00:00
MAINTAINERS.md Add maintainers file (#60) 2020-11-04 13:01:09 +01:00
Makefile Add Docker 2020-04-17 10:06:54 +02:00
Makefile.common Update build 2024-07-01 09:07:11 +02:00
README.md Fix example syntax and update documentation 2023-05-14 11:50:57 +09:00
SECURITY.md Update common Prometheus files 2022-05-22 19:50:52 +00:00
VERSION Release v0.6.0 2023-06-06 04:12:10 +02:00
go.mod Update build 2024-07-01 09:07:11 +02:00
go.sum Update build 2024-07-01 09:07:11 +02:00
main.go Switch to kingpin 2020-08-06 07:32:11 +09:00

README.md

json_exporter

CircleCI

A prometheus exporter which scrapes remote JSON by JSONPath.

Example Usage

## SETUP

$ make build
$ ./json_exporter --config.file examples/config.yml &
$ python3 -m http.server 8000 &
Serving HTTP on :: port 8000 (http://[::]:8000/) ...


## TEST with 'default' module

$ curl "http://localhost:7979/probe?module=default&target=http://localhost:8000/examples/data.json"
# HELP example_global_value Example of a top-level global value scrape in the json
# TYPE example_global_value untyped
example_global_value{environment="beta",location="planet-mars"} 1234
# HELP example_timestamped_value_count Example of a timestamped value scrape in the json
# TYPE example_timestamped_value_count untyped
example_timestamped_value_count{environment="beta"} 2
# HELP example_value_active Example of sub-level value scrapes from a json
# TYPE example_value_active untyped
example_value_active{environment="beta",id="id-A"} 1
example_value_active{environment="beta",id="id-C"} 1
# HELP example_value_boolean Example of sub-level value scrapes from a json
# TYPE example_value_boolean untyped
example_value_boolean{environment="beta",id="id-A"} 1
example_value_boolean{environment="beta",id="id-C"} 0
# HELP example_value_count Example of sub-level value scrapes from a json
# TYPE example_value_count untyped
example_value_count{environment="beta",id="id-A"} 1
example_value_count{environment="beta",id="id-C"} 3


## TEST with a different module for different json file

$ curl "http://localhost:7979/probe?module=animals&target=http://localhost:8000/examples/animal-data.json"
# HELP animal_population Example of top-level lists in a separate module
# TYPE animal_population untyped
animal_population{name="deer",predator="false"} 456
animal_population{name="lion",predator="true"} 123
animal_population{name="pigeon",predator="false"} 789


## TEST through prometheus:

$ docker run --rm -it -p 9090:9090 -v $PWD/examples/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

Then head over to http://localhost:9090/graph?g0.range_input=1h&g0.expr=example_value_active&g0.tab=1 or http://localhost:9090/targets to check the scraped metrics or the targets.

Using custom timestamps

This exporter allows you to use a field of the metric as the (unix/epoch) timestamp for the data as an int64. However, this may lead to unexpected behaviour, as the prometheus implements a Staleness mechanism.

⚠️ Including timestamps in metrics disables the staleness handling and can make data visible for longer than expected.

Exposing metrics through HTTPS

TLS configuration supported by this exporter can be found at exporter-toolkit/web

Sending body content for HTTP POST

If modules.<module_name>.body paramater is set in config, it will be sent by the exporter as the body content in the scrape request. The HTTP method will also be set as 'POST' in this case.

body:
  content: |
    My static information: {"time_diff": "1m25s", "anotherVar": "some value"}    

The body content can also be a Go Template. All the functions from the Sprig library can be used in the template. All the query parameters sent by prometheus in the scrape query to the exporter, are available as values while rendering the template.

Example using template functions:

body:
  content: |
    {"time_diff": "{{ duration `95` }}","anotherVar": "{{ randInt 12 30 }}"}    
  templatize: true

Example using template functions with values from the query parameters:

body:
  content: |
    {"time_diff": "{{ duration `95` }}","anotherVar": "{{ .myVal | first }}"}    
  templatize: true

Then curl "http://exporter:7979/probe?target=http://scrape_target:8080/test/data.json&myVal=something", would result in sending the following body as the HTTP POST payload to http://scrape_target:8080/test/data.json:

{"time_diff": "1m35s","anotherVar": "something"}.

Docker

$ docker run -v $PWD/examples/config.yml:/config.yml quay.io/prometheuscommunity/json-exporter --config.file=/config.yml