使用 Tye 輔助開發 k8s 應用竟如此簡單(四)

續上篇,這篇我們來進一步探索 Tye 更多的使用方法。本篇我們來了解一下如何在 Tye 中如何進行日誌的統一管理。

必不可少的日誌管理

對應用進行日誌記錄和分析是診斷排查線上問題的重要手段。而簡單基於控制檯或者文件的直接記錄既不利於開發者直接讀取也不利於大規模分析。

因此,開發者往往會選擇一些諸如Exceptionless或者ELK之類的日誌管理方案,來實現線上環境的日誌管理。

但是,我們仍然缺少一個在開發環境小巧可用、部署簡易、最小資源佔用、可視化良好的日誌管理方案。

故而,本案例,讓我們來使用Tye中已經擴展可用的Seq工具,來作爲開發環境的日誌管理和可視化工具。

創建測試應用

dotnet new sln -n TyeTest
dotnet new webapi -n TyeTest
dotnet sln ./TyeTest.sln add ./TyeTest/TyeTest.csproj
tye init

通過以上命令,我們創建了一個測試的 API 項目,並且創建出了 tye.yml 文件。

直接使用tye run命令啓動應用,我們其實可以在 tye dashboard 中查看到查看到以控制檯方式輸出的日誌:

console log

缺陷也非常明顯,這種方式非常不利於閱讀和分析。

啓用 Seq 記錄和查看日誌

打開 tye.yml ,加入 seq 的擴展配置:

name: tyetest
extensions:
  - name: seq
    logPath: ./.logs
services:
  - name: tyetest
    project: TyeTest/TyeTest.csproj

從上面的配置可以看出:

  1. 只是增加了一個 extensions 節點。在其中設置了一個 seq 的子節點並配置了日誌存儲的位置。

使用tye run啓動後,可以在 dashboard 中查看到啓動好的 seq 服務。

seq service

打開 seq 便可以看到 seq 的查詢界面:

seq search

使用瀏覽器調用一下 swagger 界面中的 API。便可以在 seq 中查看到最新的日誌。

seq logs

這便是使用 seq 最簡單的一種方式。

seq 的搜索方式是非常類似於 SQL 的流式查詢語句,開發者可以通過以下鏈接學習如何使用 UI 進行查詢:

https://docs.datalust.co/docs/the-seq-query-language

我不想每次都重新部署 Seq

我們都知道, Tye 在停止運行時會嘗試停止此次所有部署的容器,Seq 也是以容器的方式運行,因此,每次停止 Tye 時,容器都會被自動移除。這其實有點浪費時間。

因此,此處在進一步介紹如何在本地長久部署一個 Seq 實現重複利用。

實際上,根據 Tye 中的代碼,如果服務中已經存在一個名稱爲seq的服務,那麼就會自動使用該服務,而跳過創建步驟。

故此,我們只要本地部署一個 seq 服務,然後在tye.yml添加這個服務即可。

Seq 可以使用 Windows 安裝包或者使用 docker 的方式進行安裝。本示例將使用 docker 進行安裝:

version: '3.3'

services:
  seq:
    image: datalust/seq
    restart: always
    environment:
      ACCEPT_EULA: Y
    ports:
      - 5380:80
      - 5341:5341
    volumes:
      - ./.seqlogs:/data

使用docker-compose up -d方式長久啓動 seq。那麼就可以在 http://localhost:5380 查看到 seq dashboard。

然後,我們修改tye.yml:

name: tyetest
extensions:
  - name: seq
services:
  - name: tyetest
    project: TyeTest/TyeTest.csproj
  - name: seq
    external: true
    bindings:
      - name: http
        containerPort: 5341

這裏,主要的改動有:

  1. 不再需要在 extensions 中指定日誌存儲此位置,因爲這個時候時候的是外部的 seq 服務,指定這個參數已經沒有意義了。
  2. 添加了一個名爲 seq的服務,其中 external: true指定了其爲一個外部服務。故而啓動時不會嘗試去創建這個服務。

這樣使用tye run啓動後得到的結果和先前效果是一致的。但是,不會在每次都重新啓動一個新的 seq 實例。而是使用我們手動部署的 seq 實例。極大加快的啓動速度。

tye 源碼關於 seq 創建方式的判斷位置:https://github.com/dotnet/tye/blob/master/src/Microsoft.Tye.Extensions/Seq/SeqExtensions.cs#L15docker 方式安裝 seq:https://docs.datalust.co/docs/getting-started-with-dockerWindows 直接安裝 seq:https://docs.datalust.co/docs/getting-started

最後,發到 K8S 裏面試一下

注意,和前面的 mongo 一樣。seq 並不會在使用tye deploy時主動創建。而是會嘗試使用服務發現機制去尋找名爲seq的服務。這其實和上節中手動創建 Seq 實例有點類似。

因此,如果要部署extensions包含 seq 的 tye.yml。請確保 k8s 集羣中存在名稱爲 seq 的服務,這樣日誌才能正常輸出。

小結

本篇,我們已經順利完成了使用 Tye 中的 seq 擴展來實現日誌的統一管理。同時也順便練習瞭如何在 tye 中將爲外部服務添加綁定。

實際上,Tye 不僅僅提供了 seq 擴展日誌擴展,其也提供了更加廣爲人知的Elasticsearch+Kibana方案。

開發者可以通過以下鏈接查看相關的操作方法:

https://github.com/dotnet/tye/blob/master/docs/recipes/logging_elastic.md

下一篇,我們將進一步研究在 Tye 中實現對分佈式鏈路追蹤的實現。


本文分享自微信公衆號 - newbe技術專欄(newbe36524)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章