PME is a simple application to scrape values from JSON or HTML HTTP endpoints and push metrics to a prometheus pushgateway. The application might come in handy e.g. when:
- your scrape targets are behind a NAT firewall and cannot be reached from the outside by your prometheus instance.
- for some reason you cannot or will not set up a prometheus client on the systems you wish to monitor.
The tool is neither a service nor a daemon. If you want continuous export of metrics, deploy a container with a CRON job executing the binary.
Currently PME supports following prometheus instruments:
- counter
- gauge
There are currently no plans on adding support for the reamining instruments.
Values can be extracted from JSON by dot-notation or from HTML by XPath.
-config=path/to/configFile
The configuration format is JSON.
{
"pushGatewayUrl": "http://pushgateway.url:port",
"scrapeTargets": [
{
"url": "http://some.url/path",
"basicAuth": {
"username": "username1",
"password": "password123"
},
"mimeType": "json",
"jobName": "jobNameGoesHere",
"timeoutInSecs": 10,
"metrics": [
{
"name": "name_goes_here",
"help": "help text goes here",
"path": "json.path.to.value",
"instrumentType": "gauge",
"regex": "(\\d+)"
},
{
"name": "name_goes_here",
"help": "help text goes here",
"path": "some.other.path",
"instrumentType": "counter",
"regex": "(\\d+)"
}
],
"labels": [
{
"name": "nameOfLabel",
"value": "valueOfLabel"
},
{
"name": "nameOfLabel2",
"value": "valueOfLabel2"
}
]
},
{
"url": "http://another.url/path",
"mimeType": "html",
"jobName": "anotherJobName",
"timeoutInSecs": 10,
"metrics": [
{
"name": "name_goes_here",
"help": "help text goes here",
"path": "/xpath/to/some[1]/value",
"instrumentType": "gauge",
"regex": "*(\\d+)"
},
{
"name": "name_goes_here",
"help": "help text goes here",
"path": "/xpath/to/another/value",
"instrumentType": "counter",
"regex": "*(\\d+)"
}
],
"labels": [
{
"name": "nameOfLabel",
"value": "valueOfLabel"
},
{
"name": "nameOfLabel2",
"value": "valueOfLabel2"
}
]
}
]
}
- pushGatewayUrl: the url of the pushgateway. It is global for the entire configuration.
- scrapeTargets: a list of targets to scrape from. (Documented below)
- url: the url to scrape from
- basicAuth (optional) : information for authentication with the specific scrape target (Documented below)
- mimeType: the content type of the scrape url. JSON and HTML are supported.
- jobName: the job name to display in the pushgateway.
- timeoutInSecs: the time to wait for response from the scrape target before timing out.
- metrics: a list of metrics to pull from the scrape target response. (Documented below)
- labels: a list of labels for the current job. (Documented below)
- username: the basic auth username
- password: the basic auth password
- name: the name for the instrument.
- help: the help text for the instrument.
- path: the path of the value for the instrument. (dot notation or xpath)
- instrumentType: the type of the instrument. Counter and gauge are supported.
- regex (optional): the regex to apply to the path content.
- An empty regex will return the entire path content as a float.
- An omitted regex will return the entire path content as a float.
- A nonempty regex must include a single capture group.
- name: the name of the label.
- value: the value of the label.
The application is latest tested under go v1.15.15
A makefile is available with rules for both building and testing the application.
The following libraries and/or modules are directly used in the project. Note that other modules might be indirectly included.