續上篇,這篇我們來進一步探索 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 中查看到查看到以控制檯方式輸出的日誌:
缺陷也非常明顯,這種方式非常不利於閱讀和分析。
啓用 Seq 記錄和查看日誌
打開 tye.yml ,加入 seq 的擴展配置:
name: tyetest
extensions:
- name: seq
logPath: ./.logs
services:
- name: tyetest
project: TyeTest/TyeTest.csproj
從上面的配置可以看出:
-
只是增加了一個 extensions 節點。在其中設置了一個 seq 的子節點並配置了日誌存儲的位置。
使用tye run
啓動後,可以在 dashboard 中查看到啓動好的 seq 服務。
打開 seq 便可以看到 seq 的查詢界面:
使用瀏覽器調用一下 swagger 界面中的 API。便可以在 seq 中查看到最新的日誌。
這便是使用 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
這裏,主要的改動有:
-
不再需要在 extensions 中指定日誌存儲此位置,因爲這個時候時候的是外部的 seq 服務,指定這個參數已經沒有意義了。 -
添加了一個名爲 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源創計劃”,歡迎正在閱讀的你也加入,一起分享。