使用 Tye 辅助开发 k8s 应用竟如此简单(四)
使用 Tye 輔助開發 k8s 應用竟如此簡單(一)
使用 Tye 輔助開發 k8s 應用竟如此簡單(二)
使用 Tye 輔助開發 k8s 應用竟如此簡單(三)
續上篇,這篇我們來進一步探索 Tye 更多的使用方法。本篇我們來了解一下如何在 Tye 中如何進行日志的統一管理。
Newbe.Claptrap 是一個用于輕松應對并發問題的分布式開發框架。如果您是首次閱讀本系列文章。建議可以先從本文末尾的入門文章開始了解。
必不可少的日志管理
對應用進行日志記錄和分析是診斷排查線上問題的重要手段。而簡單基于控制臺或者文件的直接記錄既不利于開發者直接讀取也不利于大規模分析。
因此,開發者往往會選擇一些諸如?Exceptionless?或者?ELK?之類的日志管理方案,來實現線上環境的日志管理。
但是,我們仍然缺少一個在開發環境小巧可用、部署簡易、最小資源占用、可視化良好的日志管理方案。
故而,本案例,讓我們來使用?Tye?中已經擴展可用的?Seq?工具,來作為開發環境的日志管理和可視化工具。
創建測試應用
create-tye-seq-test.sh| 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 的擴展配置:
tye.yml| name: tyetest extensions:- name: seqlogPath: ./.logs services:- name: tyetestproject: 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 進行安裝:
docker-compose.yml| version: '3.3'services:seq:image: datalust/seqrestart: alwaysenvironment:ACCEPT_EULA: Yports:- 5380:80- 5341:5341volumes:- ./.seqlogs:/data |
使用?docker-compose up -d?方式長久啟動 seq。那么就可以在 http://localhost:5380?查看到 seq dashboard。
然后,我們修改?tye.yml:
tye.yml| name: tyetest extensions:- name: seq services:- name: tyetestproject: TyeTest/TyeTest.csproj- name: seqexternal: truebindings:- name: httpcontainerPort: 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#L15
docker 方式安裝 seq:
https://docs.datalust.co/docs/getting-started-with-docker
Windows 直接安裝 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 中實現對分布式鏈路追蹤的實現。
總結
以上是生活随笔為你收集整理的使用 Tye 辅助开发 k8s 应用竟如此简单(四)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# Lambda表达式详解,及Lamb
- 下一篇: Dapr 正式发布 1.0