ElasticSearch as a timeseries Data source for Grafana: There has been an ongoing discussion about this and ELK is a very useful stack indeed. Hence, we came up with this shim, which does just that, by mocking Graphite instance API, pipelining data from ElasticSearch, for Grafana.
-
Build the Dockerfile included here for containerized solution. Instructions for building and starting the container, are included in the Dockerfile. Before that, make sure you have copied
conf/local_settings_example.pyintoconf/local_settings.pyand edited the params as required. -
For a real machine deployment, refer to
INSTALL-NOTES, -
Make sure you supply the params to config.js in grafana accordingly. Refer below:
..
// Graphite & Elasticsearch example setup
datasources: {
graphite: {
type: 'graphite',
url: "<URL of shim>",
timezone: 'Asia/Kolkata',
},
elasticsearch: {
type: 'elasticsearch',
url: "<ES Instance where dashboard metadata is to be stored>",
index: 'grafana-dash',
grafanaDB: true,
}
},
..The timezone option under datasources.graphite has to be mentioned
in case the timezone offsets differ. This normally has to be same as the
one mentioned under local_settings.py (change this line: TIME_ZONE = '')
To run this in development mode, just like any other django project would be executed.
$ python manage.py runserver
Or, you might deploy this on a production server using nginx sample config file,
included with the source code, under conf/egs.conf.example. '
Following that, on homepage, you will see some sample links.
There are two categories of the shim API, as follows:
- Render Query Type: Here, the metric_path is a DOT (.) separated path (similar to graphite) that specifies the path of the query metrics, as per the hierarchy. This may be:
-
Format:
/render/?target={{metric_path}}&from={{epoch_from}}&until={{epoch_until}}&format=json..where metric_path is:
metric1.sub_metric1.sub_sub_metric1. <and so on> -
The
from=anduntil=fields specify the time durations between which the query is to be performed. -
format=jsonensures the response is JSON formatted. -
Please note, for demonstration purposes, a sample query has been provided in the homepage HTML file. The params provided to it, come from within the views.py file under
homepage(request). You could modify the query path and epoch intervals accordingly.
- Metric Search Query Type: Here, when * is given, all the parent nodes in the metric path hierarchy are displayed as a result, along with information like, whether its a leaf node or not.
- Format:
/metrics/find?query=*
Yes, we are using GitHub Issues and Pull Requests managed via Waffle.io for that.
Yes, Google Groups
Refer to the file 'LICENSE'.

