
O le logging o se meafaigaluega taua tele mo le atinaʻeina, ae pe a fatuina ni faʻasalalauga tufatufaina, e avea ma maʻa e manaʻomia ona tuʻu saʻo i le faavae o lau talosaga, a leai o le lavelave o le atinaʻeina o microservices o le a vave ona afaina.
.Net Core 3 ua faʻaopoopoina se mea sili , o lea afai o au talosaga e faʻaoga saʻo HTTP valaau mo fesoʻotaʻiga vaʻavaʻai, ona mafai lea ona e faʻaogaina lenei gaioiga i fafo atu o le pusa. Ae peitaʻi, afai o lau faʻataʻitaʻiga pito i tua e aofia ai fegalegaleaiga e ala i se fefaʻatauaʻiga feʻau (RabbitMQ, Kafka, ma isi), ona e manaʻomia pea ona e popole e uiga i le pasiina o le fesoʻotaʻiga e ala i nei feʻau oe lava ia.
I totonu o lenei tusiga o le a matou faia se talosaga web-api faigofie ma faʻapipiʻi faʻamaumauga, lea o le a
fa'atumauina le feso'ota'iga pito i tua i le va o ogalaau o auaunaga tuto'atasi ina ia faigofie ona e va'ai i gaioiga uma na mafua mai i se talosaga patino mai le kalani.
ia i ai se nofoaga e tasi e ulufale ai ma auʻiliʻiliga talafeagai, ina ia mafai e le Lagolago ona faʻaogaina le meafaigaluega faʻapipiʻi, lea e mafai ona faʻaaogaina ai fesili e pei o le "Na ou maua se mea sese i le talosaga ma se ID talosaga ma faapena"
Muamua, e manaʻomia ona tatou filifili i se tagata e tuʻuina atu laʻau mo la tatou talosaga. O le manaʻoga autu mo le faʻapipiʻiina o faʻaonaponei o le fausaga, i.e. e le tatau ona tatou galulue i feau tusitusia mafolafola, ae o mea faitino. Faʻafetai i ia ogalaau, e faigofie ona tatou fausia ni manatu oa tatou feʻau mai vaaiga eseese ma faʻatautaia auʻiliʻiliga.
Mo la matou talosaga o le a matou faʻaogaina le Serilog package, lea e sili ona lelei le lagolago mo le faʻatulagaina o faʻamaumauga ma se faiga faʻaopoopo faʻaopoopo. O le a ou misia laasaga autu o le setiina (e mafai ona e mauaina se numera tele o tala i luga o lenei autu) ma faia le manatu e faapea.
Serilog ua uma ona fa'apipi'i ma o le fa'amaufa'ailoga e le mafai ona tu'uina atu mo lau tu'uina fa'alagolago
o lona fa'atulagaina e aofia ai le fa'atamaoaigaina o fe'au fa'atasi ai ma uiga fa'asinomaga (Enrich.FromLogContext)
O le isi la'asaga o le filifili lea po'o fea le fa'aputuga o le fa'aputuina o ogalaau e lafo ai fe'au mai Serilog i. Masalo o le avanoa sili ona taatele avanoa avanoa i aso nei o le ELK stack (Elasticsearch, Logstash ma Kibana), o lea seʻi o tatou ave. Ina ia faia lenei mea, o le a matou faʻaaogaina le ofo mai - pe a uma ona lesitala mo se fuafuaga e leai se totogi, o loʻo ia i matou le malosi uma o le Lucene search engine i o matou lima.
Pau lava le mea e tatau ona matou faia o le faʻaopoopoina o le afifi i la matou poloketi
Install-Package Serilog.Sinks.Logzio
Ma fa'aopoopo le fa'atamaoaiga talafeagai i le fa'atulagaina o la tatou logger, fafaga i se fa'ailoga avanoa
LoggerConfiguration loggerConfig = new LoggerConfiguration();
loggerConfig.WriteTo.Logzio(secrets.LogzioToken, 10, TimeSpan.FromSeconds(10), null, LogEventLevel.Debug);
E ala i le faʻalauiloaina o le talosaga, o le a mafai ona matou matauina a matou feʻau e le gata i le faʻamafanafanaga, ae faʻapea foi i Kibana.

