Last active
December 7, 2017 02:48
-
-
Save samber/9b307b8c2d9ad5e9a9c631c90dbb3654 to your computer and use it in GitHub Desktop.
Running Prometheus Query and exporting data into Geckoboard
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# 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