Skip to content

Instantly share code, notes, and snippets.

@samber
Last active December 7, 2017 02:48
Show Gist options
  • Save samber/9b307b8c2d9ad5e9a9c631c90dbb3654 to your computer and use it in GitHub Desktop.
Save samber/9b307b8c2d9ad5e9a9c631c90dbb3654 to your computer and use it in GitHub Desktop.
Running Prometheus Query and exporting data into Geckoboard
#
# Google Apps Script
#
#
# To set a "cron" trigger:
# Edit > Current project's triggers > Add a new Trigger > "Main" function > Every 5 minutes
#
var GECKOBOARD_TOKEN_API = "";
var PROMETHEUS_HOSTNAME = "http://prometheus.example.com:9090"
var PROMETHEUS_BASIC_USERNAME = "";
var PROMETHEUS_BASIC_PASSWORD = "";
function getValuePrometheus(query) {
var url = PROMETHEUS_HOSTNAME + '/api/v1/query?query='+encodeURI(query);
var response = UrlFetchApp.fetch(url, { headers: {"Authorization" : "Basic " + Utilities.base64Encode(PROMETHEUS_BASIC_USERNAME + ':' + PROMETHEUS_BASIC_PASSWORD)} });
Logger.log(JSON.parse(response).data.result[0].value[1]);
return JSON.parse(response).data.result[0].value[1];
}
function sendGeckoboard(board_id, value) {
var url = 'https://api.geckoboard.com/datasets/' + board_id + '/data';
var body = JSON.stringify({data:[
{
"timestamp": Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd'T'HH:mm:ss'Z'"), //"2016-01-01T12:00:00Z",
"amount": parseInt(value)
},
]});
var response = UrlFetchApp.fetch(url, { payload: body, 'method': "POST", headers: {'Content-Type': 'application/json', "Authorization" : "Basic " + Utilities.base64Encode(GECKOBOARD_TOKEN_API + ':')} });
Logger.log(response);
}
function main() {
# exports redis counter
var metric_1 = getValuePrometheus('sum(redis_number_page_view_per_website{addr="my-redis:6379"})');
sendGeckoboard("METRIC_NAME", metric_1);
# exports nginx response time
var metric_2 = getValuePrometheus('sum(rate(nginx_http_request_duration_seconds_sum{}[1m])) / sum(rate(nginx_http_request_duration_seconds_count{}[1m])) * 1000');
sendGeckoboard("METRIC_NAME", metric_2);
}
/*
# creates new dataset into Geckoboard:
#!/bin/bash
curl https://api.geckoboard.com/datasets/METRIC_NAME \
-X PUT \
-u 'GECKOBOARD_TOKEN_API:' \
-H 'Content-Type: application/json' \
-d '{
"fields": {
"amount": {
"type": "number",
"name": "Amount",
"optional": true
},
"timestamp": {
"type": "datetime",
"name": "Date"
}
},
"unique_by": ["timestamp"]
}'
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment