1. 程式人生 > >使用 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: seq
logPath: ./.logs
services:
- name: tyetest
project: TyeTest/TyeTest.csproj

從上面的配置可以看出:

  1. 只是增加了一個 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/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:

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#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 中實現對分散式鏈路追蹤的實現。

最後但是最重要!

如果讀者對該內容感興趣,歡迎轉發、評論、收藏文章以及專案。

最近作者正在構建以 Actor 模式 和 事件溯源 為理論基礎的一套服務端開發框架。希望為開發者提供能夠便於開發出 “分散式”、“可水平擴充套件”、“可測試性高” 的應用系統 ——Newbe.Claptrap

本篇文章是該框架的一篇技術選文,屬於技術構成的一部分。

專案文件庫:claptrap.newbe.pro

聯絡方式: QQ 群 610394020

您還可以查閱本系列的其他選文:

理論入門篇

  1. Newbe.Claptrap - 一套以 “事件溯源” 和 “Actor 模式” 作為基本理論的服務端開發框架

術語介紹篇

  1. Actor 模式
  2. 事件溯源(Event Sourcing)
  3. Claptrap
  4. Minion
  5. 事件 (Event)
  6. 狀態 (State)
  7. 狀態快照 (State Snapshot)
  8. Claptrap 設計圖 (Claptrap Design)
  9. Claptrap 工廠 (Claptrap Factory)
  10. Claptrap Identity
  11. Claptrap Box
  12. Claptrap 生命週期(Claptrap Lifetime Scope)
  13. 序列化(Serialization)
  14. 最小競爭資源 (Minimal Competing Resources)

樣例實踐篇

  1. 設計一個火車票銷售系統

開發工具篇

  1. 使用 Tye 輔助開發 k8s 應用竟如此簡單(一)
  2. 使用 Tye 輔助開發 k8s 應用竟如此簡單(二)
  3. 使用 Tye 輔助開發 k8s 應用竟如此簡單(三)
  4. 使用 Tye 輔助開發 k8s 應用竟如此簡單(四)
  5. 使用 Tye 輔助開發 k8s 應用竟如此簡單(五)
  6. 使用 Tye 輔助開發 k8s 應用竟如此簡單(六)

其他番外篇

  1. 談反應式程式設計在服務端中的應用,資料庫操作優化,從 20 秒到 0.5 秒
  2. 談反應式程式設計在服務端中的應用,資料庫操作優化,提速 Upsert
  3. 十萬同時線上使用者,需要多少記憶體?——Newbe.Claptrap 框架水平擴充套件實驗
  4. docker-mcr 助您全速下載 dotnet 映象
  5. 十多位全球技術專家,為你獻上近十個小時的.Net 微服務介紹
  6. 年輕的樵夫喲,你掉的是這個免費 8 核 4G 公網伺服器,還是這個隨時可用的 Docker 實驗平臺?
  7. 如何使用 dotTrace 來診斷 netcore 應用的效能問題
  8. 只要十步,你就可以應用表示式樹來優化動態呼叫

GitHub 專案地址:https://github.com/newbe36524/Newbe.Claptrap

Gitee 專案地址:https://gitee.com/yks/Newbe.Claptrap

您當前檢視的是先行釋出於 www.newbe.pro 上的部落格文章,實際開發文件隨版本而迭代。若要檢視最新的開發文件,需要移步 claptrap.newbe.pro。

------ 本文結束 ------
  • 本文作者: newbe36524
  • 本文連結: https://www.newbe.pro/Newbe.Claptrap/Try-Tye-4/
  • 版權宣告: 本部落格所有文章除特別宣告外,均採用 BY-NC-SA 許可協議。轉載請註明出處!