Dotnet + Serilog + Grafana-Loki
Serilog adalah salah satu library untuk logging yg banyak digunakan di dunia dotnet, bisa dilihat disini https://serilog.net/
Grafana-Loki adalah salah satu tools yg digunakan untuk mengumpulkan log dan melakukan query untuk selanjutnya bisa di visualisasikan di dashboard ataupun alert di grafana. untuk pembahasan kali hanya sampai query saja.
installasi dengan docker compose : https://grafana.com/docs/loki/latest/installation/docker/
karena grafana dibuat dengan golang maka cukup mudah kita instalasi di windows cukup jalankan exe file nya saja :
grafana : https://grafana.com/docs/grafana/latest/setup-grafana/installation/windows/
kemudian jalankan .\grafana-server.exe di terminal
grafana-loki : https://github.com/grafana/loki/releases
kemudian jalankan .\loki-windows-amd64.exe — config.file=loki-local-config.yaml di terminal
Adapun untuk cek apakah instalasi sudah sukses atau belum dengan :
grafana : http://localhost:3000 , User : admin, password : admin
grafana-loki : http://localhost:3100/metrics
Setelah instalasi sukses lajut ke coding dotnet nya :
1. bikin web api dengan dotnet 7
2. tambahkan nuget berikut
Serilog.AspNetCore 6.1.0, Serilog.Sinks.Grafana.Loki 7.1.1
3. Tambahkan coding berikut di Program.cs
........
........
//Setting serilog with grafana-loki
var builder = WebApplication.CreateBuilder(args);
builder.Host
.UseSerilog((context, config) =>
{
config.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
.Enrich.FromLogContext()
.Enrich.WithProperty("Application", context.HostingEnvironment.ApplicationName)
.Enrich.WithProperty("Environment", context.HostingEnvironment.EnvironmentName)
.WriteTo.GrafanaLoki("http://localhost:3100")
;
if (context.HostingEnvironment.IsDevelopment())
config.WriteTo.Console(new RenderedCompactJsonFormatter());
});
.....
.....
//route untuk test log
app.MapGet("/cmdSuccess", async () =>
{
var random = new Random();
int dice = random.Next(0, 5);
await Task.Delay(dice * 1000);
Log.Information($"DELAY : {dice} ## cmdSuccess");
return Results.Ok();
}).WithOpenApi();
app.MapGet("/cmdFail", async () =>
{
var random = new Random();
int dice = random.Next(0, 5);
await Task.Delay(dice * 1000);
Log.Information($"DELAY : {dice} ## cmdFail");
return Results.BadRequest();
}).WithOpenApi();
app.Run();
Dari sisi grafananya :
1. buka grafananya di http://localhost:3000
2. kemenu configuration->Data Sources
3. jika belum ada datasource loki bisa di tambakan dahulu
4. di data source — loki kemudian click Explore kemudian bisa dilihat ada form query dan show data di situ, silakan coba jalankan test call api ( dengan swagger atau postman) call api-cmdSuccess dan api-cmdFail kemudian cek apakah sudah muncul lognya tiap kali kita jalankan api nya.
5. Sampai disini bisa di lanjutkan sendiri ke visualisasi baik dashboard maupun alert !
— -
Sekian semoga bermanfaat
untuk coding bisa di lihat di github https://github.com/SuhutDev/DotnetSamples/tree/main/SerilogGrafanaLoki