What are Annotations and why are useful ?
Annotations is a way to add a Marker over the Graph (Panel). Depending on where you store the annotations, you would have the possibility to mark the Start and the End. This datasources support $start and $end in grafana:
- Grafana internal datastore
- Elasticsearch
- MySQL
Why are useful?
It’s a simple way of highlighting and visualization an action over a Graph. For example: Somebody is running a script over any element of the infrastructure. You can add tags, and text. In the tags you can add a datacenter, server, or a change ID and in the text, you can add a description and a hyperlink. This is very useful when you have an incident caused by a change in the infrastructure, because you will see when it started and finished the change over a metric (for example: successful logins). Obviously you need to have a good source of truth.
I’ve created a docker-compose environment and pushed into github:
https://github.com/sitereliabilityengineer/grafana_annotations_demo
If you check the file docker-compose.yml.all you will se that we have 3 docker containers: Grafana, MySQL and InfluxDB.
To install everything execute the bash script: bootstap.sh. It will ask you for a password (to connect to the databases) and it will replace the password in all the needed files. It will take 4-7 minutes depending on your environment. It also provision the datasources and two dashboards. If you want to know how the datasources/dashboards are provisiones, take a look into $PROJECT/grafana/dashboard.yml, datasource.yml, both .json files and the Dockerfile.
The previous script will also populate both databases with some example datapoints and annotations with this two scripts: populate_influxdb.py and populate_mysql.py
Grafana Access:
URL: http://localhost:3000
The first time you access to grafana you will need to put: admin/admin (user/password) and then change it.
There are two provisioned dashboards:
An example of both Dashboards:


To stop everything you need to execute docker-compose -f docker-compose.yml.all down at the PROJECT level.
If you want to delete everything, Execute: removeAll.sh
This last script won’t delete the data inside $PROJECT/influxdb/data and you will need to do it manually.
Please let me know if you have any question.