Zum Inhalt springen

Doku

In 2 Minuten eingerichtet.

Ein Script für Websites, die offiziellen Open-Source-SDKs für jede Sprache oder eine einfache JSON-API. Wählen Sie Ihre Plattform.

Schnellstart

  1. Unter Projekte ein Projekt anlegen und die Plattform wählen.
  2. Der Assistent zeigt Ihren Schlüssel und Ihre DSN, zum Beispiel https://3f9c2a7e5b1d4c8a9e6f0b2d7a4c1e85@monitor.agiledeveloper.de/48213.
  3. Je nach Plattform eine der Anleitungen unten befolgen. Bei einem vorhandenen SDK genügt der Tausch der DSN.
  4. Im Assistenten auf Test-Ereignis senden klicken oder einen echten Fehler auslösen. Sobald „Erstes Ereignis empfangen“ erscheint, sind Sie fertig.

Agile Monitoring ist kompatibel mit den Sentry-SDKs: Der Eingang spricht deren Protokoll (Envelope und Store). Sie nutzen die offiziellen Open-Source-Pakete Ihrer Sprache und tragen nur unsere DSN ein.

Vorhandenes SDK umstellen1 Zeile

Sie nutzen schon ein Sentry-SDK (selbst gehostet oder Cloud)? Dann ersetzen Sie nur die DSN, meist in einer Umgebungsvariablen. Paket, Code und Einstellungen bleiben.

.env
# vorher
SENTRY_DSN=https://abc123@o0.ingest.example.io/123

# nachher
SENTRY_DSN=https://3f9c2a7e5b1d4c8a9e6f0b2d7a4c1e85@monitor.agiledeveloper.de/48213
  • Angenommen werden Fehler, Meldungen, Cron-Check-ins (werden zu Heartbeats) und Transaktionen (Leistung, ohne Kontingent).
  • Replays, Profiling, Anhänge und Logs verwerfen wir kostenlos. Setzen Sie replaysSessionSampleRate und replaysOnErrorSampleRate auf 0, um Bandbreite zu sparen.
  • Für Leistungsdaten reicht tracesSampleRate: 0.1.

Website mit Scriptohne Build

Für jede Website, auch ohne Build-Schritt: eine Zeile vor </body> oder im <head>. Das Script ist klein, setzt keine Cookies und trackt nicht.

index.html
<script src="https://monitor.agiledeveloper.de/m.js"
  data-schluessel="3f9c2a7e5b1d4c8a9e6f0b2d7a4c1e85"
  data-projekt="48213"
  data-umgebung="production"
  data-release="1.4.0" async></script>

Es erfasst Fehler, abgelehnte Promises, console.error und fehlgeschlagene Anfragen (Status ab 500) und sammelt die Schritte davor (Klicks, Navigation, Konsole, Netzwerk). Gleiche Fehler werden entprellt.

Optionale Attribute

  • data-konsole="aus": console.error nicht erfassen
  • data-netz="aus": fehlgeschlagene fetch/XHR-Anfragen nicht erfassen
  • data-leistung="an": Seitenaufbau und Web Vitals (LCP, INP, CLS, FCP, TTFB) senden, für die Ansicht Leistung
  • data-endpunkt="/eigener-pfad": über einen eigenen Proxy-Pfad senden, falls Werbeblocker die Adresse sperren

Testen mit Headless-Browsern: Aufrufe von HeadlessChrome, Playwright, Puppeteer, Selenium und bekannten Bots verwirft der Bot-Filter. Wer mit automatisierten Browsern testet, schaltet unter Projekt › Einstellungen › Filter „Bots“ vorübergehend aus oder testet in einem normalen Browser.

Eigene Fehler und Nutzer melden

app.js
try {
  await bestellen();
} catch (fehler) {
  window.agileMonitor?.fehler(fehler, { warenkorb: 3 });
}

// Nutzer zuordnen (wird gekürzt und bereinigt gespeichert)
window.agileMonitor?.nutzer({ id: '4711', email: 'kunde@example.org' });

// Einfache Meldung
window.agileMonitor?.meldung('Zahlung abgebrochen', 'warning');

Next.js

Mit dem offiziellen Paket @sentry/nextjs erfassen Sie Browser-, Server- und Edge-Fehler. Ein Konto beim SDK-Hersteller brauchen Sie nicht, withSentryConfig ist optional.

Terminal
npm install @sentry/nextjs
instrumentation-client.ts · sentry.server.config.ts · sentry.edge.config.ts
import * as Sentry from '@sentry/nextjs';

Sentry.init({
  dsn: 'https://3f9c2a7e5b1d4c8a9e6f0b2d7a4c1e85@monitor.agiledeveloper.de/48213',
  environment: process.env.NODE_ENV,
  tracesSampleRate: 0.1, // Leistung, zählt nicht ins Kontingent
});
instrumentation.ts
import * as Sentry from '@sentry/nextjs';

export async function register() {
  if (process.env.NEXT_RUNTIME === 'nodejs') await import('./sentry.server.config');
  if (process.env.NEXT_RUNTIME === 'edge') await import('./sentry.edge.config');
}

