Gofana is a self-contained Grafana web server written in Go with no extra dependencies. It's designed to make it easy to setup a secure, Grafana-based dashboard system with your existing Graphite, InfluxDB or OpenTSDB servers. There is no additional nginx/apache, ElasticSearch installation or configuration required.
It handles dashboard storage so that saved dashboards do not need to be saved in Elasticsearch or within InfluxDB making it easier to maintain and back them up.
It will also proxy Graphite, InfluxDB and OpenTSDB queries to simplifly serving Grafana over HTTPS as well as removing the need for having Grafana query your metrics store directly.
- Self-contained grafana 1.9.1 release
- Local file based dashboard storage
- HTTP and HTTPS server support
- Basic Authentication Support
- Graphite, InfluxDB and OpenTSDB proxying
- Single Linux/OSX binaries
- OAuth Authentication (coming soon)
- S3 and other Dashboard Storage (coming soon)
Gofana handles dashboard storage using the local filesystem (in a
dashboards directory by default).
When using Graphite or OpenTSDB, you do not need a separate elasticsearch
server for dashboard storage. Similarly, when using InfluxDB, dashboards will not be stored in InfluxDB.
$ curl -sfL https://github.com/jwilder/gofana/releases/download/v0.0.6/gofana-linux-amd64-v0.0.6.tar.gz | tar xvzf - > gofana $ gofana -graphite-url http://127.0.0.1:8000
$ curl -sfL https://github.com/jwilder/gofana/releases/download/v0.0.6/gofana-darwin-amd64-v0.0.6.tar.gz | tar xvzf - > gofana $ gofana -graphite-url http://127.0.0.1:8000
$ docker run --name gofana -d -v /mnt/my/dashboard:/app/dashboards -p 80:8080 -p 443:8443 jwilder/gofana -graphite-url http://host:port
To password protect your grafana server with HTTP Basic authentication, you can
start gofana with the
-auth user:pw option.
$ gofana -graphite-url http://127.0.0.1:8000 -auth user:pw
If you are using Basic authentication, it's a good idea to also use HTTPS.
To run gofana over HTTPS, you need a SSL cert and key. To create a self-signed key and certificate:
$ openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 3650 -nodes
You should have a private
key.pem and a public
cert.pem in you current directory.
Then start gofana with
$ gofana -graphite-url http://127.0.0.1:8000 -ssl-cert cert.pem -ssl-key key.pem
By default, gofana will listen on port
8080 for HTTP and
8443 for HTTPS. You can use a different port by passing
By default, gofana will create a
dashboards directory in the directory that gofana was started. You can change this to somewhere else with the
$ gofana -db-dir /mnt/gofana/mydashboards
Gofana embeds the latest release of Grafana. If you want to run an older or customized version of Grafana you can use the
-app-dir option. Note: this is feature is experimental.
$ gofana -app-dir /mnt/grafana-1.8.1
If you want to bundle a new version of Grafana within gofana, see the Development section.
The installation process for getting a working grafana server is more complicated than expected for a client-side application that runs in the browser. I needed to expose our internal graphite metrics using Grafana dashboards over HTTPS with authentication, but ran into several issues with CORS headers, complicated configuration for nginx and graphite when proxying over SSL, extra dependencies such as running Elasticsearch for storing dashboards, etc...
It really needed to be simpler and so gofana was created make it simpler.
- Dashboard filtering w/ tags and query language is not implemented yet.
This project uses glock for managing 3rd party dependencies. You'll need to install glock into your workspace before hacking on gofana.
$ git clone <your fork> $ glock sync github.com/jwilder/gofana $ make