容器中的 Tableau Server - 疑難排解

簡介

容器中的 Tableau Server 是 Tableau 的第一款容器型伺服器產品。「容器」中的 Tableau Server 是一種在 Linux Docker 容器內執行的多合一 Tableau Server 執行個體。換句話說,容器中的 Tableau Server 映像是指執行整個自封式 Tableau Server 應用程式的 Docker 映像。容器中的 Tableau Server 是我們支援在容器型環境中執行 Tableau Server 的眾多步驟中的第一步。要理解容器中的 Tableau Server 概念,最簡單的方法是將其視為已預先安裝 Tableau Server 的 VM。該映像基於 UBI 8 映像(適用於版本 2022.1 及更早版本的 CentOS 7.x),並在容器內執行 supervisord(而不是 systemd)。容器啟動 supervisord 時,其將立即嘗試初始化及啟動 Tableau Server。此處的大部分文件旨在描述如何提供設定和善用自動化作業,以便您可以在 Docker 環境中執行 Tableau Server。

容器中的 Tableau Server 映像設定工具可協助您建立和自訂容器映像,以包含自訂套件和成品。該工具的主要功能之一是組建容器映像,並安裝自訂資料連接器。

要在概念證明情境中快速測試容器中的 Tableau Server 映像,請參閱容器中的 Tableau Server - 快速入門

限制

  • 容器中的 Tableau Server 僅支援使用伺服器 ATR 的授權啟用,這要求容器具有網際網路存取權限。因此,無法在氣隙隔離環境中進行離線啟用。
  • 容器中的 Tableau Server 目前不支援 Resource Monitoring Tool (RMT) 代理程式。
  • 容器中的 Tableau Server 不支援 Kerberos

疑難排解

若在執行 Tableau Server 時遇到問題,可以透過多種途徑找到解決方案。本節會介紹一般的 Tableau Server 疑難排解建議,例如可以在何處找到記錄檔及其意義。本節還會介紹一些特定的已知情境和緩解方式。

若您正在與 Tableau 支援合作對問題進行偵錯,則提供以下資訊可能會有所幫助:

  • Tableau Server 記錄檔(收集這些記錄檔的說明如下)。
  • Docker 容器 stdout 記錄檔。
  • Tableau Server 的 Dockerfile(若已有任何自訂項)。
  • 部署設定包括:

    • Kubeconfig (或任何等效的部署設定)。
    • 設定 Tableau Server 容器的靜態組態檔。

安裝和初始化失敗

若是第一次初始化 Tableau Server,或者在容器內進行了全新安裝,則伺服器不會透過簡單地重新啟動容器來復原。每次安裝嘗試都應使用乾淨的資料目錄。這可能意味著從先前的容器執行中刪除持續性磁碟區資料。若您這樣做,請確保儲存對偵錯可能有用的記錄檔和資訊。

對失敗的安裝進行偵錯

Tableau Server 容器會在安裝失敗時結束。這種模式可以很容易地自動識別何時發生安裝失敗。但是,它會讓偵錯變得具有挑戰性,因為容器會結束,並且不會留下任何可檢查的執行階段狀態。若要在初始化期間失敗的正在執行的容器中進行偵錯工作階段,請執行以下步驟:

  1. 準備全新的容器中的 Tableau Server 部署。
  2. 將容器設定為使用 TSM_ONLY=1 環境變數執行。該 TSM_ONLY=1 環境變數會告知 Tableau Server 僅初始化 TSM。這相當於在標準的非容器安裝中僅執行 initialize-tsm 指令碼。
  3. 執行 Tableau Server 容器。
  4. 在容器內開啟 shell。
  5. 現在可以執行 TSM 命令,即使 Tableau Server 尚未初始化。要恢復在初始化期間正常發生的自動化,請執行 tsm-commands 指令碼: "${DOCKER_CONFIG}"/config/tsm-commands

Tableau 支援和 Kubernetes

容器中的 Tableau Server 可以使用 Kubernetes 執行,但不是必須這樣做。我們的預期是,大多數客戶將使用 Kubernetes 或其關聯的託管雲端環境之一(EKS、AKS 或 GKS)執行和管理容器中的 Tableau Server。

Kubernetes 會是一個複雜的執行和偵錯環境,通常包括對個別公司基礎結構和設定的相依項目。因此,Tableau 支援無法幫助客戶解決與執行容器中的 Tableau Server 相關的 Kubernetes(或基礎結構部署)問題。但是,Tableau 確實支援在 Docker 容器中執行 Tableau Server。因此,若您在使用 Kubernetes 執行容器中的 Tableau Server 時遇到問題,Tableau 支援只能驗證 Docker 容器本身是否正常工作。

