Projet

Général

Profil

Development #19766

stats pour prometheus

Ajouté par Frédéric Péters il y a plus de 6 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Catégorie:
-
Version cible:
-
Début:
29 octobre 2017
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

De #19765 :

À mon sens on peut utiliser Prometheus mais côté Django on gagnera à développer notre propre module, qui fournira les métriques et paramètres (ex: tenant) qui nous intéressent.


Fichiers

Révisions associées

Révision c1768632 (diff)
Ajouté par Frédéric Péters il y a environ 6 ans

general: add support for prometheus stats (#19766)

Historique

#1

Mis à jour par Frédéric Péters il y a plus de 6 ans

Voilà, nombre de requêtes HTTP, taille des réponses, nombre de requêtes SQL dans la requête HTTP, temps des requêtes SQL de la requête HTTP, avec paramètres ("labels") sur le hostname, le nom de la vue, le statut HTTP de la réponse, la méthode HTTP de la requête.

Par rapport à django-prometheus, la vue permettant à Prometheus de récupérer les statistiques est directement intégrée dans le middleware.

Côté configuration, j'imagine une entrée par plateforme (ex: "SaaS", "3M", etc.).

  - job_name: saas_prod
    scheme: 'https'
    metrics_path: '/__metrics__/'
    static_configs:
      - targets: ['portail-citoyen-publik.entrouvert.com', 'connexion-publik.entrouvert.com', 'demarches-publik.entrouvert.com']

À noter que je précise les services en dur ici mais qu'il y a dans Prometheus du code pour découvrir les targets automatiquement ("service discovery"), celui qui pourrait nous être utile c'est le file_sd_config qui permet de pointer vers un fichier extérieur à la configuration (qui est pris en compte sans reload de prometheus).

#3

Mis à jour par Frédéric Péters il y a plus de 6 ans

(le patch initial était un demi-retour en arrière à un moment où j'ai pensé que ce n'était pas utilie d'enregistrer l'hostname)

#4

Mis à jour par Frédéric Péters il y a plus de 6 ans

+ mesure de la durée des requêtes HTTP, que j'avais oubliée.

#6

Mis à jour par Emmanuel Cazenave il y a plus de 6 ans

C'était l'occasion de m'intéresser aux middleware django.

Je crois qu'il y a une coquille dans l'initialisation des objets prometheus, la string 'Bytes of requests by host' est utilisée trop souvent.

response_size = len(response.content) est ce que ça pète pas dans le cas d'une 'streaming response' ou est ce qu'on ne fait jamais la chose ?

sql_queries_count = len(connection.queries) j'ai l'impression que ce sera inexact si le cursor de la db a été appelé avec executemany (https://github.com/django/django/blob/1.11.9/django/db/backends/utils.py#L105), mais je sais pas si la chose est courante

#7

Mis à jour par Frédéric Péters il y a environ 6 ans

J'avais raté cette relecture, merci. J'ai pris en compte sauf pour le nombre de requêtes, executemany ne semble pas utilisé en interne par l'ORM (d'un git grep dans django 1.11), de notre côté on ne fait pas d'appels directs, et dans la documentation ils parlent uniquement de len(connection.queries). Par contre à relire la documentation c'est uniquement dispo en debug, du coup j'ai modifié pour ne rien publier comme stat quand l'info n'est pas disponible.

#8

Mis à jour par Emmanuel Cazenave il y a environ 6 ans

Ack.

Il me semble qu'on aura toujours les infos disponibles parce que tu fais connection.force_debug_cursor = True et que dans django (1.11 au moins) :

@property
    def queries_logged(self):
        return self.force_debug_cursor or settings.DEBUG

For the record, je veux bien un lien vers la doc à ce sujet que je n'ai pas trouvé.

#9

Mis à jour par Frédéric Péters il y a environ 6 ans

  • Statut changé de En cours à Résolu (à déployer)

Il me semble qu'on aura toujours les infos disponibles parce que tu fais connection.force_debug_cursor = True et que dans django (1.11 au moins) :

Ah oui totalement zappé que je faisais ça :/

commit c1768632e127ab0fc2277b66c96cb9e0294cfb22
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Sun Oct 29 17:31:03 2017 +0100

    general: add support for prometheus stats (#19766)
#10

Mis à jour par Frédéric Péters il y a plus de 5 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF