Tableau Server em um Contêiner - Solucionar problemas

Introdução

O Tableau Server em um Contêiner é a primeira oferta de servidor em contêiner do Tableau. O Tableau Server em um contêiner é uma instância multifuncional do Tableau Server em execução dentro de um contêiner Docker do Linux. Em outras palavras, um Tableau Server em um Contêiner é uma imagem de docker que executa um aplicativo completo e independente do Tableau Server. O Tableau Server em um Contêiner é o primeiro de muitos passos para aceitar a execução do Tableau Server em um ambiente de contêineres. A maneira mais fácil de entender o conceito do Tableau Server em um Contêiner é imaginá-lo como uma VM com o Tableau Server pré-instalado. A imagem é baseada em uma imagem UBI 8 (CentOS 7.x para versão 2022.1 e anterior) e executa supervisord (em vez de systemd) dentro do contêiner. Quando o contêiner é iniciado, o supervisord imediatamente tenta inicializar e executar o Tableau Server. Grande parte desta documentação visa descrever como estabelecer a configuração e utilizar a automação de modo que você possa executar o Tableau Server em ambientes do Docker.

A ferramenta de configuração de Tableau Server em uma Imagem de contêiner ajuda a criar e personalizar imagens de contêiner para incluir pacotes e artefatos personalizados. Uma das funções principais da ferramenta é criar a imagem do contêiner e instalar conectores de dados personalizados.

Para testar o Tableau Server em uma imagem de contêiner rapidamente em cenários à prova de conceito, consulte Tableau Server em um Contêiner - Início Rápido .

Limitações

  • O Tableau Server em um Contêiner oferece suporte apenas à ativação de licença usando Server ATR, que exige que o contêiner tenha acesso à Internet. Portanto, não é possível a ativação offline em um ambiente fisicamente isolado.
  • O Tableau Server em um Contêiner atualmente não é compatível com o agente da Resource Monitoring Tool (RMT).
  • O Kerberos não é compatível com o Tableau Server em um Contêiner

Solução de problemas

Se você encontrar problemas ao executar o Tableau Server, há vários caminhos que poderá seguir para encontrar uma solução. Esta seção cobre conselhos gerais de solução de problemas do Tableau Server, como onde encontrar registros e o que eles significam. Ela também aborda alguns cenários específicos conhecidos e caminhos de mitigação.

Se você estiver trabalhando com o suporte do Tableau para depurar um problema, pode ser útil fornecer o seguinte:

  • Registros do Tableau Server (a coleta desses registros é explicada a seguir).
  • Registros de contêiner do Dockerstdout .
  • Arquivo do Docker do Tableau Server (se alguma personalização foi feita).
  • Configuração de implantação, incluindo:

    • Kubeconfig (ou qualquer configuração de implantação equivalente).
    • Arquivos de configuração estática que configuram o contêiner do Tableau Server.

Falhas de instalação e inicialização

Se você estiver inicializando o Tableau Server pela primeira vez, ou se tiver feito uma nova instalação dentro de um contêiner, o servidor não se recuperará apenas do reinicialização do contêiner. Cada tentativa de instalação deve usar um diretório de dados limpo. Isso pode significar a exclusão de dados de volume persistentes de execuções anteriores do contêiner. Se você fizer isso, certifique-se de salvar os registros e informações que podem ser úteis para depuração.

Depuração com falha de instalação

Os contêineres do Tableau Server são projetados para sair quando uma falha de instalação for encontrada. Esse padrão torna mais fácil automatizar e identificar quando ocorre uma falha de instalação. No entanto, pode tornar a depuração um desafio porque o contêiner será fechado e não deixará nenhum estado de tempo de execução examinável. Se você gostaria de ter uma sessão de depuração dentro de um contêiner em execução que está falhando durante a inicialização, siga estas etapas:

  1. Prepare um novo Tableau Server em uma implantação de contêiner.
  2. Configure o contêiner para ser executado com a variável de ambiente TSM_ONLY=1. A variável de ambiente TSM_ONLY=1 informa ao Tableau Server para inicializar apenas o TSM. Isso é o equivalente a apenas executar o script initialize-tsm em uma instalação padrão sem contêiner.
  3. Execute o contêiner do Tableau Server.
  4. Abra um shell dentro do contêiner.
  5. Agora você pode executar comandos TSM, mesmo que o Tableau Server não tenha sido inicializado. Para retomar a automação que ocorre normalmente durante a inicialização, execute o roteiro tsm-commands: "${DOCKER_CONFIG}"/config/tsm-commands

Suporte para Tableau e Kubernetes

O Tableau Server em um Contêiner pode ser executado usando Kubernetes, mas não é um requisito para fazer isso. Nossa expectativa é que a maioria dos clientes use o Kubernetes ou um de seus ambientes de nuvem gerenciados associados (EKS, AKS ou GKS) para executar e gerenciar o Tableau Server em um Contêiner.

O Kubernetes pode ser um ambiente complexo de execução e depuração e geralmente inclui dependências na infraestrutura e configuração de empresas individuais. Por isso, o Suporte do Tableau não pode ajudar os clientes a resolver problemas de Kubernetes (ou implantação de infraestrutura) associados à execução do Tableau Server em um contêiner. No entanto, o Tableau oferece suporte à execução do Tableau Server em um contêiner do Docker. Portanto, se você estiver tendo problemas para executar o Tableau Server em um contêiner usando Kubernetes, o Suporte do Tableau só pode, no máximo, validar se o contêiner do Docker funciona adequadamente sozinho.

Para obter mais informações sobre como executar o Tableau Server em um contêiner usando Kubernetes, consulte este site do Github: https://github.com/tableau/tableau-server-in-kubernetes(O link abre em nova janela).

Registros:

Os registros são um recurso essencial para localizar, compreender e resolver problemas no Tableau Server. Eles são úteis para ajudar nossas equipes de suporte a encontrar a causa raiz dos problemas que você encontra. Os registros também podem ser úteis para sua própria depuração e solução de problemas.

Extração de todos os registros

Se você precisar extrair todos os registros para depuração adicional ou para enviar para nossas equipes de suporte, existem alguns métodos para recuperar essas informações.

Ziplogs

O TSM pode criar um arquivo compactado contendo todos os logs de servidor relevantes. Você pode acionar isso executando o comando tsm maintenance ziplogs. Quando o comando for concluído, ele relatará o caminho do arquivo de registro. Você precisará copiar o arquivo usando qualquer método de transferência de arquivos que funcione melhor para sua situação. Para obter detalhes sobre ziplogs, consulte tsm maintenance ziplogs.

Exemplo de comando executado dentro do contêiner:

tsm maintenance ziplogs
Comando Tar manual

Se você não puder executar o comando ziplogs, por exemplo, se o servidor não conseguir atingir um estado consistente, você ainda pode recuperar os registros executando um comando tar dentro do contêiner. Você precisará copiar o arquivo usando qualquer método de transferência de arquivos que funcione melhor para sua situação.

Comando de exemplo executado dentro do contêiner (grava o tar em um diretório temporário no diretório de dados do contêiner):

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'
Registros de navegação e dicas de depuração

Existem etapas comuns para diagnosticar a maioria dos problemas no Tableau Server. Se você está pensando em dar uma olhada nos registros do servidor, pode ser útil analisar quais informações procurar, dependendo de onde ocorreu o erro no ciclo de vida do servidor.

Inicialização do contêiner (inicial/instalação)

Se o contêiner estiver travando imediatamente ou não for instalado ou inicializado, verifique os seguintes recursos:

Stdout de contêiner

Examine stdout para o contêiner do docker. Isso é mais frequentemente acessível ao observar a saída do contêiner coletada por seu sistema de orquestração de contêineres (por exemplo, Kubernetes). Como o Tableau Server é um sistema de vários processos em execução dentro de um contêiner, o stdout geralmente não será útil e não relatará a causa raiz do problema, a menos que haja falhas catastróficas na inicialização. É recomendável que você verifique o stdout do contêiner com falha antes de se aprofundar nos registros do Tableau Server.

Exemplo:

docker logs <container-name>

Registro do contêiner do Tableau Server

O registro de inicialização do Tableau Server Container captura a saída da automação que está inicializando, configurando e iniciando o Tableau Server. Se você descobrir que o contêiner está com problemas durante a inicialização ou execução pela primeira vez, este é o primeiro registro a verificar:

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

Verifique a parte inferior do registro e veja se há uma falha relatada. Às vezes, o erro é relatado e fica imediatamente óbvio no registro. Se o erro não estiver claro, é possível que a causa raiz só seja visível em um arquivo de registro específico do estágio ou do serviço. Os registros listados abaixo cobrem essas possibilidades.

Registro de instalação do Tableau Server

Se o registro de inicialização indicar que houve um problema com a automação que manipula o estágio de inicialização do TSM, verifique este registro:

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

Registro do controlador do Tableau Server

Se o registro de inicialização indicar que houve um problema com o estágio de inicialização e início do servidor (somente CLI), verifique o registro de serviço do tabadmincontroller:

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

Este arquivo de registro é para um serviço específico chamado tabadmincontroller. Tabadmincontroller é responsável por orquestrar a inicialização e a funcionalidade de inicialização no servidor. Este registro pode ser complexo e detalhado. Os erros neste arquivo de registro ainda podem não apontar para a causa raiz. Às vezes, os erros são causados por serviços nos quais tabadmincontroller depende para concluir uma determinada tarefa. Verifique a seção Tempo de execução do servidor abaixo para obter mais detalhes.

Registros de serviço - Tempo de execução do servidor

Se o Tableau Server tiver problemas durante o tempo de execução normal ou problemas com serviços que falham ao concluir tarefas ou estão inativos, você poderá verificar os registros de serviço para obter mais informações. Cada serviço executado como parte do Tableau Server tem um arquivo de registro de serviço. Se você souber qual serviço deseja examinar, poderá encontrar os registros desse serviço neste diretório geral:

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

Forneça o nome do serviço noarg <service_name> do caminho do arquivo. Qualquer serviço pode gravar vários tipos de arquivos de registro. Além disso, se você tiver mais de um serviço do mesmo em execução (mais de uma instância), todos os registros de serviço serão gravados no mesmo diretório de serviço.

Classificações gerais do arquivo de registro de serviço específico

Esta tabela cobre os nomes, tipos e descrições de arquivo de registro de serviço mais comuns para os serviços do Tableau Server. A coluna “Tipos de falha” indica quais arquivos de registro podem ser úteis em um determinado cenário de falha.

NomeFormato de nome de arquivoDescriçãoTipos de falhaExemplo
Control-Appcontrol_<service_name>_<node_id>-<instance_id>.logContém informações do processo control-app que é responsável por instalar e configurar um serviço. Geralmente, esse é o primeiro registro escrito relacionado a um serviço. Para obter as falhas de instalação e configuração de serviço, olhe aqui primeiro.Instalar, configurar, statuscontrol_backgrounder_node1-0.log
Registro de serviço<service_name>_<node_id>-<instance_id>.logRegistro primário para um serviço em execução. Na maioria das vezes, esse registro contém a saída da camada de aplicativo spring/java.Iniciar, tempo de execução, statusbackgrounder_node1-1.log
Registro Stdoutstdout_<service_name>_<instance_id>.logContém a saída stdout para o serviço. A maioria dos serviços não produz muito conteúdo para stdout e, em vez disso, grava no registro principal. Às vezes, esse registro pode conter informações úteis quando um serviço é encerrado.Começar, pararstdout_backgrounder_0.log
Registro NativeAPInativeapi_<service_name>_<instance_id>.txtAlguns serviços executam uma camada de código nativo. Este registro captura essa parte do tempo de execução do aplicativo.Licenciamento, início, tempo de execução, statusnativeapi_backgrounder_1-1_2021_05_10_00_00_00.txt
Registro Tomcattomcat_<service_name>_<node_id>-<instance_id>.logIsso é apenas para serviços executados dentro de um contêiner do tomcat e contém registros Tomcat. Raramente fornece informações sobre falha de serviço. Pode ser útil depurar alguns problemas de rede.Rede, Iniciartomcat_backgrounder_node1-0.2021-05-10.log
Contêiner parado

Se o contêiner estiver parado ou for difícil de executar comandos, você ainda poderá analisar os registros, se o diretório de dados do servidor for externalizado para um volume montado. Caso contrário, apenas o stdout do contêiner será analisado no sistema de orquestração, que geralmente não contém a causa raiz.

Falha ao definir propriedades de autenticação

Parece haver um problema com a configuração das propriedades de autenticação no Tableau Server, sem que o armazenamento de identidade seja definido primeiro. Para contornar esse problema, basta definir o armazenamento de identidade no gancho de pré-inicialização.

  1. Crie um arquivo chamado./customer-files/pre_init_command no diretório de arquivos do cliente da Ferramenta de criação de imagem do Tableau Server e edite-o para conter:

    #!/bin/bash
    tsm configuration set -k wgserver.authenticate -v local --force-keys
  2. Defina o script para ser executável.

    chmod +x ./customer-files/pre_init_command
  3. Crie e execute a imagem.

Falha durante a nova inicialização (por exemplo, por que o Tableau Server não está sendo iniciado?)

  • Se você estiver com problemas para inicializar o Tableau Server ou para colocá-lo em operação, existe uma série de opções de solução de problemas que podem ajudar a descobrir o problema.
  • Se o contêiner não puder ser iniciado, verifique o stdout do processo de PID 1 usando o comando docker logs <container-name>.
  • Se o contêiner estiver em execução, mas parece que o Tableau Server não está inicializando ou funcionando corretamente, o segundo lugar a ser verificado quanto a erros é este arquivo:
${DATA_DIR}/supervisord/run-tableau-server.log

Exemplo:

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

Este arquivo de registro contém todos os eventos orquestrados pelo serviço de inicialização de contêineres do Tableau, que está controlando a inicialização do Tableau Server, bem como executando os scripts de configuração ou a configuração personalizada que você pode ter fornecido no contêiner. A maioria dos erros de inicialização relata os problemas aqui. Às vezes, se o erro estiver relacionado a um processo do TSM ou do Tableau Server, outro arquivo de registro será sugerido para procurar informações mais detalhadas.

Falha durante a reinicialização ou inicialização de um contêiner com dados existentes

O servidor não inicia o Postgres (ou outros processos)

Quando os dados são persistentes fora do contêiner e você está iniciando outra instância da imagem do Tableau Server em um Contêiner usando esses dados antigos, é importante observar que o hostname interno do novo contêiner deve corresponder ao hostname do contêiner que inicializou o dados persistentes. O Tableau Server não lida bem com alterações de hostnames dinâmicos, e iniciar um novo contêiner com um hostname interno diferente está efetivamente causando esse cenário.

Para solucionar essa questão, basta verificar se o hostname do contêiner está definido como o mesmo valor que o contêiner que estava sendo executado anteriormente com esses dados. Isso não deve ser confundido com vários nós. Os trabalhadores podem (e provavelmente devem) ter hostnames diferentes entre si. O que importa é que, quando determinado contêiner é reiniciado ou eliminado, o contêiner subsequente deve ter o mesmo hostname que seu antecessor.

Exemplos de configuração de implantação

Docker

Uso básico do Tableau Server em um Contêiner
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>
Uso básico do Tableau Server em um Contêiner com Usuário administrador inicial automatizado
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>
Único modo do TSM
docker run \
-e TSM_ONLY=1 \
-p 8080:8080 -d <Tableau Server in a Container image ID or tag>
Uso básico de vários nós
Nó inicial

Opção 1: use se a configuração do servidor (CONFIG_FILE ) especifica uma topologia de vários nós:

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>

Opção 2: use se desejar uma implantação de vários nós, mesmo se a configuração do servidor não especificar a topologia de vários nós:

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>
Nó adicional
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>
Externalizar o uso de dados
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>
Uso básico do init-container

Contêiner 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>

Contêiner de execução

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>
Restauração básica do nó único de backup
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>