Skip to content

An ElasticSearch / Graphite shim which translates graphite requests into ElasticSearch data queries for a given mapping

License

Notifications You must be signed in to change notification settings

arcolife/es-graphite-shim

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

es-graphite-shim

Stories in Ready

DESCRIPTION

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.

INSTALLATION

  • 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 into conf/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 = '')

USAGE

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:

  1. 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= and until= 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.

  1. 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=*

Is there a place to track current and future work items?

Yes, we are using GitHub Issues and Pull Requests managed via Waffle.io for that.

Is there a mailing list for discussions?

Yes, Google Groups

LICENSE

Refer to the file 'LICENSE'.

Bitdeli Badge

About

An ElasticSearch / Graphite shim which translates graphite requests into ElasticSearch data queries for a given mapping

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 89.7%
  • HTML 10.3%