有關如何使用 Kubernetes 執行容器中的 Tableau Server 的更多資訊,請參閱此 Github 網站:https(連結在新視窗開啟) ://github.com/tableau/tableau-server-in-kubernetes。

記錄檔

記錄檔是在 Tableau Server 中查找、理解和解決問題的重要資源。它們有助於幫助我們的支援團隊找到您遇到的問題的根本原因。記錄檔也可用於您自己的偵錯和疑難排解工作。

擷取所有記錄檔

若您需要擷取所有記錄檔以進行進一步偵錯或傳送給我們的支援團隊,有幾種方法可以檢索此資訊。

Ziplogs

TSM 可以建立包含所有相關伺服器記錄檔的壓縮封存。可以透過執行 tsm maintenance ziplogs 命令來觸發。命令完成時,它將報告記錄檔封存的檔案路徑。需要使用最適合您情況的檔案傳輸方法來複製封存。有關 ziplogs 的詳細資訊,請參閱 tsm maintenance ziplogs

在容器內執行的命令範例:

tsm maintenance ziplogs
手動 Tar 命令

若無法執行 ziplogs 命令,例如,若伺服器無法達到一致的狀態,則仍然可以透過在容器內執行 tar 命令來檢索記錄檔。需要使用最適合您情況的檔案傳輸方法來複製封存。

在容器內執行的命令範例(將 tar 寫入容器資料目錄中的暫存目錄):

tar -zcvf /var/opt/tableau/tableau_server/temp/<archive_name>.tar.gz \
/var/opt/tableau/tableau_server/data/tabsvc/logs/. \
/var/opt/tableau/tableau_server/supervisord/ \
/var/opt/tableau/tableau_server/data/tabsvc/config/ \
/docker/.metadata.conf \
--exclude='*keystores' --exclude='*.jks' --exclude='*.tks' \
--exclude='*asset_keys.yml' --exclude='*.ks' --exclude='*.ts' \
--exclude='*.crt' --exclude='*cacerts' --exclude='*.key'
巡覽記錄檔和偵錯提示

診斷 Tableau Server 中的大多數問題有一些常見的步驟。若您正在考慮查看伺服器記錄檔,根據錯誤發生在伺服器生命週期中的位置,分解要查找的資訊會很有幫助。

啟動容器(初始/安裝)

若容器立即損毀或無法安裝或初始化,請檢查以下資源:

容器 stdout

檢查 docker 容器的 stdout 。這通常可以透過查看容器協調流程系統(例如 Kubernetes)收集的容器輸出來存取。由於 Tableau Server 是在容器內執行的多流程系統,因此 stdout 通常沒有用,並且不會報告問題的根本原因,除非啟動時出現災難性故障。建議在深入研究 Tableau Server 記錄檔之前檢查失敗容器的 stdout

範例:

docker logs <container-name>

Tableau Server 容器啟動記錄檔

Tableau Server 容器啟動記錄檔會擷取初始化、設定和啟動 Tableau Server 的自動化輸出。若發現容器在第一次啟動或執行時遇到問題,這是要檢查的第一個記錄檔:

/var/opt/tableau/tableau_server/supervisord/run-tableau-server.log

檢查記錄檔底部,看看是否有報告失敗。有時會報告錯誤,並且可以立即從記錄檔中明顯看出錯誤。若錯誤未從記錄檔中清除,則根本原因可能僅在特定於階段或特定於服務的記錄檔中可見。下方列出的記錄檔涵蓋了這些可能性。

Tableau Server 安裝記錄檔

若啟動記錄檔表明自動化處理初始化 TSM 階段存在問題,請檢查此記錄檔:

/var/opt/tableau/tableau_server/logs/app-install.log

Tableau Server 控制器記錄檔

若啟動記錄檔表明初始化和啟動伺服器階段存在問題(僅限 CLI),請檢查 tabadmincontroller 服務記錄檔:

/var/opt/tableau/tableau_server/data/tabsvc/logs/tabadmincontroller/tabadmincontroller_node1-0.log

此記錄檔針對名為 tabadmincontroller 的特定服務。Tabadmincontroller 負責協調 Server 中的初始化和啟動功能。此記錄檔可能複雜而冗長。此記錄檔中的錯誤可能仍未指向根本原因。有時錯誤是由 tabadmincontroller 完成某項工作所依賴的服務引起的。有關更多詳細資訊,請查看下方的執行階段部分。

服務記錄檔 - 伺服器執行階段

若 Tableau Server 在正常執行階段遇到問題或遇到服務無法完成工作或關閉的問題,可以查看服務記錄檔以取得更多資訊。作為 Tableau Server 的一部分執行的每個服務都有一個服務記錄檔。若知道要檢查哪個服務,則可以在此一般目錄下找到該服務的記錄檔:

/var/opt/tableau/tableau_server/data/tabsvc/logs/<service_name>

在檔案路徑的 <service_name> 引數中提供服務的名稱。任何服務都可以寫入多種記錄檔。此外,若有多個相同的服務正在執行(多個執行個體),所有服務記錄檔將寫入同一個服務目錄。

一般服務特定的記錄檔分類

此表涵蓋了 Tableau Server 服務最常見的服務記錄檔名稱、類型和說明。「故障類型」欄指示哪些記錄檔可能在指定的故障情況下有用。

名稱檔案名稱格式說明故障類型範例
Control-Appcontrol_<service_name>_<node_id>-<instance_id>.log包含負責安裝和設定服務的 control-app 流程資訊。這通常是與服務相關的第一個寫入記錄檔。對於服務安裝和設定失敗,請先查看此處。安裝、設定、狀態control_backgrounder_node1-0.log
服務記錄檔<service_name>_<node_id>-<instance_id>.log正在執行的服務的主要記錄檔。大多數情況下,此記錄檔包含來自 spring/java 應用程式層的輸出。開始、執行階段、狀態backgrounder_node1-1.log
Stdout 記錄檔stdout_<service_name>_<instance_id>.log包含服務的 stdout 輸出。大多數服務不會向 stdout 輸出太多內容,而是寫入主要記錄檔。有時,服務結束時,此記錄檔可能包含有用的資訊。開始、停止stdout_backgrounder_0.log
NativeAPI 記錄檔nativeapi_<service_name>_<instance_id>.txt某些服務執行原生程式碼層。此記錄檔會擷取應用程式執行階段的那部分。授權、開始、執行階段、狀態nativeapi_backgrounder_1-1_2021_05_10_00_00_00.txt
Tomcat 記錄檔tomcat_<service_name>_<node_id>-<instance_id>.log這僅適用於在 tomcat 容器內執行並包含 tomcat 記錄檔的服務。它很少提供有關服務故障的資訊。對一些網路問題進行偵錯時可能很有用。網路、開始tomcat_backgrounder_node1-0.2021-05-10.log
停止的容器

若容器已停止或難以在其中執行命令,並且伺服器的資料目錄已外部化到裝載的磁碟區,仍然可以查看記錄檔。否則,在容器的協調流程系統中只能檢查容器的 stdout ,這通常不會包含根本原因。

設定驗證屬性失敗

在沒有先設定身分存放區的情況下,在 Tableau Server 中設定驗證屬性似乎存在問題。要解決此問題,只需在預初始化勾點中設定身分存放區。

  1. 在 Tableau Server 映像組建工具 customer-files 目錄中建立一個名為 ./customer-files/pre_init_command 的檔案,並進行編輯,以包含:

    #!/bin/bash
    tsm configuration set -k wgserver.authenticate -v local --force-keys
  2. 將指令碼設定為可執行。

    chmod +x ./customer-files/pre_init_command
  3. 組建並執行映像。

全新啟動期間失敗(例如,為什麼 Tableau 伺服器未啟動?)

  • 若您在 Tableau Server 初始化或啟動時遇到問題,則有許多故障排除選項可能有助於發現該問題。
  • 若容器根本無法啟動,則需要使用 docker logs <container-name> 命令檢查 PID 1 流程的 stdout。
  • 若容器正在執行,但 Tableau Server 似乎未正確初始化或正常執行,則檢查錯誤的第二個位置為此檔案:
${DATA_DIR}/supervisord/run-tableau-server.log

範例:

docker exec -it <container-name> bash -c 'cat $DATA_DIR/supervisord/run-tableau-server.log'

此記錄檔包含由 tableau 容器初始化服務所協調的全部事件,該服務正在處理 tableau 伺服器的啟動,以及執行您可能在容器中提供的任何設定指令碼或自訂組態。大多數啟動錯誤將在此處回報問題。有時,如果錯誤與 TSM 或 Tableau Server 程序相關,則系統將建議另一個記錄檔供您查看更多詳細資訊。

重新啟動或啟動具有現有資料的容器期間失敗

伺服器不會啟動 PostGRES(或其他流程)

當資料保留在容器外部,並且您使用該舊資料啟動另一個容器中的 Tableau Server 映像執行個體時,請務必注意,新容器的內部主機名稱必須與初始化持續性資料之容器的主機名稱相符。Tableau Server 處理動態並未妥善處理主機名稱變更,並且使用不同的內部主機名稱啟動新容器,正是導致這種情況出現的原因。

補救措施就是確保容器的主機名稱設定的值與先前使用該資料執行的容器相同。這並不會與多節點發生混淆,工作人員可以(而且可能應該)具有各自不同的主機名稱。重要的是指定容器重新啟動或刪除時,後續容器必須採用與先前容器相同的主機名稱。

部署設定範例

Docker

容器中的 Tableau Server 基本使用方式
docker run \
-e LICENSE_KEY=<key>
-p 8080:8080
--hostname=<static (internal) name of host machine> \
-d <Tableau Server in a Container image ID or tag>
容器中的 Tableau Server 基本使用方式與自動建立初始管理員使用者
docker run \
-e LICENSE_KEY=<key> \
-e TABLEAU_USERNAME=<myadmin> \
-e TABLEAU_PASSWORD_FILE=/etc/tableau-admin-secret \
-v <full-path-to-pw-file>:/etc/tableau-admin-secret \
--hostname=<static (internal) name of host machine> \
-p 8080:8080 -d <Tableau Server in a Container image ID or tag>
僅限 TSM 模式
docker run \
-e TSM_ONLY=1 \
-p 8080:8080 -d <Tableau Server in a Container image ID or tag>
多節點基本使用方式
初始節點

選項 1:若伺服器設定 (CONFIG_FILE) 指定多節點拓撲,請使用此選項:

docker run \
-v <network-shared-directory>:/docker/config/bootstrap \
-v <full-path-to-config-file>:/docker/config/config.json:ro \
-e LICENSE_KEY=<key> \
-p 8080:8080 -p 8800-9000:8800-9000 -p 27000-27010:27000-27010 \
--hostname=<name-of-host-machine> \
-d <Tableau Server in a Container image ID or tag>

選項 2:若想要多節點部署,即使伺服器設定未指定多節點拓撲,也可以使用此選項:

docker run \
-v <network-shared-directory>:/docker/config/bootstrap \
-e LICENSE_KEY=<key> -e ALWAYS_WRITE_BOOTSTRAP_FILE=1 \
-p 8080:8080 -p 8800-9000:8800-9000 -p 27000-27010:27000-27010 \
--hostname=<name-of-host-machine> \
-d <Tableau Server in a Container image ID or tag>
額外節點
docker run \
-v <network-shared-directory>:/docker/config/bootstrap \
-e BOOTSTRAP_INSTALL=1 \
-p 8080:8080 -p 8800-9000:8800-9000 \
--hostname=<static (internal) name of host machine> \
-d <Tableau Server in a Container image ID or tag>
外部化資料使用方式
docker run \
-v <empty-data-dir>:/var/opt/tableau \
-e LICENSE_KEY=<key> \
---hostname=<static (internal) name of host machine> \
-p 8080:8080 -d <Tableau Server in a Container image ID or tag>
Init 容器基本使用方式

Init 容器

docker run \
-v <empty-data-dir>:/var/opt/tableau \
-e LICENSE_KEY=<key> \
-e INIT_CONTAINER=1 \
--hostname=<static (internal) name of host machine> \
-p 8080:8080 -d <Tableau Server in a Container image ID or tag>

執行容器

docker run \
-v <empty-data-dir>:/var/opt/tableau \
--hostname=<static (internal) name of host machine> \
-p 8080:8080 -d <Tableau Server in a Container image ID or tag>
從備份單一節點進行基本還原
docker run \
-v <full-path-to-backup-file>:/docker/config/backup/backup-file.tsbak \
-v <full-path-to-config-only-file>:/docker/config/config.json:ro \
-e LICENSE_KEY=<key> \
-p 8080:8080 -d <Tableau Server in a Container image ID or tag>

Docker-Compose

version: '3.2'
services:
    tableau-server:
         hostname: localhost
         volumes:
              - <your-tsm-command-file>:/docker/config/tsm-commands:ro
              - <your-config-file >:/docker/config/config.json:ro
         ports:
              - "8080:8080"
         image: ${IMAGE_NAME}
         environment:
              - LICENSE_KEY=<license-key>