Seq 是我最愛用的 Logging 工具,但官方的 Azure Installation 只有說明如何將 Seq 安裝在 VM (虛擬機器) 上 (IaaS),害我一直以為 Seq 沒辦法安裝在 Azure App Service 上面,但我又不想多建立一台 VM 專門跑 Seq,直到最近我發現原來在 Web App 安裝 Seq 是可行的,只要跑在「容器」就可以了。這篇文章我就來說明怎樣設定!👍
大致的設定步驟
你需要準備 3 項 Azure 資源:
-
Storage account
你必須先在 Storage account 新增一個 File share 供 Web App 掛載資料夾!
-
App Service Plan
由於我們必須執行 Seq 提供的容器映像(image) (datalust/seq:latest
),所以 App Service Plan 必須要選擇 Linux
平台。
我們可以在建立 Web App 的時候自動建立 App Service Plan!
-
Web App
我們會利用 Azure Web App 提供的 Mount storage 功能,將 Azure Files 的資料夾掛載到容器中使用,用來保存 Seq 的所有資料。
詳細的設定步驟
-
建立一個 Storage account 儲存體帳戶,並在 File shares 建立一個共享資料夾,假設名稱為 container-data
-
建立一個 Web App 服務並設定
Basics 設定:我有測試過,記得 Publish 設定 Docker Container
,而 Operation System 要選 Linux
,最後 Pricing plan 只要選用 B1
層級就可以成功執行 Seq 的容器了!
Docker 設定:Image Source 設定為 Docker Hub
,而 Image and tag 設定為 datalust/seq:latest
這個 image!
其他都用預設值即可。
-
設定 Web App 應用程式設定
進入 Configuration
> Application settings
設定 6 個參數:
ACCEPT_EULA
= Y
WEBSITES_PORT
= 80:5341
SEQ_FIRSTRUN_ADMINUSERNAME
= admin
SEQ_FIRSTRUN_ADMINPASSWORDHASH
= <密碼雜湊值>
SEQ_FIRSTRUN_REQUIREAUTHENTICATIONFORHTTPINGESTION
= True
SEQ_API_CANONICALURI
= https://seq-testing.azurewebsites.net
ACCEPT_EULA
這個參數一定要設定為 Y
才能順利啟動 Seq 服務。
WEBSITES_PORT
由於 Web App 只能監聽 80
與 443
這兩個 Ports,而 Seq 預設使用 5341
這個 Port 做為 Ingestion (接收Log) 的 Port,你必須透過 Port mapping 改用 80
做為預設收集 Log 的主要 Port!所以我們才需要額外指定 WEBSITES_PORT
這項設定。
SEQ_FIRSTRUN_ADMINUSERNAME 與 SEQ_FIRSTRUN_ADMINPASSWORDHASH
這兩個參數用來設定初始管理員帳號與密碼,這兩個參數一定要設定,否則你的 Seq 馬上就會成為駭客攻擊的焦點了。
以下是透過 seq
命令列工具產生密碼雜湊值的方法,這裡我直接透過 Docker 來執行比較方便:
echo 'p@ssw0rd' | docker run --rm -i datalust/seq config hash
這裡我假設密碼為 p@ssw0rd
並透過 docker run --rm -i datalust/seq config hash
命令將密碼轉成 Seq 看的懂得 Hash 內容。
SEQ_FIRSTRUN_REQUIREAUTHENTICATIONFORHTTPINGESTION
這個參數也非常重要,這會讓你只能透過 apiKey
才能將 Log 送進來,確保安全性!
SEQ_API_CANONICALURI
由於 Seq 跑在容器中,當設定 Alerts 時,發出的通知內容會使用 http://localhost:80
這個網址,我們可以透過設定 SEQ_API_CANONICALURI
改變 Seq 網站對外提供的 Canonical URI。詳見 Server Configuration 的 api.canonicalUri 文件說明。
-
設定 Web App 路徑對應 (Path mappings)
進入 Configuration
> Path mappings
設定一個 Mount storage
儲存空間對應,如下圖示:
請記得 Mount path 一定要設定 /data
才行!還有 Storage type 必須為 Azure Files 才有辦法可讀可寫!
-
按下 Save 按鈕儲存設定
接著你可以按下 Web App 的 Overview
頁籤下的 Restart
按鈕重開網站,大約等個 2 分鐘左右就可以使用了!
測試網站
-
開啟 https://seq-testing.azurewebsites.net/ 網頁,並輸入帳號(admin
)密碼(p@ssw0rd
)進行登入
登入後請建立一個 apiKey
-
使用 seqcli 測試發送訊息到 Seq
# 可使用 .NET CLI 安裝 seqcli
dotnet tool install --global seqcli
# 先設定 Seq 伺服器網址
seqcli config -k connection.serverUrl -v https://seq-testing.azurewebsites.net/
# 再設定 apiKey
seqcli config -k connection.apiKey -v ViiM9mPK4wEIG6BFqswQ
# 發送一條訊息
seqcli log -m 'Hello, {Name}!' -p Name=World -p App=Test
總結
可以在 Azure Web App 架設 Seq 對我來說是一大福音,因為我可以讓多個測試站台都將 Log 集中送到這裡,同時又不用像 VM 那樣燒錢,畢竟 App Service Plan 上面可以同時架設多個站台,費用都是固定的!👍
相關連結