亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.430618.com 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

日志聚合

 

日志是我們寫程序離不開的一個東西。在我們排查問題的時候日志就是我們的救命稻草。我們的每個服務都在不停地生產日志。但是實施微服務后,如果按照傳統的寫本地文件的日志方案,顯然會面臨跟修改配置一樣麻煩的境地。不同的日志分散在各個服務器、容器內,這種情況下查日志簡直是生不如死。

 

日志聚合組件為我們解決了這個問題。所有的服務通過接口發送日志到聚合服務,再由聚合服務進行統一存儲,并且提供統一的查詢、分析的能力。

 

日志聚合組件業界有 ELK、Exceptionless、Seq 等。

 

Seq

 

Seq 是一款使用現代化技術構建的結構化日志存儲,查詢,分析工具。比起 ELK 這種組合要輕量級許多。只需要一個安裝包就具有數據存儲,查詢,圖表分析功能。它對 windows 友好,直接提供了安裝包。當然也可以使用 Docker 來部署。Seq 對于單個用戶是免費的,這對于一些小團隊并沒有什么問題。Seq 一個比較強大的功能是提供了類似 Sql 語句的數據查詢及處理能力,使得用戶可以直接寫 Select from 來得到自己想要的數據。

Net Core with 微服務 - Seq 日志聚合

 


Net Core with 微服務 - Seq 日志聚合

 

使用 docker 安裝

 

docker run --name seq -e ACCEPT_EULA=Y -p 8900:80 -p 5341:5341 datalust/seq

 

使用 docker run 運行一個實例。8900 綁定容器的 80 端口,該端口是 web 管理界面的入口。5341 綁定容器的 5341 端口,該端口是日志寫入時候真正的端口。

 

使用 docker-compose 安裝

 

seq_server:
    image: datalust/seq
    restart: always
    container_name: seq_server
    hostname: seq_server
    environment:
      - ACCEPT_EULA=Y
    ports:
      - 8900:80
      - 5341:5341

 

把上面的 docker 命令改寫成 docker-compose 命令。

 

安裝好 seq 之后,我們訪問一下 http://localhost:8090 如果管理后臺出現說明我們安裝成功了。

Net Core with 微服務 - Seq 日志聚合

 


Net Core with 微服務 - Seq 日志聚合

 

 

 

NLog 集成 Seq

 

seq 安裝成功之后,我們可以開始跟 asp.net core 項目進行集成了。這里采用 Nlog 日志組件進行演示,如何跟 seq 集成。

Net Core with 微服務 - Seq 日志聚合

 


Net Core with 微服務 - Seq 日志聚合

 

?

 

點擊 “API KEYS” 、“ADD API KEY” 彈出新增 API KEY 界面。

Net Core with 微服務 - Seq 日志聚合

 


Net Core with 微服務 - Seq 日志聚合

 

?

 

我們可以在這個界面為每個服務指定一個 APIKEY 當寫入 Seq 的是用來區分服務。填寫 title 信息,選擇具有的權限,還可以自定義一些屬性,這些屬性會附加到每個日志記錄上。比如我們這里為 member_center 這個 apikey 自定義一個 App = member_center 的屬性。

 

Install-Package NLog.Targets.Seq

 

nuget 安裝 Nlog 的 Seq 擴展。

 




  
    
  
  
  

    
    

    
      
        
        
      
    
  

  
  
    
    

    
  

 

在項目根目錄添加一個 nlog.config 的 xml 配置文件。添加一個 seq 的 target ,在這個 target 上填寫 serverUrl(seq的服務地址),apiKey。

 

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.ConfigureKestrel(options =>
                    {
                        options.ListenAnyIP(6003);
                    });
                    webBuilder.UseStartup();
                })
                .UseNLog();

 

在 Program 文件的 CreateHostBuilder 方法最后追加 UseNLog 調用。

 

[ApiController]
    [Route("[controller]")]
    public class TestController : ControllerBase
    {
        private readonly ILogger _logger;

        public TestController(ILoggerFactory loggerFactory)
        {
            _logger = loggerFactory.CreateLogger();
        }

        [HttpGet("TestLogSeq")]
        public string TestLogSeq()
        {
            _logger.LogTrace("this is a test log for trace level .");
            _logger.LogDebug("this is a test log for debug level .");
            _logger.LogInformation("this is a test log for info level .");
            _logger.LogWarning("this is a test log for warning level .");
            _logger.LogError(new Exception("this is a ex for seq log ."), "this is a test log for error level .");

            return "ok";
        }
    }

 

添加一個 TestController 編寫一個 TestLogSeq 方法,在這里打一些日志。

Net Core with 微服務 - Seq 日志聚合

 


Net Core with 微服務 - Seq 日志聚合

 

?

 

我們訪問一下這個接口,打開 seq 的站點可以看到我們的日志已經寫到 seq 里面了。

 

查詢

 

我們的服務每天都會產生數以萬計的日志,現在把所有服務的日志都聚合在一起,那數量就更加龐大。在海量日志中查找需要的日志,顯然變得很困難。

 

還好 Seq 帶有強大的查詢功能。我們可以像在數據庫里查詢那樣,使用 Sql 語句來進行查詢。

 

下面演示幾個查詢例子:

 

  1. like 查詢

 

@Message like '%init%'

 

查詢日志消息里帶有 init 關鍵字的日志

Net Core with 微服務 - Seq 日志聚合

 


Net Core with 微服務 - Seq 日志聚合

 

?

 

2. = 查詢

 

@Level = 'Error'

 

查詢日志級別為 Error 的日志。

Net Core with 微服務 - Seq 日志聚合

 


Net Core with 微服務 - Seq 日志聚合

 

?

 

app = 'hotel_base'

 

查詢所有 hotel_base 服務的日志。

Net Core with 微服務 - Seq 日志聚合

 


Net Core with 微服務 - Seq 日志聚合

 


Net Core with 微服務 - Seq 日志聚合

 

3. 聚合函數

 

select count(1) from stream group by @Level

 

按日志級別分組,統計每個級別的數量。

Net Core with 微服務 - Seq 日志聚合

 


Net Core with 微服務 - Seq 日志聚合

 

?

 

以上簡單的演示了幾個查詢方案,Seq 的查詢相當的強大,具體請查看官方文檔: the-seq-query-language

 

總結

 

通過以上內容,我們簡單的演示了 Seq 日志聚合工具的安裝、與.net core 進行集成,查詢日志等功能。Seq 雖然比起 ELK 比較冷門,但是最近跟一些朋友交流下來,發現很多朋友都開始使用 Seq 來作為日志聚合工具了。這也說明 Seq 確實有一定的實力,大家不妨一試。

?

分享到:
標簽:微服
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定