Σύνδεση στο Amazon Cloudwatch με Serilog στο .NET

5
Σύνδεση στο Amazon Cloudwatch με Serilog στο .NET

Σε αυτό το άρθρο, θα μάθουμε για μια άλλη υπηρεσία AWS, το Amazon Cloudwatch. Θα μάθουμε σχετικά με τη σύνδεση στο Amazon Cloudwatch με Serilog στην εφαρμογή .NET εύκολα. Το Serilog είναι ένα φοβερό πλαίσιο καταγραφής για σύγχρονες εφαρμογές .NET, για το οποίο έχω ήδη γράψει ένα άρθρο για τους προγραμματιστές .NET. Εδώ, θα συζητήσουμε περισσότερα για την υπηρεσία Amazon Cloudwatch και πώς μπορούν να χρησιμοποιηθούν τα Serilog Sinks για απρόσκοπτη σύνδεση στο Cloudwatch από μια εφαρμογή .NET. Είναι μια αρκετά εύκολη και διαισθητική διαδικασία συνολικά!

Το AWS χορηγεί αυτό το άρθρο.

Προαπαιτούμενα

Όπως πάντα, εδώ είναι το σύνολο των προϋποθέσεων που απαιτούνται για αυτό το σεμινάριο.

  • Η βασική ιδέα για το πώς θα λειτουργούσε η καταγραφή σε εφαρμογές .NET.
  • Εγκατεστημένο .NET 6 SDK
  • Λογαριασμός AWS. Το Free Tier είναι αρκετό.
  • Το AWS CLI εγκαταστάθηκε και διαμορφώθηκε. Να πώς.
  • Εγκαταστάθηκε το Visual Studio 2022.

Τι είναι το Amazon Cloudwatch;

Amazon Cloudwatch είναι μια υπηρεσία που παρέχεται από την Amazon για την παρακολούθηση των Εφαρμογών μας. Αυτή είναι μια πολύ αναγκαία υπηρεσία για παρακολούθηση και παρατηρησιμότητα και έχει μεγάλη σημασία για τους συντηρητές εφαρμογών, ειδικά τους μηχανικούς DevOps. Ουσιαστικά συλλέγει όλα τα αρχεία καταγραφής και τις μετρήσεις που εκπέμπονται από την εφαρμογή σας για να βοηθήσει στον εντοπισμό τυχόν ανωμαλιών, στην οπτικοποίηση των αρχείων καταγραφής, στη βελτίωση της απόδοσης, στην αντιμετώπιση προβλημάτων κ.λπ. Εκτός από μια κεντρική υπηρεσία για την αποθήκευση αρχείων καταγραφής, το Cloudwatch διαθέτει επίσης μια αρκετά ευχάριστη διεπαφή χρήστη που κάνει το φιλτράρισμα και την αναζήτηση αρχείων καταγραφής εξαιρετικά εύκολη. Θα το δούμε περαιτέρω στο άρθρο.

Το Cloudwatch μπορεί επίσης να αντιδρά σε γεγονότα. Για παράδειγμα, όταν συμβαίνει ένα συγκεκριμένο συμβάν, μπορεί να διαμορφωθεί έτσι ώστε να προκαλεί συναγερμό που ειδοποιεί την ομάδα DevOps! Αυτό βελτιώνει την ορατότητα όλων των σχετικών υπηρεσιών AWS. Θα έχουμε ξεχωριστό άρθρο για αυτό ειδικά!

Γνωρίζουμε ότι οποιαδήποτε εφαρμογή μπορεί να ενσωματωθεί για να χρησιμοποιήσει το Cloudwatch για την απόρριψη αρχείων καταγραφής με μια-δυο χρήση API/Βιβλιοθήκης. Εκτός από αυτό, ακόμη και άλλοι πόροι AWS μπορούν να ρυθμιστούν ώστε να χρησιμοποιούν το Cloudwatch για σκοπούς καταγραφής, συμπεριλαμβανομένων των Load Balancer, EC2, Βάσεων Δεδομένων, S3 και ούτω καθεξής.

Σύνδεση στο Amazon Cloudwatch με Serilog στο .NET

Ακολουθούν μερικές βασικές έννοιες που σχετίζονται με το Amazon Cloudwatch που θα πρέπει να γνωρίζετε για να κατανοήσετε την υπηρεσία.

  • Μετρήσεις – Πιθανότατα θα το είχατε δει αυτό στα έργα με τα οποία ήδη συνεργάζεστε. Αυτό είναι ένα χρονικά ταξινομημένο σύνολο σημείων δεδομένων που μπορούν να δημοσιευτούν στο Cloudwatch (σε αυτό το πλαίσιο). Είναι λίγο πολύ σαν μια μεταβλητή που παρακολουθείται με την πάροδο του χρόνου. Για παράδειγμα, μπορείτε να έχετε μια μέτρηση (μεταβλητή) που καταγράφει τον αριθμό των φορών που συνέβη ένα συμβάν στην εφαρμογή σας. Ας υποθέσουμε ότι, στην εφαρμογή σας, έχετε κάποιο είδος μηχανισμού επανάληψης δοκιμής, ο οποίος είναι συνδεδεμένος με μια μέτρηση. Για κάθε επανάληψη, η τιμή μέτρησης αυξάνεται. Όταν φτάσει σε ένα προκαθορισμένο όριο, το Cloudwatch μπορεί να σας ειδοποιήσει με τη βοήθεια συναγερμών. Αυτό είναι ένα αρκετά ενδιαφέρον και κρίσιμο στοιχείο όταν πρόκειται για τη συντήρηση και την παρακολούθηση εφαρμογών που αντιμετωπίζουν πελάτες.
  • Καταγραφή συμβάντος – Αυτό είναι ένα αρχείο δραστηριότητας που αποστέλλεται από τον υπό παρακολούθηση πόρο.
  • Ροή καταγραφής – Μια συλλογή γεγονότων καταγραφής που μοιράζονται την ίδια πηγή/πλαίσιο με χρονική σειρά.
  • Ομάδα καταγραφής – Ομάδα ροών καταγραφής που μοιράζονται τον ίδιο έλεγχο παρακολούθησης.

Όλα αυτά θα τα δείτε στη συνέχεια σε αυτό το άρθρο. Εν τω μεταξύ, εδώ είναι μερικά χαρακτηριστικά αυτής της εκπληκτικής υπηρεσίας AWS.

Χαρακτηριστικά του Cloudwatch

  • Διατήρηση ημερολογίου – Από προεπιλογή, τα αρχεία καταγραφής διατηρούνται επ‘ αόριστον στο Cloudwatch. Μπορείτε να το προσαρμόσετε περαιτέρω στις ανάγκες σας, δηλαδή να αλλάξετε την περίοδο διατήρησης σε οπουδήποτε από 1 ημέρα έως έως και 10 χρόνια. Η σωστή διαμόρφωση της περιόδου διατήρησης συμβάλλει επίσης στην εξοικονόμηση μερικών δολαρίων στον μηνιαίο λογαριασμό AWS, ειδικά για εφαρμογές Παραγωγής.
  • Ερώτηση – Σύνθετες ερωτήσεις για το Analytics και άλλες ανάγκες αναφοράς.
  • Αποθήκευση – Τα αρχεία καταγραφής αποθηκεύονται σε εξαιρετικά αξιόπιστο χώρο αποθήκευσης που διαχειρίζεται η AWS.
  • Πλούσια ενσωμάτωση – Αυτή η υπηρεσία μπορεί εύκολα να ενσωματωθεί στα έργα σας ανεξάρτητα από τη στοίβα που χρησιμοποιείτε.

Με αυτό το ξεκάθαρο, ας ξεκινήσουμε την κωδικοποίηση.

Τώρα, υπάρχουν μερικοί τρόποι για να ξεκινήσετε με τη σύνδεση στο Amazon Cloudwatch στην εφαρμογή .NET. Ο πιο βασικός τρόπος είναι να χρησιμοποιήσετε τη Βιβλιοθήκη SDK που παρέχεται από την ίδια την Amazon. Θα ήταν κάτι σαν να δημιουργήσουμε τα δικά μας περιτυλίγματα καταγραφής και να καλέσουμε το SDK του Cloudwatch για να ξεκινήσει η καταγραφή. Αν και αυτή είναι μια αρκετά γλυκιά προσέγγιση, μπορεί να γίνει λίγο ταραχώδης κατά τη συντήρηση και να δημιουργήσει ένα είδος σύζευξης του κώδικά σας και να αυξήσει την εξάρτηση. Θα ακολουθήσουμε μια πιο εύκολη διαδρομή ως συνήθως.

Σύνδεση στο Amazon Cloudwatch με Serilog στο .NET

Αυτός είναι ένας πιο προτιμότερος τρόπος, γιατί πρέπει να χρησιμοποιείτε ήδη ένα δημοφιλές πλαίσιο καταγραφής όπως το Serilog ή το NLog στην εφαρμογή σας. Σε τέτοιες περιπτώσεις, όπου το Serilog αποτελεί ήδη μέρος της βάσης κώδικα της εφαρμογής σας, η χρήση της ίδιας βιβλιοθήκης για σύνδεση στο AWS Cloudwatch έχει πιο νόημα. Επίσης, από άποψη σχεδιασμού, είναι μια πολύ καλύτερη προσέγγιση, καθώς η διεπαφή καταγραφής σας δεν θα εξαρτάται από το AWS SDK, αλλά μάλλον από το Serilog, που είναι ένας πολύ πιο ευέλικτος τρόπος για να σχεδιάσετε ένα σύστημα. Αποσυνδεδεμένο σχέδιο, θυμάστε;

Παρακαλώ βρείτε το τον πηγαίο κώδικα αυτής της υλοποίησης εδώ.

Αρχικά, ας δημιουργήσουμε ένα απλό .NET Web API, ένα βασικό. Θα χρησιμοποιήσω το Visual Studio 2022 για αυτήν την επίδειξη. Σημειώστε ότι χρησιμοποιώ .NET 6.

devenv jwjr8I3CNC Σύνδεση στο Amazon Cloudwatch με Serilog στο .NET - Ξεκινώντας με το Cloudwatch

Ας εγκαταστήσουμε τα απαιτούμενα πακέτα για το Serilog και τα Cloudwatch Sinks που παρέχονται από την AWS. Ανοίξτε τον διαχειριστή πακέτων και εκτελέστε τις παρακάτω εντολές

Install-Package AWS.Logger.SeriLog
Install-Package Serilog.AspNetCore
Install-Package Serilog.Settings.Configuration
Install-Package Serilog.Sinks.Console

Μόνο για λόγους επίδειξης, προσθέτουμε το πακέτο νιπτήρα κονσόλας στο έργο μας. Εκτός από αυτό, τα άλλα πακέτα σχετίζονται με το Serilog, τις διαμορφώσεις του και ένα πακέτο από το AWS που προορίζεται να χρησιμοποιηθεί για καταγραφή Serilog. Μόλις εγκατασταθούν τα πακέτα, ας πλοηγηθούμε στο Program.cs και ας προσθέσουμε τον κωδικό εκκίνησης για να επισυνάψουμε το Serilog στην εφαρμογή .NET.

Λίγο μετά τον κώδικα AddSwaggerGen, επικολλήστε το παρακάτω. Ίσως χρειαστεί να επιλύσετε τις απαιτούμενες εξαρτήσεις που σχετίζονται με το Serilog.

builder.Host.UseSerilog((_, loggerConfig) =>
{
    loggerConfig.WriteTo.Console().ReadFrom.Configuration(builder.Configuration);
});

Έτσι, υπάρχουν δύο τρόποι για να διαμορφώσετε το Serilog για οποιαδήποτε εφαρμογή .NET. Το ένα, μέσω του κώδικα εντός της μεθόδου εκκίνησης, όπου πρέπει να αναφέρουμε ρητά τις διαμορφώσεις, όπως το σημείο καταγραφής των δεδομένων και άλλα. Το άλλο είναι μέσω ρυθμίσεων εφαρμογών. Μπορείτε επίσης να χρησιμοποιήσετε έναν συνδυασμό και των δύο αυτών επιλογών σύμφωνα με τις απαιτήσεις σας. Θα χρησιμοποιήσουμε τον πιο βολικό τρόπο ρυθμίσεων εφαρμογών για να κάνουμε πράγματα. Είναι απλό να διαμορφώσετε τα καταγραφικά σας με αυτόν τον τρόπο! Αλλά πρώτα, ας καταλάβουμε τι σημαίνει ο κωδικός εκκίνησης.

Γραμμή #1, συνδέουμε το Serilog Middleware στο ApplicationBuilder. Αυτό θα ορίσει το Serilog ως τον πάροχο καταγραφής για την εφαρμογή.

Στη γραμμή #3, δίνουμε οδηγίες στο Serilog Middleware να γράψει αρχεία καταγραφής στην κονσόλα από προεπιλογή, καθώς και να διαβάσει τις διαμορφώσεις από τις ρυθμίσεις εφαρμογών. Αυτός είναι ο πιο συνηθισμένος τρόπος να κάνεις πράγματα.

Ας προσθέσουμε στη συνέχεια τις ενότητες ρυθμίσεων εφαρμογών. Ανοίξτε το appsettings.json και προσθέστε την ακόλουθη ενότητα με το όνομα Serilog.

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning",
      "Microsoft": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Serilog": {
    "LogGroup": "/log/demo",
    "Region": "ap-south-1",
    "MinimumLevel": {
      "Default": "Debug",
      "Override": {
        "Microsoft": "Error",
        "System": "Error",
        "Microsoft.Hosting.Lifetime": "Information"
      }
    },
    "WriteTo": [
      {
        "Name": "AWSSeriLog",
        "Args": {
          "textFormatter": "Serilog.Formatting.Json.JsonFormatter, Serilog"
        }
      }
    ]
  }
}

Η ομάδα καταγραφής είναι κάτι που συζητήσαμε νωρίτερα. Είναι ένα είδος διαχωρισμού σε επίπεδο AWS Cloudwatch, έτσι ώστε να διαχωριστούν τα αρχεία καταγραφής. Στην ιδανική περίπτωση, θα θέλατε μια ξεχωριστή ομάδα αρχείων καταγραφής για κάθε εφαρμογή ή περίπτωση χρήσης ανάλογα με τη σχεδίαση του συστήματός σας. Σε αυτήν την περίπτωση, έχουμε παράσχει μια εικονική συμβολοσειρά. Εκτός από αυτό, έχουμε τις τυπικές επιλογές Serilog όπως το Minimum Level, τις οποίες έχουμε παρακάμψει για συγκεκριμένους σκοπούς.

Μια άλλη ειδική παράμετρος για το AWS είναι η Περιοχή, η οποία είναι στην πραγματικότητα προαιρετική εδώ, καθώς η εφαρμογή θα την ανακτούσε ούτως ή άλλως από το διαμορφωμένο προφίλ AWS.

Για να διορθώσετε τα αρχεία καταγραφής, έχω προσθέσει και τον μορφοποιητή κειμένου που θα έβγαζε ένα πολύ καθαρό μήνυμα JSON ως το αρχείο καταγραφής σας με πρόσθετες πληροφορίες. Αυτό είναι πολύ ωραίο αν ψάχνετε για δομημένη καταγραφή.

Εκτός από αυτό, έχουμε την ενότητα WriteTo, η οποία ορίζει σε ποιο Sink θα έγραφε το καταγραφικό. Αυτή η ιδιοκτησία δέχεται μια λίστα με νεροχύτες. Στην περίπτωσή μας, μόλις ανέφερα το AWSSerilog Sink που θα έγραφε στα αρχεία καταγραφής του Cloudwatch!

Αυτό είναι στην πραγματικότητα! Κάνετε τόσο πολύ και η εφαρμογή σας είναι υπερφορτωμένη για να γράφει αρχεία καταγραφής στο Amazon Cloudwatch απρόσκοπτα. Στη συνέχεια, ας προσθέσουμε έναν εικονικό ελεγκτή για να δοκιμάσουμε ολόκληρη τη ρύθμιση.

Κάτω από το φάκελο Controllers, προσθέστε ένα νέο API Controller με το όνομα HelloController.

using Microsoft.AspNetCore.Mvc;
namespace AWSCloudwatch.Serilog.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class HelloController : ControllerBase
    {
        private readonly ILogger<HelloController> _logger;
        public HelloController(ILogger<HelloController> logger)
        {
            _logger = logger;
        }
        [HttpGet("{id:int}")]
        public IActionResult GetAsync(int id)
        {
            _logger.LogDebug("Received Request with id as {id}", id);
            _logger.LogInformation("Processing your request");
            _logger.LogError("Some Errors occcured.");
            return Ok("Logged");
        }
    }
}

Έτσι, το πρώτο πράγμα είναι η κατασκευή Injection του Controller. Εδώ απλώς αφαιρούμε το στιγμιότυπο Logger από το DI Container και το εισάγουμε στον ελεγκτή. Στη συνέχεια, προσθέσαμε ένα απλό τελικό σημείο GET που δέχεται ένα αναγνωριστικό ακέραιου τύπου. Αυτός ο ελεγκτής θα καταγράφει απλώς ορισμένα εικονικά μηνύματα για σκοπούς επίδειξης. Έχουμε προσθέσει τα επίπεδα εντοπισμού σφαλμάτων, πληροφοριών και καταγραφής σφαλμάτων εδώ. Ας εκτελέσουμε την εφαρμογή και ας καλέσουμε το τελικό σημείο /hello/1 για να δοκιμάσουμε την υλοποίησή μας.

Το έχω δοκιμάσει μέσω του Postman όπως μπορείτε να δείτε παρακάτω.

Ταχυδρόμος cy6sP5R4HP Σύνδεση στο Amazon Cloudwatch με Serilog στο .NET - Ξεκινώντας με το Cloudwatch

Τώρα που έχουμε έναν κωδικό κατάστασης 200 Success από το τελικό σημείο API, ποια είναι η αναμενόμενη συμπεριφορά της εφαρμογής;

  • Μια ομάδα καταγραφής με το όνομα /log/demo θα δημιουργηθεί στο AWS Cloudwatch.
  • Όλα τα αρχεία καταγραφής θα συνδεθούν σε αυτήν την ομάδα καταγραφής που δημιουργήθηκε πρόσφατα.

Ας ανοίξουμε την Κονσόλα διαχείρισης AWS και ας πλοηγηθούμε στο Cloudwatch.

chrome Bza7R30ewt Σύνδεση στο Amazon Cloudwatch με Serilog στο .NET - Ξεκινώντας με το Cloudwatch

Μπορείτε να δείτε ότι η νέα ομάδα δημιουργείται όπως αναμένεται. Κάντε κλικ στο όνομα της ομάδας καταγραφής για να δείτε τι αρχεία καταγραφής περιέχει. Αυτό θα περιέχει μια λίστα με ροές καταγραφής που διαχωρίζονται με χρονικές σημάνσεις. είναι περισσότερο σαν μια συλλογή από κούτσουρα.

chrome Eov9AH58bY Σύνδεση στο Amazon Cloudwatch με Serilog στο .NET - Ξεκινώντας με το Cloudwatch

Μπορούμε να δούμε ότι έχει δημιουργηθεί 1 ροή καταγραφής τώρα. Ανοίξτε το για να δείτε τα αρχεία καταγραφής της εφαρμογής. Εδώ μπορείτε να δείτε μερικά όμορφα διαμορφωμένα μηνύματα καταγραφής.

chrome CLSj6Bf8Jt Σύνδεση στο Amazon Cloudwatch με Serilog στο .NET - Ξεκινώντας με το Cloudwatch

Δομημένη καταγραφή από προεπιλογή! Όπως αναφέρθηκε προηγουμένως, αυτό συνοδεύεται από δομημένη καταγραφή, όπου μπορείτε να δείτε τις καταγεγραμμένες ιδιότητες ξεχωριστά. Στην περίπτωσή μας, είναι η ιδιότητα ID.

chrome 2Yvfgsq4FS Σύνδεση στο Amazon Cloudwatch με Serilog στο .NET - Ξεκινώντας με το Cloudwatch

Αυτός είναι ένας πολύ ισχυρός μηχανισμός για να έχετε το αρχείο καταγραφής της εφαρμογής .NET στο Amazon Cloudwatch.

Τι γίνεται αν θέλετε να καταγράψετε μόνο το μήνυμα με Επίπεδο σφάλματος στο Cloudwatch ενώ καταγράφετε τα πάντα στην Κονσόλα ως έχουν; Αυτό μπορεί να είναι χρήσιμο για εξοικονόμηση κόστους καθώς και για τους μηνιαίους λογαριασμούς AWS. Ανοίξτε το appsettings.json και κάντε αυτήν τη μικροσκοπική τροποποίηση.

"Name": "AWSSeriLog",
"Args": {
  "textFormatter": "Serilog.Formatting.Json.JsonFormatter, Serilog",
  "restrictedToMinimumLevel": "Error"
}

Η 4η γραμμή του παραπάνω αποσπάσματος λέει στον καταγραφέα της εφαρμογής να σπρώξει μόνο τα μηνύματα με το ελάχιστο επίπεδο Σφάλματος για να ωθηθούν στον αντίστοιχο νεροχύτη, που εδώ είναι το Amazon Cloudwatch! Με αυτόν τον τρόπο, μπορείτε να περιορίσετε τα αρχεία καταγραφής στη ροή καταγραφής του cloudwatch πολύ εύκολα.

Αυτό είναι για αυτό το σεμινάριο.

υποστήριξέ με

Ευχαριστούμε για την επίσκεψη. Αν σας αρέσει το περιεχόμενο και ο κώδικάς μου, υποστηρίξτε με αγοράζοντας μερικούς καφέδες, ώστε να βρω αρκετό χρόνο για να ερευνήσω και να γράψω νέα άρθρα. Στην υγειά σας!

Περίληψη

Σε αυτό το άρθρο, γνωρίσαμε το Amazon Cloudwatch και τα βασικά του. Εκτός από αυτό, μάθαμε για τη σύνδεση στο Amazon Cloudwatch με το Serilog στο .NET! Μπορείτε να βρείτε την πηγή κώδικα αυτής της υλοποίησης εδώ. Φροντίστε να μοιραστείτε αυτό το άρθρο με τους συναδέλφους σας εάν σας βοήθησε! Με βοηθάει να προσελκύσω περισσότερο το ιστολόγιό μου. Ευχαριστώ!

Μείνετε συντονισμένοι. Μπορείτε να ακολουθήσετε αυτό το ενημερωτικό δελτίο για να λαμβάνετε ειδοποιήσεις όταν δημοσιεύω νέα άρθρα – https://www.getrevue.co/profile/iammukeshm. Μοιραστείτε αυτό το άρθρο με τους συναδέλφους σας και τους κύκλους προγραμματιστών, εάν το βρήκατε ενδιαφέρον. Ευχαριστώ!


Schreibe einen Kommentar