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.py
intoconf/local_settings.py
and 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=json
ensures 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'.