Starlink Monitoring System
Not affiliated with or acting on behalf of Starlink
Report Bug
•
Request Feature
🏗️ Built With
🐳 Starlink exporter - talks to the Starlink dish via gRPC and exposes metrics in a format Prometheus understands.🐳 Speedtest exporter - When asked it carries out a ping,upload and download test to speedtest.net.🐳 Blackbox exporter - Carries out high frequency ping tests.🐳 Grafana - used to compose observability dashboards.🐳 Prometheus - implements a highly dimensional data model.- 🐳 Docker-Compose - for defining and running multi-container Docker applications.
👋 Overview
I hope this project will make it easier for users to monitor their Starlink connection in even more detail, see its performance over time with each beta software release, but most importantly brag about their new satellite base internet to EVERYONE!
What does this do?
- Collects information from the Starlink dish every 3 seconds such as: signal strength, alarms, obstructions and latency
- Runs internet speed tests every 60 minutes (upload, download, ping)
- Measures latency to multiple destinations globally every 3 seconds
- Stores all the metrics in a local database (Prometheus time series database)
- You can then view the metrics on pre-built dashboards or create your own dashboards in Grafana.
🏎️ Quick Start
If you have good knowledge of the above technologies, possibly a Developer, DevOps Engineer, etc then quick start is for you:
- Clone the repo and
cd
into your local copy docker-compose pull && docker-compose up --remove-orphan
- Grafana is on
localhost:3000
(admin/admin) - The others services are on the ports as per the above diagram.
🐢 Detailed Start (Slower Start)
Pre-requisites
Ensure you install the latest version of docker and docker-compose on your host machine.
To test you have both installed correctly, open your Shell or Terminal
and run following commands:
$ docker --version
$ docker-compose --version
Install
After installing the pre-requisites, You need all the files within this Github Repository downloaded to the machine you want to run the monitoring from. This machine must be connected to the same network as the Starlink dish (more then likely the Starlink wifi).
-
If you know
git
and have it installed then clone the repository - https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/cloning-a-repository -
Or use Github desktop - https://desktop.github.com/
-
Or if you don't know
git
and/or don't want to install it then you can download the files as a zip here or from clicking the green code button (top right)
💡 Please Star and Watch the repository to hopefully get updates as new features are added
Quick overview of the file structure you now have locally (for information only, you don't really need to know this):
starlink
├── .docs # Extra docs and images
├── config # Configuration for each service
│ ├── grafana
│ │ └── provisioning
│ │ ├── dashboards # The preloaded dashboards
│ │ └── datasources # The preloaded config to talk with prometheus
│ ├── prometheus # Prometheus config file
│ └── blackbox # Blackbox exporter config file
├── data # Persistent data
│ ├── grafana # Grafana will store its running files here
│ └── prometheus # Prometheus will store its running files here
└── docker-compose.yaml # Defines all the applications to run
Setup
Open a terminal again and cd
into the directory of your local copy. we will start all the services using Docker Compose and see logs on the terminal. The logs should quieten down, then your ready to read the "usage" section.
$ cd <path-to-your-copy>
$ docker-compose pull && docker-compose up --remove-orphan
Upgrading
The Docker Compose file will run the latest versions of all the applications. To upgrade you need to pull the new image versions and then restart the current running ones.
As we ran the original docker-compose up
in the foreground, so we could watch the logs. Your need to open a new terminal and cd
to the repository directory.
$ docker-compose pull
$ docker-compose restart
Stopping
To stop you can ctrl-c
the foreground task in the original terminal and then:
$ docker-compose down
📈 Usage (from the browser)
Grafana:
- This is where the pretty graphs are
- Access via your browser at http://localhost:3000
- The username and password is "admin" (no need to change it, its only local)
- Pre-loaded dashboards are Starlink, Speedtest, Ping
Prometheus
- If you know promQL, this is where you can create adhoc queries
- Access via your browser at http://localhost:9090
- You can check the state of the exporters here
Starlink Exporter
- Standard usage there is no need to visit this
- Access via your browser at http://localhost:9817
/metrics
link will get the latest metrics from the Starlink dish/health
link shows you the gRPC connection state to the dish
Speedtest Exporter
- Standard usage there is no need to visit this
- Access via your browser at http://localhost:9092
/metrics
link takes 40 seconds to load as it carries out a speedtest- You might get an error
Limit of concurrent requests reached (1), try again later.
this means a speedtest is already running /health
link shows you if it can reach the internet
Blackbox Exporter
- Standard usage there is no need to visit this
- Access via your browser at http://localhost:9115
- Recent probes table shows you past ping test details
📖 Extras
Running versioned images
If you would like more control over which versions of each image to run please visit: Moving to versioned releases
Pushing to a cloud based Grafana account
As standard all data stays on your local machine in the data
folder, we do not collect your dish metrics centrally. If you would like more information about pushing metrics into your own Grafana cloud account: Pushing metrics to Grafana cloud
📍 Roadmap
See the open issues for a list of proposed features (and known issues).
🖋️ License
😊 Author
This project was created in 2021 by Dan Willcocks.
👎 Troubleshooting
Some troubleshooting tips coming soon, until then raise an issue.