{"componentChunkName":"component---src-templates-docs-js","path":"/fr-fr/guides/monitoring-as-code","result":{"data":{"site":{"siteMetadata":{"title":"Documentation | LoadFocus","docsLocation":""}},"mdx":{"fields":{"id":"d2069bdd-48fd-5fd7-bf0e-949ee2f309ca","title":"Monitoring as Code","slug":"/fr-fr/guides/monitoring-as-code","locale":"fr-FR"},"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 : gerer les moniteurs LoadFocus avec une CLI | Guides | LoadFocus\",\n  \"metaDescription\": \"Definissez vos verifications API, navigateur, multistep, TCP et heartbeat LoadFocus, ainsi que vos groupes, alertes, fenetres de maintenance, tableaux de bord et pages de statut sous forme de fichiers versionnes, puis deployez-les depuis la ligne de commande ou la CI avec la CLI @loadfocus/monitoring.\",\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, \"Monitoring as Code vous permet de definir votre configuration de monitoring LoadFocus sous forme de fichiers versionnes et de l'appliquer depuis la ligne de commande ou la CI \\u2014 de la meme facon que vous gerez votre infrastructure avec Terraform ou Pulumi. Vous decrivez les moniteurs, groupes, alertes, fenetres de maintenance, tableaux de bord et pages de statut que vous voulez ; la CLI \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"@loadfocus/monitoring\"), \" calcule la difference par rapport a ce qui est en production et la reconcilie (creation, mise a jour, suppression).\"), mdx(\"p\", null, \"C'est declaratif et idempotent : executer \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"deploy\"), \" deux fois ne change rien la seconde fois. Vos fichiers sont la source de verite, donc les changements passent par des pull requests et l'historique de votre monitoring vit dans git.\"), mdx(\"p\", null, \"Tout s'execute dans votre compte et votre equipe active, avec les limites de votre offre appliquees par le backend LoadFocus exactement comme dans le tableau de bord. La CLI ne fait que ce que vous pourriez faire vous-meme dans l'interface.\"), mdx(\"h2\", null, \"Comment ca marche\"), mdx(\"p\", null, \"Vous conservez un dossier de petits fichiers YAML (ou JavaScript) \\u2014 une ressource par fichier \\u2014 plus un \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"loadfocus.config.yaml\"), \" qui pointe vers eux. La CLI envoie ces definitions a LoadFocus, qui les associe aux ressources en production, calcule le diff et renvoie un plan. Vous examinez le plan, puis vous l'appliquez.\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Rediger\"), \" \\u2014 decrivez les ressources sous forme de fichiers (constructs YAML ou JS).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Planifier\"), \" \\u2014 \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"deploy --dry-run\"), \" montre exactement ce qui sera cree, mis a jour, adopte ou supprime.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Appliquer\"), \" \\u2014 \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"deploy\"), \" reconcilie votre compte pour qu'il corresponde aux fichiers.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Reconcilier l'identite\"), \" \\u2014 chaque ressource porte un \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"logicalId\"), \" stable que vous choisissez. C'est ainsi que la CLI suit une ressource a travers les renommages, de sorte que changer le nom d'affichage d'une verification ne la recree jamais.\")), mdx(\"h2\", null, \"Installation\"), mdx(\"p\", null, \"La CLI est un package Node (Node 18+). Executez-la a la demande avec \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"npx\"), \" :\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"npx @loadfocus/monitoring --help\\n\")), mdx(\"p\", null, \"\\u2026ou installez-la globalement pour obtenir la commande \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"loadfocus-monitoring\"), \" :\"), 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, \"Authentification\"), mdx(\"p\", null, \"La CLI s'authentifie avec une cle d'API LoadFocus et un id d'equipe. Trouvez votre cle d'API dans le tableau de bord sous les parametres de votre compte/API, et votre id d'equipe sur la page des equipes.\"), mdx(\"p\", null, \"Connectez-vous une fois et les identifiants sont enregistres dans \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"~/.loadfocus/config.json\"), \" :\"), 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, \"Pour la CI, preferez les variables d'environnement (elles ont priorite sur la configuration enregistree et ne touchent jamais le disque) :\"), 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, \"Creer un projet\"), mdx(\"p\", null, \"Generez un fichier de configuration et un moniteur d'exemple dans votre depot :\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"loadfocus-monitoring init\\n\")), mdx(\"p\", null, \"Cela ecrit \", 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\")), \" delimite tout ce que la CLI gere. Les ressources d'un projet sont reconciliees ensemble ; tout ce qui est dans le projet et qui ne figure plus dans vos fichiers est supprime au \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"deploy\"), \". Utilisez des projets distincts pour gerer des ensembles de moniteurs independants.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"strong\"\n  }, \"checkMatch\")), \" est le ou les globs de vos fichiers de redaction.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"strong\"\n  }, \"defaults\")), \" renseigne \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"schedule\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"locations\"), \" et \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"alertChannels\"), \" pour les verifications qui les omettent.\")), mdx(\"h2\", null, \"Le 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\"), \" est sur par defaut : il montre le plan et, lorsqu'il est execute de maniere interactive, demande avant de supprimer quoi que ce soit. En CI (non interactif), il refuse de supprimer sans \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"--yes\"), \" et se termine avec un code clair plutot que de rester bloque sur une invite. Ajoutez \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"--json\"), \" aux commandes de lecture/resultat pour une sortie exploitable par machine.\"), mdx(\"h2\", null, \"Adopter des moniteurs existants\"), mdx(\"p\", null, \"Vous avez deja des moniteurs dans le tableau de bord ? Importez-les dans des fichiers au lieu de les recreer :\"), 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, \"Cela ecrit un fichier par ressource et un \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"loadfocus.config.yaml\"), \". Examinez, validez (commit), puis executez \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"deploy --dry-run\"), \" \\u2014 les ressources correspondantes sont \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"adoptees\"), \" sur place (prises en gestion) plutot que dupliquees.\"), mdx(\"h2\", null, \"Ressources\"), mdx(\"p\", null, \"Chaque ressource est un fichier avec un \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"kind\"), \", un \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"logicalId\"), \" (votre identifiant stable) et les champs propres a ce kind. Les references entre ressources utilisent des \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"logicalId\"), \" (ou des noms pour les canaux d'alerte) \\u2014 le serveur les resout, et l'ordre de deploiement est gere pour vous.\"), mdx(\"h3\", null, \"Verifications\"), mdx(\"p\", null, \"Un seul kind \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Monitor\"), \" couvre chaque type de verification via \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"type\"), \" : \", 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 requete HTTP avec des assertions sur le statut, le corps, les en-tetes, le temps de reponse, l'expiration SSL.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"browser\"), \" \\u2014 un script de parcours utilisateur Playwright avec captures d'ecran et chronometrages par etape (payant).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"multistep\"), \" \\u2014 une sequence ordonnee de requetes API qui passent des donnees entre les etapes.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"tcp\"), \" \\u2014 une verification de port/joignabilite depuis plusieurs regions.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"heartbeat\"), \" \\u2014 un dispositif d'homme mort : un job externe ping une URL selon une planification, et LoadFocus alerte si un ping est manque.\")), mdx(\"h3\", null, \"Groupes\"), mdx(\"p\", null, \"Partagez les regions, les canaux d'alerte, la frequence et l'activation entre plusieurs verifications. Une verification rejoint un groupe avec \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"group: <logicalId>\"), \".\"), 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, \"Regles d'alerte\"), mdx(\"p\", null, \"Alerter quand une metrique d'une verification franchit un seuil.\"), 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, \"Canaux d'alerte\"), mdx(\"p\", null, \"Gerez les canaux de notification en tant que code et referencez-les \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"par leur nom\"), \" depuis une verification, un groupe ou une regle d'alerte. Types (\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"type\"), \") pris en charge : \", 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\"), \". Les champs secrets (\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"webhookUrl\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"routingKey\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"apiKey\"), \") acceptent une reference \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"{{secrets.NAME}}\"), \" \\u2014 la valeur est stockee avec \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"env set-secret\"), \" et resolue lors de l'envoi d'une alerte, jamais versionnee dans vos fichiers.\"), 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, \"Fenetres de maintenance\"), mdx(\"p\", null, \"Supprimer les alertes pendant des travaux planifies. Les horaires sont en UTC. \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"startsAt\"), \" / \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"endsAt\"), \" acceptent une chaine ISO-8601 (par ex. \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"\\\"2026-07-01T00:00:00Z\\\"\"), \") ou des millisecondes unix.\"), 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, \"Tableaux de bord\"), mdx(\"p\", null, \"Une vue partagee de verifications selectionnees, eventuellement publique via un 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, \"Pages de statut\"), mdx(\"p\", null, \"Une page de statut publique a \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"<slug>.loadfoc.us\"), \", eventuellement sur votre propre domaine personnalise.\"), 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, \"Un domaine personnalise est mis en service une fois que vous creez le CNAME et que le certificat est emis \\u2014 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"deploy\"), \" le declare ; la verification se fait hors bande.\"), mdx(\"h3\", null, \"Variables\"), mdx(\"p\", null, \"Valeurs non secretes (URLs de base, identifiants) que les verifications referencent au moment de l'execution via \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"{{vars.NAME}}\"), \". Le \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"logicalId\"), \" est la cle de la variable. (Pour les secrets, utilisez \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"env set-secret\"), \" \\u2014 ne les placez jamais dans des fichiers.)\"), 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, \"Rediger en JavaScript ou TypeScript\"), mdx(\"p\", null, \"Si vous preferez le code au YAML, construisez les memes definitions de maniere programmatique et exportez-les \\u2014 les constructs produisent des ressources identiques :\"), 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, \"Pointez \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"checkMatch\"), \" vers vos fichiers \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \".js\"), \" et la CLI les charge comme n'importe quelle autre ressource.\"), mdx(\"h2\", null, \"Secrets et variables\"), mdx(\"p\", null, \"Referencez des valeurs depuis vos verifications sans les versionner. Les \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"secrets\"), \" (jetons, mots de passe) sont geres uniquement de maniere imperative et references via \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"{{secrets.NAME}}\"), \" dans les champs de verification et les champs secrets des canaux d'alerte. Les \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"variables\"), \" (non secretes) peuvent etre declarees sous forme de fichiers (\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"kind: variable\"), \", ci-dessus) ou definies de maniere imperative, et sont referencees via \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"{{vars.NAME}}\"), \".\"), 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, \"L'executer en CI\"), mdx(\"p\", null, \"Un pipeline typique valide a chaque pull request et deploie a la fusion sur la branche principale.\"), 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, \"Bon a savoir\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"strong\"\n  }, \"logicalId\"), \" est l'identite.\"), \" Gardez-le stable. Vous pouvez renommer librement le \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"name\"), \" ou le \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"title\"), \" d'une verification ; changer son \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"logicalId\"), \" est traite comme la suppression d'une ressource et la creation d'une autre.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Les suppressions sont limitees au projet.\"), \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"deploy\"), \" ne retire que les ressources du \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"project\"), \" courant qui ne figurent plus dans vos fichiers \\u2014 jamais quoi que ce soit dans un autre projet ou cree en dehors de Monitoring as Code (jusqu'a ce que vous l'adoptiez).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Les slugs de page de statut sont globaux.\"), \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"slug\"), \" devient un sous-domaine, il doit donc etre unique parmi tous les clients LoadFocus.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Les fonctionnalites payantes echouent bruyamment.\"), \" Une equipe gratuite qui declare un champ reserve aux offres payantes (un domaine personnalise de page de statut, la suppression du badge \\xAB Powered by \\xBB) recoit une erreur claire au \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"deploy\"), \" plutot qu'un resultat partiel silencieux.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Les limites d'offre s'appliquent.\"), \" Creer des ressources via la CLI est soumis aux memes quotas d'offre que le tableau de bord.\")), mdx(\"h2\", null, \"Associes\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"/docs/guides/api-monitoring\"\n  }, \"Monitoring d'API\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"/docs/guides/mcp\"\n  }, \"Pilotez LoadFocus depuis votre assistant IA (MCP)\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"/docs/guides/teams\"\n  }, \"Equipes\"))));\n}\n;\nMDXContent.isMDXComponent = true;","tableOfContents":{"items":[{"url":"#monitoring-as-code","title":"Monitoring as Code","items":[{"url":"#comment-ca-marche","title":"Comment ca marche"},{"url":"#installation","title":"Installation"},{"url":"#authentification","title":"Authentification"},{"url":"#creer-un-projet","title":"Creer un projet"},{"url":"#le-workflow","title":"Le workflow"},{"url":"#adopter-des-moniteurs-existants","title":"Adopter des moniteurs existants"},{"url":"#ressources","title":"Ressources","items":[{"url":"#verifications","title":"Verifications"},{"url":"#groupes","title":"Groupes"},{"url":"#regles-dalerte","title":"Regles d'alerte"},{"url":"#canaux-dalerte","title":"Canaux d'alerte"},{"url":"#fenetres-de-maintenance","title":"Fenetres de maintenance"},{"url":"#tableaux-de-bord","title":"Tableaux de bord"},{"url":"#pages-de-statut","title":"Pages de statut"},{"url":"#variables","title":"Variables"}]},{"url":"#rediger-en-javascript-ou-typescript","title":"Rediger en JavaScript ou TypeScript"},{"url":"#secrets-et-variables","title":"Secrets et variables"},{"url":"#lexecuter-en-ci","title":"L'executer en CI"},{"url":"#bon-a-savoir","title":"Bon a savoir"},{"url":"#associes","title":"Associes"}]}]},"parent":{"__typename":"File","relativePath":"fr-fr/guides/monitoring-as-code.md"},"frontmatter":{"metaTitle":"Monitoring as Code : gerer les moniteurs LoadFocus avec une CLI | Guides | LoadFocus","metaDescription":"Definissez vos verifications API, navigateur, multistep, TCP et heartbeat LoadFocus, ainsi que vos groupes, alertes, fenetres de maintenance, tableaux de bord et pages de statut sous forme de fichiers versionnes, puis deployez-les depuis la ligne de commande ou la CI avec la CLI @loadfocus/monitoring.","order":9}},"allMdx":{"edges":[{"node":{"fields":{"slug":"/fr-fr","title":"Bienvenue dans la nouvelle documentation LoadFocus"}}},{"node":{"fields":{"slug":"/fr-fr/guides","title":"Guides pratiques"}}},{"node":{"fields":{"slug":"/fr-fr/knowledge-base","title":"Base de connaissances"}}},{"node":{"fields":{"slug":"/fr-fr/pricing","title":"FAQ sur les tarifs"}}},{"node":{"fields":{"slug":"/fr-fr/knowledge-base/how-to-update-card-details","title":"Comment mettre a jour les details de carte pour les paiements echoues"}}},{"node":{"fields":{"slug":"/fr-fr/knowledge-base/understanding-declined-card-payments","title":"Pourquoi mon paiement par carte a-t-il ete refuse ?"}}},{"node":{"fields":{"slug":"/fr-fr/knowledge-base/using-3rd-party-tools-to-load-test-website-locally","title":"Comment tester la charge d'un site web ou d'une API heberge localement"}}},{"node":{"fields":{"slug":"/fr-fr/guides/api-monitoring","title":"Surveillance API"}}},{"node":{"fields":{"slug":"/fr-fr/knowledge-base/understanding-differences-between-http-and-https","title":"Differences entre HTTP et HTTPS"}}},{"node":{"fields":{"slug":"/fr-fr/guides/external-reports","title":"Rapports externes"}}},{"node":{"fields":{"slug":"/fr-fr/knowledge-base/using-query-parameters","title":"Comment utiliser les parametres de requete URL"}}},{"node":{"fields":{"slug":"/fr-fr/knowledge-base/using-valid-url-endpoints","title":"Qu'est-ce qu'une URL valide pour un test de charge"}}},{"node":{"fields":{"slug":"/fr-fr/guides/jmeter-load-testing","title":"Tests de charge avec Apache JMeter"}}},{"node":{"fields":{"slug":"/fr-fr/knowledge-base/using-google-analytics-and-no-requests-while-load-testing","title":"Pas de trafic dans Google Analytics pendant les tests de charge"}}},{"node":{"fields":{"slug":"/fr-fr/knowledge-base/what-is-an-http-method","title":"Qu'est-ce qu'une methode de requete HTTP"}}},{"node":{"fields":{"slug":"/fr-fr/guides/k6-load-testing","title":"k6 Load Testing"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing","title":"Tests de charge"}}},{"node":{"fields":{"slug":"/fr-fr/guides/mcp","title":"Assistants IA (MCP)"}}},{"node":{"fields":{"slug":"/fr-fr/guides/monitor-website-performance","title":"Surveillance de la performance des sites web"}}},{"node":{"fields":{"slug":"/fr-fr/guides/monitoring-as-code","title":"Monitoring as Code"}}},{"node":{"fields":{"slug":"/fr-fr/guides/teams","title":"Gestion des équipes"}}},{"node":{"fields":{"slug":"/fr-fr/guides/onboarding","title":"Onboarding LoadFocus"}}},{"node":{"fields":{"slug":"/fr-fr/guides/api-monitoring/alert-channels","title":"Canaux d'alerte : Discord, PagerDuty et Opsgenie"}}},{"node":{"fields":{"slug":"/fr-fr/guides/external-reports/azure-app-insights-integration","title":"Integration Azure App Insights"}}},{"node":{"fields":{"slug":"/fr-fr/guides/k6-load-testing/analyzing-k6-test-results","title":"Analyse des résultats de test de charge k6"}}},{"node":{"fields":{"slug":"/fr-fr/guides/external-reports/datadog-integration","title":"Integration Datadog"}}},{"node":{"fields":{"slug":"/fr-fr/guides/jmeter-load-testing/how-to-run-new-apache-jmeter-load-test","title":"Comment executer un nouveau test de charge Apache JMeter"}}},{"node":{"fields":{"slug":"/fr-fr/guides/k6-load-testing/how-to-run-k6-load-test","title":"Comment exécuter un nouveau test de charge k6"}}},{"node":{"fields":{"slug":"/fr-fr/guides/jmeter-load-testing/downloading-jmx-csv-files","title":"Telecharger les fichiers .JMX et .CSV dans LoadFocus"}}},{"node":{"fields":{"slug":"/fr-fr/guides/api-monitoring/api-check-results","title":"Comprendre les résultats des vérifications API"}}},{"node":{"fields":{"slug":"/fr-fr/guides/jmeter-load-testing/jmeter-integration-ci-cd","title":"Integration API de test de charge"}}},{"node":{"fields":{"slug":"/fr-fr/guides/api-monitoring/custom-domain-status-page","title":"Comment ajouter un domaine personnalisé à votre page de statut"}}},{"node":{"fields":{"slug":"/fr-fr/guides/api-monitoring/check-groups","title":"Groupes de vérifications"}}},{"node":{"fields":{"slug":"/fr-fr/guides/jmeter-load-testing/load-generators-hardware-infrastructure-jmeter","title":"Quelles sont les ressources materielles allouees a mon compte pour les generateurs de charge ?"}}},{"node":{"fields":{"slug":"/fr-fr/guides/jmeter-load-testing/load-testing-anomalies","title":"Anomalies des tests de charge"}}},{"node":{"fields":{"slug":"/fr-fr/guides/api-monitoring/heartbeat-monitors","title":"Moniteurs Heartbeat (tâches cron)"}}},{"node":{"fields":{"slug":"/fr-fr/guides/api-monitoring/dashboards","title":"Tableaux de bord"}}},{"node":{"fields":{"slug":"/fr-fr/guides/jmeter-load-testing/load-testing-engine-health-monitoring","title":"Surveillance de la sante des moteurs"}}},{"node":{"fields":{"slug":"/fr-fr/guides/jmeter-load-testing/load-testing-error-analysis","title":"Analyse des erreurs"}}},{"node":{"fields":{"slug":"/fr-fr/guides/api-monitoring/maintenance-windows","title":"Fenêtres de maintenance"}}},{"node":{"fields":{"slug":"/fr-fr/guides/api-monitoring/multistep-api-checks","title":"Vérifications API multi-étapes"}}},{"node":{"fields":{"slug":"/fr-fr/guides/jmeter-load-testing/load-testing-insights","title":"Informations sur les tests de charge"}}},{"node":{"fields":{"slug":"/fr-fr/guides/jmeter-load-testing/load-testing-jtl-file-analysis","title":"Analyse des logs et fichiers JTL"}}},{"node":{"fields":{"slug":"/fr-fr/guides/jmeter-load-testing/load-testing-jtl-jmeter-log-file-analysis","title":"Analyse des fichiers de log JMeter"}}},{"node":{"fields":{"slug":"/fr-fr/guides/api-monitoring/status-pages","title":"Créez une page de statut publique pour vos moniteurs"}}},{"node":{"fields":{"slug":"/fr-fr/guides/api-monitoring/new-api-check","title":"Comment créer une nouvelle vérification API"}}},{"node":{"fields":{"slug":"/fr-fr/guides/jmeter-load-testing/load-testing-timeline-analysis","title":"Vue chronologique"}}},{"node":{"fields":{"slug":"/fr-fr/guides/api-monitoring/tcp-monitors","title":"Moniteurs de port TCP"}}},{"node":{"fields":{"slug":"/fr-fr/guides/api-monitoring/variables","title":"Variables"}}},{"node":{"fields":{"slug":"/fr-fr/guides/jmeter-load-testing/uploading-jmeter-files-step-by-step-guide","title":"Importer des fichiers JMeter dans LoadFocus : guide etape par etape"}}},{"node":{"fields":{"slug":"/fr-fr/guides/jmeter-load-testing/using-multiple-csv-files-with-jmeter-engines","title":"Utiliser plusieurs fichiers CSV avec les moteurs JMeter dans LoadFocus"}}},{"node":{"fields":{"slug":"/fr-fr/guides/monitor-website-performance/alert-configuration","title":"Configuration des alertes"}}},{"node":{"fields":{"slug":"/fr-fr/guides/monitor-website-performance/alert-metrics","title":"Metriques d'alerte"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/ai-credits","title":"AI Credits"}}},{"node":{"fields":{"slug":"/fr-fr/guides/monitor-website-performance/core-web-vitals-competitor-comparison","title":"Comparaison Core Web Vitals avec les concurrents"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/analyzing-load-test-results","title":"Comment verifier les resultats des tests de charge"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/baseline-comparison-between-load-tests","title":"Comparaison de reference entre les tests de charge"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/authorization-code-grant-type-oauth-2-0","title":"Type d'autorisation Authorization Code dans OAuth 2.0"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/client-credentials-grant-type-oauth-2-0","title":"Type d'autorisation Client Credentials dans OAuth 2.0"}}},{"node":{"fields":{"slug":"/fr-fr/guides/monitor-website-performance/core-web-vitals-metrics","title":"Que sont les Core Web Vitals ?"}}},{"node":{"fields":{"slug":"/fr-fr/guides/monitor-website-performance/getting-started","title":"Demarrage rapide"}}},{"node":{"fields":{"slug":"/fr-fr/guides/monitor-website-performance/how-to-create-new-alert","title":"Creer une nouvelle alerte"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/common-http-error-codes","title":"Codes d'erreur HTTP courants"}}},{"node":{"fields":{"slug":"/fr-fr/guides/monitor-website-performance/how-to-run-new-website-performance-test","title":"Creer un nouveau test de performance de site web"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/crafting-perfect-test-names","title":"Creer des noms de test parfaits"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/decoding-average-response-times","title":"Decoder le temps de reponse moyen"}}},{"node":{"fields":{"slug":"/fr-fr/guides/monitor-website-performance/http-authentication","title":"Authentification HTTP"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/deep-dive-samples-in-load-testing","title":"Que sont les echantillons dans les tests de charge ?"}}},{"node":{"fields":{"slug":"/fr-fr/guides/monitor-website-performance/largest-contentful-paint","title":"Largest Contentful Paint (LCP)"}}},{"node":{"fields":{"slug":"/fr-fr/guides/monitor-website-performance/lighthouse-opportunities","title":"Opportunités Lighthouse"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/demo","title":"Demo"}}},{"node":{"fields":{"slug":"/fr-fr/guides/monitor-website-performance/performance-budgets","title":"Budgets de performance et alertes"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/end-time-in-load-testing","title":"Comprendre l'importance de l'heure de fin dans les tests de charge"}}},{"node":{"fields":{"slug":"/fr-fr/guides/monitor-website-performance/sitemap-import","title":"Import depuis un Sitemap"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/erros-and-reponse-codes","title":"Erreurs et codes de reponse"}}},{"node":{"fields":{"slug":"/fr-fr/guides/monitor-website-performance/real-user-field-data","title":"Données de terrain réelles (CrUX)"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/headers-and-manage-presets","title":"En-tetes et preselections d'en-tetes"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/how-to-url-query-parameters","title":"Parametres de requete"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/how-to-run-new-load-test","title":"Comment executer un nouveau test de charge"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/getting-started","title":"Demarrage rapide"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/granularity-in-load-test-results-and-charts","title":"Granularite dans les resultats et l'affichage des graphiques de tests de charge"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/geographical-test-location-in-load-testing","title":"Emplacement geographique des tests de charge"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/implicit-grant-type-oauth-2-0","title":"Type d'autorisation Implicit Grant dans OAuth 2.0"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/load-generators-hardware-infrastructure","title":"Quelles sont les ressources materielles allouees a mon compte pour les generateurs de charge ?"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/http-methods-overview-load-testing","title":"Methodes HTTP : vue d'ensemble"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/load-test-result-ai-analysis","title":"Analyse IA des resultats de tests de charge"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/password-credentials-grant-type-oauth-2-0","title":"Type d'autorisation Password Credentials dans OAuth 2.0"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/refresh-token-grant-type-oauth-2-0","title":"Type d'autorisation Refresh Token dans OAuth 2.0"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/what-are-iterations-load-testing","title":"Maitriser les iterations dans les tests de charge : une plongee approfondie"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/start-time-in-load-testing","title":"Comprendre l'importance de l'heure de debut dans les tests de charge"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/use-cases","title":"Cas d'utilisation"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/what-are-virtual-users-load-testing","title":"Que sont les utilisateurs virtuels dans les tests de charge"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/using-cookies","title":"Utiliser les cookies"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/what-is-delay-when-running-a-load-test","title":"Qu'est-ce que le delai lors de l'execution d'un test de charge ?"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/what-is-grant-type","title":"Qu'est-ce qu'un type d'autorisation (Grant Type) ?"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/what-is-duration-in-load-testing","title":"Qu'est-ce que la duree dans les tests de charge"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/what-is-oauth-2-0-authorization","title":"Autorisation OAuth 2.0"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/what-is-test-run-id","title":"Qu'est-ce qu'un identifiant d'execution de test ?"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/what-is-ramp-up-steps-in-load-testing","title":"Que sont les etapes de montee en charge dans les tests de charge"}}},{"node":{"fields":{"slug":"/fr-fr/guides/load-testing/what-is-ramp-up-time-in-load-testing","title":"Qu'est-ce que le temps de montee en charge dans les tests de charge"}}},{"node":{"fields":{"slug":"/fr-fr/guides/api-monitoring/new-api-check/activate-deactivate","title":"Activer/Désactiver"}}},{"node":{"fields":{"slug":"/fr-fr/guides/api-monitoring/new-api-check/alert-channels","title":"Canaux d'alerte"}}},{"node":{"fields":{"slug":"/fr-fr/guides/jmeter-load-testing/jmeter-integration-ci-cd/azure-devops","title":"Azure DevOps"}}},{"node":{"fields":{"slug":"/fr-fr/guides/jmeter-load-testing/jmeter-integration-ci-cd/circleci","title":"CircleCI"}}},{"node":{"fields":{"slug":"/fr-fr/guides/jmeter-load-testing/jmeter-integration-ci-cd/github-actions","title":"GitHub Actions"}}},{"node":{"fields":{"slug":"/fr-fr/guides/api-monitoring/new-api-check/assertions","title":"Assertions"}}},{"node":{"fields":{"slug":"/fr-fr/guides/jmeter-load-testing/jmeter-integration-ci-cd/gitlab-ci-cd","title":"GitLab CI/CD"}}},{"node":{"fields":{"slug":"/fr-fr/guides/api-monitoring/new-api-check/frequency","title":"Fréquence"}}},{"node":{"fields":{"slug":"/fr-fr/guides/jmeter-load-testing/jmeter-integration-ci-cd/jenkins","title":"Jenkins"}}},{"node":{"fields":{"slug":"/fr-fr/guides/api-monitoring/new-api-check/friendly-check-name","title":"Nom convivial de la vérification"}}},{"node":{"fields":{"slug":"/fr-fr/guides/api-monitoring/new-api-check/locations","title":"Emplacements"}}},{"node":{"fields":{"slug":"/fr-fr/guides/jmeter-load-testing/jmeter-integration-ci-cd/overview","title":"Integration du client API JMeter avec les pipelines CI/CD"}}},{"node":{"fields":{"slug":"/fr-fr/guides/api-monitoring/new-api-check/mute-unmute","title":"Mettre en sourdine/Réactiver"}}},{"node":{"fields":{"slug":"/fr-fr/guides/api-monitoring/new-api-check/request-configuration","title":"Configuration de la requête"}}},{"node":{"fields":{"slug":"/fr-fr/guides/api-monitoring/new-api-check/request-preview","title":"Apercu de la requete"}}},{"node":{"fields":{"slug":"/fr-fr/guides/api-monitoring/new-api-check/response-time-limits","title":"Limites de temps de reponse"}}},{"node":{"fields":{"slug":"/fr-fr/guides/api-monitoring/new-api-check/webhook-channels","title":"Canal Webhook"}}},{"node":{"fields":{"slug":"/fr-fr/guides/api-monitoring/new-api-check/save-run","title":"Enregistrer et executer"}}}]}},"pageContext":{"id":"d2069bdd-48fd-5fd7-bf0e-949ee2f309ca","locale":"fr-FR"}},"staticQueryHashes":["361965504","361965504","417421954","417421954","445494767","445494767"]}