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

[Seq](https://datalust.co/Seq) 是我最愛用的 Logging 工具，但官方的 [Azure Installation](https://docs.datalust.co/v2/docs/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](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/2d4ac34ff3987c057943-9ff03985-9f93-4691-8469-2b78fc6843b9.webp)
    
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](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/8a6e669a15c379649946-a1a80d21-31c7-4a90-b758-c17d7c7eaeff.webp)
    

### 詳細的設定步驟

1.  建立一個 Storage account 儲存體帳戶，並在 File shares 建立一個共享資料夾，假設名稱為 `container-data`
    
    ![image](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/a3d6459c874fff1b9cb6-646ba55e-9107-44b7-b9e5-d52ad6602d29.webp)
    
2.  建立一個 Web App 服務並設定
    
    Basics 設定：我有測試過，記得 Publish 設定 `Docker Container`，而 Operation System 要選 `Linux`，最後 Pricing plan 只要選用 `B1` 層級就可以成功執行 Seq 的容器了！
    
    ![image](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/74bf57f4fd92c10e6e3c-af8cd2d9-ccb8-4887-8e48-d89fcc4f5d20.webp)
    
    Docker 設定：Image Source 設定為 `Docker Hub`，而 Image and tag 設定為 `datalust/seq:latest` 這個 image！
    
    ![image](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/a633c47671eed5790679-d9d6c8bf-ee2a-4301-9446-cb1ce60abe14.webp)
    
    其他都用預設值即可。
    
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 只能監聽 `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 來執行比較方便：
    
    ```bash
    echo 'p@ssw0rd' | docker run --rm -i datalust/seq config hash
    ```
    
    ![echo 'p@ssw0rd' | docker run --rm -i datalust/seq config hash](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/929e1df3ba5f67d1a480-54a680be-5ddc-4e7b-a49f-b9c53e3b60e4.webp)
    
    > 這裡我假設密碼為 `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](https://docs.datalust.co/docs/json-config#apicanonicaluri) 文件說明。
    
4.  設定 Web App 路徑對應 (Path mappings)
    
    進入 `Configuration` > `Path mappings` 設定一個 `Mount storage` 儲存空間對應，如下圖示：
    
    ![image](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/09dde309a425b6e6551f-693f5f27-a060-40c2-b863-11f756dd5515.webp)
    
    > 請記得 Mount path 一定要設定 `/data` 才行！還有 Storage type 必須為 **Azure Files** 才有辦法可讀可寫！
    
5.  按下 Save 按鈕儲存設定
    
    接著你可以按下 Web App 的 `Overview` 頁籤下的 `Restart` 按鈕重開網站，大約等個 2 分鐘左右就可以使用了！
    

### 測試網站

1.  開啟 https://seq-testing.azurewebsites.net/ 網頁，並輸入帳號(`admin`)密碼(`p@ssw0rd`)進行登入
    
    ![seqcli](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/97d08f91bf5185f0c474-11605a05-66e0-4e03-9b6c-b769fcf2e672.webp)
    
    登入後請建立一個 apiKey
    
2.  使用 [seqcli](https://github.com/datalust/seqcli) 測試發送訊息到 Seq
    
    ```bash
    # 可使用 .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](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/e0b26ddfd7ab01d85df8-55d32ba2-8fae-4c47-a704-40d3551ebe30.webp)
    

### 總結

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

### 相關連結

-   [Matteo's Blog - Running Seq on Azure](https://ml-software.ch/posts/running-seq-on-azure)
-   [Setting an initial password when deploying Seq to Docker](https://blog.datalust.co/setting-an-initial-password-when-deploying-seq-to-docker/)
-   [datalust/seq - Docker Image | Docker Hub](https://hub.docker.com/r/datalust/seq)
-   [GitHub - datalust/seqcli: The Seq command-line client. Administer, log, ingest, search, from any OS.](https://github.com/datalust/seqcli)
