{"id":13467113,"url":"https://github.com/rach/pome","last_synced_at":"2025-10-17T15:59:48.286Z","repository":{"id":55536414,"uuid":"47144448","full_name":"rach/pome","owner":"rach","description":"A Postgres Metrics Dashboard","archived":false,"fork":false,"pushed_at":"2020-09-04T00:23:01.000Z","size":5359,"stargazers_count":1086,"open_issues_count":15,"forks_count":36,"subscribers_count":34,"default_branch":"develop","last_synced_at":"2025-04-03T23:09:22.042Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","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/rach.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}},"created_at":"2015-11-30T20:35:57.000Z","updated_at":"2025-03-05T05:10:36.000Z","dependencies_parsed_at":"2022-08-15T02:50:14.494Z","dependency_job_id":null,"html_url":"https://github.com/rach/pome","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rach%2Fpome","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rach%2Fpome/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rach%2Fpome/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rach%2Fpome/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rach","download_url":"https://codeload.github.com/rach/pome/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248625497,"owners_count":21135513,"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-07-31T15:00:53.243Z","updated_at":"2025-10-17T15:59:48.184Z","avatar_url":"https://github.com/rach.png","language":"Go","readme":"#Pome\n\nPome stands for **Po**stgres **Me**trics.\nPome is a PostgreSQL Metrics Dashboard to keep track of the health of your database.\nThis project is at a very early stage and there are a lot of missing features,\nbut I'm hoping to be able to make the project progress quickly.\nYou can read more about the motivation behind Pome [here](http://rachbelaid.com/introducing-pome)\n\n\n[![Join the chat at https://gitter.im/rach/pome](https://badges.gitter.im/rach/pome.svg)](https://gitter.im/rach/pome?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\n\n##How to install Pome\n\nPome provides pre-built binaries with the [releases](https://github.com/rach/pome/releases), but you can also use the Go packaging system:\n\n    go get github.com/rach/pome\n   \nThen to update Pome:\n\n    go get -u github.com/rach/pome\n\nTo install Go, you can follow the Go [documentation](https://golang.org/doc/install) or use your internal packaging system. \n\n##How to run Pome\n\nThe command line provides some help on how to use Pome:\n\n   \n    $\u003e pome --help\n    usage: Pome --username=USERNAME [\u003cflags\u003e] \u003cDBNAME\u003e\n    A Postgres Metrics Dashboard.\n\n    Flags:\n         --help               Show context-sensitive help (also try --help-long and --help-man).\n     -h, --host=HOSTNAME      database server host (default: localhost)\n     -p, --port=PORT          database server port (default: 2345)\n     -s, --sslmode=require    database SSL mode (default: disable)\n     -W, --password=PASSWORD\n     -U, --username=USERNAME\n         --version            Show application version.\n\n    Args:\n      \u003cDBNAME\u003e\n\nIf your database doesn't have a password set, then you can run Pome like this:\n\n     $\u003e pome -U myuser mydatabase\n     2015/12/09 12:09:43 Starting Pome 0.1.0\n     2015/12/09 12:09:43 Application will be available at http://127.0.0.1:2345\n\nIf your database is protected by a password, then you need to pass it as an argument.\nIn the future, Pome will prompt the user for the password (see this [issue](https://github.com/rach/pome/issues/16)).\n\nOnce Pome is running, you can access the dashboard via your browser and you should see an interface like this:\n\n![Home screenshot](https://raw.githubusercontent.com/rach/pome/master/screenshots/home.png)\n\n##Which metrics does Pome provide\n\nRight now, Pome collects the following metrics:\n\n- Database size\n- Tables size\n- Indexes size\n- Number of Connections\n- Ratio of the most bloated table\n- Ratio of the most bloated index\n- Total of wasted bytes due to bloat in tables\n- Total of wasted bytes due to bloat in indexes\n- The bloat ratio on individual tables and indexes\n- Wasted bytes per table\n\nThere are a lot of other metrics that will be added soon, like:\n\n- Unused indexes\n- Cache hit ratio\n- Amount of wal files\n- Transactions per second\n- Number of queries longer than 5s and 5min\n- Etc \n\nIf you are interested in monitoring CPU, disk IO ... This will need to be done via another tool.\nPome will only be collecting data which can be gathered through Postgres \n\n##Why build Pome?\n### Context\n\nPostgreSQL is incredibly stable, especially with small databases. You too often see databases in the wild without the care of a loving DBA.\nThis can give the illusion that everything is alright even when your database is slowly getting worse. A lot of things can be analyzed within postgres to get a health status but sadly it misses a simple tool to use for less experienced people.\n\n### Goals\n\nThis project follows 3 principles: Simplicity, Opinionated, Batteries included. \n\nSimplicity, the project aims to be easy to deploy and run. It's why Pome can run as a binary. The project also aims to feel like the `psql` command and uses common arguments. \n\nOpinionated, Pome has the goal to be pre-configured and analyse commonly useful metrics. We want the project to have sensible defaults. In the future, the tool will allow some level of configuration but without compromising Simplicity. \n\nBatteries Included, Pome is built to be accessed via a web interface. The web app is shipped within the binary and Pome is taking care of serving the assets (HTML, js, CSS). Pome is not built to be a public facing tool so performance in delivering assets was not a concern. It should be possible to run the frontend individually if it's a concern for you. Pome tries to not depend on any dependency which cannot be shipped with the binary and it's one of the reasons why Pome is stateless right now.\n\n### What Pome is not and won't be\n\nPome isn't aiming to be a tool for humongous Postgres instances which are already in the hands of a DBA who can have the time to setup more advanced monitoring tools. Pome won't be an alternative to a more configurable tool like collectd.\n\n\n##Can I use Pome in Production?\n\nIf the database is heavily used then I would avoid it for now until we get more load testing and more configuration options. \n\n##Supported PostgreSQL Versions\n\nThe tool has been developed and tested against PG 9.4 and it should be working on the future versions.\nPome doesn't have the intent to support older versions because it may require to have different SQL statements for different versions but if there are some requests it will be considered.\n\n##Stateless\n\nPome is stateless (at least for now) to keep the tool simple. I did consider using few options:\n- using an external time series database\n- using the current PostgreSQL database (as pg_diagnose does)\n- using an embedded key/value database for Go like bolt.\nBut at the end, I decided to keep it simple and store the last 120 metrics in-memory with the trade-offs that it implies.\nLet see where Pome goes, so that may change.\n\n##Contributing \n\nThis project had also some learning motivation, as I had never written a Go project and hadn't touched react for a while. I may have made some mistakes or didn't follow some good practices for which I would appreciate some feedbacks.\n\nOtherwise, there are a few tasks which can be done if you want to help\n\n- Suggesting new metrics\n- Testing the tools and submitting issues\n- Reviewing and Improving the current code codebase.\nBoth languages used are not my daily programming language so I probably did beginner mistakes\n- Correcting my English. Sorry, I'm not a native English speaker so mistakes will happen\n- Report issues\n- Solving bugs from the issue trackers\n\n##Inspirations\n\nWhen Pome was only a rough idea, I checked online what already existed and I found a few similar projects which inspired me:\n\n- [postgresql-metrics](https://github.com/spotify/postgresql-metrics) from Spotify\n- [pg_diagnose](https://github.com/heroku/pgdiagnose) from Heroku\n- [Powa](http://dalibo.github.io/powa/)\n- Bucardo [check_postgres](https://bucardo.org/check_postgres/)\n- RethinkDB dashboard\n\nPome has a different goal from the tools above.\n\n##Licence \n\nPome is licensed under Apache V2 license, the full license text can be found [here](https://github.com/rach/pome/blob/master/LICENSE)\n","funding_links":[],"categories":["Go","Compiled list","Monitoring","Uncategorized"],"sub_categories":["plv8:","Uncategorized"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frach%2Fpome","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frach%2Fpome","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frach%2Fpome/lists"}