Prometheus exporter for the metrics exposed by the gRPC endpoint of the SpaceX Starlink user terminal.
Based on starlink-rs.
id: ID of the dish. Evaluated on program start and set to every metric.hardware_version: Hardware version of the dish. Evaluated on program start and set to every metric.software_version: Software version of the dish firmware. Subject to change at runtime. Re-evaluated on every scrape and set only to thestarlink_dish_device_infometric.country_code: Country code of the dish. Subject to change at runtime (sometimes nulled). Re-evaluated on every scrape and set only to thestarlink_dish_device_infometric.
Currently, the following metrics are exposed:
| Name | Type | Description |
|---|---|---|
starlink_dish_device_info |
GaugeVec | Device information. Exposing software_version and country_code as additional labels. |
starlink_dish_uptime_s |
Counter | Dish uptime in seconds. |
starlink_dish_state |
Gauge | Dish state. 0: Unknown, 1: Connected, 2: Searching, 3: Booting. |
starlink_dish_alert_motors_stuck |
Gauge | Alert: Motors stuck. |
starlink_dish_alert_thermal_throttle |
Gauge | Alert: Thermal throttle. |
starlink_dish_alert_thermal_shutdown |
Gauge | Alert: Thermal shutdown. |
starlink_dish_alert_mast_not_near_vertical |
Gauge | Alert: Mast not near vertical. |
starlink_dish_alert_unexpected_location |
Gauge | Alert: Unexpected location. |
starlink_dish_alert_slow_ethernet_speeds |
Gauge | Alert: Slow ethernet speeds. |
starlink_dish_snr |
Gauge | Signal-to-noise ratio. |
starlink_dish_seconds_to_first_nonempty_slot |
Gauge | Seconds to first non-empty slot. |
starlink_dish_pop_ping_drop_rate |
Gauge | Pop ping drop rate. |
starlink_dish_downlink_throughput_bps |
Gauge | Downlink throughput in Bps. |
starlink_dish_uplink_throughput_bps |
Gauge | Uplink throughput in Bps. |
starlink_dish_pop_ping_latency_ms |
Gauge | Pop ping latency in ms. |
starlink_dish_obstruction_currently_obstructed |
Gauge | Obstruction: Currently obstructed. |
starlink_dish_obstruction_fraction_obstructed |
Gauge | Obstruction: Obstructed fraction. Sum of obstructed fractions. |
starlink_dish_obstruction_last_24h_obstructed_s |
Counter | Obstruction: Obstructed seconds in the last 24 hours. |
starlink_dish_obstruction_valid_s |
Counter | Obstruction: Valid seconds. |
starlink_dish_obstruction_wedge_fraction_obstructed |
GaugeVec | Obstruction: Wedge fraction obstructed. Measure of obstruction in twelve 30 degree wedges around the dish. |
starlink_dish_obstruction_wedge_abs_fraction_obstructed |
GaugeVec | Obstruction: Wedge fraction obstruction average. Measure of average obstruction in twelve 30 degree wedges around the dish. |
Configuration happens via the following env vars:
BIND_ADDRESS: Host and port to bind the HTTP server to. Defaults to0.0.0.0:9184.STARLINK_ADDRESS: Protocol, host and port of the Starlink dish. Defaults tohttp://dishy.starlink.com:9200.
cargo run --release
docker build -t ghcr.io/ewilken/starlink-exporter .
docker run ghcr.io/ewilken/starlink-exporter
apiVersion: apps/v1
kind: Deployment
metadata:
name: starlink-exporter
labels:
k8s-app: starlink-exporter
spec:
replicas: 1
selector:
matchLabels:
k8s-app: starlink-exporter
strategy:
type: Recreate
template:
metadata:
name: starlink-exporter
labels:
k8s-app: starlink-exporter
annotations:
prometheus.io/port: '9184'
prometheus.io/scrape: 'true'
spec:
containers:
- image: ghcr.io/ewilken/starlink-exporter:latest
name: starlink-exporter
ports:
- containerPort: 9184
protocol: TCP
resources:
requests:
cpu: '0.001'
memory: '10Mi'
limits:
cpu: '0.01'
memory: '50Mi'
env:
- name: RUST_LOG
value: starlink_exporter=info
- name: BIND_ADDRESS
value: '0.0.0.0:9184'
- name: STARLINK_ADDRESS
value: 'http://dishy.starlink.com:9200'
dnsPolicy: ClusterFirstWithHostNetAn example Grafana dashboard is included in the dashboard directory.
Images hosted on GHCR are built in CI from main tagged latest and with the short commit hash returned by $(git log -1 --format=%h), e.g. 1354d30.
starlink-exporter is licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
