{"id":18521704,"url":"https://github.com/transferwise/prometheus-envoy-dashboards","last_synced_at":"2025-10-31T22:30:32.484Z","repository":{"id":142584723,"uuid":"121628036","full_name":"transferwise/prometheus-envoy-dashboards","owner":"transferwise","description":null,"archived":false,"fork":false,"pushed_at":"2018-05-30T10:01:46.000Z","size":15,"stargazers_count":42,"open_issues_count":1,"forks_count":31,"subscribers_count":17,"default_branch":"master","last_synced_at":"2024-12-25T23:42:20.643Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/transferwise.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-02-15T12:36:36.000Z","updated_at":"2024-04-24T15:51:54.000Z","dependencies_parsed_at":"2023-05-04T10:20:12.452Z","dependency_job_id":null,"html_url":"https://github.com/transferwise/prometheus-envoy-dashboards","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/transferwise%2Fprometheus-envoy-dashboards","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/transferwise%2Fprometheus-envoy-dashboards/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/transferwise%2Fprometheus-envoy-dashboards/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/transferwise%2Fprometheus-envoy-dashboards/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/transferwise","download_url":"https://codeload.github.com/transferwise/prometheus-envoy-dashboards/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239237386,"owners_count":19605092,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T17:27:08.556Z","updated_at":"2025-02-17T05:21:31.730Z","avatar_url":"https://github.com/transferwise.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Grafana-Prometheus Envoy Dashboards\n\nPorted from the [Lyft Envoy dashboards](https://github.com/mattklein123/lyft_envoy_dashboards)\n\nThese Envoy Grafana dashboards use a Prometheus datasource.\n\nI've tried to use the native Envoy stats endpoint for most of the data, but the timers aren't\ncurrently exposed that way. As a result to get the timing data you need to run a prometheus\nstatsd exporter locally to your Envoy, with the mapping config from statsd\\_exporter.yml and\nEnovy pushing stats into that. We can then use the statsd exporter to get the histogram data\nand the native stats endpoint for everything else.\n\nThe example prometheus.yml uses Consul for service discovery, and does a whole bunch of\nrelabeling. There's also prometheus-no-consul.yml which doesn't use Consol and relies on our\nhost naming conventions to work out what labels to add.  \n\n## Histograms vs Summary\nThe statsd exporter config uses histograms (currently with default bucketing, you can change\nthis if you need to) rather than summary. This is because the dashboard expects to be able to\naggregate across multiple instances of the same service. You cannot do that with summaries\nsince e.g. avg(99th %ile) across multiple instances is completely meaningless.\n\nThe choices were to either have various tiers of statsd receiver performing the summary at the\ndifferent aggregation levels we want (per instance, per source service, per destination service,\nand every combination of the above) or to give up and use histograms which do allow aggregation.\nThe big downside of histograms is that granularity is limited to your buckets. As long as you\nconfigure your buckets sanely for your application this ought to be fine, but be warned that\nthe largest number you'll see on your response time graphs will be the top bound of the highest\nnon +Inf bucket!\n\nObviously if Envoy starts supporting the histograms in the stats output then they absolutely\nhave to be histograms rather than summaries!\n\n## What isn't there?\n* Canary stats. We don't use them yet.\n* Cross zone stats. We don't use them yet.\n* External Ingress stats. We don't use it that way yet.\n\n## TODO\nOther than the obvious \"finish this porting exercise\" work:\n* Remove statsd exporter usage completely once Enovy stats endpoint supports histograms\n* Use Prometheus recording rules for some of the more expensive to calculate aggregations\n* Work out how to deal with metrics that haven't been initialized yet (e.g. avoiding Success Rate no data when the\nresponse_code_class=5 label doesn't exist yet.)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftransferwise%2Fprometheus-envoy-dashboards","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftransferwise%2Fprometheus-envoy-dashboards","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftransferwise%2Fprometheus-envoy-dashboards/lists"}