{"id":1533,"date":"2026-09-11T00:11:27","date_gmt":"2026-09-11T03:11:27","guid":{"rendered":"https:\/\/www.linuxpro.com.br\/2026\/09\/openobserve-ubuntu-servidor-dedicado-s3-gcs-minio\/"},"modified":"2026-10-07T07:53:16","modified_gmt":"2026-10-07T10:53:16","slug":"openobserve-ubuntu-servidor-dedicado-s3-gcs-minio","status":"publish","type":"post","link":"https:\/\/www.linuxpro.com.br\/es\/2026\/09\/openobserve-ubuntu-servidor-dedicado-s3-gcs-minio\/","title":{"rendered":"OpenObserve en Ubuntu: servidor dedicado, S3, GCS, OCI y MinIO"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/09\/openobserve-ubuntu-servidor-dedicado-v1.webp\" alt=\"Mascote LinuxPro administrando o OpenObserve em um servidor Ubuntu com armazenamento de observabilidade\" width=\"1486\" height=\"856\" \/><\/p>\n<p>Depois de conhecer o <a href=\"\/2026\/09\/openobserve-observabilidade-logs-metricas-traces\/\">OpenObserve e sua plataforma unificada de logs, m\u00e9tricas e traces<\/a>, o pr\u00f3ximo passo \u00e9 oper\u00e1-lo em um servidor Ubuntu dedicado <strong>sem Docker<\/strong>. Este guia instala o bin\u00e1rio oficial como servi\u00e7o <code>systemd<\/code>, mant\u00e9m a porta do OpenObserve no loopback, publica a interface por nginx com TLS e mostra quando usar disco local ou S3, Google Cloud Storage, Oracle Cloud Object Storage e MinIO.<\/p>\n<div style=\"background:#fff8e1;border-left:4px solid #8b1a1a;padding:.8em 1em;margin:1em 0\"><strong>Escopo:<\/strong> \u00e9 uma instala\u00e7\u00e3o de n\u00f3 \u00fanico. Ela \u00e9 indicada quando uma janela de manuten\u00e7\u00e3o e uma restaura\u00e7\u00e3o testada s\u00e3o aceit\u00e1veis. Alta disponibilidade \u00e9 outra arquitetura: use o desenho HA oficial com os componentes exigidos e fa\u00e7a uma homologa\u00e7\u00e3o antes de mover dados importantes.<\/div>\n<p><strong>Revis\u00e3o t\u00e9cnica: 7 de outubro de 2026.<\/strong> Receita para instala\u00e7\u00e3o nova com sudo em Ubuntu e Bash. Escolha disco ou bucket antes da primeira ingest\u00e3o. Os provedores s\u00e3o alternativas, n\u00e3o etapas cumulativas; n\u00e3o execute como migra\u00e7\u00e3o sobre uma inst\u00e2ncia existente.<\/p>\n<h2>Arquitetura e dimensionamento<\/h2>\n<table>\n<thead>\n<tr>\n<th>Cen\u00e1rio<\/th>\n<th>Metadados<\/th>\n<th>Dados de telemetria<\/th>\n<th>Quando usar<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Servidor dedicado com disco<\/td>\n<td>SQLite local<\/td>\n<td>Disco local em Parquet<\/td>\n<td>Ambiente pequeno ou m\u00e9dio, opera\u00e7\u00e3o simples e reten\u00e7\u00e3o limitada.<\/td>\n<\/tr>\n<tr>\n<td>Servidor pequeno + object storage<\/td>\n<td>SQLite local<\/td>\n<td>S3, GCS, Oracle Object Storage ou MinIO<\/td>\n<td>Quando capacidade e durabilidade devem sair do disco da VM.<\/td>\n<\/tr>\n<tr>\n<td>Alta disponibilidade<\/td>\n<td>PostgreSQL<\/td>\n<td>Object storage<\/td>\n<td>Servi\u00e7o cr\u00edtico, escala horizontal e toler\u00e2ncia a falhas.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>O modo local \u00e9 o padr\u00e3o: usa SQLite para metadados e pode gravar dados de streams no disco ou em armazenamento compat\u00edvel com S3. Para um bucket em n\u00f3 \u00fanico, defina <code>ZO_LOCAL_MODE_STORAGE=s3<\/code>. N\u00e3o troque o backend de uma inst\u00e2ncia com dados sem plano de migra\u00e7\u00e3o, backup e teste de restaura\u00e7\u00e3o: apontar para um bucket n\u00e3o transporta automaticamente os Parquet existentes.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/10\/openobserve-ubuntu-storage.webp\" alt=\"Clientes HTTPS chegam ao nginx e ao OpenObserve no loopback; metadados, WAL e cache locais, Parquet no bucket\" width=\"1200\" height=\"638\" \/><\/p>\n<p><strong>Bucket n\u00e3o transforma n\u00f3 \u00fanico em HA.<\/strong> SQLite e dados de ingest\u00e3o em andamento continuam locais. Perder esses componentes pode impedir a recupera\u00e7\u00e3o completa, mesmo que os objetos j\u00e1 enviados continuem no bucket. Na op\u00e7\u00e3o de disco, os Parquet tamb\u00e9m ficam locais. Veja a <a href=\"https:\/\/openobserve.ai\/docs\/architecture\/\">arquitetura oficial<\/a>.<\/p>\n<p>Dimensione com um piloto representativo: crescimento di\u00e1rio, reten\u00e7\u00e3o, pico de ingest\u00e3o, concorr\u00eancia de consultas, CPU, mem\u00f3ria e I\/O. Reserve espa\u00e7o para WAL, cache e compacta\u00e7\u00e3o e me\u00e7a a recupera\u00e7\u00e3o ap\u00f3s falhas. N\u00e3o existe correspond\u00eancia universal entre terabytes armazenados e vCPUs. Monitore bytes livres e inodes; RAID n\u00e3o substitui backup.<\/p>\n<h2>1. Preparar o Ubuntu e criar o usu\u00e1rio do servi\u00e7o<\/h2>\n<p>Atualize o sistema e instale apenas os utilit\u00e1rios usados para baixar, validar e descompactar o arquivo. O processo do OpenObserve roda com uma conta de sistema sem login; o bin\u00e1rio permanece sob controle do root e os dados ficam em <code>\/var\/lib\/openobserve<\/code>.<\/p>\n<pre><code class=\"language-bash\">sudo apt update\nsudo apt install -y ca-certificates curl openssl tar\n\nsudo adduser --system --group --home \/var\/lib\/openobserve \\\n  --shell \/usr\/sbin\/nologin openobserve\nsudo install -d -o root -g root -m 0755 \/usr\/local\/lib\/openobserve\nsudo install -d -o openobserve -g openobserve -m 0750 \/var\/lib\/openobserve\nsudo install -d -o root -g openobserve -m 0750 \/etc\/openobserve<\/code><\/pre>\n<p>N\u00e3o use uma conta com shell administrativo para o servi\u00e7o. A separa\u00e7\u00e3o permite limitar quem l\u00ea as credenciais e quem escreve nos dados locais.<\/p>\n<h2>2. Baixar e instalar o bin\u00e1rio oficial<\/h2>\n<p>Consulte primeiro a <a href=\"https:\/\/openobserve.ai\/downloads\/\" target=\"_blank\" rel=\"noopener\">p\u00e1gina oficial de downloads<\/a> e troque <code>OO_VERSION<\/code> por uma release est\u00e1vel que voc\u00ea decidiu homologar. O exemplo usa <code>v1.0.4<\/code>, release est\u00e1vel conferida em 7 de outubro de 2026, sem prometer que ser\u00e1 a mais recente no futuro. Ele detecta <code>amd64<\/code> ou <code>arm64<\/code>; para m\u00e1quinas com glibc antiga, a documenta\u00e7\u00e3o orienta usar o pacote <code>linux-amd64-musl<\/code>, com poss\u00edvel custo de desempenho.<\/p>\n<p>Selecione a edi\u00e7\u00e3o Open Source nos downloads; artefatos Enterprise t\u00eam outros nomes. Execute o bloco em Bash. Na p\u00e1gina Downloads, selecione Open Source, a vers\u00e3o e a arquitetura; use o bot\u00e3o <strong>Show SHA256<\/strong> do pacote correspondente. O hash deve ser o publicado pelo fornecedor para esse artefato.<\/p>\n<pre><code class=\"language-bash\">(\nset -euo pipefail\nexport OO_VERSION=v1.0.4\ncase \"$(dpkg --print-architecture)\" in\n  amd64|arm64) OO_ARCH=\"$(dpkg --print-architecture)\" ;;\n  *) echo \"Arquitetura n\u00e3o suportada\"; exit 1 ;;\nesac\n\nOO_TARBALL=\"openobserve-${OO_VERSION}-linux-${OO_ARCH}.tar.gz\"\nOO_URL=\"https:\/\/downloads.openobserve.ai\/releases\/openobserve\/${OO_VERSION}\/${OO_TARBALL}\"\n\nWORK=$(mktemp -d)\ntrap 'rm -rf -- \"$WORK\"' EXIT\ncd \"$WORK\"\ncurl -fL -o \"$OO_TARBALL\" \"$OO_URL\"\nread -r -p \"SHA-256 oficial desse arquivo: \" EXPECTED\n[[ \"$EXPECTED\" =~ ^[[:xdigit:]]{64}$ ]] || { echo \"Hash inv\u00e1lido\"; exit 1; }\nprintf '%s  %s\\n' \"$EXPECTED\" \"$OO_TARBALL\" | sha256sum --check -\n\nmkdir \"$WORK\/unpack\"\ntar -xzf \"$OO_TARBALL\" -C \"$WORK\/unpack\"\nsudo install -o root -g root -m 0755 \\\n  \"$WORK\/unpack\"\/openobserve \\\n  \"\/usr\/local\/lib\/openobserve\/openobserve-${OO_VERSION}\"\nsudo ln -sfn \"\/usr\/local\/lib\/openobserve\/openobserve-${OO_VERSION}\" \\\n  \/usr\/local\/bin\/openobserve\n\n\/usr\/local\/bin\/openobserve --version\n)<\/code><\/pre>\n<p>O checksum \u00e9 uma etapa obrigat\u00f3ria antes de executar um bin\u00e1rio baixado. Guarde a vers\u00e3o instalada: atualiza\u00e7\u00f5es devem baixar uma nova release, validar o hash, instalar outro arquivo e s\u00f3 ent\u00e3o trocar o link simb\u00f3lico durante uma janela de manuten\u00e7\u00e3o.<\/p>\n<h2>3. Criar o arquivo de ambiente<\/h2>\n<p>O OpenObserve \u00e9 configurado por vari\u00e1veis de ambiente. Crie um arquivo que s\u00f3 root e o grupo do servi\u00e7o possam ler. A senha raiz \u00e9 usada na primeira inicializa\u00e7\u00e3o; gere uma senha longa, salve-a em um cofre e substitua os valores de exemplo <strong>antes<\/strong> de iniciar o servi\u00e7o.<\/p>\n<pre><code class=\"language-bash\">sudo install -o root -g openobserve -m 0640 \/dev\/null \/etc\/openobserve\/openobserve.env\nsudo tee \/etc\/openobserve\/openobserve.env &gt; \/dev\/null &lt;&lt;'EOF'\nZO_ROOT_USER_EMAIL=admin@example.com\nZO_ROOT_USER_PASSWORD=TROQUE_POR_UMA_SENHA_LONGA_E_ALEATORIA\n\n# N\u00f3 \u00fanico, dados no disco local\nZO_LOCAL_MODE=true\nZO_LOCAL_MODE_STORAGE=disk\nZO_DATA_DIR=\/var\/lib\/openobserve\n\n# O nginx ser\u00e1 a \u00fanica entrada p\u00fablica\nZO_HTTP_ADDR=127.0.0.1\nZO_HTTP_PORT=5080\nZO_GRPC_ADDR=127.0.0.1\nZO_WEB_URL=https:\/\/o2.exemplo.com\nZO_CORS_ALLOWED_ORIGINS=https:\/\/o2.exemplo.com\n\n# Ajuste a reten\u00e7\u00e3o ao piloto e ao espa\u00e7o dispon\u00edvel\nZO_COMPACT_DATA_RETENTION_DAYS=30\nEOF\nsudo chown root:openobserve \/etc\/openobserve\/openobserve.env\nsudo chmod 0640 \/etc\/openobserve\/openobserve.env\n\n# Gere uma senha para copiar ao cofre; depois cole-a no arquivo acima.\nopenssl rand -hex 32\nsudoedit \/etc\/openobserve\/openobserve.env<\/code><\/pre>\n<p><code>ZO_HTTP_ADDR=127.0.0.1<\/code> evita publicar a porta 5080 diretamente. Definimos tamb\u00e9m <code>ZO_GRPC_ADDR=127.0.0.1<\/code> para que a porta gRPC padr\u00e3o n\u00e3o fique aberta na rede. Se o OpenObserve for servido em um subcaminho, como <code>https:\/\/exemplo.com\/logs\/<\/code>, use <code>ZO_BASE_URI=\/logs<\/code> e ajuste o proxy.<\/p>\n<p>N\u00e3o inicie com a senha de exemplo. Substitua senha e dom\u00ednio com <code>sudoedit<\/code>; para bucket, aplique agora o bloco da se\u00e7\u00e3o 6. O comando de cria\u00e7\u00e3o do arquivo \u00e9 para instala\u00e7\u00e3o nova: n\u00e3o o repita sobre a configura\u00e7\u00e3o existente.<\/p>\n<h2>4. Rodar como servi\u00e7o systemd<\/h2>\n<p>Crie a unidade. O limite de descritores segue a recomenda\u00e7\u00e3o do guia oficial; <code>Restart=on-failure<\/code> tenta recuperar falhas, mas n\u00e3o corrige configura\u00e7\u00e3o inv\u00e1lida; acompanhe logs e o limite de rein\u00edcios.<\/p>\n<pre><code class=\"language-bash\">sudo tee \/etc\/systemd\/system\/openobserve.service &gt; \/dev\/null &lt;&lt;'EOF'\n[Unit]\nDescription=OpenObserve\nAfter=network-online.target\nWants=network-online.target\n\n[Service]\nType=simple\nUser=openobserve\nGroup=openobserve\nWorkingDirectory=\/var\/lib\/openobserve\nEnvironmentFile=\/etc\/openobserve\/openobserve.env\nExecStart=\/usr\/local\/bin\/openobserve\nExecStop=\/bin\/kill -s QUIT $MAINPID\nRestart=on-failure\nRestartSec=5\nLimitNOFILE=65535\nNoNewPrivileges=true\nPrivateTmp=true\nProtectHome=true\n\n[Install]\nWantedBy=multi-user.target\nEOF\n\nsudo systemctl daemon-reload\nsudo systemctl enable --now openobserve\nsudo systemctl status openobserve --no-pager\ncurl -fsS http:\/\/127.0.0.1:5080\/healthz; echo\nsudo journalctl -u openobserve -n 100 --no-pager<\/code><\/pre>\n<p>A resposta esperada do health check \u00e9 <code>{\"status\":\"ok\"}<\/code>. Se o servi\u00e7o n\u00e3o iniciar, confirme permiss\u00f5es em <code>\/var\/lib\/openobserve<\/code>, a sintaxe do arquivo de ambiente e o log do <code>journalctl<\/code>. N\u00e3o altere a senha raiz em uma inst\u00e2ncia j\u00e1 inicializada esperando recriar o usu\u00e1rio: essas vari\u00e1veis s\u00e3o necess\u00e1rias apenas no primeiro start.<\/p>\n<h2>5. Instalar nginx e publicar com TLS<\/h2>\n<p>Depois de validar o OpenObserve no loopback, publique-o com um nome DNS pr\u00f3prio, por exemplo <code>o2.exemplo.com<\/code>. Antes de pedir o certificado, crie os registros A (e AAAA, se usar IPv6) apontando para o servidor e confirme que as portas 80 e 443 chegam at\u00e9 ele. O OpenObserve continua em <code>127.0.0.1:5080<\/code>; somente o nginx ficar\u00e1 exposto.<\/p>\n<h3>Instalar o proxy reverso<\/h3>\n<pre><code class=\"language-bash\">sudo apt update\nsudo apt install -y nginx certbot python3-certbot-nginx\nsudo systemctl enable --now nginx\nsudo nginx -t\nsudo systemctl status nginx --no-pager<\/code><\/pre>\n<p>Se o host usa UFW, preserve primeiro o acesso administrativo e libere somente HTTP\/HTTPS. Em provedores de nuvem, fa\u00e7a a mesma libera\u00e7\u00e3o no firewall ou security group do provedor.<\/p>\n<pre><code class=\"language-bash\"># Execute somente se UFW j\u00e1 faz parte da pol\u00edtica deste host.\nsudo ufw allow OpenSSH  # somente se o SSH usa o perfil\/porta padr\u00e3o\nsudo ufw allow 'Nginx Full'\nsudo ufw status verbose<\/code><\/pre>\n<p>Crie primeiro um virtual host HTTP. Ele retorna 404 deliberadamente e n\u00e3o entrega a aplica\u00e7\u00e3o em HTTP; o Certbot configurar\u00e1 o desafio HTTP-01 do Let&#8217;s Encrypt. N\u00e3o publique a porta 5080 nem a 5081 no firewall.<\/p>\n<pre><code class=\"language-bash\">sudo tee \/etc\/nginx\/sites-available\/openobserve &gt;\/dev\/null &lt;&lt;'EOF'\nserver {\n    listen 80;\n    listen [::]:80;\n    server_name o2.exemplo.com;\n\n    location \/ {\n        return 404;\n    }\n}\nEOF\n\nsudo ln -s \/etc\/nginx\/sites-available\/openobserve \/etc\/nginx\/sites-enabled\/openobserve\nsudo nginx -t\nsudo systemctl reload nginx\ncurl -sSI http:\/\/o2.exemplo.com\/<\/code><\/pre>\n<p>Use um subdom\u00ednio, como no exemplo. Se optar por publicar sob um caminho, como <code>https:\/\/exemplo.com\/logs\/<\/code>, siga a documenta\u00e7\u00e3o do OpenObserve e defina <code>ZO_BASE_URI=\/logs<\/code>; apenas acrescentar <code>location \/logs\/<\/code> no nginx n\u00e3o \u00e9 suficiente.<\/p>\n<h3>Emitir e renovar o certificado<\/h3>\n<p>Com o DNS propagado e a porta 80 acess\u00edvel publicamente, o plugin nginx do Certbot pode obter o certificado e instalar o bloco HTTPS. Fa\u00e7a c\u00f3pia da configura\u00e7\u00e3o antes de permitir que o Certbot a altere.<\/p>\n<pre><code class=\"language-bash\">sudo cp -a \/etc\/nginx \/etc\/nginx.backup.$(date +%F)\nsudo certbot --nginx --redirect -d o2.exemplo.com\nsudo nginx -t\nsudo systemctl reload nginx\nsudo certbot renew --dry-run\ncurl -sSI https:\/\/o2.exemplo.com\/<\/code><\/pre>\n<h3>Ativar o proxy somente no bloco HTTPS<\/h3>\n<p>Edite <code>\/etc\/nginx\/sites-available\/openobserve<\/code>. No bloco 443 criado pelo Certbot, substitua apenas o <code>location \/<\/code> que retorna 404 pelo bloco abaixo. Preserve as diretivas TLS e mantenha a porta 80 com redirecionamento e renova\u00e7\u00e3o.<\/p>\n<pre><code class=\"language-nginx\">location \/ {\n    client_max_body_size 20m;\n    proxy_pass http:\/\/127.0.0.1:5080;\n    proxy_http_version 1.1;\n    proxy_set_header Host $host;\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_set_header X-Forwarded-Proto $scheme;\n    proxy_set_header X-Envoy-External-Address &quot;&quot;;\n    proxy_buffering off;\n    proxy_read_timeout 300s;\n}<\/code><\/pre>\n<p>Os valores <code>20m<\/code> e <code>300s<\/code> s\u00e3o escolhas iniciais desta receita, n\u00e3o universais. Lotes acima do limite de corpo recebem 413: ajuste o coletor antes de aumentar o limite indiscriminadamente. Buffering desativado evita represar respostas em fluxo. O exemplo sup\u00f5e clientes chegando diretamente ao nginx, sem outro proxy \u00e0 frente.<\/p>\n<pre><code class=\"language-bash\">sudo nginx -t &amp;&amp; sudo systemctl reload nginx\ncurl --fail --silent --show-error https:\/\/o2.exemplo.com\/healthz<\/code><\/pre>\n<p><a href=\"https:\/\/nginx.org\/en\/docs\/http\/ngx_http_core_module.html#client_max_body_size\">Limite de corpo<\/a> e <a href=\"https:\/\/nginx.org\/en\/docs\/http\/ngx_http_proxy_module.html\">diretivas de proxy<\/a> na documenta\u00e7\u00e3o nginx.<\/p>\n<p>O <code>--redirect<\/code> redireciona HTTP para HTTPS. O teste <code>renew --dry-run<\/code> confirma a renova\u00e7\u00e3o antes da data de expira\u00e7\u00e3o. Para certificados corporativos ou valida\u00e7\u00e3o DNS-01, n\u00e3o rode o comando acima: instale o certificado conforme a pol\u00edtica da organiza\u00e7\u00e3o e mantenha o mesmo proxy para <code>127.0.0.1:5080<\/code>.<\/p>\n<pre><code class=\"language-bash\">ss -lntp | grep -E ':(80|443|5080|5081)\\b'<\/code><\/pre>\n<p>O resultado deve mostrar nginx em 80\/443 e as portas 5080 e 5081 do OpenObserve apenas em loopback, nunca em <code>0.0.0.0<\/code>. N\u00e3o exponha a interface, APIs de ingest\u00e3o ou o endpoint MCP em HTTP simples.<\/p>\n<h2>Validar ingest\u00e3o e consulta antes dos dados reais<\/h2>\n<p><strong>Se escolheu bucket, conclua primeiro a se\u00e7\u00e3o 6; s\u00f3 depois envie o evento.<\/strong> Health check n\u00e3o comprova ingest\u00e3o. Use o evento JSON e a consulta SQL do <a href=\"\/2026\/09\/openobserve-observabilidade-logs-metricas-traces\/\">laborat\u00f3rio introdut\u00f3rio<\/a>, trocando a URL por <code>https:\/\/o2.exemplo.com<\/code> e o usu\u00e1rio pela conta criada. Confirme o evento, reinicie o servi\u00e7o e consulte novamente.<\/p>\n<p>O proxy mostrado atende HTTP, n\u00e3o publica OTLP\/gRPC em 5081. Configure o exporter para o protocolo e endpoint corretos; n\u00e3o abra 5081 s\u00f3 porque ele usa gRPC por padr\u00e3o.<\/p>\n<h2>6. Usar S3, GCS, Oracle Cloud ou MinIO<\/h2>\n<p>Configure o backend antes da primeira ingest\u00e3o. Em inst\u00e2ncia existente, trocar vari\u00e1veis n\u00e3o migra os dados. Com object storage, SQLite e WAL continuam no disco local. Edite o mesmo arquivo <code>\/etc\/openobserve\/openobserve.env<\/code>, mude <code>ZO_LOCAL_MODE_STORAGE<\/code> para <code>s3<\/code>, acrescente <strong>um<\/strong> bloco do provedor e reinicie o servi\u00e7o. Crie o bucket antes, use um prefixo exclusivo por ambiente e teste escrita, leitura e reten\u00e7\u00e3o em ambiente de homologa\u00e7\u00e3o.<\/p>\n<h3>AWS S3<\/h3>\n<p>Em EC2, prefira uma IAM Role com acesso m\u00ednimo ao bucket e ao prefixo em vez de credenciais est\u00e1ticas. Para S3 padr\u00e3o, n\u00e3o defina <code>ZO_S3_SERVER_URL<\/code>; o SDK busca a identidade da inst\u00e2ncia. Fora da AWS, injete as chaves por um gerenciador de segredos ou pelo arquivo de ambiente com permiss\u00e3o <code>0640<\/code>; nunca as inclua em Git.<\/p>\n<pre><code class=\"language-bash\"># Em EC2 com IAM Role: n\u00e3o defina AWS_ACCESS_KEY_ID nem AWS_SECRET_ACCESS_KEY\nZO_LOCAL_MODE_STORAGE=s3\nZO_S3_PROVIDER=s3\nZO_S3_REGION_NAME=us-east-1\nZO_S3_BUCKET_NAME=openobserve-producao\nZO_S3_BUCKET_PREFIX=openobserve\/producao\/<\/code><\/pre>\n<pre><code class=\"language-bash\"># Fora da AWS: entregue estes valores por cofre de segredos\nAWS_ACCESS_KEY_ID=CHAVE_DE_ACESSO\nAWS_SECRET_ACCESS_KEY=SEGREDO_DE_ACESSO\nZO_LOCAL_MODE_STORAGE=s3\nZO_S3_PROVIDER=s3\nZO_S3_REGION_NAME=us-east-1\nZO_S3_BUCKET_NAME=openobserve-producao\nZO_S3_BUCKET_PREFIX=openobserve\/producao\/<\/code><\/pre>\n<h3>Google Cloud Storage<\/h3>\n<p>O GCS pode usar a API compat\u00edvel com S3. Crie uma chave HMAC com acesso restrito ao bucket e use HTTP\/1, exigido pela configura\u00e7\u00e3o documentada:<\/p>\n<pre><code class=\"language-bash\">ZO_LOCAL_MODE_STORAGE=s3\nZO_S3_SERVER_URL=https:\/\/storage.googleapis.com\nZO_S3_REGION_NAME=auto\nZO_S3_ACCESS_KEY=CHAVE_HMAC_GCS\nZO_S3_SECRET_KEY=SEGREDO_HMAC_GCS\nZO_S3_BUCKET_NAME=openobserve-producao\nZO_S3_BUCKET_PREFIX=openobserve\/producao\/\nZO_S3_FEATURE_HTTP1_ONLY=true\nZO_S3_PROVIDER=s3<\/code><\/pre>\n<p>Tamb\u00e9m existe integra\u00e7\u00e3o direta: use <code>ZO_S3_PROVIDER=gcs<\/code> e, quando n\u00e3o houver identidade da inst\u00e2ncia, forne\u00e7a em <code>ZO_S3_ACCESS_KEY<\/code> o caminho para a chave JSON da conta de servi\u00e7o, com permiss\u00e3o de leitura apenas para o usu\u00e1rio <code>openobserve<\/code>.<\/p>\n<h3>Oracle Cloud Object Storage<\/h3>\n<p>O Object Storage da Oracle oferece API S3-compatible. Use uma Customer Secret Key, mantenha a URL no formato da sua tenancy e regi\u00e3o e valide a configura\u00e7\u00e3o em um bucket de teste antes de gravar dados de produ\u00e7\u00e3o.<\/p>\n<pre><code class=\"language-bash\">ZO_LOCAL_MODE_STORAGE=s3\nZO_S3_SERVER_URL=https:\/\/SEU_NAMESPACE.compat.objectstorage.SUA_REGIAO.oci.customer-oci.com\nZO_S3_REGION_NAME=SUA_REGIAO\nZO_S3_ACCESS_KEY=OCI_ACCESS_KEY\nZO_S3_SECRET_KEY=OCI_CUSTOMER_SECRET_KEY\nZO_S3_BUCKET_NAME=openobserve-producao\nZO_S3_BUCKET_PREFIX=openobserve\/producao\/\nZO_S3_PROVIDER=s3\nZO_S3_FEATURE_FORCE_HOSTED_STYLE=false<\/code><\/pre>\n<h3>MinIO<\/h3>\n<p>MinIO \u00e9 uma op\u00e7\u00e3o S3-compatible para datacenter, outra VM ou Kubernetes. Crie o bucket antes do start e use TLS entre o OpenObserve e o endpoint. Um MinIO no mesmo host n\u00e3o cria redund\u00e2ncia: uma falha da m\u00e1quina pode derrubar aplica\u00e7\u00e3o e dados ao mesmo tempo.<\/p>\n<pre><code class=\"language-bash\">ZO_LOCAL_MODE_STORAGE=s3\nZO_S3_SERVER_URL=https:\/\/minio.exemplo.com\nZO_S3_REGION_NAME=us-east-1\nZO_S3_ACCESS_KEY=MINIO_ACCESS_KEY\nZO_S3_SECRET_KEY=MINIO_SECRET_KEY\nZO_S3_BUCKET_NAME=openobserve-producao\nZO_S3_BUCKET_PREFIX=openobserve\/producao\/\nZO_S3_PROVIDER=minio<\/code><\/pre>\n<pre><code class=\"language-bash\">sudoedit \/etc\/openobserve\/openobserve.env\nsudo systemctl restart openobserve\nsudo journalctl -u openobserve -f<\/code><\/pre>\n<h3>RustFS como destino S3-compatible<\/h3>\n<p>A documenta\u00e7\u00e3o atual tamb\u00e9m descreve RustFS como destino. Use o endpoint HTTPS da API S3, n\u00e3o o console; crie bucket e credencial da aplica\u00e7\u00e3o antes:<\/p>\n<pre><code class=\"language-bash\">ZO_LOCAL_MODE_STORAGE=s3\nZO_S3_PROVIDER=s3\nZO_S3_SERVER_URL=https:\/\/s3.exemplo.com\nZO_S3_REGION_NAME=us-east-1\nZO_S3_ACCESS_KEY=CHAVE_DA_APLICACAO\nZO_S3_SECRET_KEY=SEGREDO_DA_APLICACAO\nZO_S3_BUCKET_NAME=openobserve-producao\nZO_S3_BUCKET_PREFIX=openobserve\/producao\/\nZO_S3_FEATURE_FORCE_HOSTED_STYLE=false<\/code><\/pre>\n<p>Homologue escrita, leitura, rein\u00edcio e reten\u00e7\u00e3o; esta revis\u00e3o n\u00e3o executou integra\u00e7\u00e3o contra esse backend. Autorize o bucket\/prefixo necess\u00e1rio, incluindo opera\u00e7\u00f5es de exclus\u00e3o usadas pela reten\u00e7\u00e3o. <a href=\"https:\/\/openobserve.ai\/docs\/administration\/maintenance\/storage-management\/storage\/\">Refer\u00eancia oficial dos backends<\/a>.<\/p>\n<h2>7. Integrar agentes de IA e aplica\u00e7\u00f5es LLM<\/h2>\n<p><strong>Sim: o OpenObserve pode participar de um fluxo com LLM de duas formas.<\/strong> A primeira \u00e9 observar a aplica\u00e7\u00e3o de IA via OpenTelemetry \u2014 tokens, lat\u00eancia, modelo, erros e chamadas de ferramentas viram traces e m\u00e9tricas. A segunda \u00e9 conectar um cliente MCP para consultar logs, m\u00e9tricas e traces em linguagem natural.<\/p>\n<p>O endpoint MCP segue o formato <code>https:\/\/o2.exemplo.com\/api\/ID_DA_ORGANIZACAO\/mcp<\/code>. A documenta\u00e7\u00e3o informa suporte em Open Source, Enterprise e Cloud. Use somente HTTPS e uma conta separada; n\u00e3o registre tokens em reposit\u00f3rios, chat ou arquivos compartilhados.<\/p>\n<p>Configure o cliente conforme a <a href=\"https:\/\/openobserve.ai\/docs\/integration\/ai\/mcp\/\">documenta\u00e7\u00e3o de MCP<\/a>. Basic Auth usa Base64, n\u00e3o criptografia. N\u00e3o coloque tokens em argumentos de processos compartilhados; proteja o arquivo de configura\u00e7\u00e3o do cliente e os backups. <code>unset<\/code> n\u00e3o apaga uma credencial que o cliente j\u00e1 gravou em disco.<\/p>\n<div style=\"background:#fff8e1;border-left:4px solid #8b1a1a;padding:.8em 1em;margin:1em 0\"><strong>Seguran\u00e7a no MCP:<\/strong> na edi\u00e7\u00e3o Open Source, chamadas MCP usam os privil\u00e9gios completos da conta conectada; RBAC granular est\u00e1 dispon\u00edvel na Enterprise e no Cloud. No OSS, use uma conta exclusiva para rastreabilidade e rota\u00e7\u00e3o, mas n\u00e3o a trate como privil\u00e9gio m\u00ednimo. Restrinja o endpoint por rede\/IP, pe\u00e7a confirma\u00e7\u00e3o para opera\u00e7\u00f5es de escrita e considere qualquer texto vindo de logs como dado n\u00e3o confi\u00e1vel \u2014 inclusive contra prompt injection.<\/div>\n<p>Telemetria de IA pode conter prompts, respostas, identificadores e documentos recuperados. Defina antes quais atributos podem sair da aplica\u00e7\u00e3o, fa\u00e7a redaction quando necess\u00e1rio e alinhe reten\u00e7\u00e3o, LGPD e acesso. N\u00e3o envie segredos ou chaves de API em logs ou spans.<\/p>\n<h2>Opera\u00e7\u00e3o, backup e atualiza\u00e7\u00e3o<\/h2>\n<ul>\n<li><strong>Monitore o pr\u00f3prio servi\u00e7o:<\/strong> CPU, RAM, I\/O, espa\u00e7o livre, erros de ingest\u00e3o, tempo de consulta e crescimento do bucket.<\/li>\n<li><strong>Proteja os metadados:<\/strong> em n\u00f3 \u00fanico, o SQLite local cont\u00e9m configura\u00e7\u00f5es, usu\u00e1rios, dashboards e alertas; fa\u00e7a backup consistente de <code>\/var\/lib\/openobserve<\/code> e do arquivo de ambiente, mantendo segredos protegidos.<\/li>\n<li><strong>Teste restaura\u00e7\u00e3o:<\/strong> recuperar apenas Parquet no bucket n\u00e3o recria automaticamente usu\u00e1rios, dashboards ou regras.<\/li>\n<li><strong>Atualiza\u00e7\u00e3o e retorno:<\/strong> fa\u00e7a backup consistente, homologue a release e instale o bin\u00e1rio lado a lado. Pare o servi\u00e7o antes de trocar o link. Guardar o bin\u00e1rio anterior n\u00e3o garante downgrade: migra\u00e7\u00f5es de metadados podem exigir restaurar tamb\u00e9m o backup pr\u00e9-atualiza\u00e7\u00e3o.<\/li>\n<li><strong>Revise reten\u00e7\u00e3o:<\/strong> <code>ZO_COMPACT_DATA_RETENTION_DAYS<\/code> tem padr\u00e3o de 3650 dias; defina uma pol\u00edtica expl\u00edcita e compat\u00edvel com as regras de lifecycle do bucket.<\/li>\n<\/ul>\n<h3>Backup consistente e restaura\u00e7\u00e3o<\/h3>\n<p>Neste n\u00f3 \u00fanico, agende uma janela, interrompa o envio ou garanta filas suficientes nos coletores, pare o servi\u00e7o e copie o diret\u00f3rio de dados inteiro e a configura\u00e7\u00e3o para armazenamento protegido. Preserve propriet\u00e1rio e permiss\u00f5es. N\u00e3o copie apenas o SQLite enquanto ele est\u00e1 sendo alterado.<\/p>\n<p>No modo bucket, alinhe o ponto de recupera\u00e7\u00e3o dos metadados com os objetos e a pol\u00edtica de backup. Uma c\u00f3pia local n\u00e3o congela o bucket. Restaure primeiro em rede isolada, com a mesma vers\u00e3o; valide usu\u00e1rios, streams, dashboards e consultas antes de liberar ingest\u00e3o. Registre tempo de recupera\u00e7\u00e3o e perda m\u00e1xima aceit\u00e1vel.<\/p>\n<h3>Falhas comuns<\/h3>\n<ul>\n<li><strong>502:<\/strong> confira servi\u00e7o e resposta no loopback antes de alterar nginx.<\/li>\n<li><strong>413:<\/strong> compare tamanho do lote com os limites do proxy e do backend.<\/li>\n<li><strong>401\/403:<\/strong> confira credencial, organiza\u00e7\u00e3o e permiss\u00f5es; n\u00e3o desative autentica\u00e7\u00e3o.<\/li>\n<li><strong>Erro no bucket:<\/strong> verifique endpoint, regi\u00e3o, rel\u00f3gio, validade das chaves e certificados. N\u00e3o desabilite TLS.<\/li>\n<li><strong>Disco cheio:<\/strong> examine WAL, cache e logs; n\u00e3o apague arquivos internos manualmente.<\/li>\n<\/ul>\n<p>Veja tamb\u00e9m <a href=\"\/2026\/09\/dominando-o-systemd-comandos-essenciais\/\">os comandos essenciais do systemd<\/a>.<\/p>\n<h2>Checklist final<\/h2>\n<ul>\n<li>Bin\u00e1rio oficial instalado e SHA-256 conferido antes da execu\u00e7\u00e3o.<\/li>\n<li>Servi\u00e7o <code>openobserve<\/code> ativo, com dados grav\u00e1veis apenas pela conta dedicada.<\/li>\n<li>Portas 5080 e 5081 ligadas ao loopback; interface dispon\u00edvel somente em HTTPS pelo nginx.<\/li>\n<li>Senha raiz e credenciais de bucket armazenadas fora de Git, chat e backups sem criptografia.<\/li>\n<li>Reten\u00e7\u00e3o calculada com a ingest\u00e3o real, n\u00e3o com uma taxa de compress\u00e3o presumida.<\/li>\n<li>Teste de escrita\/leitura no bucket e restaura\u00e7\u00e3o de metadados conclu\u00eddos antes da produ\u00e7\u00e3o.<\/li>\n<\/ul>\n<p>Quer avaliar outro backend de objetos com API S3? Veja <a href=\"\/2026\/10\/rustfs-no-linux-instalacao-por-binario-e-docker\/\">RustFS no Linux: instala\u00e7\u00e3o por bin\u00e1rio e Docker<\/a>. Compatibilidade S3 n\u00e3o garante integra\u00e7\u00e3o sem ajustes: valide endpoint, regi\u00e3o, autentica\u00e7\u00e3o e as opera\u00e7\u00f5es usadas pelo OpenObserve em um laborat\u00f3rio antes de migrar dados.<\/p>\n<h2>Fontes oficiais<\/h2>\n<ul>\n<li><a href=\"https:\/\/openobserve.ai\/downloads\/\" target=\"_blank\" rel=\"noopener\">OpenObserve: downloads de bin\u00e1rios<\/a><\/li>\n<li><a href=\"https:\/\/openobserve.ai\/docs\/getting-started\/\" target=\"_blank\" rel=\"noopener\">OpenObserve: instala\u00e7\u00e3o self-hosted<\/a><\/li>\n<li><a href=\"https:\/\/openobserve.ai\/docs\/administration\/maintenance\/operator-guide\/systemd\/\" target=\"_blank\" rel=\"noopener\">OpenObserve: servi\u00e7o systemd<\/a><\/li>\n<li><a href=\"https:\/\/openobserve.ai\/docs\/administration\/configuration\/environment-variables\/\" target=\"_blank\" rel=\"noopener\">OpenObserve: refer\u00eancia de vari\u00e1veis de ambiente<\/a><\/li>\n<li><a href=\"https:\/\/openobserve.ai\/docs\/administration\/maintenance\/storage-management\/storage\/\" target=\"_blank\" rel=\"noopener\">OpenObserve: storage local, S3, GCS e MinIO<\/a><\/li>\n<li><a href=\"https:\/\/openobserve.ai\/docs\/administration\/maintenance\/operator-guide\/nginx-proxy\/\" target=\"_blank\" rel=\"noopener\">OpenObserve: nginx como proxy reverso<\/a><\/li>\n<li><a href=\"https:\/\/eff-certbot.readthedocs.io\/en\/stable\/using.html\" target=\"_blank\" rel=\"noopener\">Certbot: plugin nginx e renova\u00e7\u00e3o de certificados<\/a><\/li>\n<li><a href=\"https:\/\/openobserve.ai\/docs\/integration\/ai\/mcp\/\" target=\"_blank\" rel=\"noopener\">OpenObserve: servidor MCP<\/a><\/li>\n<li><a href=\"https:\/\/openobserve.ai\/docs\/integration\/ai\/\" target=\"_blank\" rel=\"noopener\">OpenObserve: integra\u00e7\u00f5es de IA e LLM<\/a><\/li>\n<li><a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Object\/Tasks\/s3compatibleapi.htm\" target=\"_blank\" rel=\"noopener\">Oracle Cloud: API compat\u00edvel com Amazon S3<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Despu\u00e9s de conocer OpenObserve y su plataforma unificada de logs, m\u00e9tricas y traces, el siguiente paso es operarlo en un servidor Ubuntu dedicado sin Docker. Esta gu\u00eda instala el binario oficial como servicio systemd, mantiene el puerto de OpenObserve en loopback, publica la interfaz mediante nginx con TLS y muestra cu\u00e1ndo usar disco local \u2026 <a title=\"OpenObserve en Ubuntu: servidor dedicado, S3, GCS, OCI y MinIO\" class=\"read-more\" href=\"https:\/\/www.linuxpro.com.br\/es\/2026\/09\/openobserve-ubuntu-servidor-dedicado-s3-gcs-minio\/\" aria-label=\"Leer m\u00e1s sobre OpenObserve no Ubuntu: servidor dedicado, S3, GCS, OCI e MinIO\">Leer m\u00e1s<\/a><\/p>","protected":false},"author":0,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[46,21,2,120],"tags":[47,461,463,455,454,459,462,460,5],"class_list":["post-1533","post","type-post","status-publish","format-standard","hentry","category-devops","category-infra","category-linux","category-servidores","tag-devops","tag-gcs","tag-minio","tag-observabilidade","tag-openobserve","tag-opentelemetry","tag-oracle-cloud","tag-s3","tag-ubuntu"],"_links":{"self":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/1533","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/comments?post=1533"}],"version-history":[{"count":3,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/1533\/revisions"}],"predecessor-version":[{"id":1817,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/1533\/revisions\/1817"}],"wp:attachment":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/media?parent=1533"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/categories?post=1533"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/tags?post=1533"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}