document prometheus

This commit is contained in:
FloatingGhost 2022-12-16 10:24:36 +00:00
parent c2054f82ab
commit d1a0d93bf7
3 changed files with 35 additions and 2 deletions

View file

@ -0,0 +1,31 @@
# Monitoring Akkoma
If you run akkoma, you may be inclined to collect metrics to ensure your instance is running smoothly,
and that there's nothing quietly failing in the background.
To facilitate this, akkoma exposes prometheus metrics to be scraped.
## Prometheus
To scrape prometheus metrics, we need an oauth2 token with the `admin:metrics` scope.
consider using [constanze](https://akkoma.dev/AkkomaGang/constanze) to make this easier -
```bash
constanze token --client-app --scopes "admin:metrics" --client-name "Prometheus"
```
or see `scripts/create_metrics_app.sh` in the source tree for the process to get this token.
Once you have your token of the form `Bearer $ACCESS_TOKEN`, you can use that in your prometheus config:
```yaml
- job_name: akkoma
scheme: https
authorization:
credentials: $ACCESS_TOKEN # this should have the bearer prefix removed
metrics_path: /api/v1/akkoma/metrics
static_configs:
- targets:
- example.com
```

View file

@ -207,6 +207,8 @@ defp ip(%{remote_ip: remote_ip}) when is_tuple(remote_ip) do
|> Enum.join(".") |> Enum.join(".")
end end
defp ip(_), do: nil
defp render_throttled_error(conn) do defp render_throttled_error(conn) do
conn conn
|> render_error(:too_many_requests, "Throttled") |> render_error(:too_many_requests, "Throttled")

View file

@ -17,7 +17,7 @@ RESP=$(curl \
client_id=$(echo $RESP | jq -r .client_id) client_id=$(echo $RESP | jq -r .client_id)
client_secret=$(echo $RESP | jq -r .client_secret) client_secret=$(echo $RESP | jq -r .client_secret)
if [ -z "$client_id"]; then if [ -z "$client_id" ]; then
echo "Could not create an app" echo "Could not create an app"
echo "$RESP" echo "$RESP"
exit 1 exit 1
@ -47,7 +47,7 @@ RESP=$(curl \
--data-urlencode 'redirect_uri=urn:ietf:wg:oauth:2.0:oob' \ --data-urlencode 'redirect_uri=urn:ietf:wg:oauth:2.0:oob' \
--data-urlencode "scope=admin:metrics" --data-urlencode "scope=admin:metrics"
) )
echo $RESP
ACCESS_TOKEN="$(echo $RESP | jq -r .access_token)" ACCESS_TOKEN="$(echo $RESP | jq -r .access_token)"
echo "Token is $ACCESS_TOKEN" echo "Token is $ACCESS_TOKEN"