.NET Core 基於 Grafana Loki 日志初體驗


介紹

Loki: like Prometheus, but for logs.

Loki是一個輕量級的日志系統,受到Prometheus項目的啟發,由Grafana團隊設計和開發,所以在Grafana中是原生支持的,具有可水平擴展,高度可用等特性,通過存儲壓縮的、非結構化的日志以及僅索引元數據,更加易於操作並且運行成本更低。

github: https://github.com/grafana/loki

組件

  • promtail 是代理,負責收集日志並將其發送給Loki。
  • loki 是主服務器,負責存儲日志和處理查詢。
  • Grafana 用於查詢和顯示日志。

安裝

官方安裝文檔:https://grafana.com/docs/loki/latest/installation/

官網支持了幾種常見的安裝方式,我這里主要使用 Docker Compose 安裝。

docker-compose.yaml

version: "3"

networks:
  loki:

services:
  loki:
    image: grafana/loki:2.2.1
    ports:
      - "3100:3100"
    command: -config.file=/etc/loki/local-config.yaml
    networks:
      - loki

  promtail:
    image: grafana/promtail:2.2.1
    volumes:
      - /var/log:/var/log
    command: -config.file=/etc/promtail/config.yml
    networks:
      - loki

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    networks:
      - loki

執行下邊命令,下載docker-compose.yaml

wget https://raw.githubusercontent.com/grafana/loki/v2.2.0/production/docker-compose.yaml -O docker-compose.yaml

啟動容器

docker-compose up -d

啟動成功后,運行 docker ps,可以看到啟動了3個服務,端口為3100的Grafana,端口為3000的loki服務,還有promtail代理。

接下來,訪問 http://localhost:3000 到Grafana的頁面,首次登錄需要初始化賬號和密碼,然后找到左邊菜單的 Configuration -> Data Sources -> Add Data Source -> Loki,配置數據源,在url里填寫loki服務的地址即可,然后保存,然后可以到 Explore 頁面,查看數據。

在 .NET Core 中配置

這里主要用到了 Serilog 的Loki擴展,我新建了一個 webapi項目,名字叫LogDemo,然后需要通過Nuget安裝以下幾個組件。

  • Serilog
  • Serilog.AspNetCore
  • Serilog.Sinks.Grafana.Loki

安裝完成以后,接着修改Program.cs 配置 Serilog。

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        }).UseSerilog((context, config) =>
        {
            config.Enrich.FromLogContext()
            .Enrich.WithProperty("app", context.HostingEnvironment.ApplicationName)
            .WriteTo.GrafanaLoki("http://localhost:3100")
            .WriteTo.Console();
        });

啟動項目后,刷新幾次頁面,再回到 Grafana 的Explore 頁面,輸出查詢條件 {app="LogDemo"},然后就可以查詢到webapi的日志。

總結

Grafana 原生支持,體驗也很好,和其他日志系統ELK相比,具有輕量級,高可用,高效率等特點,是一個非常優秀的日志組件,本文簡單嘗試使用 Loki 日志系統,更多的介紹和配置請參照官方文檔。

https://grafana.com/oss/loki/

最后歡迎掃碼關注我們的公眾號 【全球技術精選】,專注國外優秀博客的翻譯和開源項目分享。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM