Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Centralize logs de vários projetos no Google Cloud Platform

By Mike SparrNov 30, 20205 min read

Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.

Na DoiT International, atendemos diversas empresas de software pelo mundo todo. É comum vários clientes nos procurarem com problemas parecidos. Recentemente, acompanhei vários casos em que organizações queriam consolidar os logs de vários projetos do Google Cloud Platform (GCP) em um único projeto, com acesso e observação centralizados.

Muitas empresas mandam seus logs para provedores externos, como Datadog, Splunk e outros. Mas, neste post, vou mostrar como unificar arquivos de log com controle de acesso usando apenas o serviço Cloud Logging do GCP (antigo Stackdriver). O resultado é uma solução simples e elegante para uma necessidade cada vez mais comum.

Arquitetura

Visão geral da arquitetura da demonstração

TL;DR

Neste exemplo, vou criar dois projetos de teste e configurar o envio dos logs deles para um projeto central. De brinde, também vou mostrar como centralizar monitoramento e métricas (outro caso de uso bem comum).

  1. Crie três projetos de teste no GCP: mike-test-log-view, mike-test-log-a e mike-test-log-b
  2. Crie um logs bucket no projeto mike-test-log-view e copie o caminho do bucket
  3. Crie um log sink do tipo Cloud Logging bucket, apontando para o caminho copiado no passo 2, nos dois projetos mike-test-log-a e mike-test-log-b
  4. Veja os detalhes de cada log sink e copie o e-mail da Service Account da entidade gravadora (criada dinamicamente para cada um)
  5. Edite as funções do IAM no projeto mike-test-log-view e adicione cada Service Account copiada dos log sinks, concedendo a função Logs Bucket Writer a cada uma
  6. Edite as funções do IAM no projeto mike-test-log-view e adicione a função Logs View Accessor com uma condição apontando para o caminho do seu logs bucket (para restringir o acesso por usuário)
  7. Acesse a página Logs Explorer e clique em "Refine Scope" no topo, selecione "Scope by storage" e escolha o seu logs bucket

Passo a passo

Os passos a seguir mostram como enviar logs de vários projetos do Google Cloud Platform para um único projeto centralizado.

Passo 1: criar os projetos de teste

Esse passo dispensa explicações. Criei três projetos como descrito acima, só para fins de demonstração.

Passo 2: criar o logs bucket no projeto de visualização

Acesse Logs Storage, clique em "Create Logs Bucket" e copie o caminho do bucket

Passo 3: criar os log sinks nos projetos de teste

Crie os log sinks nos projetos de teste a e b, respectivamente.

Defina o destino do sink como "Cloud Logging Bucket"

Selecione a opção "Use a logs bucket in another project"

Log sink do projeto de teste "a", complementando o destino com o caminho do logs bucket (depois do domínio)

Log sink do projeto de teste "b", complementando o destino com o caminho do logs bucket (depois do domínio)

Passo 4: ver os detalhes dos log sinks e anotar a identidade gravadora do IAM

Em cada projeto de teste, na lista da página "Log Router Sinks", clique nos "" (3 pontinhos) na ponta direita da linha do seu novo log sink e selecione "View Details".

Copie a "Writer identity", que é a service account criada dinamicamente junto com o log sink. Você vai adicioná-la ao projeto de visualização para liberar a gravação de entradas de log no seu logs bucket central.

Passo 5: editar as funções do IAM no projeto de visualização para os gravadores dos log sinks

Para cada log sink, no seu projeto central de visualização, acesse a página de administração do IAM e adicione um membro com a função Logs Bucket Writer, usando a service account da "Writer identity" copiada no passo 4, conforme a imagem.

Adicionando funções do IAM para que os log sinks gravem entradas de log no projeto de visualização

Passo 6: editar as funções do IAM no projeto de visualização para os visualizadores de logs (usuários)

Para que os usuários consigam ver os logs no Logs Explorer, é preciso liberar a edição da visualização (ou escopo) atribuindo a função Logs View Accessor.

Liberando aos usuários a edição da visualização (escopo) do Logs Explorer

Você pode (e deve) deixar a função do IAM do usuário ainda mais granular, com uma condição que restrinja o acesso só aos recursos desejados. Neste caso, é o caminho do logs bucket que você criou. Assim dá para limitar a visão dos usuários só aos logs e buckets que você quiser, o que é útil para controles de compliance.

Passo 7: visualizar os logs

Com as permissões no lugar, em poucos minutos (ou até menos) você já começa a ver entradas de log no seu projeto de visualização. Antes, é preciso clicar em "Refine Scope" e selecionar a fonte de logs desejada, como na imagem.

Refinando o escopo do Logs Explorer para explorar os logs enviados ao Logs Bucket pelos sinks

Pronto! Direto do seu projeto de visualização, agora dá para ver os logs de outros projetos, como mostra a imagem.

Os logs do projeto de teste "a" aparecem no projeto de "visualização"

Bônus \#1: reduza custos com filtros de exclusão

Você pode desativar o log sink "_Default" nos seus projetos para não pagar por logging em vários lugares.

Também dá para adicionar filtros de exclusão (ou de inclusão) nos log sinks para controlar quais serviços são enviados e quais ficam de fora.

Bônus \#2: centralize seu Cloud Monitoring

O Google Cloud Operations (antigo Stackdriver) é uma plataforma de observabilidade completa que, além do logging, conta com outra ferramenta chamada Cloud Monitoring.

Em poucos cliques, dá para criar um "Workspace" no seu projeto de visualização e, se quiser, selecionar os outros projetos para centralizar o monitoramento e os dashboards.

Espero que este artigo ajude você a organizar e gerenciar melhor o logging e a observabilidade em toda a sua organização. Me siga ou acesse o Blog da DoiT para mais artigos com dicas e técnicas, novidades, boas práticas e muito mais sobre nuvem pública.