Faʻaaliga

I totonu o se auaunaga-ituaiga talosaga, e mafai ona tatou vaʻaia ni fesoʻotaʻiga autu se lua mo ana fegalegaleaiga ma le lalolagi i fafo, seʻi o tatou faʻailogaina i latou e tuʻu saʻo ma faʻalava. Ole feso'ota'iga tu'usa'o ole API i luga ole laiga lea e o'o mai ai vala'au mai le talosaga a le kalani. Fa'asaga i luga ole fe'au fefa'ataua'iga e fa'aoga e fa'afesuia'i fa'amatalaga ma isi au'aunaga i totonu.
Se'i o tatou iloiloina la'asaga o le fa'aofiina o feso'ota'iga i luga o feso'ota'iga ta'itasi.
Fa'atasi i talosaga HTTP
Ina ia maua le tele o faʻamatalaga e mafai, matou te manaʻomia le faʻatupuina o se faʻamatalaga faʻamaonia e latalata i le amataga o le gaioiga, i.e. i luga o le faitotoa po'o sa'o i luga ole kalani (telefoni po'o le upega tafailagi). Talu ai o aso nei o loʻo matou feagai ma se talosaga pito i tua, o le a matou faʻaalia i luga o le manaʻoga mo le faʻauluuluga "X-Correlation-ID" i talosaga uma ile API web.
Fa'aopoopoina o se afifi , o lana galuega o le ave lea o le tau mai le ulutala tatou te manaʻomia
Install-Package CorrelationID
Se'i o tatou fa'aopoopoina ile laina ole faiga ole talosaga
public class Startup
{
public void Configure(IApplicationBuilder application)
{
application
.UseCorrelationId(new CorrelationIdOptions
{
Header = "X-Correlation-ID",
IncludeInResponse = false,
UpdateTraceIdentifier = false,
UseGuidForCorrelationId = false
});
}
}
O lenei o le a matou faʻaaogaina e fai ai se faʻamamaga faigofie:
public sealed class ApiRequestFilter : ActionFilterAttribute
{
public ApiRequestFilter(IApiRequestTracker apiRequestTracker, ICorrelationContextAccessor correlationContextAccessor)
{
_correlationContextAccessor = correlationContextAccessor ?? throw new ArgumentNullException(nameof(correlationContextAccessor));
}
private readonly ICorrelationContextAccessor _correlationContextAccessor;
public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
if (!Guid.TryParse(_correlationContextAccessor.CorrelationContext.CorrelationId, out Guid correlationId))
{
context.Result = new BadRequestResult();
return;
}
await next.Invoke();
}
public override async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
{
await next.Invoke();
}
}
Ma faʻaopoopo i le pule
[Route("[controller]")]
[ApiController]
[ServiceFilter(typeof(ApiRequestFilter))]
public class CarsController : ControllerBase
{
}
O se taunuuga, o le a faʻaalia e le pule le 400 Lega le talosaga mo talosaga uma e aunoa ma se ulutala ma le faʻamatalaga talafeagai.
A maeʻa ona matou mauaina se faʻamatalaga mai le kalani, e tatau ona matou faʻaopoopoina i le faʻasologa o tala, o le a matou faia se faʻailoga faʻapipiʻi mo lenei:
public class CorrelationIdContextLogger
{
public CorrelationIdContextLogger(RequestDelegate next)
{
_next = next ?? throw new ArgumentNullException(nameof(next));
}
readonly RequestDelegate _next;
public async Task InvokeAsync(HttpContext httpContext, ILogger<CorrelationIdContextLogger> logger, ICorrelationContextAccessor correlationContextAccessor)
{
if (Guid.TryParse(correlationContextAccessor.CorrelationContext.CorrelationId, out Guid correlationId))
{
using (logger.BeginScopeWith(("CorrelationId", correlationId)))
{
await _next(context);
}
}
else
{
await _next(context);
}
}
}
I la matou talosaga, matou te faʻaogaina le ILogger masani mai le Microsoft.Extensions.Logging.Abstractions package, o lea o le a matou faʻaopoopoina le tau e faʻaaoga ai se faʻaopoopoga faigofie i ai.
public static IDisposable BeginScopeWith(this ILogger logger, params (string key, object value)[] keys)
{
return logger.BeginScope(keys.ToDictionary(x => x.key, x => x.value));
}
Matou te faʻaopoopoina se faʻapipiʻi i le pipeline o le talosaga ma maua le taunuuga manaʻomia.
public class Startup
{
public void Configure(IApplicationBuilder application)
{
application.UseMiddleware<CorrelationIdContextLogger>();
}
}
Ole taimi nei o gaioiga uma e fa'atupuina ile talosaga ile matou API web o lo'o iai se fa'asinomaga fa'amaopoopo lea e faigofie ona feso'ota'i.

Fa'atasi i fe'au fai fefa'ataua'iga
O le isi laasaga o le faʻatulagaina o le faʻasalalau ma le mauaina o le faʻamaonia o fesoʻotaʻiga e ala i le fefaʻatauaʻiga feʻau. I la matou faʻataʻitaʻiga, matou te faʻaogaina RabbitMQ, ma ave le MassTransit faʻavae e fai ma tagata o tausia. Toe fo'i, se'i o tatou fa'ase'e le seti muamua o le galulue ma MassTransit ma alu sa'o i le fa'atulagaina o la'au.
I le amataga, e mafai ona matou aofia ai ogalaau a MassTransit lava ia; mo lenei mea o le a matou faʻaopoopoina se afifi i la matou talosaga
Install-Package MassTransit.SerilogIntegration
I le maeʻa ai o le faʻapipiʻiina o le logger i MassTransit faʻatulagaina, o le a mafai ona matou vaʻai i ogalaau faʻavae.
services
.AddSingleton(provider =>
{
return Bus.Factory.CreateUsingRabbitMq(cfg =>
{
cfg.UseSerilog();
});
});
Tuu le matou talosaga e tali atu i se talosaga POST e ala i le auina atu o se mea na tupu i SomethingDoneMessage ma le tau "faia". O le konekarate mo sea feʻau e mafai ona faʻamatalaina e faapea:
namespace MbMessages
{
public interface ISomethingDoneMessageV1
{
string Value { get; }
}
}
O fe'au a MassTransit ose teutusi o lo'o fa'apipi'i ai fe'au fai pisinisi. E pei o lenei le teutusi:
{
"messageId": "59020000-5dba-0015-10b8-08d77ec28593",
"requestId": "59020000-5dba-0015-5674-08d77ec28592",
"conversationId": "59020000-5dba-0015-bca8-08d77ec28594",
"destinationAddress": "rabbitmq://bear.rmq.cloudamqp.com/aelzlsta/ya.servicetemplate.receiveendpoint",
"headers": {},
"messageType": [
"urn:message:MbMessages:ISomethingDoneMessageV1"
],
"message": {
"value": "done"
}
}
O le feʻau o loʻo faʻaalia ai vaega o auaunaga e manaʻomia mo le faʻaogaina o le faʻavae lava ia, ae o loʻo ia i matou le tomai e faʻaopoopo a matou lava meatotino faʻaopoopo i lenei teutusi. E le gata i lea, o MassTransit o loʻo i ai meafaigaluega faʻapipiʻi mo le galue i nisi o fanua e filifili ai, o le mea e sili ona manaia o le faʻamatalaga faʻamaonia CorrelationId.
Sei o tatou faʻaopoopoina le CorrelatedBy interface i le konekarate feʻau:
namespace MbMessages
{
public interface ISomethingDoneMessageV1 : CorrelatedBy<Guid>
{
string Value { get; }
}
}
Sei o tatou faʻatinoina ma tuʻuina atu se tau i le CorrelationId meatotino pe a fatuina se feʻau:
internal class SomethingDoneMessageV1 : ISomethingDoneMessageV1
{
internal SomethingDoneMessageV1(Guid correlationId, string value)
{
CorrelationId = correlationId;
Value = value;
}
public Guid CorrelationId { get; private set; }
public string Value { get; private set; }
}
Afai tatou te vaʻavaʻai i le feʻau faʻafouina, o le a tatou iloa ai o le faʻamatalaga faʻamaonia ua avea e le gata o se vaega o la tatou feʻau, ae o se vaega foi o le teutusi - o lenei faʻamatalaga o le a faʻaaogaina nei i faʻamaumauga uma a MassTransit, o lona uiga o le a sili atu ona faigofie. mo i matou e feagai ma faʻafitauli i le tulaga o fefaʻatauaʻiga feʻau.
{
"messageId": "59020000-5dba-0015-10b8-08d77ec28593",
"requestId": "59020000-5dba-0015-5674-08d77ec28592",
"conversationId": "59020000-5dba-0015-bca8-08d77ec28594",
"correlationId": "c7ff562a-b639-415b-9add-c9e524a727cc",
"destinationAddress": "rabbitmq://bear.rmq.cloudamqp.com/aelzlsta/ya.servicetemplate.receiveendpoint",
"headers": {},
"messageType": [
"urn:message:MbMessages:ISomethingDoneMessageV1"
],
"message": {
"correlationId": "c7ff562a-b639-415b-9add-c9e524a727cc",
"value": "Hello"
}
}
Pau lava le mea e tatau ona matou faia o le faʻatulagaina o le faʻapipiʻiina o nei mea tau auaunaga o le feʻau; mo lenei mea o le a matou faʻaopoopoina se afifi i le poloketi . E fa'aopoopo e le afifi se faamama i le MassTransit message processing pipeline e fa'aputu ai le fa'amatalaga fe'au i luga o se fa'aputuga o filo-safe. E faitau e Serilog le tala mai le fa'aputuga ma fa'aopoopo nei meatotino fa'aopoopo i a tatou mea ogalaau.
Install-Package Serilog.Enrichers.MassTransitMessage
I MassTransit matou te tuʻuina se faamama
services
.AddSingleton(provider =>
{
return Bus.Factory.CreateUsingRabbitMq(cfg =>
{
cfg.UseSerilog();
cfg.UseSerilogMessagePropertiesEnricher();
});
});
Ma i le Serilog configuration matou te faʻaopoopoina se faʻatamaoaigaina
Log.Logger = new LoggerConfiguration()
.Enrich.FromMassTransitMessage()
.CreateLogger();
Talu ai ona o le talosaga e mauaina le feʻau mai le RabbitMQ queue e mafai ona maua uma meatotino o le teutusi MassTransit, e mafai ona matou faʻaogaina le faʻamaoniga faʻamaonia i totonu o le faʻaaogaina o talosaga, faʻapea foʻi ma le pasi atili i luga o le filifili telefoni.
O le i'uga, na amata ona i ai a matou ogalaau le CorrelationId e le gata i totonu o le tasi auaunaga, ae fa'apea fo'i pe a fegalegaleai ma isi talosaga.

O le mea lea, o le fa'ai'uga o le faiga o fa'amaumauga i .Net talosaga e mafai ai ona matou fa'amaopoopo fa'amaufa'ailoga mai 'au'aunaga fa'apitoa 'ese'ese e aunoa ma ni fa'afitauli - e o'o lava ia i latou o lo'o galulue e ala i se faife'au fe'au. Ma faʻatasi ai ma le fesoasoani a Elasticsearch, e mafai ona vave faʻavasegaina ogalaau e ala i le fausiaina o dashboards matou te manaʻomia i Kibana (o se faʻataʻitaʻiga o loʻo faʻaalia i le ata mo le pou).
O le mea moni, o le taina i totonu o lenei fomu o le a le aofia ai fegalegaleaiga faigata i le va o au 'auʻaunaga ma isi faiga i fafo, ae o le faʻatuina o sea faʻatonuga i le amataga lava o le atinaʻeina o le poloketi o se tasi lea o mea e te faʻafetai ai ia te oe lava nai lo le tasi.
E mafai ona e malamalama i le source code o le faiga e maua i le poloketi:
puna: www.habr.com
