{"componentChunkName":"component---src-templates-docs-js","path":"/de-de/guides/monitoring-as-code","result":{"data":{"site":{"siteMetadata":{"title":"Documentation | LoadFocus","docsLocation":""}},"mdx":{"fields":{"id":"8cf49a00-ae21-5458-9e9d-76c15fd7f7c3","title":"Monitoring as Code","slug":"/de-de/guides/monitoring-as-code","locale":"de-DE"},"body":"var _excluded = [\"components\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {\n  \"title\": \"Monitoring as Code\",\n  \"metaTitle\": \"Monitoring as Code: LoadFocus-Monitore per CLI verwalten | Anleitungen | LoadFocus\",\n  \"metaDescription\": \"Definieren Sie Ihre LoadFocus-Checks fur API, Browser, Multistep, TCP und Heartbeat sowie Gruppen, Benachrichtigungen, Wartungsfenster, Dashboards und Statusseiten als versionierte Dateien und deployen Sie sie dann von der Kommandozeile oder aus CI mit der @loadfocus/monitoring CLI.\",\n  \"order\": 9\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h1\", null, \"Monitoring as Code\"), mdx(\"p\", null, \"Mit Monitoring as Code definieren Sie Ihr LoadFocus-Monitoring-Setup als versionierte Dateien und wenden es von der Kommandozeile oder aus CI an \\u2014 genauso, wie Sie Infrastruktur mit Terraform oder Pulumi verwalten. Sie beschreiben die Monitore, Gruppen, Benachrichtigungen, Wartungsfenster, Dashboards und Statusseiten, die Sie haben mochten; die \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"@loadfocus/monitoring\"), \" CLI ermittelt den Unterschied zum Live-Zustand und gleicht ihn ab (erstellen, aktualisieren, loschen).\"), mdx(\"p\", null, \"Es ist deklarativ und idempotent: Wenn Sie \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"deploy\"), \" zweimal ausfuhren, andert sich beim zweiten Mal nichts. Ihre Dateien sind die einzige Quelle der Wahrheit, sodass Anderungen uber Pull Requests laufen und Ihr Monitoring-Verlauf in Git lebt.\"), mdx(\"p\", null, \"Alles lauft in Ihrem Konto und Ihrem aktiven Team, wobei Ihre Plan-Limits vom LoadFocus-Backend genauso durchgesetzt werden wie im Dashboard. Die CLI tut nur, was Sie auch selbst in der Oberflache tun konnten.\"), mdx(\"h2\", null, \"Wie es funktioniert\"), mdx(\"p\", null, \"Sie pflegen einen Ordner mit kleinen YAML- (oder JavaScript-) Dateien \\u2014 eine Ressource pro Datei \\u2014 sowie eine \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"loadfocus.config.yaml\"), \", die auf sie verweist. Die CLI sendet diese Definitionen an LoadFocus, das sie auf Live-Ressourcen abbildet, vergleicht und einen Plan zuruckgibt. Sie prufen den Plan und wenden ihn dann an.\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Verfassen\"), \" \\u2014 Beschreiben Sie Ressourcen als Dateien (YAML- oder JS-Konstrukte).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Planen\"), \" \\u2014 \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"deploy --dry-run\"), \" zeigt genau, was erstellt, aktualisiert, ubernommen oder geloscht wird.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Anwenden\"), \" \\u2014 \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"deploy\"), \" gleicht Ihr Konto so ab, dass es den Dateien entspricht.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Identitat abgleichen\"), \" \\u2014 jede Ressource tragt eine stabile, von Ihnen gewahlte \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"logicalId\"), \". So verfolgt die CLI eine Ressource uber Umbenennungen hinweg, sodass das Andern des Anzeigenamens eines Checks ihn nie neu erstellt.\")), mdx(\"h2\", null, \"Installation\"), mdx(\"p\", null, \"Die CLI ist ein Node-Paket (Node 18+). Fuhren Sie es bei Bedarf mit \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"npx\"), \" aus:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"npx @loadfocus/monitoring --help\\n\")), mdx(\"p\", null, \"\\u2026oder installieren Sie es global, um den Befehl \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"loadfocus-monitoring\"), \" zu erhalten:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"npm install -g @loadfocus/monitoring\\nloadfocus-monitoring --help\\n\")), mdx(\"h2\", null, \"Authentifizierung\"), mdx(\"p\", null, \"Die CLI authentifiziert sich mit einem LoadFocus-API-Schlussel und einer Team-ID. Ihren API-Schlussel finden Sie im Dashboard unter Ihren Konto-/API-Einstellungen und Ihre Team-ID auf der Teams-Seite.\"), mdx(\"p\", null, \"Melden Sie sich einmal an, und die Anmeldedaten werden in \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"~/.loadfocus/config.json\"), \" gespeichert:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"loadfocus-monitoring login\\nloadfocus-monitoring whoami        # confirm who you are and which team you're targeting\\n\")), mdx(\"p\", null, \"Fur CI sind Umgebungsvariablen vorzuziehen (sie uberschreiben die gespeicherte Konfiguration und werden nie auf die Festplatte geschrieben):\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"export LOADFOCUS_API_KEY=\\\"apikey_xxxxxxxx\\\"\\nexport TEAM_ID=\\\"team_xxxxxxxx\\\"\\n# optional: export API_URL=\\\"https://apimonitor.loadfocus.com\\\"\\n\")), mdx(\"h2\", null, \"Ein Projekt erstellen\"), mdx(\"p\", null, \"Erzeugen Sie ein Gerust aus Konfigurationsdatei und Beispielmonitor in Ihrem Repository:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"loadfocus-monitoring init\\n\")), mdx(\"p\", null, \"Dies schreibt \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"loadfocus.config.yaml\"), \":\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-yaml\"\n  }, \"project: my-project          # a namespace for this set of resources\\ncheckMatch:\\n  - \\\"monitors/**/*.{check,group,alertRule,maintenanceWindow,dashboard,statusPage,alertChannel,variable}.{yaml,yml,js}\\\"\\ndefaults:\\n  schedule: \\\"300\\\"            # applied to checks that omit a schedule\\n  locations: [us-east-1]\\n\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"strong\"\n  }, \"project\")), \" grenzt alles ein, was die CLI verwaltet. Ressourcen in einem Projekt werden gemeinsam abgeglichen; alles im Projekt, was nicht mehr in Ihren Dateien steht, wird bei \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"deploy\"), \" geloscht. Nutzen Sie separate Projekte, um unabhangige Monitor-Sets zu verwalten.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"strong\"\n  }, \"checkMatch\")), \" ist das Glob (bzw. die Globs) fur Ihre Verfassungs-Dateien.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"strong\"\n  }, \"defaults\")), \" fullt \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"schedule\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"locations\"), \" und \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"alertChannels\"), \" fur Checks aus, die sie weglassen.\")), mdx(\"h2\", null, \"Der Workflow\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"loadfocus-monitoring validate          # compile locally + server-side dry-run; great as a PR gate\\nloadfocus-monitoring deploy --dry-run  # show the plan (created / updated / adopted / deleted)\\nloadfocus-monitoring deploy            # apply it\\nloadfocus-monitoring list              # inventory of what's deployed in the project\\nloadfocus-monitoring list --status     # \\u2026with each check's latest up/down/degraded status\\nloadfocus-monitoring get <logicalId>   # show one deployed resource\\nloadfocus-monitoring trigger <logicalId>   # run a check now\\nloadfocus-monitoring destroy           # delete everything managed in the project\\n\")), mdx(\"p\", null, mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"deploy\"), \" ist standardmassig sicher: Es zeigt den Plan und fragt bei interaktiver Ausfuhrung nach, bevor es etwas loscht. In CI (nicht-interaktiv) verweigert es das Loschen ohne \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"--yes\"), \" und beendet sich mit einem klaren Code, statt an einer Eingabeaufforderung zu hangen. Fugen Sie Lese-/Ergebnisbefehlen \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"--json\"), \" hinzu, um maschinenlesbare Ausgaben zu erhalten.\"), mdx(\"h2\", null, \"Bestehende Monitore ubernehmen\"), mdx(\"p\", null, \"Sie haben bereits Monitore im Dashboard? Holen Sie sie in Dateien, statt sie neu zu erstellen:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"loadfocus-monitoring import --project my-project --out monitors\\n\")), mdx(\"p\", null, \"Dies schreibt eine Datei pro Ressource und eine \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"loadfocus.config.yaml\"), \". Prufen, committen und dann \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"deploy --dry-run\"), \" ausfuhren \\u2014 ubereinstimmende Ressourcen werden an Ort und Stelle \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"ubernommen\"), \" (unter Verwaltung gestellt), statt dupliziert zu werden.\"), mdx(\"h2\", null, \"Ressourcen\"), mdx(\"p\", null, \"Jede Ressource ist eine Datei mit einem \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"kind\"), \", einer \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"logicalId\"), \" (Ihr stabiler Bezeichner) und den Feldern fur dieses kind. Verweise zwischen Ressourcen nutzen \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"logicalId\"), \"s (oder Namen fur Benachrichtigungskanale) \\u2014 der Server lost sie auf, und die Deploy-Reihenfolge wird fur Sie geregelt.\"), mdx(\"h3\", null, \"Checks\"), mdx(\"p\", null, \"Ein \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Monitor\"), \"-kind deckt jeden Check-Typ uber \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"type\"), \" ab: \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"api\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"browser\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"multistep\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"tcp\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"heartbeat\"), \".\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-yaml\"\n  }, \"kind: check\\ntype: api\\nlogicalId: home\\nname: Home API\\nschedule: \\\"300\\\"            # seconds between runs\\nlocations: [us-east-1, eu-west-1]\\nrequest:\\n  url: \\\"https://example.com/health\\\"\\n  method: GET\\nassertions:\\n  - { type: statusCode, comparison: equals, value: 200 }\\n  - { type: responseTime, comparison: lessThan, value: 1000 }\\n\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"api\"), \" \\u2014 HTTP-Anfrage mit Assertions zu Status, Body, Headern, Antwortzeit, SSL-Ablauf.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"browser\"), \" \\u2014 ein Playwright-User-Flow-Skript mit Screenshots und Zeiten pro Schritt (kostenpflichtig).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"multistep\"), \" \\u2014 eine geordnete Folge von API-Anfragen, die Daten zwischen den Schritten weitergeben.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"tcp\"), \" \\u2014 eine Port-/Erreichbarkeitsprufung aus mehreren Regionen.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"heartbeat\"), \" \\u2014 ein Totmannschalter: Ein externer Job pingt eine URL nach Zeitplan, und LoadFocus benachrichtigt, wenn ein Ping ausbleibt.\")), mdx(\"h3\", null, \"Gruppen\"), mdx(\"p\", null, \"Teilen Sie Standorte, Benachrichtigungskanale, Frequenz und Aktivierung uber viele Checks hinweg. Ein Check tritt einer Gruppe mit \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"group: <logicalId>\"), \" bei.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-yaml\"\n  }, \"kind: group\\nlogicalId: web\\nname: Web services\\nlocations: [us-east-1, eu-west-1]\\n\")), mdx(\"h3\", null, \"Benachrichtigungsregeln\"), mdx(\"p\", null, \"Benachrichtigen, wenn die Metrik eines Checks einen Schwellenwert uberschreitet.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-yaml\"\n  }, \"kind: alertRule\\nlogicalId: home-latency\\nname: Home API latency\\ncheck: home               # reference a check by logicalId\\nmetric: responseTime      # responseTime | statusCode | duration\\ncondition: above\\nconditionValue: 1500      # milliseconds\\n\")), mdx(\"h3\", null, \"Benachrichtigungskanale\"), mdx(\"p\", null, \"Verwalten Sie Benachrichtigungskanale als Code und referenzieren Sie sie \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"per Name\"), \" aus einem Check, einer Gruppe oder einer Benachrichtigungsregel. Unterstutzte \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"type\"), \"s: \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"email\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"slack\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"microsoftteams\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"webhook\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"discord\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"pagerduty\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"opsgenie\"), \". Geheime Felder (\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"webhookUrl\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"routingKey\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"apiKey\"), \") nehmen eine \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"{{secrets.NAME}}\"), \"-Referenz entgegen \\u2014 der Wert wird mit \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"env set-secret\"), \" gespeichert und beim Senden einer Benachrichtigung aufgelost, niemals in Ihre Dateien committet.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-yaml\"\n  }, \"kind: alertChannel\\nlogicalId: oncall          # the name checks / groups / alert rules reference\\ntype: pagerduty\\nroutingKey: \\\"{{secrets.PAGERDUTY_KEY}}\\\"\\n\")), mdx(\"h3\", null, \"Wartungsfenster\"), mdx(\"p\", null, \"Unterdrucken Sie Benachrichtigungen wahrend geplanter Arbeiten. Zeiten sind in UTC. \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"startsAt\"), \" / \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"endsAt\"), \" akzeptieren einen ISO-8601-String (z. B. \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"\\\"2026-07-01T00:00:00Z\\\"\"), \") oder Unix-Millisekunden.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-yaml\"\n  }, \"kind: maintenanceWindow\\nlogicalId: weekly-deploy\\nname: Weekly deploy window\\nenabled: true\\nstartsAt: \\\"2026-07-01T00:00:00Z\\\"   # ISO-8601 or unix ms\\nendsAt: \\\"2026-07-01T02:00:00Z\\\"\\nrepeat: weekly            # none | daily | weekly | monthly\\nweekdays: [2]             # 0=Sun \\u2026 6=Sat\\ntargets:\\n  allChecks: false\\n  checkIds: [home]        # by logicalId\\n\")), mdx(\"h3\", null, \"Dashboards\"), mdx(\"p\", null, \"Eine gemeinsame Ansicht ausgewahlter Checks, optional offentlich uber einen Slug.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-yaml\"\n  }, \"kind: dashboard\\nlogicalId: status-overview\\nname: Status overview\\nvisibility: private       # private | public\\nchecks: [home]            # by logicalId\\nwindow: 24h               # 24h | 7d | 30d\\n\")), mdx(\"h3\", null, \"Statusseiten\"), mdx(\"p\", null, \"Eine offentliche Statusseite unter \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"<slug>.loadfoc.us\"), \", optional auf Ihrer eigenen, benutzerdefinierten Domain.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-yaml\"\n  }, \"kind: statusPage\\nlogicalId: public-status\\ntitle: Acme Status\\nslug: acme                # -> acme.loadfoc.us (globally unique)\\nenabled: true\\ncustomDomain: status.acme.com   # optional, paid; point a CNAME at cname.loadfoc.us\\ngroups:\\n  - { id: core, name: Core Services, order: 0 }\\ncomponents:\\n  - id: api\\n    name: API\\n    groupId: core\\n    monitors: [home]      # checks shown on this component, by logicalId\\nbranding:\\n  brandColor: \\\"#5353a4\\\"\\n  colorTheme: dark\\n\")), mdx(\"p\", null, \"Eine benutzerdefinierte Domain geht live, sobald Sie den CNAME erstellen und das Zertifikat ausgestellt ist \\u2014 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"deploy\"), \" deklariert sie; die Verifizierung erfolgt ausserhalb des Ablaufs.\"), mdx(\"h3\", null, \"Variablen\"), mdx(\"p\", null, \"Nicht geheime Werte (Basis-URLs, IDs), die Checks zur Laufzeit als \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"{{vars.NAME}}\"), \" referenzieren. Die \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"logicalId\"), \" ist der Variablenschlussel. (Fur Secrets verwenden Sie \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"env set-secret\"), \" \\u2014 legen Sie sie niemals in Dateien ab.)\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-yaml\"\n  }, \"kind: variable\\nlogicalId: BASE_URL\\nvalue: \\\"https://api.example.com\\\"\\n\")), mdx(\"h2\", null, \"Verfassen in JavaScript oder TypeScript\"), mdx(\"p\", null, \"Wenn Sie Code statt YAML bevorzugen, erstellen Sie dieselben Definitionen programmatisch und exportieren Sie sie \\u2014 die Konstrukte erzeugen identische Ressourcen:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"const { Monitor, Group, AlertRule, Maintenance, Dashboard, StatusPage, AlertChannel, Variable } = require('@loadfocus/monitoring');\\n\\nnew Monitor({\\n  type: 'api', logicalId: 'home', name: 'Home API', schedule: '300',\\n  locations: ['us-east-1'],\\n  request: { url: 'https://example.com/health', method: 'GET' },\\n  assertions: [{ type: 'statusCode', comparison: 'equals', value: 200 }],\\n});\\n\\nnew Group({ logicalId: 'web', name: 'Web services', locations: ['us-east-1'] });\\n\")), mdx(\"p\", null, \"Lassen Sie \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"checkMatch\"), \" auf Ihre \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \".js\"), \"-Dateien zeigen, und die CLI ladt sie wie jede andere Ressource.\"), mdx(\"h2\", null, \"Secrets und Variablen\"), mdx(\"p\", null, \"Referenzieren Sie Werte aus Ihren Checks, ohne sie zu committen. \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Secrets\"), \" (Tokens, Passworter) werden ausschliesslich imperativ verwaltet und in Check-Feldern sowie geheimen Feldern von Benachrichtigungskanalen als \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"{{secrets.NAME}}\"), \" referenziert. \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Variablen\"), \" (nicht geheim) konnen als Dateien deklariert (\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"kind: variable\"), \", siehe oben) oder imperativ gesetzt werden und werden als \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"{{vars.NAME}}\"), \" referenziert.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"loadfocus-monitoring env set-secret API_TOKEN \\\"s3cr3t\\\"\\nloadfocus-monitoring env set-variable BASE_URL \\\"https://example.com\\\"\\nloadfocus-monitoring env ls            # list secret + variable keys (values never shown)\\n\")), mdx(\"h2\", null, \"In CI ausfuhren\"), mdx(\"p\", null, \"Eine typische Pipeline validiert bei jedem Pull Request und deployt beim Merge in den Main-Branch.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-yaml\"\n  }, \"# .github/workflows/monitoring.yml\\nname: monitoring\\non:\\n  pull_request:\\n  push:\\n    branches: [main]\\njobs:\\n  monitoring:\\n    runs-on: ubuntu-latest\\n    env:\\n      LOADFOCUS_API_KEY: ${{ secrets.LOADFOCUS_API_KEY }}\\n      TEAM_ID: ${{ secrets.LOADFOCUS_TEAM_ID }}\\n    steps:\\n      - uses: actions/checkout@v4\\n      - uses: actions/setup-node@v4\\n        with: { node-version: 20 }\\n      - run: npx @loadfocus/monitoring validate\\n      - if: github.ref == 'refs/heads/main'\\n        run: npx @loadfocus/monitoring deploy --yes\\n\")), mdx(\"h2\", null, \"Wissenswertes\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"strong\"\n  }, \"logicalId\"), \" ist die Identitat.\"), \" Halten Sie sie stabil. Sie konnen \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"name\"), \" oder \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"title\"), \" eines Checks beliebig andern; das Andern der \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"logicalId\"), \" wird so behandelt, als wurde eine Ressource geloscht und eine andere erstellt.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Loschungen sind auf das Projekt beschrankt.\"), \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"deploy\"), \" entfernt nur Ressourcen im aktuellen \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"project\"), \", die nicht mehr in Ihren Dateien stehen \\u2014 niemals etwas in einem anderen Projekt oder ausserhalb von Monitoring as Code Erstelltes (bis Sie es ubernehmen).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Statusseiten-Slugs sind global.\"), \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"slug\"), \" wird zu einer Subdomain, muss also uber alle LoadFocus-Kunden hinweg eindeutig sein.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Kostenpflichtige Funktionen scheitern laut.\"), \" Ein kostenloses Team, das ein nur kostenpflichtiges Feld deklariert (eine benutzerdefinierte Statusseiten-Domain, das Entfernen des \\\"Powered by\\\"-Badges), erhalt bei \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"deploy\"), \" einen klaren Fehler statt eines stillschweigend unvollstandigen Ergebnisses.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Plan-Limits gelten.\"), \" Das Erstellen von Ressourcen uber die CLI unterliegt denselben Plan-Kontingenten wie das Dashboard.\")), mdx(\"h2\", null, \"Verwandt\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"/docs/guides/api-monitoring\"\n  }, \"API-Monitoring\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"/docs/guides/mcp\"\n  }, \"LoadFocus uber Ihren KI-Assistenten steuern (MCP)\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"/docs/guides/teams\"\n  }, \"Teams\"))));\n}\n;\nMDXContent.isMDXComponent = true;","tableOfContents":{"items":[{"url":"#monitoring-as-code","title":"Monitoring as Code","items":[{"url":"#wie-es-funktioniert","title":"Wie es funktioniert"},{"url":"#installation","title":"Installation"},{"url":"#authentifizierung","title":"Authentifizierung"},{"url":"#ein-projekt-erstellen","title":"Ein Projekt erstellen"},{"url":"#der-workflow","title":"Der Workflow"},{"url":"#bestehende-monitore-ubernehmen","title":"Bestehende Monitore ubernehmen"},{"url":"#ressourcen","title":"Ressourcen","items":[{"url":"#checks","title":"Checks"},{"url":"#gruppen","title":"Gruppen"},{"url":"#benachrichtigungsregeln","title":"Benachrichtigungsregeln"},{"url":"#benachrichtigungskanale","title":"Benachrichtigungskanale"},{"url":"#wartungsfenster","title":"Wartungsfenster"},{"url":"#dashboards","title":"Dashboards"},{"url":"#statusseiten","title":"Statusseiten"},{"url":"#variablen","title":"Variablen"}]},{"url":"#verfassen-in-javascript-oder-typescript","title":"Verfassen in JavaScript oder TypeScript"},{"url":"#secrets-und-variablen","title":"Secrets und Variablen"},{"url":"#in-ci-ausfuhren","title":"In CI ausfuhren"},{"url":"#wissenswertes","title":"Wissenswertes"},{"url":"#verwandt","title":"Verwandt"}]}]},"parent":{"__typename":"File","relativePath":"de-de/guides/monitoring-as-code.md"},"frontmatter":{"metaTitle":"Monitoring as Code: LoadFocus-Monitore per CLI verwalten | Anleitungen | LoadFocus","metaDescription":"Definieren Sie Ihre LoadFocus-Checks fur API, Browser, Multistep, TCP und Heartbeat sowie Gruppen, Benachrichtigungen, Wartungsfenster, Dashboards und Statusseiten als versionierte Dateien und deployen Sie sie dann von der Kommandozeile oder aus CI mit der @loadfocus/monitoring CLI.","order":9}},"allMdx":{"edges":[{"node":{"fields":{"slug":"/de-de","title":"Willkommen bei der neuen LoadFocus-Dokumentation"}}},{"node":{"fields":{"slug":"/de-de/guides","title":"Anleitungen"}}},{"node":{"fields":{"slug":"/de-de/pricing","title":"Haeufig gestellte Fragen zu Preisen"}}},{"node":{"fields":{"slug":"/de-de/knowledge-base","title":"Wissensdatenbank"}}},{"node":{"fields":{"slug":"/de-de/knowledge-base/understanding-declined-card-payments","title":"Warum wurde meine Kartenzahlung abgelehnt?"}}},{"node":{"fields":{"slug":"/de-de/knowledge-base/understanding-differences-between-http-and-https","title":"Unterschiede zwischen HTTP und HTTPS"}}},{"node":{"fields":{"slug":"/de-de/knowledge-base/how-to-update-card-details","title":"So aktualisieren Sie Kartendaten bei fehlgeschlagenen Zahlungen"}}},{"node":{"fields":{"slug":"/de-de/guides/api-monitoring","title":"API-Monitoring"}}},{"node":{"fields":{"slug":"/de-de/knowledge-base/using-3rd-party-tools-to-load-test-website-locally","title":"Lasttests fuer lokal gehostete Websites oder APIs"}}},{"node":{"fields":{"slug":"/de-de/guides/external-reports","title":"Externe Berichterstattung"}}},{"node":{"fields":{"slug":"/de-de/knowledge-base/using-valid-url-endpoints","title":"Was ist eine gueltige URL fuer einen Lasttest"}}},{"node":{"fields":{"slug":"/de-de/knowledge-base/using-query-parameters","title":"So verwenden Sie URL-Query-Parameter"}}},{"node":{"fields":{"slug":"/de-de/guides/jmeter-load-testing","title":"Lasttests mit Apache JMeter"}}},{"node":{"fields":{"slug":"/de-de/knowledge-base/using-google-analytics-and-no-requests-while-load-testing","title":"Kein Traffic in Google Analytics waehrend Lasttests"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing","title":"Lasttests"}}},{"node":{"fields":{"slug":"/de-de/guides/mcp","title":"KI-Assistenten (MCP)"}}},{"node":{"fields":{"slug":"/de-de/guides/monitor-website-performance","title":"Website-Performance ueberwachen"}}},{"node":{"fields":{"slug":"/de-de/knowledge-base/what-is-an-http-method","title":"Was ist eine HTTP-Anfragemethode"}}},{"node":{"fields":{"slug":"/de-de/guides/monitoring-as-code","title":"Monitoring as Code"}}},{"node":{"fields":{"slug":"/de-de/guides/onboarding","title":"LoadFocus-Onboarding"}}},{"node":{"fields":{"slug":"/de-de/guides/openapi-import","title":"Import aus OpenAPI / Swagger"}}},{"node":{"fields":{"slug":"/de-de/guides/setup-teardown-scripts","title":"Setup- und Teardown-Skripte"}}},{"node":{"fields":{"slug":"/de-de/guides/teams","title":"Teamverwaltung"}}},{"node":{"fields":{"slug":"/de-de/guides/k6-load-testing","title":"k6 Lasttest"}}},{"node":{"fields":{"slug":"/de-de/guides/api-monitoring/alert-channels","title":"Benachrichtigungskanäle: Discord, PagerDuty & Opsgenie"}}},{"node":{"fields":{"slug":"/de-de/guides/external-reports/azure-app-insights-integration","title":"Azure App Insights-Integration"}}},{"node":{"fields":{"slug":"/de-de/guides/jmeter-load-testing/downloading-jmx-csv-files","title":"Herunterladen von .JMX- und .CSV-Dateien in LoadFocus"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/ai-credits","title":"AI Credits"}}},{"node":{"fields":{"slug":"/de-de/guides/external-reports/datadog-integration","title":"Datadog-Integration"}}},{"node":{"fields":{"slug":"/de-de/guides/k6-load-testing/analyzing-k6-test-results","title":"Analyse der k6 Lasttest-Ergebnisse"}}},{"node":{"fields":{"slug":"/de-de/guides/monitor-website-performance/alert-configuration","title":"Alert-Konfiguration"}}},{"node":{"fields":{"slug":"/de-de/guides/k6-load-testing/how-to-run-k6-load-test","title":"So führen Sie einen neuen k6 Lasttest durch"}}},{"node":{"fields":{"slug":"/de-de/guides/jmeter-load-testing/how-to-run-new-apache-jmeter-load-test","title":"So fuehren Sie einen neuen Apache JMeter-Lasttest durch"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/analyzing-load-test-results","title":"So pruefen Sie Lasttestergebnisse"}}},{"node":{"fields":{"slug":"/de-de/guides/monitor-website-performance/alert-metrics","title":"Alert-Metriken"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/authorization-code-grant-type-oauth-2-0","title":"Authorization Code Grant Type in OAuth 2.0"}}},{"node":{"fields":{"slug":"/de-de/guides/api-monitoring/api-check-results","title":"API-Pruefergebnisse verstehen"}}},{"node":{"fields":{"slug":"/de-de/guides/api-monitoring/check-groups","title":"Prüfungsgruppen"}}},{"node":{"fields":{"slug":"/de-de/guides/monitor-website-performance/core-web-vitals-competitor-comparison","title":"Core Web Vitals Wettbewerbervergleich"}}},{"node":{"fields":{"slug":"/de-de/guides/jmeter-load-testing/jmeter-integration-ci-cd","title":"Lasttest-API-Integration"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/baseline-comparison-between-load-tests","title":"Baseline-Vergleich zwischen Lasttests"}}},{"node":{"fields":{"slug":"/de-de/guides/monitor-website-performance/core-web-vitals-metrics","title":"Was sind die Core Web Vitals?"}}},{"node":{"fields":{"slug":"/de-de/guides/api-monitoring/custom-domain-status-page","title":"So fügen Sie Ihrer Statusseite eine eigene Domain hinzu"}}},{"node":{"fields":{"slug":"/de-de/guides/jmeter-load-testing/load-generators-hardware-infrastructure-jmeter","title":"Welche Hardwareressourcen sind meinem Konto fuer Lastgeneratoren zugewiesen?"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/client-credentials-grant-type-oauth-2-0","title":"Client Credentials Grant Type in OAuth 2.0"}}},{"node":{"fields":{"slug":"/de-de/guides/monitor-website-performance/getting-started","title":"Erste Schritte"}}},{"node":{"fields":{"slug":"/de-de/guides/api-monitoring/dashboards","title":"Dashboards"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/common-http-error-codes","title":"Haeufige HTTP-Fehlerstatuscodes"}}},{"node":{"fields":{"slug":"/de-de/guides/jmeter-load-testing/load-testing-anomalies","title":"Lasttest-Anomalien"}}},{"node":{"fields":{"slug":"/de-de/guides/monitor-website-performance/how-to-create-new-alert","title":"Neuen Alert erstellen"}}},{"node":{"fields":{"slug":"/de-de/guides/api-monitoring/heartbeat-monitors","title":"Heartbeat-Monitore (Cron-Jobs)"}}},{"node":{"fields":{"slug":"/de-de/guides/jmeter-load-testing/load-testing-engine-health-monitoring","title":"Engine-Zustandsueberwachung"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/crafting-perfect-test-names","title":"Perfekte Testnamen erstellen"}}},{"node":{"fields":{"slug":"/de-de/guides/monitor-website-performance/how-to-run-new-website-performance-test","title":"Neuen Website-Performance-Test erstellen"}}},{"node":{"fields":{"slug":"/de-de/guides/api-monitoring/maintenance-windows","title":"Wartungsfenster"}}},{"node":{"fields":{"slug":"/de-de/guides/jmeter-load-testing/load-testing-error-analysis","title":"Fehleranalyse"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/decoding-average-response-times","title":"Durchschnittliche Antwortzeit entschluesseln"}}},{"node":{"fields":{"slug":"/de-de/guides/monitor-website-performance/http-authentication","title":"HTTP-Authentifizierung"}}},{"node":{"fields":{"slug":"/de-de/guides/api-monitoring/multistep-api-checks","title":"Mehrstufige API-Prüfungen"}}},{"node":{"fields":{"slug":"/de-de/guides/jmeter-load-testing/load-testing-insights","title":"Lasttest-Erkenntnisse"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/deep-dive-samples-in-load-testing","title":"Was sind Samples bei Lasttests?"}}},{"node":{"fields":{"slug":"/de-de/guides/monitor-website-performance/largest-contentful-paint","title":"Largest Contentful Paint (LCP)"}}},{"node":{"fields":{"slug":"/de-de/guides/jmeter-load-testing/load-testing-jtl-file-analysis","title":"Logs & JTL-Dateianalyse"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/demo","title":"Demo"}}},{"node":{"fields":{"slug":"/de-de/guides/monitor-website-performance/lighthouse-opportunities","title":"Lighthouse Opportunities"}}},{"node":{"fields":{"slug":"/de-de/guides/api-monitoring/new-api-check","title":"So erstellen Sie eine neue API-Pruefung"}}},{"node":{"fields":{"slug":"/de-de/guides/jmeter-load-testing/load-testing-jtl-jmeter-log-file-analysis","title":"JMeter-Logdateianalyse"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/end-time-in-load-testing","title":"Die Bedeutung der 'Endzeit' bei Lasttests verstehen"}}},{"node":{"fields":{"slug":"/de-de/guides/api-monitoring/status-pages","title":"Erstellen Sie eine öffentliche Statusseite für Ihre Monitore"}}},{"node":{"fields":{"slug":"/de-de/guides/monitor-website-performance/pdf-report-branding","title":"Gebrandete PDF-Berichte"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/erros-and-reponse-codes","title":"Fehler und Antwortcodes"}}},{"node":{"fields":{"slug":"/de-de/guides/jmeter-load-testing/load-testing-timeline-analysis","title":"Zeitleisten-Ansicht"}}},{"node":{"fields":{"slug":"/de-de/guides/monitor-website-performance/performance-budgets","title":"Performance Budgets & Alerts"}}},{"node":{"fields":{"slug":"/de-de/guides/api-monitoring/tcp-monitors","title":"TCP-Port-Monitore"}}},{"node":{"fields":{"slug":"/de-de/guides/jmeter-load-testing/uploading-jmeter-files-step-by-step-guide","title":"JMeter-Dateien auf LoadFocus hochladen: Eine Schritt-fuer-Schritt-Anleitung"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/geographical-test-location-in-load-testing","title":"Geografischer Teststandort bei Lasttests"}}},{"node":{"fields":{"slug":"/de-de/guides/api-monitoring/variables","title":"Variablen"}}},{"node":{"fields":{"slug":"/de-de/guides/jmeter-load-testing/using-multiple-csv-files-with-jmeter-engines","title":"Verwendung mehrerer CSV-Dateien mit JMeter-Engines in LoadFocus"}}},{"node":{"fields":{"slug":"/de-de/guides/monitor-website-performance/real-user-field-data","title":"Echte Nutzer-Feld-Daten (CrUX)"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/getting-started","title":"Erste Schritte"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/granularity-in-load-test-results-and-charts","title":"Granularitaet in Lasttestergebnissen und Diagrammanzeige"}}},{"node":{"fields":{"slug":"/de-de/guides/monitor-website-performance/sitemap-import","title":"Sitemap-Import"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/headers-and-manage-presets","title":"Header und Header-Vorlagen"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/how-to-url-query-parameters","title":"Query-Parameter"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/http-methods-overview-load-testing","title":"HTTP-Methoden: Ein Ueberblick"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/implicit-grant-type-oauth-2-0","title":"Implicit Grant Type in OAuth 2.0"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/load-generators-hardware-infrastructure","title":"Welche Hardwareressourcen sind meinem Konto fuer Lastgeneratoren zugewiesen?"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/load-test-result-ai-analysis","title":"KI-Analyse von Lasttestergebnissen"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/refresh-token-grant-type-oauth-2-0","title":"Refresh Token Grant Type in OAuth 2.0"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/password-credentials-grant-type-oauth-2-0","title":"Password Credentials Grant Type in OAuth 2.0"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/start-time-in-load-testing","title":"Die Bedeutung der Startzeit bei Lasttests verstehen"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/how-to-run-new-load-test","title":"So fuehren Sie einen neuen Lasttest durch"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/using-cookies","title":"Verwendung von Cookies"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/what-are-iterations-load-testing","title":"Iterationen bei Lasttests meistern: Ein tiefer Einblick"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/what-are-virtual-users-load-testing","title":"Was sind virtuelle Benutzer bei Lasttests?"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/use-cases","title":"Anwendungsfaelle"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/what-is-delay-when-running-a-load-test","title":"Was ist Verzoegerung bei der Durchfuehrung eines Lasttests?"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/what-is-grant-type","title":"Was ist ein Grant Type?"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/what-is-duration-in-load-testing","title":"Was ist die Dauer bei Lasttests?"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/what-is-oauth-2-0-authorization","title":"OAuth 2.0 Autorisierung"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/what-is-ramp-up-steps-in-load-testing","title":"Was sind Hochlaufschritte bei Lasttests?"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/what-is-test-run-id","title":"Was ist eine Testlauf-ID?"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/what-is-ramp-up-time-in-load-testing","title":"Was ist die Hochlaufzeit bei Lasttests?"}}},{"node":{"fields":{"slug":"/de-de/guides/load-testing/white-label-report-branding","title":"Gebrandete PDF-Berichte"}}},{"node":{"fields":{"slug":"/de-de/guides/jmeter-load-testing/jmeter-integration-ci-cd/azure-devops","title":"Azure DevOps"}}},{"node":{"fields":{"slug":"/de-de/guides/jmeter-load-testing/jmeter-integration-ci-cd/circleci","title":"CircleCI"}}},{"node":{"fields":{"slug":"/de-de/guides/jmeter-load-testing/jmeter-integration-ci-cd/github-actions","title":"GitHub Actions"}}},{"node":{"fields":{"slug":"/de-de/guides/jmeter-load-testing/jmeter-integration-ci-cd/gitlab-ci-cd","title":"GitLab CI/CD"}}},{"node":{"fields":{"slug":"/de-de/guides/jmeter-load-testing/jmeter-integration-ci-cd/jenkins","title":"Jenkins"}}},{"node":{"fields":{"slug":"/de-de/guides/jmeter-load-testing/jmeter-integration-ci-cd/overview","title":"Integration des JMeter API Clients mit CI/CD-Pipelines"}}},{"node":{"fields":{"slug":"/de-de/guides/api-monitoring/new-api-check/activate-deactivate","title":"Aktivieren/Deaktivieren"}}},{"node":{"fields":{"slug":"/de-de/guides/api-monitoring/new-api-check/alert-channels","title":"Benachrichtigungskanaele"}}},{"node":{"fields":{"slug":"/de-de/guides/api-monitoring/new-api-check/assertions","title":"Assertions"}}},{"node":{"fields":{"slug":"/de-de/guides/api-monitoring/new-api-check/frequency","title":"Haeufigkeit"}}},{"node":{"fields":{"slug":"/de-de/guides/api-monitoring/new-api-check/friendly-check-name","title":"Benutzerfreundlicher Pruefungsname"}}},{"node":{"fields":{"slug":"/de-de/guides/api-monitoring/new-api-check/mute-unmute","title":"Stummschalten/Entstummschalten"}}},{"node":{"fields":{"slug":"/de-de/guides/api-monitoring/new-api-check/locations","title":"Standorte"}}},{"node":{"fields":{"slug":"/de-de/guides/api-monitoring/new-api-check/request-configuration","title":"Anfragekonfiguration"}}},{"node":{"fields":{"slug":"/de-de/guides/api-monitoring/new-api-check/request-preview","title":"Anfragevorschau"}}},{"node":{"fields":{"slug":"/de-de/guides/api-monitoring/new-api-check/response-time-limits","title":"Antwortzeit-Limits"}}},{"node":{"fields":{"slug":"/de-de/guides/api-monitoring/new-api-check/webhook-channels","title":"Webhook-Kanal"}}},{"node":{"fields":{"slug":"/de-de/guides/api-monitoring/new-api-check/save-run","title":"Speichern und Ausfuehren"}}}]}},"pageContext":{"id":"8cf49a00-ae21-5458-9e9d-76c15fd7f7c3","locale":"de-DE"}},"staticQueryHashes":["361965504","361965504","417421954","417421954","445494767","445494767"]}