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

举报
愚公搬代码 发表于 2022/12/30 23:16:38 2022/12/30
【摘要】 前言日志功能是几乎所有程序或系统都必备的一个功能。该文章通过使用Loki+Grafana来实现日志记录与可视化查询。 1.Serilog简介Serilog 是 ASP.NET Core 的一个插件,能够简化日志记录。Serilog 有各类可用的接收器,例如,有纯文本、SQL 和 ElasticSearch 接收器等等。 2.Grafana简介Grafana 是一个开源的监控数据分析和可视化...

前言

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。