Maison >développement back-end >Golang >Observabilité – Pourquoi la journalisation est-elle importante

Observabilité – Pourquoi la journalisation est-elle importante

PHPz
PHPzoriginal
2024-07-17 21:57:01795parcourir

Observability - Why logging its important

Dans une ère numérique de plus en plus complexe, l'observabilité est la clé principale de la gestion des systèmes logiciels modernes. L'un des piliers les plus importants de l'observabilité est la logging. Explorons pourquoi la journalisation est si importante et comment en faire un usage optimal.

Qu’est-ce que la journalisation ?

La journalisation est le processus d'enregistrement des activités et des événements dans un système. Cela inclut une variété d'informations, depuis les messages d'erreur, l'activité de l'utilisateur jusqu'aux performances du système. Considérez la journalisation comme une « boîte noire » d'avion pour votre système : elle enregistre toujours ce qui se passe, prête à fournir des informations en cas de besoin.

Pourquoi la journalisation est-elle si importante ?

Voici quelques points qui peuvent expliquer pourquoi les journaux sont importants :

  1. Résolution plus rapide des problèmes
    Avec de bons journaux, les équipes de développement peuvent identifier les causes profondes sans conjectures. C'est comme avoir une carte au trésor lorsque l'on cherche des insectes !

  2. Améliorations de la sécurité
    Les journaux peuvent être votre « espion » pour détecter les activités suspectes. Les équipes de sécurité peuvent réagir plus rapidement aux menaces, par exemple en ayant un service d'incendie toujours en attente.

  3. Analyse des performances
    Grâce aux journaux, vous pouvez identifier les goulots d'étranglement dans le système. C'est comme avoir un médecin personnel pour la santé de votre application.

  4. Comprendre le comportement des utilisateurs
    Les journaux d'activité des utilisateurs fournissent des informations précieuses sur la manière dont le produit est utilisé. C'est comme avoir un assistant personnel observant et signalant constamment les préférences des clients.

Meilleures pratiques en matière de journalisation

Pour maximiser les avantages de la journalisation, vous trouverez ci-dessous quelques-unes des meilleures pratiques qui peuvent être mises en œuvre :

Déterminer le niveau de journalisation approprié

L'utilisation de ces niveaux de journalisation appropriés peut vous aider à filtrer rapidement les informations, par exemple en triant les journaux par urgence.

Ce qui suit est un exemple d'affichage de journaux en utilisant le langage Golang avec différents niveaux. Ici, nous utilisons le Logrus.

package main

import (
    "github.com/sirupsen/logrus"
)

func main() {
    log := logrus.New()
    log.SetLevel(logrus.DebugLevel)

    log.Debug("Starting app..")
    log.Info("User has successfully logged in")
    log.Warn("CPU usage exceeds 80%")
    log.Error("Failed to save data to database")
    log.Fatal("A critical error occurs, the application will stop")
}

Ce qui suit est une explication des différents niveaux de journalisation ci-dessus :

  • DEBUG : informations détaillées pour le débogage, généralement activées uniquement pendant le développement.
  • INFO : Informations générales sur le déroulement normal de l'application.
  • AVERTISSEMENT : Pour les situations susceptibles de devenir problématiques à l'avenir, mais n'arrêtez pas l'application.
  • ERREUR : Une erreur qui provoque l'échec d'une fonction spécifique, mais l'application est toujours en cours d'exécution.
  • FATAL : Erreur grave pouvant entraîner l'arrêt de l'application.

Inclure des informations contextuelles pertinentes

Chaque entrée de journal doit fournir suffisamment de contexte pour comprendre ce qui s'est passé. Cela pourrait inclure :

  • Horodatage.
  • ID de transaction ou de session.
  • ID utilisateur (le cas échéant).
  • Nom de la fonction ou du module.
  • Données d'entrée pertinentes (soyez prudent avec les données sensibles).
  • Trace de la pile pour les erreurs

Ceci est un exemple de code lors de l'impression d'un journal, comprenant des informations contextuelles qui nous aideront à tracer.

package main

import (
    "github.com/sirupsen/logrus"
    "time"
)

type UserAction struct {
    UserID    int
    Action    string
    Timestamp time.Time
}

func main() {
    log := logrus.New()
    log.SetLevel(logrus.DebugLevel)

    // Use format json
    log.SetFormatter(&logrus.JSONFormatter{})

    // Dummy data
    action := UserAction{
        UserID:    12345,
        Action:    "checkout",
        Timestamp: time.Now(),
    }

    // Print log
    log.WithFields(logrus.Fields{
        "user_id":    action.UserID,
        "action":     action.Action,
        "timestamp":  time.Now().Format(time.RFC3339),
        "session_id": generateSessionID(),
        "module":     "payment_processor",
        "ip_address": "192.168.1.100",
    }).Error("Payment failed")

}

func generateSessionID() string {
    return "sess_abc123"
}

