# Blackbox-Exporter en 2022 #### Démo Point de Synchro du 21/01/2022 --- # Objectif - déclaration d'une "probe" dans Blackbox-Exporter (public : Caascad) - débogage d'une "probe" qui ne fonctionne pas comme souhaité (public : Caascad, nos clients, tout le monde) - contrôle permanent du bon fonctionnement des "probes" (public : Caascad) --- # Blackbox Exporter C'est comme un "curl" : * configurable * qui tourne en boucle * qui met à disposition des métriques pour Prometheus ---- ## Liens - Repo upstream : [https://github.com/prometheus/blackbox_exporter](https://github.com/prometheus/blackbox_exporter) - Chart helm : [https://git.corp.caascad.com/caascad/applications/caascad-blackbox-exporter](https://git.corp.caascad.com/caascad/applications/caascad-blackbox-exporter) - Configuration [envs-ng](https://git.corp.caascad.com/caascad/terraform/envs-ng/) - Documentation : docs-internal -> [Opérations/Applications/Blackbox-Exporter/](https://docs-internal.corp.caascad.com/Op%C3%A9rations/Applications/Blackbox-Exporter/use-blackbox-exporter/) - Et des serviceMonitors... ---- ## Principe de fonctionnement * URL de probe pour Prometheus : `http://<blackbox_exporter>:9115/probe?module=http_2xx&target=https://mondomaine.fr` * Les modules (comme `http_2xx`) sont définis dans la configuration de Blackbox-Exporter ---- ## Ajouter une URL à monitorer * Principe : ajouter un servicemonitor * Documentation : * doc interne : [Opérations/Applications/Blackbox-Exporter](https://docs-internal.corp.caascad.com/Op%C3%A9rations/Applications/Blackbox-Exporter/use-blackbox-exporter/) * doc client : [Monitoring/How to/Use Blackbox-Exporter](https://docs.caascad.com/en/monitoring/howto/use-blackbox-exporter.html) ---- ## 3 façons... ...d'ajouter un serviceMonitor pour Blackbox-Exporter * intégré dans une chart helm * standalone (chart helm `caascad-servicemonitor`) * `#CaascadServicemonitorBlackboxexporterHelmConfig` dans envs-ng : c'est la méthode préférée pour un serviceMonitor isolé * `#CaascadServicemonitorHelmConfig` dans envs-ng quand la précédente est trop spécifique, également pour un serviceMonitor isolé ---- ## Exemples * [Jira : `#CaascadServicemonitorBlackboxexporterHelmConfig`](https://git.corp.caascad.com/caascad/terraform/envs-ng/-/blob/master/blackbox-exporter-servicemonitor-jira.cue) * [Grafana : intégré dans une chart helm](https://git.corp.caascad.com/caascad/applications/caascad-grafana/-/blob/master/helm/caascad-grafana-v1/templates/blackbox-exporter-servicemonitor.yaml) * Pas d'exemple pour `#CaascadServicemonitorHelmConfig` car l'autre méthode nous a toujours suffi. ---- ## Vu de Grafana... * [Dashboard](https://grafana-infra.ocb-test06.caascad.com/d/bc6db11cbcaascad/blackbox-exporter) "Blackbox-exporter" * Onglet *explore*. Les métriques sont préfixées de `probe_`. Exemples : * `probe_success` * `probe_duration_seconds` * ... ---- ## Déployez Déployez avec Trackbone, comme d'habitude Et ça fonctionne ! --- # Débogage d'une probe ... parce que ça ne marche pas toujours du premier coup ! Méthodes : * Voir les logs<!-- .element: style="font-size: smaller" --> * Blackbox interactif<!-- .element: style="font-size: smaller" --> ---- ## Voir les logs [Voir les logs](https://docs-internal.corp.caascad.com/Op%C3%A9rations/Applications/Blackbox-Exporter/troubleshooting-blackbox-exporter/) de Blackbox-Exporter en filtrant sur la target qui vient d'être ajoutée. * avec `kubectl logs` sur le pod blackbox-exporter * avec Grafana, datasource `Loki` ou `Loki-client` * directement dans Blackbox (avec un port-forward) : Blackbox interactif ---- ## Blackbox interactif [Principe](https://docs-internal.corp.caascad.com/Op%C3%A9rations/Applications/Blackbox-Exporter/troubleshooting-blackbox-exporter/#interactive-blackbox-exporter) : ``` kubectl -n monitoring port-forward \ svc/blackbox-exporter \ 9115:9115 ``` http://localhost:9115 dans mon navigateur Penser à ajouter `&debug=true` dans les URL --- # Contrôle des "probes" Objectifs : * garantir que les serviceMonitors sont bien fonctionnels * alerter si un serviceMonitor disparaît ou dysfonctionne. ---- ## Créer une alerting rule Editer le fichier [rules/caascad-blackbox-exporter-servicemonitors.cue](https://git.corp.caascad.com/caascad/applications/caascad-prometheus-rules/-/blob/master/rules/caascad-blackbox-exporter-servicemonitors.cue) (repo des prometheusRules) Ajouter un bloc de code de ce genre : ``` targetDescription: "Grafana infra" rulesetname: ["cloud-caascad"] instance: "https://grafana-infra.\(zone_name).caascad.com/http_2xx" cc_prom_source: ["cloud-caascad"] severity: "warning" ``` Suivre le [workflow](https://git.corp.caascad.com/caascad/applications/caascad-prometheus-rules/-/blob/master/README.md) habituel de déploiement des PrometheusRules. --- # Conclusion Les probes actuellements déployées peuvent servir d'exemple ; - grafana et grafana client - karma infra et karma client - jira (depuis la zone infra) ---- ## Probes <img src="/uploads/upload_f4f9af31ffc152208d0538ceba405821.png" width="40" style="border: 0; background: none"> <img src="/uploads/upload_c48700c4e2d0d6d2ea7b0672f732b57c.png" width="40" style="border: 0; background: none"> Probes non gérées par l'équipe Monitoring : * bastions * rancher * vault * keycloak ---- ## Ce qu'il faut faire <img src="/uploads/upload_f4f9af31ffc152208d0538ceba405821.png" width="40" style="border: 0; background: none"> <img src="/uploads/upload_c48700c4e2d0d6d2ea7b0672f732b57c.png" width="40" style="border: 0; background: none"> - **<span>Créer des alertes</span><!-- .element: style="text-decoration: underline" -->** pour s'assurer du bon fonctionnement des "probes" existantes - Les probes existantes peuvent rester telles quelles. Ou être "converties" au format de la chart helm caascad-servicemonitor. --- # Merci <style type="text/css"> p { font-size: smaller; } .reveal ul ul li { font-size: smaller; } .reveal section { text-align: left; } } .reveal h3 { color: orange; text-align: center; border-bottom: 1px solid orange; } .reveal h1 { color: orange; text-align: center; border-bottom: 1px solid orange; margin-bottom: 0.4em; } .reveal code { color: aquamarine; font-size: smaller; } </style>
{"type":"slide","slideOptions":{"transition":"slide","center":true}}