export const onRequestError = Sentry.captureRequestError;

Lesbare Stacktraces im Browser: Next.js liefert Source Maps standardmäßig nicht aus. Mit productionBrowserSourceMaps: true in next.config lädt Agile Monitoring sie automatisch und zeigt Originaldatei und -zeile. Bedenken Sie, dass Ihr Quelltext damit öffentlich lesbar wird. Das Hochladen von Source Maps ohne Veröffentlichung folgt.

Lieber ohne Paket? Das Script funktioniert auch in Next.js (mit next/script), Serverfehler schicken Sie dann über die JSON-API.

React, Vue, Angular

React · main.tsx
import * as Sentry from '@sentry/react';

Sentry.init({
  dsn: 'https://3f9c2a7e5b1d4c8a9e6f0b2d7a4c1e85@monitor.agiledeveloper.de/48213',
  environment: 'production',
  release: import.meta.env.VITE_RELEASE,
});
Vue · main.ts
import * as Sentry from '@sentry/vue';

const app = createApp(App);
Sentry.init({ app, dsn: 'https://3f9c2a7e5b1d4c8a9e6f0b2d7a4c1e85@monitor.agiledeveloper.de/48213', environment: 'production' });
Angular · main.ts
import * as Sentry from '@sentry/angular';

Sentry.init({ dsn: 'https://3f9c2a7e5b1d4c8a9e6f0b2d7a4c1e85@monitor.agiledeveloper.de/48213', environment: 'production' });

Node.js und Express

Terminal
npm install @sentry/node
instrument.js (als Erstes laden)
const Sentry = require('@sentry/node');

Sentry.init({
  dsn: 'https://3f9c2a7e5b1d4c8a9e6f0b2d7a4c1e85@monitor.agiledeveloper.de/48213',
  environment: process.env.NODE_ENV,
});
app.js
require('./instrument');
const Sentry = require('@sentry/node');
const express = require('express');

const app = express();
// … Ihre Routen …
Sentry.setupExpressErrorHandler(app);
app.listen(3000);

Python: Django, FastAPI, Flask

Terminal
pip install sentry-sdk
settings.py · main.py · app.py
import sentry_sdk

sentry_sdk.init(
    dsn="https://3f9c2a7e5b1d4c8a9e6f0b2d7a4c1e85@monitor.agiledeveloper.de/48213",
    environment="production",
    traces_sample_rate=0.1,
)

Django, FastAPI, Flask, Celery und weitere Frameworks erkennt das SDK automatisch. Persönliche Daten sendet es standardmäßig nicht; was trotzdem ankommt, bereinigen wir.

PHP und Laravel

Terminal
composer require sentry/sentry-laravel
.env
SENTRY_LARAVEL_DSN=https://3f9c2a7e5b1d4c8a9e6f0b2d7a4c1e85@monitor.agiledeveloper.de/48213
bootstrap/app.php (Laravel 11+)
use Sentry\Laravel\Integration;

->withExceptions(function (Exceptions $exceptions) {
    Integration::handles($exceptions);
})

PHP ohne Framework, WordPress, Symfony

PHP
// composer require sentry/sentry
\Sentry\init([
    'dsn' => 'https://3f9c2a7e5b1d4c8a9e6f0b2d7a4c1e85@monitor.agiledeveloper.de/48213',
    'environment' => 'production',
]);

Go, Ruby, Java, .NET

Go
import "github.com/getsentry/sentry-go"

err := sentry.Init(sentry.ClientOptions{
    Dsn:         "https://3f9c2a7e5b1d4c8a9e6f0b2d7a4c1e85@monitor.agiledeveloper.de/48213",
    Environment: "production",
})
defer sentry.Flush(2 * time.Second)
Ruby on Rails · config/initializers/sentry.rb
# Gemfile: gem "sentry-ruby", gem "sentry-rails"
Sentry.init do |config|
  config.dsn = "https://3f9c2a7e5b1d4c8a9e6f0b2d7a4c1e85@monitor.agiledeveloper.de/48213"
  config.environment = "production"
end
Java Spring Boot · application.properties
# Abhängigkeit: io.sentry:sentry-spring-boot-starter-jakarta
sentry.dsn=https://3f9c2a7e5b1d4c8a9e6f0b2d7a4c1e85@monitor.agiledeveloper.de/48213
sentry.environment=production
.NET · Program.cs
// dotnet add package Sentry.AspNetCore
builder.WebHost.UseSentry(o =>
{
    o.Dsn = "https://3f9c2a7e5b1d4c8a9e6f0b2d7a4c1e85@monitor.agiledeveloper.de/48213";
    o.Environment = "production";
});

JSON-API (curl, Shell, alles andere)ohne SDK

Für Server ohne SDK: ein Ereignis oder bis zu 100 auf einmal als {"ereignisse": [...]}. Schlüssel per Authorization: Bearer oder Header X-Agile-Schluessel.

