【愚公系列】2022年12月 .NET CORE工具案例-PLG轻量级日志可视化服务

news/2024/10/28 18:34:50/

文章目录

  • 前言
    • 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组件功能
ElasticSearchLoki主服务器,负责存储日志和处理查询
Logstashpromtail代理,负责收集日志并将其发送给主服务器
KibanaGrafana用于查询和显示日志

本文只是简单介绍使用,具体复杂用法参考官网

官网配置参考: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: falseserver:http_listen_port: 3100ingester:lifecycler:address: 127.0.0.1ring:kvstore:store: inmemoryreplication_factor: 1final_sleep: 0schunk_idle_period: 5mchunk_retain_period: 30smax_transfer_retries: 0schema_config:configs:- from: 2022-12-06store: boltdbobject_store: filesystemschema: v11index:prefix: index_period: 168hstorage_config:boltdb:directory: /tmp/loki/indexfilesystem:directory: /tmp/loki/chunkslimits_config:enforce_metric_name: falsereject_old_samples: truereject_old_samples_max_age: 168hchunk_store_config:max_look_back_period: 0stable_manager:retention_deletes_enabled: falseretention_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: 9080grpc_listen_port: 0positions:filename: /tmp/positions.yamlclients:- url: http://localhost:3100/loki/api/v1/pushscrape_configs:
- job_name: systemstatic_configs:- targets:- localhostlabels: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/swashbucklebuilder.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
在这里插入图片描述


http://www.ppmy.cn/news/4831.html

相关文章

Java内存模型

为什么要有java内存模型&#xff1f; 一&#xff1a;背景 1.现有计算机往往是多核的&#xff0c;每个外围下会有高速缓存。高速缓存的诞生是因为[CPU与内存(主存)的速度存在差别]&#xff08;因为CPU的频率太快了&#xff0c;快到主存跟不上&#xff0c;这样在处理器时钟周期内…

VMware、linux虚拟机设置网络实现虚拟机与主机网络互通

需要配置三个方面才可以&#xff0c;即&#xff1a;WMware网络配置、windows主机网络配置、虚拟机网络配置。 首先&#xff0c;确认VMware虚拟机设置中配置的网络连接方式为&#xff1a;NAT模式 可以在VMware上方的菜单中找到&#xff1a;虚拟机---->设置&#xff0c;然后…

【Linux】低级IO

目录 一、文件的概念 二、C语言文件操作回顾 三、使用系统调用进行文件I/O 1、系统调用open 1.1open接口介绍 1.2open形参中标记位flags的意义 1.3open的使用 2、系统调用write 2.1write接口介绍 2.2write的使用 3、系统调用read 3.1read接口介绍 3.2read的使用 …

Java+SSM水果商城系统(含源码+论文+答辩PPT等)

项目功能简介: 该项目采用技术&#xff1a; 后台使用SSM框架 前端采用jscss等界面非常的美观大方 MySQL数据库Tomcat服务器&#xff0c;项目含有源码、文档、配套开发软件、软件安装教程、项目发布教程等 项目功能介绍&#xff1a; 该项目分为前后台&#xff0c;前台主要包含用…

python--面向对象以及其三大特性(封装、继承、多态)

文章目录前言一、面向过程二、 面向对象三、面向对象的三大特性一、封装二、继承私有属性和私有方法三、多态四、高级特性单例模式前言 这一节主要学习面向对象以及面向对象的三大特性&#xff1a;封装、继承、多态&#xff1b;还有高级特性&#xff1a;类方法、静态方法、pro…

pytorch从头开始进行文本分类

前言 最近在做实体抽取的时候&#xff0c;一篇文章大约有几千字&#xff0c;按照300字长度进行切割后&#xff0c;会生成数量不等的句子&#xff0c;若是句子少还行&#xff0c;句子多的情况下&#xff0c;则会对造成巨大的计算负担&#xff0c;因为一篇文章中存在关键词的段落…

毫米波电路的PCB设计和加工(第一部分)

毫米波应用要点——相位精度受许多变量影响 从自动驾驶车辆上使用的防碰雷达系统到第五代&#xff08;5G&#xff09;高数据速率新无线&#xff08;NR&#xff09;网络技术&#xff0c;毫米波&#xff08;mmWave&#xff09;电路的应用领域正在快速增长。许多应用正在促进工作…

JavaEE【Spring】:SpringBoot 热部署

文章目录一、添加框架二、Settings 开启项目自动编译三、开启运行中热部署1、低版本配置&#xff08;idea 2021.2 之前的版本&#xff09;2、高版本设置&#xff08;idea 2021.2 之后的版本&#xff09;四、使用 Debug 启动&#xff08;非Run&#xff09;一、添加框架 增加 sp…