{"id":14967890,"url":"https://github.com/fogbender/supafana","last_synced_at":"2025-10-25T21:32:22.706Z","repository":{"id":255042874,"uuid":"847931014","full_name":"fogbender/supafana","owner":"fogbender","description":"Supafana is a one-click, Grafana and Prometheus metrics, observability, and alerting solution for Supabase","archived":false,"fork":false,"pushed_at":"2024-12-26T06:01:55.000Z","size":11841,"stargazers_count":16,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-01-31T10:51:14.179Z","etag":null,"topics":["alerting","azure","elixir","grafana","nix","observability","prometheus","supabase"],"latest_commit_sha":null,"homepage":"https://supafana.com","language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fogbender.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":"2024-08-26T20:19:30.000Z","updated_at":"2025-01-29T14:01:57.000Z","dependencies_parsed_at":"2024-09-16T06:54:49.060Z","dependency_job_id":"59deda90-3154-4bf7-8141-900b4141d6c5","html_url":"https://github.com/fogbender/supafana","commit_stats":{"total_commits":36,"total_committers":3,"mean_commits":12.0,"dds":0.08333333333333337,"last_synced_commit":"44ba8ba4de0986b4fbf1aa6d2070b939a3fb6ef7"},"previous_names":["fogbender/supafana"],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fogbender%2Fsupafana","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fogbender%2Fsupafana/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fogbender%2Fsupafana/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fogbender%2Fsupafana/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fogbender","download_url":"https://codeload.github.com/fogbender/supafana/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238212446,"owners_count":19434955,"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":["alerting","azure","elixir","grafana","nix","observability","prometheus","supabase"],"created_at":"2024-09-24T13:38:49.834Z","updated_at":"2025-10-25T21:32:22.701Z","avatar_url":"https://github.com/fogbender.png","language":"Elixir","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ![Supafana logo](https://supafana.com/_astro/logo.49zwZwxg_1adPvH.svg)\n# Supafana\n## https://supafana.com\n## Observability and alerting SaaS for [Supabase](https://supabase.com), based on [supabase-grafana](https://github.com/supabase/supabase-grafana)\n![image](https://github.com/user-attachments/assets/b1441d23-2147-41e9-a887-cacbd99cbcb0)\n\n\n### Building and pushing supabase-grafana Docker image\n\n``` bash\naz login\naz acr login --name supafanacr\ndocker build supabase-grafana --tag supabase-grafana\ndocker tag supabase-grafana supafanacr.azurecr.io/supabase-grafana:\u003cVERSION\u003e\ndocker push supafanacr.azurecr.io/supabase-grafana:\u003cVERSION\u003e\n```\n\n- Update VM grafana image with new \u003cVERSION\u003e in `nix/hosts/grafana/grafana-container.nix`.\n- Upload new VM grafana image version (see next section).\n\n### NixOS Azure image creation/upload\n\nTo test Azure image build:\n\n\u003e nix build '.#supafana-image'\n\nThis should create a `result` directory containing a VHD image.\n\nTo create and upload an image to Azure:\n\n``` bash\naz login\n\n# Upload supafana image\n./scripts/azure-upload-image-gallery.sh \\\n  -g supafana-common-rg \\\n  -r supafanasig \\\n  -n supafana \\\n  -v '0.0.1' \\\n  -l eastus \\\n  -i '.#supafana-image'\n\n# Upload grafana image\n./scripts/azure-upload-image-gallery.sh \\\n  -g supafana-common-rg \\\n  -r supafanasig \\\n  -n grafana \\\n  -v '0.0.1' \\\n  -l eastus \\\n  -i '.#grafana-image'\n```\n\n### Grafana instance provisioning\n\nRun the `./infra/modules/grafana-template.bicep` template with the following parameters:\n\n  - supabaseProjectRef - supabase project reference id\n  - supabaseServiceRoleKey - service role key\n  - supafanaDomain - Supafana domain (supafana-test.com for test, supafana.com for prod)\n  - grafanaPassword - optional: admin user password (default password is `admin`)\n\nUse `supafana-test-rg` resource group for test env deployment.\n\nSee examples in `./infra/resources/grafana-mk-{1,2}.bicepparam\n\n``` bash\naz deployment group create -c --debug --name supafana-test-grafana-mk-1-deploy --resource-group supafana-test-rg --parameters infra/resources/grafana-mk-1.bicepparam\n```\n\nAfter provisioning, the host should be accessible via `https://\u003csupafanaDomain\u003e/dashboard/\u003csupabaseProjectRef\u003e`\n\n- Example: `https://supafana-test.com/dashboard/kczjrdfrkmmofxkbjxex/`\n\nInternally, the new instance is accessible via `supafana-\u003cenv\u003e-grafana-\u003csupabaseProjectRef\u003e.supafana-\u003cenv\u003e.local`\n\n- Example: `supafana-prod-grafana-xjzrrbkmeubsmkgdwgfq.supafana-prod.local`\n\n#### SSH access to Grafana instances\n\nGrafana instances don't have public IPs and can be accessed only via our main servers (supafana-test.com and supafana.com).\n\nTo simplify access (to supafana-test.com), add the following lines to your `~/.ssh/config` file:\n\n```\n#test access\nHost *.supafana-test.local\n  ProxyJump admin@supafana-test.com\n\n#prod access\nHost *.supafana-prod.local\n  ProxyJump admin@supafana.com\n\n```\n\nWith this, Grafana instances can be accessed directly, e.g., `ssh admin@supafana-prod-grafana-xjzrrbkmeubsmkgdwgfq.supafana-prod.local`\n\nWhile there, to access the Elixir shell of the running app:\n\n```\nsupafana remote\n```\n\n#### Grafana instance internals\n\nInternally, each Grafana instance runs on a NixOS VM, which, in turn, runs the `supafana-grafana` container as a `podman-grafana` systemd service.\n\nTo examine the service, use systemd commands:\n\n- `systemctl status podman-grafana`\n- `journalctl -u podman-grafana`\n\nTo get into a Grafana container, run `podman exec`:\n\n- `sudo podman exec -ti grafana bash`\n\nMore info about working with containers:\n\n- `sudo podman ps`\n- `sudo podman inspect grafana`\n\n\n#### Deleting Grafana instances and resources\n\nAll resources created for a particular Grafana instance are tagged with `vm:supafana-\u003cenv\u003e-grafana-\u003csupabaseProjectRef\u003e`. To delete them, filter all resources by tag:\n\n``` bash\naz resource list --tag vm=supafana-\u003cenv\u003e-grafana-\u003csupabaseProjectRef\u003e --query \"[].id\" -o tsv\n```\n\nThen, delete:\n\n``` bash\naz resource list --tag vm='supafana-prod-grafana-kczjrdfrkmmofxkbjxex' --query \"[].id\" -o tsv | xargs -I {} az resource delete --ids {}\n```\n\n\n\n### Generate Supabase API types\n\n\u003e cd storefront \u0026\u0026 npx openapi-typescript https://api.supabase.com/api/v1-json -o src/types/supabase-api-schema.d.ts\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffogbender%2Fsupafana","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffogbender%2Fsupafana","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffogbender%2Fsupafana/lists"}