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)를 기반으로 하며 컨테이너 내부에서 systemd 대신 supervisord를 실행합니다. 컨테이너가 supervisord를 시작하면 Tableau Server가 즉시 초기화 및 시작됩니다. 여기에 있는 많은 설명서는 Tableau Server를 Docker 환경에서 실행할 수 있도록 구성을 제공하고 자동화를 활용하는 방법을 설명하는 데 목적이 있습니다.

Tableau Server 컨테이너 이미지 설정 도구를 사용하면 컨테이너 이미지를 만들고 사용자 지정 패키지와 아티팩트를 포함하도록 사용자 지정할 수 있습니다. 이 도구의 주요 기능 중 하나는 컨테이너 이미지를 만들고 사용자 지정 데이터 커넥터를 설치하는 것입니다.

개념 증명 시나리오에서 Tableau Server 컨테이너 이미지를 빠르게 테스트하려면 Tableau Server 컨테이너 - 빠른 시작을 참조하십시오.

제한 사항

  • Tableau Server 컨테이너는 인터넷 액세스가 필요한 서버 ATR을 사용한 라이선스 활성화만 지원합니다. 따라서 Air-Gapped 환경에서 오프라인 활성화가 불가능합니다.
  • Tableau Server 컨테이너는 현재 RMT(Resource Monitoring Tool) 에이전트를 지원하지 않습니다.
  • 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. 기존 컨테이너 내부에서 셸을 엽니다.
  5. Tableau Server가 초기화되지 않았어도 이제 TSM 명령을 실행할 수 있습니다. 초기화 중에 정상적으로 수행되는 자동화를 다시 시작하려면 다음 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 검사를 수행합니다. stdout은 컨테이너 오케스트레이션 시스템(예: Kubernetes)에서 수집한 컨테이너 출력을 확인하여 가장 자주 액세스할 수 있습니다. Tableau Server는 컨테이너 내부에서 실행되는 다중 프로세스 시스템이기 때문에 stdout은 종종 유용하지 않으며 시작 시 심각한 장애가 발생하지 않는 한 문제의 근본 원인을 보고하지 않습니다. Tableau Server 로그를 더 자세히 검토하기 전에 결함이 있는 컨테이너의 stdout 검사를 하는 것이 좋습니다.

예:

docker logs <container-name>

Tableau Server 컨테이너 시작 로그

Tableau Server Container 시작 로그는 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는 서버에서 초기화 및 시작 기능을 조정하는 역할을 합니다. 이 로그는 복잡하고 자세한 정보를 제공할 수 있습니다. 이 로그 파일에 기록된 오류는 여전히 근본 원인을 가리키지 않을 수 있습니다. 경우에 따라 이 오류는 tabadmincontroller가 특정 작업을 완료하기 위해 사용하는 서비스에 의해 발생합니다. 자세한 내용은 아래의 서버 런타임 섹션을 참조하십시오.

서비스 로그 - 서버 런타임

정상 런타임 중에 문제가 발생하거나 서비스가 작업을 완료하지 못했거나 중단된 경우 서비스 로그에서 자세한 내용을 확인할 수 있습니다. 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 로그<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 만 검사할 수 있으며, 이는 종종 근본 원인을 포함하지 않습니다.

인증 속성 설정 실패

처음에 ID 저장소를 설정하지 않은 상태로 Tableau Server에서 인증 속성을 설정하여 문제가 발생한 것 같습니다. 이 문제를 해결하려면 사전 초기화 후크에 ID 저장소를 설정하면 됩니다.

  1. Tableau Server Image Build 도구의 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 Server가 시작되지 않는 이유)

  • 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 Server의 시작과 컨테이너에서 입력할 수 있는 모든 설정 스크립트 또는 사용자 지정 구성의 실행을 처리하는 Tableau 컨테이너 초기화 서비스에서 오케스트레이션된 모든 이벤트를 포함합니다. 대부분의 시작 오류는 문제가 여기에 보고됩니다. 오류가 TSM 또는 Tableau Server 프로세스와 관련된 경우 더 자세한 정보를 살펴볼 수 있는 다른 로그 파일이 제안됩니다.

기존 데이터가 있는 컨테이너를 다시 시작하거나 시작하는 동안 실패

Server에서 PostGRES(또는 다른 프로세스)가 시작되지 않음

데이터가 컨테이너 외부에 유지되고 해당 기존 데이터를 사용하여 다른 Tableau Server 컨테이너 이미지 인스턴스를 시작하는 경우 새 컨테이너의 내부 호스트 이름이 영구 데이터를 초기화한 컨테이너의 호스트 이름과 일치해야 합니다. Tableau Server는 동적 호스트 이름 변경을 잘 처리하지 못하며 다른 내부 호스트 이름을 사용하여 새 컨테이너를 시작하면 이 시나리오가 발생하게 됩니다.

해결 방법은 컨테이너의 호스트 이름을 이전에 해당 데이터로 실행한 컨테이너와 동일한 값으로 설정하는 것입니다. 이것을 작업자가 서로 다른 호스트 이름을 가질 수 있는 다중 노드와 혼동하지 마십시오. 중요한 것은 지정된 컨테이너를 다시 시작하거나 종료(kill)한 경우 후속 컨테이너가 이전 컨테이너와 동일한 호스트 이름을 사용해야 한다는 것입니다.

배포 구성 예

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>
컨테이너 초기화 기본 사용법

컨테이너 초기화

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>