Simple http service for Grafana Loki
$ dotnet add package Simplz.Grafana.Lokidotnet add package Simplz.Grafana.Loki
{
"GranafaLokiOptions":
{
"BaseAddress": "BaseAddress",
"Username": "Username",
"APIKey": "APIKey"
}
}
builder.Services.AddGranafaLokiService(builder.Configuration.GetRequiredSection("GranafaLokiOptions"));
var rawLogs = await GranafaLokiService.GetLogsAsync("appName", DateTimeOffset.UtcNow.AddHours(-5));
var timestampedLogs = rawLogs.ConvertToLogItems();
Please note that sequence of operations, excluding start/end, matters
GrafanaLokiQueryBuilder queryBuilder = new();
//Filter my label app having value "appName", mandatory
queryBuilder.SelectApp("appName");
//Set from time of logs to retrieve, mandatory
queryBuilder.AddStartTime(DateTimeOffset.UtcNow.AddHours(-5));
//Convert log to Json object
queryBuilder.ExpandAsJson();
//Filter by field level with value "error"
queryBuilder.FilterJsonByValue("level", "error");
//Filter by field source, containing string "Microsoft" essentially calls:
//queryBuilder.FilterJsonByRegex("source", "Microsoft.*");
queryBuilder.FilterJsonByValue("source", "Microsoft", exact: false);
var timestampedLogs = await GranafaLokiService.GetLogItemsAsync(queryBuilder);