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

 

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

Newbe.Claptrap 是一個用於輕鬆應對併發問題的分佈式開發框架。若是您是首次閱讀本系列文章。建議能夠先從本文末尾的入門文章開始瞭解。github

必不可少的日誌管理

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

所以,開發者每每會選擇一些諸如 Exceptionless 或者 ELK 之類的日誌管理方案,來實現線上環境的日誌管理。面試

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

故而,本案例,讓咱們來使用 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 文件。api

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

console log

缺陷也很是明顯,這種方式很是不利於閱讀和分析。服務器

啓用 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 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 進行安裝:

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. 只要十步,你就能夠應用表達式樹來優化動態調用

 

您當前查看的是先行發佈於 www.newbe.pro 上的博客文章,實際開發文檔隨版本而迭代。若要查看最新的開發文檔,須要移步 claptrap.newbe.pro

Newbe.Claptrap

------ 本文結束 ------
  • 本文做者: newbe36524
相關文章
相關標籤/搜索