The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何在 Azure Web App 安裝 Seq 集中式記錄伺服器

Seq 是我最愛用的 Logging 工具,但官方的 Azure Installation 只有說明如何將 Seq 安裝在 VM (虛擬機器) 上 (IaaS),害我一直以為 Seq 沒辦法安裝在 Azure App Service 上面,但我又不想多建立一台 VM 專門跑 Seq,直到最近我發現原來在 Web App 安裝 Seq 是可行的,只要跑在「容器」就可以了。這篇文章我就來說明怎樣設定!👍

大致的設定步驟

你需要準備 3 項 Azure 資源:

  1. Storage account

    你必須先在 Storage account 新增一個 File share 供 Web App 掛載資料夾!

    Storage account - File share

  2. App Service Plan

    由於我們必須執行 Seq 提供的容器映像(image) (datalust/seq:latest),所以 App Service Plan 必須要選擇 Linux 平台。

    我們可以在建立 Web App 的時候自動建立 App Service Plan!

  3. Web App

    我們會利用 Azure Web App 提供的 Mount storage 功能,將 Azure Files 的資料夾掛載到容器中使用,用來保存 Seq 的所有資料。

    Mount storage

詳細的設定步驟

  1. 建立一個 Storage account 儲存體帳戶,並在 File shares 建立一個共享資料夾,假設名稱為 container-data

    image

  2. 建立一個 Web App 服務並設定

    Basics 設定:我有測試過,記得 Publish 設定 Docker Container,而 Operation System 要選 Linux,最後 Pricing plan 只要選用 B1 層級就可以成功執行 Seq 的容器了!

    image

    Docker 設定:Image Source 設定為 Docker Hub,而 Image and tag 設定為 datalust/seq:latest 這個 image!

    image

    其他都用預設值即可。

  3. 設定 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 只能監聽 80443 這兩個 Ports,而 Seq 預設使用 5341 這個 Port 做為 Ingestion (接收Log) 的 Port,你必須透過 Port mapping 改用 80 做為預設收集 Log 的主要 Port!所以我們才需要額外指定 WEBSITES_PORT 這項設定。

    SEQ_FIRSTRUN_ADMINUSERNAMESEQ_FIRSTRUN_ADMINPASSWORDHASH

    這兩個參數用來設定初始管理員帳號與密碼,這兩個參數一定要設定,否則你的 Seq 馬上就會成為駭客攻擊的焦點了。

    以下是透過 seq 命令列工具產生密碼雜湊值的方法,這裡我直接透過 Docker 來執行比較方便:

    echo 'p@ssw0rd' | docker run --rm -i datalust/seq config hash
    

    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 文件說明。

  4. 設定 Web App 路徑對應 (Path mappings)

    進入 Configuration > Path mappings 設定一個 Mount storage 儲存空間對應,如下圖示:

    image

    請記得 Mount path 一定要設定 /data 才行!還有 Storage type 必須為 Azure Files 才有辦法可讀可寫!

  5. 按下 Save 按鈕儲存設定

    接著你可以按下 Web App 的 Overview 頁籤下的 Restart 按鈕重開網站,大約等個 2 分鐘左右就可以使用了!

測試網站

  1. 開啟 https://seq-testing.azurewebsites.net/ 網頁,並輸入帳號(admin)密碼(p@ssw0rd)進行登入

    seqcli

    登入後請建立一個 apiKey

  2. 使用 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
    

    seq

總結

可以在 Azure Web App 架設 Seq 對我來說是一大福音,因為我可以讓多個測試站台都將 Log 集中送到這裡,同時又不用像 VM 那樣燒錢,畢竟 App Service Plan 上面可以同時架設多個站台,費用都是固定的!👍

相關連結

留言評論