Terminal
curl https://monitor.agiledeveloper.de/api/eingang/v1/ereignisse \
  -H "Authorization: Bearer 3f9c2a7e5b1d4c8a9e6f0b2d7a4c1e85" \
  -H "Content-Type: application/json" \
  -d '{
    "level": "error",
    "umgebung": "production",
    "release": "2.14.0",
    "ausnahme": { "typ": "ImportFehler", "wert": "Datei leer", "stack": "…" },
    "tags": { "kunde": "nord" }
  }'

Felder: level, meldung, ausnahme (typ, wert, stack oder frames), umgebung, release, server, transaktion, url, methode, status, nutzer, tags, extra, fingerprint, breadcrumbs. Alles optional außer einer Meldung oder Ausnahme. Details in der API-Doku.

Cronjobs und Heartbeats

Legen Sie unter Heartbeats einen Heartbeat mit Zeitplan an und kopieren Sie die Ping-Adresse. Ping nach dem Lauf, optional Start und Fehlschlag.

crontab
# Erfolg melden
0 3 * * * /opt/backup.sh && curl -fsS -m 10 https://monitor.agiledeveloper.de/api/ping/k7Qm2xV9pL4sT8wB

# Start melden (für die maximale Laufzeit) und Exitcode anhängen
0 3 * * * curl -fsS -m 10 https://monitor.agiledeveloper.de/api/ping/k7Qm2xV9pL4sT8wB/start; /opt/backup.sh; curl -fsS -m 10 https://monitor.agiledeveloper.de/api/ping/k7Qm2xV9pL4sT8wB/$?
Ausgabe mitschicken (bis 10 KB)
/opt/import.sh 2>&1 | tail -c 10000 | curl -fsS -m 10 --data-binary @- https://monitor.agiledeveloper.de/api/ping/k7Qm2xV9pL4sT8wB
systemd · backup.service
[Service]
Type=oneshot
ExecStart=/bin/sh -c '/opt/backup.sh; curl -fsS -m 10 https://monitor.agiledeveloper.de/api/ping/k7Qm2xV9pL4sT8wB/$?'
Kubernetes CronJob
command: ["sh", "-c", "/app/import && wget -qO- https://monitor.agiledeveloper.de/api/ping/k7Qm2xV9pL4sT8wB || wget -qO- https://monitor.agiledeveloper.de/api/ping/k7Qm2xV9pL4sT8wB/fail"]

Mit einem SDK (Check-ins)

Cron-Check-ins der Sentry-SDKs werden automatisch zu Heartbeats, der Zeitplan kommt aus monitor_config. Per curl ohne Heartbeat-Anlage:

Terminal
curl "https://monitor.agiledeveloper.de/api/48213/cron/nachtlauf/3f9c2a7e5b1d4c8a9e6f0b2d7a4c1e85/?status=ok"

Releases und Umgebungen

Geben Sie bei jedem Deploy ein release und eine environment (bzw. data-release und data-umgebung) mit. Dann sehen Sie, seit welchem Release ein Fehler auftritt, und Agile Monitoring erkennt Rückfälle, wenn ein erledigter Fehler in einem neueren Release wiederkommt.

Deploys melden Sie zusätzlich über die REST-API oder per MCP-Werkzeug release_melden, zum Beispiel aus Ihrer CI. Siehe API-Doku.

Filter: Staging und Lärm ausschließen

Unter Projekt › Einstellungen › Filter schließen Sie Umgebungen (zum Beispiel staging), Releases, bekannte Bots, Browser-Erweiterungen, „Script error.“ ohne Ort, localhost und eigene Muster aus. Gefilterte Ereignisse zählen nicht ins Kontingent; die App zeigt, wie viele herausgefiltert wurden.

Für das Browser-Script können Sie erlaubte Herkunfts-Domains festlegen, damit niemand Ihren Schlüssel auf fremden Seiten nutzt.

Grenzen und Fehlerbehebung

  • Antwort 429: Spitzenschutz oder Kontingent erreicht. Die Antwort enthält Retry-After, die SDKs pausieren von selbst. Je Projekt sind im Tarif Team bis zu 3.000 Ereignisse pro Minute möglich.
  • Antwort 401 oder 403: Schlüssel fehlt, ist falsch oder widerrufen, oder das Projekt ist archiviert. Die Antwort sagt, was genau fehlt.
  • Nichts kommt an aus automatisierten Tests: Headless-Browser (HeadlessChrome, Playwright, Puppeteer, Selenium) gelten als Bot und werden gefiltert, die Antwort ist trotzdem 200. Filter „Bots“ im Projekt vorübergehend ausschalten.
  • Nichts kommt an: DSN prüfen (Schlüssel vor dem @, Nummer am Ende), Firewall für ausgehendes HTTPS zu monitor.agiledeveloper.de öffnen, Filter des Projekts prüfen.
  • Größen: bis 1 MB komprimiert bzw. 10 MB entpackt je Sendung.

Bereit? Projekt anlegen.

Kostenlos starten, 14 Tage Team testen, ohne Kreditkarte.

14 Tage Team testen, ohne Kreditkarte · Danach kostenlos weiter oder Tarif wählen · Monatlich kündbar

Einrichten: Schnellstart je Plattform · Agile Monitoring