# danopstech/starlink architecture

> Architecture diagram of the GitHub repository danopstech/starlink, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/danopstech/starlink
- Repository: https://github.com/danopstech/starlink

## Overview

This repository packages a Starlink monitoring stack: exporters collect dish, speed-test, and global ping metrics; Prometheus stores them; Grafana presents them in preloaded dashboards. Docker Compose runs the services, with repository configuration for Prometheus, Blackbox Exporter, and Grafana provisioning. The README documents the workflow and capabilities, but no source excerpts were provided, so relationships below are limited to those documented there.

Main entry points: [`config/grafana/provisioning/datasources/datasources.yaml`](https://github.com/danopstech/starlink/blob/main/config/grafana/provisioning/datasources/datasources.yaml) (Grafana), [`config/prometheus/prometheus.yml`](https://github.com/danopstech/starlink/blob/main/config/prometheus/prometheus.yml) (Prometheus), [`docker-compose.yaml`](https://github.com/danopstech/starlink/blob/main/docker-compose.yaml) (Docker Compose), [`config/grafana/provisioning/dashboards/dashboards.yaml`](https://github.com/danopstech/starlink/blob/main/config/grafana/provisioning/dashboards/dashboards.yaml) (Dashboard provisioning)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_deploy["Stack deployment"]
  node_compose["Docker Compose"]
end

subgraph group_collect["Metric collection"]
  node_starlink_exporter["Starlink exporter"]
  node_speedtest_exporter["Speedtest exporter"]
  node_blackbox_exporter["Blackbox exporter<br/>[config.yaml]"]
end

subgraph group_store["Metrics storage"]
  node_prometheus[("Prometheus<br/>[prometheus.yml]")]
  node_prometheus_data[("Prometheus data")]
end

subgraph group_view["Dashboards"]
  node_grafana["Grafana<br/>[datasources.yaml]"]
  node_dashboards_config["Dashboard provisioning<br/>[dashboards.yaml]"]
  node_starlink_dashboard["Starlink dashboard<br/>[starlink.json]"]
  node_speedtest_dashboard["Speedtest dashboard<br/>[speedtest.json]"]
  node_ping_dashboard["Ping dashboard<br/>[ping.json]"]
  node_grafana_data[("Grafana data")]
end

node_operator(("Operator"))
node_dish{{"Starlink dish"}}
node_speedtest_targets{{"Speedtest.net"}}
node_ping_targets{{"Global destinations"}}

node_compose -->|"runs service"| node_starlink_exporter
node_compose -->|"runs service"| node_speedtest_exporter
node_compose -->|"runs service"| node_blackbox_exporter
node_compose -->|"runs service"| node_prometheus
node_compose -->|"runs service"| node_grafana
node_dish -->|"provides dish data"| node_starlink_exporter
node_starlink_exporter -->|"exposes metrics"| node_prometheus
node_speedtest_exporter -->|"tests connection"| node_speedtest_targets
node_speedtest_exporter -->|"exposes metrics"| node_prometheus
node_blackbox_exporter -->|"pings destinations"| node_ping_targets
node_blackbox_exporter -->|"exposes metrics"| node_prometheus
node_prometheus -->|"stores metrics"| node_prometheus_data
node_grafana -->|"reads metrics"| node_prometheus
node_grafana -->|"presents"| node_starlink_dashboard
node_grafana -->|"presents"| node_speedtest_dashboard
node_grafana -->|"presents"| node_ping_dashboard
node_grafana -->|"stores running files"| node_grafana_data
node_operator -->|"views dashboards"| node_grafana
node_dashboards_config -->|"provisions"| node_starlink_dashboard
node_dashboards_config -->|"provisions"| node_speedtest_dashboard
node_dashboards_config -->|"provisions"| node_ping_dashboard

click node_compose "https://github.com/danopstech/starlink/blob/main/docker-compose.yaml"
click node_blackbox_exporter "https://github.com/danopstech/starlink/blob/main/config/blackbox/config.yaml"
click node_prometheus "https://github.com/danopstech/starlink/blob/main/config/prometheus/prometheus.yml"
click node_grafana "https://github.com/danopstech/starlink/blob/main/config/grafana/provisioning/datasources/datasources.yaml"
click node_dashboards_config "https://github.com/danopstech/starlink/blob/main/config/grafana/provisioning/dashboards/dashboards.yaml"
click node_starlink_dashboard "https://github.com/danopstech/starlink/blob/main/config/grafana/provisioning/dashboards/starlink.json"
click node_speedtest_dashboard "https://github.com/danopstech/starlink/blob/main/config/grafana/provisioning/dashboards/speedtest.json"
click node_ping_dashboard "https://github.com/danopstech/starlink/blob/main/config/grafana/provisioning/dashboards/ping.json"
click node_prometheus_data "https://github.com/danopstech/starlink/tree/main/data/prometheus"
click node_grafana_data "https://github.com/danopstech/starlink/tree/main/data/grafana"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_compose toneBlue
class node_starlink_exporter,node_speedtest_exporter,node_blackbox_exporter toneAmber
class node_prometheus,node_prometheus_data toneMint
class node_grafana,node_dashboards_config,node_starlink_dashboard,node_speedtest_dashboard,node_ping_dashboard,node_grafana_data toneRose
class node_operator,node_dish,node_speedtest_targets,node_ping_targets toneIndigo
```

## Components

### Stack deployment

- [Docker Compose](https://github.com/danopstech/starlink/blob/main/docker-compose.yaml): `docker-compose.yaml`

### Metric collection

- **Starlink exporter**
- **Speedtest exporter**
- [Blackbox exporter](https://github.com/danopstech/starlink/blob/main/config/blackbox/config.yaml): `config/blackbox/config.yaml`

### Metrics storage

- [Prometheus](https://github.com/danopstech/starlink/blob/main/config/prometheus/prometheus.yml): `config/prometheus/prometheus.yml`
- [Prometheus data](https://github.com/danopstech/starlink/tree/main/data/prometheus): `data/prometheus`

### Dashboards

- [Grafana](https://github.com/danopstech/starlink/blob/main/config/grafana/provisioning/datasources/datasources.yaml): `config/grafana/provisioning/datasources/datasources.yaml`
- [Dashboard provisioning](https://github.com/danopstech/starlink/blob/main/config/grafana/provisioning/dashboards/dashboards.yaml): `config/grafana/provisioning/dashboards/dashboards.yaml`
- [Starlink dashboard](https://github.com/danopstech/starlink/blob/main/config/grafana/provisioning/dashboards/starlink.json): `config/grafana/provisioning/dashboards/starlink.json`
- [Speedtest dashboard](https://github.com/danopstech/starlink/blob/main/config/grafana/provisioning/dashboards/speedtest.json): `config/grafana/provisioning/dashboards/speedtest.json`
- [Ping dashboard](https://github.com/danopstech/starlink/blob/main/config/grafana/provisioning/dashboards/ping.json): `config/grafana/provisioning/dashboards/ping.json`
- [Grafana data](https://github.com/danopstech/starlink/tree/main/data/grafana): `data/grafana`

### Other components

- **Operator**
- **Starlink dish**
- **Speedtest.net**
- **Global destinations**

## Connections

- Docker Compose → Starlink exporter: runs service (evidence: `README.md`)
- Docker Compose → Speedtest exporter: runs service (evidence: `README.md`)
- Docker Compose → Blackbox exporter: runs service (evidence: `README.md`)
- Docker Compose → Prometheus: runs service (evidence: `README.md`)
- Docker Compose → Grafana: runs service (evidence: `README.md`)
- Starlink dish → Starlink exporter: provides dish data (evidence: `README.md`)
- Starlink exporter → Prometheus: exposes metrics (evidence: `README.md`)
- Speedtest exporter → Speedtest.net: tests connection (evidence: `README.md`)
- Speedtest exporter → Prometheus: exposes metrics (evidence: `README.md`)
- Blackbox exporter → Global destinations: pings destinations (evidence: `README.md`)
- Blackbox exporter → Prometheus: exposes metrics (evidence: `README.md`)
- Prometheus → Prometheus data: stores metrics (evidence: `README.md`)
- Grafana → Prometheus: reads metrics (evidence: `README.md`)
- Grafana → Starlink dashboard: presents (evidence: `README.md`)
- Grafana → Speedtest dashboard: presents (evidence: `README.md`)
- Grafana → Ping dashboard: presents (evidence: `README.md`)
- Grafana → Grafana data: stores running files (evidence: `README.md`)
- Operator → Grafana: views dashboards (evidence: `README.md`)
- Dashboard provisioning → Starlink dashboard: provisions (evidence: `README.md`)
- Dashboard provisioning → Speedtest dashboard: provisions (evidence: `README.md`)
- Dashboard provisioning → Ping dashboard: provisions (evidence: `README.md`)
