前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】2022年12月 .NET CORE工具案例-PLG轻量级日志可视化服务

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

作者头像
愚公搬代码
发布2022-12-20 14:12:34
6300
发布2022-12-20 14:12:34
举报
文章被收录于专栏:历史专栏历史专栏

文章目录


前言

日志功能是几乎所有程序或系统都必备的一个功能。该文章通过使用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

代码语言:javascript
复制
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服务

代码语言:javascript
复制
.\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

代码语言:javascript
复制
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服务

代码语言:javascript
复制
.\promtail-windows-amd64.exe --config.file=config.yaml
在这里插入图片描述
在这里插入图片描述

4.测试.NET Core写入日志效果

引用serilog包,有关引用的包详情

在这里插入图片描述
在这里插入图片描述

appsettings.json配置文件

代码语言:javascript
复制
{
  "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

代码语言:javascript
复制
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();
        }
    }
}
在这里插入图片描述
在这里插入图片描述

新增一个控制器,用来做日志写入测试。构造函数注入日志服务,并进行输出四个不同类型的日志

代码语言:javascript
复制
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

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 前言
    • 1.Serilog简介
      • 2.Grafana简介
        • 3.Loki是什么
        • 一、Serilog对接Grafana轻量级日志可视化服务
          • 1.Grafana部署
            • 2.Loki部署
              • 3.promtail部署
                • 4.测试.NET Core写入日志效果
                  • 5.测试查询日志
                  • 总结
                  相关产品与服务
                  Grafana 服务
                  Grafana 服务(TencentCloud Managed Service for Grafana,TCMG)是腾讯云基于社区广受欢迎的开源可视化项目 Grafana ,并与 Grafana Lab 合作开发的托管服务。TCMG 为您提供安全、免运维 Grafana 的能力,内建腾讯云多种数据源插件,如 Prometheus 监控服务、容器服务、日志服务 、Graphite 和 InfluxDB 等,最终实现数据的统一可视化。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档