Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/willglynn/miso_exporter
#Prometheus exporter for #MISO (Midcontinent Independent System Operator)
https://github.com/willglynn/miso_exporter
Last synced: about 2 months ago
JSON representation
#Prometheus exporter for #MISO (Midcontinent Independent System Operator)
- Host: GitHub
- URL: https://github.com/willglynn/miso_exporter
- Owner: willglynn
- Created: 2023-07-08T19:52:34.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2023-07-09T19:25:16.000Z (over 1 year ago)
- Last Synced: 2024-11-30T02:51:32.670Z (about 2 months ago)
- Language: Go
- Size: 22.5 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# `miso_exporter`
This is a Prometheus/OpenMetrics exporter for [MISO](https://www.misoenergy.org) data.
## Quickstart
Container images are available at [Docker Hub](https://hub.docker.com/r/willglynn/miso_exporter) and [GitHub
container registry](https://github.com/willglynn/purpleair_exporter/pkgs/container/miso_exporter).```shell
$ docker run -it --rm -p 2023:2023 willglynn/miso_exporter
# or
$ docker run -it --rm -p 2023:2023 ghcr.io/willglynn/miso_exporter
2023/07/08 14:51:12 Starting HTTP server on :2023
```## Endpoints
`GET /lmp` returns the Locational Marginal Price (LMP) for each `node` in each `region` of the MISO network. There are
four `kind`s of prices:* `5m`, the realtime 5-minute price
* `1h`, the realtime hourly integrated price
* `exante`, the day-ahead ex ante price
* `expost`, the day-ahead ex post priceThere are three `component`s:
* `LMP`, the full location marginal price
* `MLC`, the component of the price due to transmission losses
* `MCC`, the component of the price due to congestion```text
# HELP miso_price_usd The price for power at a certain place and time
# TYPE miso_price_usd gauge
miso_price_usd{comp="LMP",kind="1h",node="AECI",region="Midwest"} 26.61 1688839200000
miso_price_usd{comp="LMP",kind="1h",node="AECI",region="Midwest"} 26.61 1688839260000
miso_price_usd{comp="LMP",kind="1h",node="AECI",region="Midwest"} 26.61 1688839320000
miso_price_usd{comp="LMP",kind="1h",node="AECI",region="Midwest"} 26.61 1688839380000
miso_price_usd{comp="LMP",kind="1h",node="AECI",region="Midwest"} 26.61 1688839440000
…
miso_price_usd{comp="LMP",kind="5min",node="AECI",region="Midwest"} 46.11 1688845200000
…
miso_price_usd{comp="LMP",kind="exante",node="AECI",region="Midwest"} 32.65 1688842800000
…
miso_price_usd{comp="LMP",kind="expost",node="AECI",region="Midwest"} 32.56 1688842800000
…
miso_price_usd{comp="MCC",kind="1h",node="AECI",region="Midwest"} -0.05 1688839200000
…
````GET /load` returns the total load, forecast and actual.
```text
# HELP miso_load_total_w The amount of load, forecast or actual
# TYPE miso_load_total_w gauge
miso_load_total_w{kind="actual"} 7.298e+10 1688792400000
miso_load_total_w{kind="actual"} 7.298e+10 1688792460000
miso_load_total_w{kind="actual"} 7.298e+10 1688792520000
miso_load_total_w{kind="actual"} 7.298e+10 1688792580000
miso_load_total_w{kind="actual"} 7.298e+10 1688792640000
miso_load_total_w{kind="actual"} 7.2789e+10 1688792700000
miso_load_total_w{kind="actual"} 7.2789e+10 1688792760000
miso_load_total_w{kind="actual"} 7.2789e+10 1688792820000
…
miso_load_total_w{kind="forecast"} 7.2009e+10 1688792400000
…
````GET /renewable_production` returns actual and forecast production from solar and wind.
```text
# HELP miso_renewable_production_w The amount of power produced from renewable sources
# TYPE miso_renewable_production_w gauge
miso_renewable_production_w{kind="actual",source="solar"} -5.02e+06 1688792400000
…
miso_renewable_production_w{kind="actual",source="solar"} 1.78845e+09 1688849940000
miso_renewable_production_w{kind="actual",source="wind"} 3.21474e+09 1688792400000
…
miso_renewable_production_w{kind="forecast",source="wind"} 7.952e+09 1688965140000
````GET /fuel` returns actual production by fuel type.
```text
# HELP miso_fuel_w The amount of power produced using a particular fuel
# TYPE miso_fuel_w gauge
miso_fuel_w{kind="actual",name="Coal"} 3.1159e+10 1688852400000
…
miso_fuel_w{kind="actual",name="Wind"} 4.604e+09 1688852640000
````GET /metrics` returns all of the above.
## Prometheus configuration
A good starting point:
```yaml
scrape_configs:
- job_name: 'miso'
scrape_interval: 2m
scrape_timeout: 1m
static_configs:
- targets:
- http://localhost:2023
metric_relabel_configs:
- if: '{__name__=~"^miso_.*"}'
action: labeldrop
regex: "instance|job"
````/metrics` returns unusually large responses, exceeding e.g. VictoriaMetrics' default maximum scrape size of 16 MB.
`-promscrape.maxScrapeSize=67108864` seems to work.As of this writing, `miso_price_usd` (via `/metrics` or `/lmp`) produces 4116 series. This is very high cardinality but
it is also very low churn; series are created or destroyed only as the set of nodes changes, and MISO nodes correspond
to long-lived capital projects like substations or power plants.