文章目录
- 前言
- 1.Serilog简介
- 2.Grafana简介
- 3.Loki是什么
- 一、Serilog对接Grafana轻量级日志可视化服务
- 1.Grafana部署
- 2.Loki部署
- 3.promtail部署
- 4.测试.NET Core写入日志效果
- 5.测试查询日志
- 总结
前言
日志功能是几乎所有程序或系统都必备的一个功能。该文章通过使用Loki+Grafana来实现日志记录与可视化查询。
1.Serilog简介
Serilog 是 ASP.NET Core 的一个插件,能够简化日志记录。Serilog 有各类可用的接收器,例如,有纯文本、SQL 和 ElasticSearch 接收器等等。
2.Grafana简介
Grafana 是一个开源的监控数据分析和可视化套件。最常用于对基础设施和应用数据分析的时间序列数据进行可视化分析,也可以用于其他需要数据可视化分析的领域。Grafana 可以帮助你查询、可视化、告警、分析你所在意的指标和数据。可以与整个团队共享,有助于培养团队的数据驱动文化。
3.Loki是什么
Loki日志系统是受Prometheus启发由Grafana Labs团队开源的水平可扩展,高度可用的多租户日志聚合系统。它被设计得非常轻量高效且易于操作,使用标签来作为索引,而不是对全文进行检索,即通过这些标签既可以查询日志的内容也可以查询到监控的数据签,极大地降低了日志索引的存储。
一、Serilog对接Grafana轻量级日志可视化服务
ELK和PLG的比较
- Elasticsearch中的数据作为非结构化JSON对象存储在磁盘上,Loki以二进制的形式存储。
- Elasticsearch采用全文索引,倒排索引的切分和共享的成本较高。Loki仅索引元数据,比如标签。
- 和Prometheus无缝集成。
ELK和PLG对应关系
ELK组件 | PLG组件 | 功能 |
---|---|---|
ElasticSearch | Loki | 主服务器,负责存储日志和处理查询 |
Logstash | promtail | 代理,负责收集日志并将其发送给主服务器 |
Kibana | Grafana | 用于查询和显示日志 |
本文只是简单介绍使用,具体复杂用法参考官网
官网配置参考:https://grafana.com/docs/loki/latest/configuration/
1.Grafana部署
1、下载Grafana安装包
Grafana官网:https://grafana.com/grafana/download?platform=windows
2、安装grafana
解压之后打开bin文件夹运行 grafana-server.exe后打开http://localhost:3000 即可跳转到登陆页面。初始用户名和密码都是admin
网页页面如下
登陆以后,就可以看到grafana的主页面了
2.Loki部署
1、下载Loki
Loki官网:https://github.com/grafana/loki/releases
2、安装Loki
进入到解压后的Loki文件夹下,可以看到Loki的运行程序,此处我们在该目录下,新加一个配置文件config.yaml
。
auth_enabled: false
server:
http_listen_port: 3100
ingester:
lifecycler:
address: 127.0.0.1
ring:
kvstore:
store: inmemory
replication_factor: 1
final_sleep: 0s
chunk_idle_period: 5m
chunk_retain_period: 30s
max_transfer_retries: 0
schema_config:
configs:
- from: 2022-12-06
store: boltdb
object_store: filesystem
schema: v11
index:
prefix: index_
period: 168h
storage_config:
boltdb:
directory: /tmp/loki/index
filesystem:
directory: /tmp/loki/chunks
limits_config:
enforce_metric_name: false
reject_old_samples: true
reject_old_samples_max_age: 168h
chunk_store_config:
max_look_back_period: 0s
table_manager:
retention_deletes_enabled: false
retention_period: 0s
启动Loki服务
.\loki-windows-amd64.exe --config.file=config.yaml
3.promtail部署
1、下载promtail
Loki官网:https://github.com/grafana/loki/releases
2、安装promtail
进入到解压后的promtail文件夹下,可以看到promtail的运行程序,此处我们在该目录下,新加一个配置文件config.yaml
。
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://localhost:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: mylogs
__path__: C:\Users\Happy\devTools\Loki\LokiDemo\logs\*.log"
启动promtail服务
.\promtail-windows-amd64.exe --config.file=config.yaml
4.测试.NET Core写入日志效果
引用serilog包,有关引用的包详情
appsettings.json配置文件
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"Serilog": {
"Using": [
"Serilog.Sinks.Console",
"Serilog.Sinks.Grafana.Loki"
],
"MinimumLevel": {
"Default": "Debug",
"Override": {
"Microsoft": "Warning",
"System": "Warning"
}
},
"Enrich": [
"WithThreadId"
],
"WriteTo": [
{
"Name": "Console",
"Args": {
"outputTemplate": "{NewLine}Date:{Timestamp:yyyy-MM-dd HH:mm:ss.fff}{NewLine}LogLevel:{Level}{NewLine}Class:{SourceContext}{NewLine}Message:{Message}{NewLine}{Exception}"
}
},
{
"Name": "GrafanaLoki",
"Args": {
"uri": "http://localhost:3100",
"labels": [
{
"key": "wesky",
"value": "WeskyLog"
}
],
"propertiesAsLabels": [
"app"
]
}
}
]
}
}
Program.cs
using Serilog;
using Serilog.Sinks.Grafana.Loki;
using System;
namespace LokiDemo
{
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Host
.ConfigureLogging((_, loggingBuilder) => loggingBuilder.ClearProviders())
.UseSerilog((ctx, cfg) => cfg.ReadFrom.Configuration(ctx.Configuration));
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseAuthorization();
app.MapControllers();
app.Run();
}
}
}
新增一个控制器,用来做日志写入测试。构造函数注入日志服务,并进行输出四个不同类型的日志
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace LokiDemo.Controllers
{
[Route("api/[controller]/[action]")]
[ApiController]
public class TestController : ControllerBase
{
ILogger<TestController> _logger;
public TestController(ILogger<TestController> logger)
{
_logger = logger;
}
[HttpPost]
public IActionResult TestLokiLog(string par)
{
_logger.LogInformation($"这是一条基本信息。接收到接口参数:{par}");
_logger.LogError("这是一条异常测试信息……");
_logger.LogDebug("这是Debug日志信息……");
return Ok(par);
}
}
}
运行程序,在swagger内调用一下。访问成功以后,可以看到控制台已有日志输出。
5.测试查询日志
打开grafana,左下角选择 数据源(Data sources)
选择Loki数据源,并输入Loki部署的地址(此处是本地地址,如果需要修改部署地址和端口,可以Loki配置文件内修改)。
配置地址完毕以后,选择保持和测试,提示成功即可。
然后转到Explore菜单栏,可以对查询功能进行预设。
在搜索栏里面,选择标签信息
也可以通过Json形式进行查看
也可以做关键字查询
总结
源码的地址:https://download.csdn.net/download/aa2528877987/87320133