Nous pouvons constater que nous avons inclus plusieurs éléments d'informations contextuelles qui peuvent nous permettre d'effectuer plus facilement le traçage à l'avenir. Quelles sont les commodités en question, à savoir que nous pouvons rechercher des journaux en fonction du niveau, par exemple le niveau d'erreur dans l'exemple de code ci-dessus, et également en fonction du temps et d'autres en fonction des informations que nous saisissons.

Utiliser une mise en forme cohérente

Un format de journal cohérent facilite l'analyse et l'analyse, surtout si vous utilisez des outils automatisés (en ce qui concerne les outils, cela sera discuté ci-dessous). Le formatage nous permet également de rechercher plus facilement les journaux en fonction de critères, par exemple le niveau de journalisation, le message ou l'heure. Exemple de format :

[TIMESTAMP] [LEVEL] [MODULE] [MESSAGE]

Ou au format JSON pour une analyse facile comme les résultats dans l'exemple de code ci-dessus :

{
    "action": "checkout",
    "ip_address": "192.168.1.100",
    "level": "error",
    "module": "payment_processor",
    "msg": "Payment failed",
    "session_id": "sess_abc123",
    "time": "2024-06-26T20:59:02+07:00",
    "timestamp": "2024-06-26T20:59:02+07:00",
    "user_id": 12345
}

Implémenter la rotation des journaux pour gérer la taille des fichiers

La rotation des journaux empêche les fichiers journaux de devenir trop volumineux et difficiles à gérer. Cela implique :

  • Limite la taille des fichiers journaux.

  • Créez périodiquement de nouveaux fichiers journaux (par exemple quotidiennement ou hebdomadairement).

  • Archiver ou supprimer les anciens fichiers journaux.

  • Utiliser des outils tels que logrotate sous Linux ou un framework de journalisation prenant en charge la rotation.

Tenez compte de la confidentialité et de la sécurité des informations enregistrées

La sécurité et la confidentialité sont très importantes dans la journalisation :

  • N'enregistrez pas de données sensibles telles que des mots de passe ou des informations de carte de crédit.

  • Masquer ou chiffrer les données personnelles si nécessaire.

  • Assurez-vous que l'accès aux fichiers journaux est limité au personnel autorisé uniquement.

  • Mettre en œuvre une politique de conservation pour supprimer les anciens journaux conformément aux politiques et réglementations de l'entreprise.

Outils de surveillance et d'analyse des journaux

À mesure que la complexité du système augmente, le besoin d'outils sophistiqués pour surveiller et analyser les journaux devient également de plus en plus important. Voici quelques outils populaires qui peuvent faciliter l'observabilité et l'analyse des journaux :

  1. Grafana
    Grafana est une plateforme open source pour visualiser nos données de journaux. Ces outils peuvent être intégrés à diverses sources de données, notamment les journaux. Permet la création de tableaux de bord personnalisés et interactifs. Convient pour la visualisation en temps réel des métriques et des journaux.

  2. Nouvelle relique
    New Relic est une plateforme d'observabilité tout-en-un
    Fournit une analyse des journaux, un traçage et des métriques en un seul endroit. Il existe également des fonctionnalités d'IA pour détecter les anomalies et corréler les problèmes.
    Convient à la surveillance d'applications et d'infrastructures à grande échelle.

  3. Loki
    Loki est un système d'agrégation de journaux léger et rentable. Loki est conçu pour bien fonctionner avec Grafana
    Utilise des index basés sur des étiquettes, similaires à Prometheus
    Idéal pour les organisations utilisant déjà Prometheus et Grafana.

  4. AWS CloudWatch Logs Insights
    Ce service d'analyse de journaux intégré d'AWS permet d'interroger et d'analyser les journaux de divers services AWS.
    Fonctionnalité pour détecter les requêtes lentes dans RDS et autres services de base de données
    Intégration facile avec d'autres services AWS.

Conclusion

La journalisation n'est pas seulement une fonctionnalité supplémentaire, mais un élément essentiel dans la construction d'un système fiable. Avec une mise en œuvre appropriée, la journalisation peut devenir votre supercapteur : elle offre une visibilité complète sur les opérations du système, aide à prévenir les problèmes avant qu'ils ne surviennent et accélère leur résolution lorsque des problèmes surviennent.

Alors, commencez dès aujourd’hui à investir dans de bonnes pratiques d’exploitation forestière. N'oubliez pas que dans un monde technologique complexe, de bonnes bûches peuvent être un guide au milieu d'une tempête !

Si vous avez des informations supplémentaires, veuillez les saisir dans la colonne commentaires ci-dessous.

Lecture des références

  • Référentiel Github

  • Journalisation des applications et son importance

  • Pourquoi la gestion des journaux est-elle importante ?

  • 10 outils d'observabilité en 2024 : fonctionnalités, part de marché et choisissez celui qui vous convient

  • Top 20 des meilleurs outils d'analyse de journaux et analyseur de journaux (avantages et inconvénients)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn