Logboekregistratie met Elastic Stack
Tip
Deze inhoud is een fragment uit het eBook, Cloud Native .NET Applications for Azure ontwerpen, beschikbaar op .NET Docs of als een gratis downloadbare PDF die offline kan worden gelezen.
Er zijn veel goede gecentraliseerde hulpprogramma's voor logboekregistratie en ze variëren van gratis, opensource-hulpprogramma's tot duurdere opties. In veel gevallen zijn de gratis tools net zo goed als of beter dan de betaalde aanbiedingen. Een dergelijk hulpprogramma is een combinatie van drie opensource-onderdelen: Elasticsearch, Logstash en Kibana.
Gezamenlijk worden deze hulpprogramma's de Elastic Stack of ELK-stack genoemd.
Elastische stack
Elastic Stack is een krachtige optie voor het verzamelen van informatie uit een Kubernetes-cluster. Kubernetes biedt ondersteuning voor het verzenden van logboeken naar een Elasticsearch-eindpunt. U hoeft alleen maar aan de slag te gaan met het instellen van de omgevingsvariabelen, zoals wordt weergegeven in afbeelding 7-5:
KUBE_LOGGING_DESTINATION=elasticsearch
KUBE_ENABLE_NODE_LOGGING=true
Afbeelding 7-5. Configuratievariabelen voor Kubernetes
Met deze stap wordt Elasticsearch op het cluster geïnstalleerd en worden alle clusterlogboeken naar het cluster verzonden.
Afbeelding 7-6. Een voorbeeld van een Kibana-dashboard met de resultaten van een query op logboeken die zijn opgenomen uit Kubernetes
Wat zijn de voordelen van Elastic Stack?
Elastic Stack biedt gecentraliseerde logboekregistratie op een voordelige, schaalbare, cloudvriendelijke manier. De gebruikersinterface stroomlijnt gegevensanalyse, zodat u uw tijd kunt besteden aan het verzamelen van inzichten uit uw gegevens in plaats van te vechten met een onhandige interface. Het biedt ondersteuning voor een groot aantal invoergegevens, zodat uw gedistribueerde toepassing meer en verschillende soorten services omvat. U kunt verwachten dat u logboek- en metrische gegevens in het systeem kunt blijven invoeren. De Elastic Stack biedt ook ondersteuning voor snelle zoekopdrachten, zelfs in grote gegevenssets, waardoor zelfs grote toepassingen gedetailleerde gegevens kunnen vastleggen en er nog steeds op een performante manier inzicht in hebben.
Logstash
Het eerste onderdeel is Logstash. Dit hulpprogramma wordt gebruikt voor het verzamelen van logboekgegevens uit een groot aantal verschillende bronnen. Logstash kan bijvoorbeeld logboeken van schijf lezen en ook berichten ontvangen van logboekregistratiebibliotheken zoals Serilog. Logstash kan enkele eenvoudige filters en uitbreidingen uitvoeren op de logboeken wanneer ze binnenkomen. Als uw logboeken bijvoorbeeld IP-adressen bevatten, kan Logstash worden geconfigureerd om een geografische zoekopdracht uit te voeren en een land/regio of zelfs plaats van herkomst voor dat bericht te verkrijgen.
Serilog is een logboekbibliotheek voor .NET-talen, waarmee geparameteriseerde logboekregistratie mogelijk is. In plaats van een tekstueel logboekbericht te genereren waarin velden worden ingesloten, worden parameters gescheiden gehouden. Met deze bibliotheek kunt u intelligenter filteren en zoeken. Een voorbeeldconfiguratie van Serilog voor het schrijven naar Logstash wordt weergegeven in afbeelding 7-7.
var log = new LoggerConfiguration()
.WriteTo.Http("http://localhost:8080")
.CreateLogger();
Afbeelding 7-7. Serilog-configuratie voor het rechtstreeks schrijven van logboekgegevens naar logstash via HTTP
Logstash gebruikt een configuratie zoals in afbeelding 7-8.
input {
http {
#default host 0.0.0.0:8080
codec => json
}
}
output {
elasticsearch {
hosts => "elasticsearch:9200"
index=>"sales-%{+xxxx.ww}"
}
}
Afbeelding 7-8. Een Logstash-configuratie voor het verbruik van logboeken uit Serilog
Voor scenario's waarbij uitgebreide logboekbewerking niet nodig is, is er een alternatief voor Logstash, bekend als Beats. Beats is een reeks hulpprogramma's die een groot aantal gegevens kunnen verzamelen van logboeken naar netwerkgegevens en uptime-informatie. Veel toepassingen gebruiken zowel Logstash als Beats.
Zodra de logboeken zijn verzameld door Logstash, moet deze ergens worden geplaatst. Hoewel Logstash veel verschillende uitvoer ondersteunt, is elasticsearch een van de meest interessante uitvoer.
Elasticsearch
Elasticsearch is een krachtige zoekmachine die logboeken kan indexeren zodra ze binnenkomen. Hiermee kunt u snel query's uitvoeren op de logboeken. Elasticsearch kan grote hoeveelheden logboeken verwerken en in extreme gevallen worden uitgeschaald op veel knooppunten.
Logboekberichten die zijn gemaakt om parameters te bevatten of die parameters hebben gesplitst via Logstash-verwerking, kunnen rechtstreeks worden opgevraagd omdat Elasticsearch deze informatie behoudt.
In afbeelding 7-9 wordt een query weergegeven waarin wordt gezocht naar de 10 pagina's die door de top 10 worden bezocht jill@example.com
.
"query": {
"match": {
"user": "jill@example.com"
}
},
"aggregations": {
"top_10_pages": {
"terms": {
"field": "page",
"size": 10
}
}
}
Afbeelding 7-9. Een Elasticsearch-query voor het vinden van de top 10 pagina's die door een gebruiker worden bezocht
Informatie visualiseren met Kibana-webdashboards
Het laatste onderdeel van de stapel is Kibana. Dit hulpprogramma wordt gebruikt voor interactieve visualisaties in een webdashboard. Dashboards kunnen zelfs worden gemaakt door gebruikers die niet technisch zijn. De meeste gegevens die zich in de Elasticsearch-index bevindt, kunnen worden opgenomen in de Kibana-dashboards. Individuele gebruikers hebben mogelijk andere dashboardwensen en Kibana maakt deze aanpassing mogelijk door gebruikersspecifieke dashboards toe te staan.
Elastic Stack installeren in Azure
De Elastische stack kan op veel manieren worden geïnstalleerd in Azure. Zoals altijd is het mogelijk om virtuele machines in te richten en Elastic Stack rechtstreeks erop te installeren. Deze optie heeft de voorkeur voor sommige ervaren gebruikers, omdat deze de hoogste mate van aanpassing biedt. Implementatie op infrastructuur als een service introduceert aanzienlijke beheeroverhead, waardoor degenen die dat pad nemen, eigenaar worden van alle taken die zijn gekoppeld aan infrastructuur als een service, zoals het beveiligen van de machines en het up-to-date houden van patches.
Een optie met minder overhead is om gebruik te maken van een van de vele Docker-containers waarop de Elastic Stack al is geconfigureerd. Deze containers kunnen worden neergezet in een bestaand Kubernetes-cluster en naast toepassingscode worden uitgevoerd. De sebp/elk-container is een goed gedocumenteerde en geteste Elastic Stack-container.
Een andere optie is een onlangs aangekondigd ELK-as-a-service-aanbieding.