# Plugin tool_monitoring

Beliebige [Moodle](https://moodle.com) Instanzen mit einem Monitoring Setup (wie [Prometheus](https://prometheus.io) &amp; [Grafana](https://grafana.com/oss/grafana)) verbinden.

![Grafana Dashboard](https://raw.githubusercontent.com/daniil-berg/moodle-tool_monitoring/main/docs/img/screenshot_grafana_dashboard.png)

<p class="callout info">Das Plugin findet man auf **[Github](https://github.com/daniil-berg/moodle-tool_monitoring)** und im **[Moodle Marketplace](https://marketplace.moodle.com/plugins/3864)**.</p>

#### Features

- 🍱 **Sofort einsatzbereit**: Von Haus aus direkt mit [sinnvollen Moodle Metriken](https://github.com/daniil-berg/moodle-tool_monitoring#pre-installed-metrics) und einem [Prometheus Endpoint](https://prometheus.io/docs/concepts/jobs_instances).
- 🏗️ **Erweiterbar**: Um eine eigene Metrik zu definieren, einfach von der [`metric`](https://github.com/daniil-berg/moodle-tool_monitoring/blob/main/classes/metric.php) Klasse erben und [registrieren](https://github.com/daniil-berg/moodle-tool_monitoring#registering-the-metric).
- 🗃️ **Generisch**: Agnostisch gegenüber der verwendeten Monitoring Software; unterstützt benutzerdefinierte [Exporter](https://github.com/daniil-berg/moodle-tool_monitoring#exporter-sub-plugins).
- 🧑‍💻 **Admin-freundlich**: Bequemes [Admin Dashboard](#admin-settings) um registrierte Metriken und Exporter zu verwalten und zu konfigurieren.
- 🔧 **Flexibel**: Für höhere Ansprüche können Metriken [konfiguriert](https://github.com/daniil-berg/moodle-tool_monitoring#configurable-metrics-advanced) und sogar mittels der [Moodle Tag API](https://moodledev.io/docs/apis/subsystems/tag) getaggt werden.

#### Admin Dashboard

Das Admin Dashboard findet man unter `/admin/tool/monitoring` oder indem man über *Website-Administration* &gt; *Plugins* &gt; *Dienstprogramme* &gt; *Monitoring* &gt; *Übersicht* navigiert.

![Metrics Overview](https://raw.githubusercontent.com/daniil-berg/moodle-tool_monitoring/main/docs/img/screenshot_metrics_overview.png)

Siehe [Dokumentation](https://github.com/daniil-berg/moodle-tool_monitoring#pre-installed-metrics) für die vorinstallierten Metriken und die Labels nach denen diese aufgeteilt sind.

![Metric Config users_online](https://raw.githubusercontent.com/daniil-berg/moodle-tool_monitoring/main/docs/img/screenshot_metric_config_users_online.png)

Der Prometheus Endpoint selbst ist direkt erreichbar und kann über die Route `/monitoringexporter_prometheus/metrics` abgerufen werden.

> **Warnung:** **Der Endpoint ist standardmäßig ungesichert.** Solange kein `prometheus_token` gesetzt ist, sieht jeder, der die URL aufrufen kann, *alle aktivierten Metriken* ohne Zugangsbeschränkung. Obwohl standardmäßig alle neu registrierten Metriken *deaktiviert* sind, sollte zur Sicherheit ein Token gesetzt werden.

#### Metrics mit Tags gruppieren (optional)

`tool_monitoring` erlaubt es, Metriken mittels der [Moodle's Tag API](https://moodledev.io/docs/apis/subsystems/tag) ganz leicht zu gruppieren. Man kann jeder Metrik beliebige Tags zuweisen (die ihren eigenen Schlagwortbereich haben). Exporter können dann über einen Parameter die auszuliefernden Metriken nach ihren Tags filtern. Zum Beispiel akzeptiert der mitgelieferte Prometheus Exporter einen `tag` Query Parameter in der URL. Wird ein einzelner Tag Name übergeben, filtert dieser all Metriken raus, die nicht mit diesem Tag versehen sind. Wird eine kommagetrennte **Liste von Tags** übergeben, werden nur die Metriken exportiert, die mit **allen** diesen Tags versehen sind. (Zu beachten ist die **UND**-Verknüpfung, die hier angewendet wird.) Für Details zur Implementierung, siehe die Prometheus [`exporter`](https://github.com/daniil-berg/moodle-tool_monitoring/blob/main/exporter/prometheus/classes/exporter.php) Klasse.

Um eine Metrik mit Tags zu versehen, muss man auf ihre [Konfigurationsseite](#metric-configuration) gehen und dann einfach die Tag Namen in das "Tags" Feld eingeben.

![Metric Config Tags users_online](https://raw.githubusercontent.com/daniil-berg/moodle-tool_monitoring/main/docs/img/screenshot_metric_config_tags_users_online.png)

![Metrics Overview Tags](https://raw.githubusercontent.com/daniil-berg/moodle-tool_monitoring/main/docs/img/screenshot_metrics_overview_tags.png)

Ein Klick auf einen Tag filtert die Liste der Metriken entsprechend.

![Metrics Overview Tags filtered](https://raw.githubusercontent.com/daniil-berg/moodle-tool_monitoring/main/docs/img/screenshot_metrics_overview_tags_filtered.png)

#### Prometheus configuration

```
scrape_configs:
  # Einen beliebigen einzigartigen Job Namen wählen.
  - job_name: moodle
    # Standard ist HTTP.
    scheme: https
    # Wenn ein Zugangstoken gesetzt wurde, diesen hier angeben.
    authorization:
      credentials: 'super-secure-secret'
    # Den vollständigen Endpoint Pfad angeben. Standard ist sonst einfach '/metrics'.
    # Wenn das Moodle Routing nicht vollständig konfiguriert wurde, muss noch '/r.php' vorangestellt werden.
    metrics_path: /monitoringexporter_prometheus/metrics
    # Ziel Host angeben.
    static_configs:
      - targets: ['example.com']
```

#### Ein Grafana Dashboard aufsetzen

Dies setzt voraus, dass eine Prometheus Konfiguration wie oben bereits besteht. Ein beispielhaftes Grafana Dashboard kann von [docs/examples/grafana\_dashboard.json](https://github.com/daniil-berg/moodle-tool_monitoring/blob/main/docs/examples/grafana_dashboard.json) in Grafana importiert werden:

Dazu nach "Dashboards" &gt; "Neu" navigieren und "importieren" auswählen und die json-Datei auswählen oder deren Inhalt dort hineinkopieren. Dann die Prometheus Datenquellen auswählen und auf "importieren" klicken.

#### Dokumentation

Die Installationsanweisungen, Anleitungen zum Hinzufügen eigener Metriken und Exporter sub-Plugins und die vollständige Dokumentation findet man in der [README](https://github.com/daniil-berg/moodle-tool_monitoring#readme).

#### Copyright

© 2025 Daniel Fainberg, Martin Gauk, Sebastian Rupp, Malte Schmitz, Melanie Treitinger

**Code, Tests und Dokumentation von und für Menschen geschrieben.** 🚫🤖

---

Autor: &lt;[Daniel Fainberg](https://forum.moodle-an-hochschulen.de/user/profile.php?id=558), TU Berlin&gt;