pipelines icon indicating copy to clipboard operation
pipelines copied to clipboard

Custo de armazenamento e processamento do GCP

Open laura-l-amaral opened this issue 1 year ago • 9 comments

  • [ ] Descobrir quais são os indicadores relevantes

laura-l-amaral avatar Jan 05 '24 18:01 laura-l-amaral

É possível exportar as informações de billing para o BQ a partir desse tutorial Mais informações a respeito aqui

Esse caminho me parece interessante! Ao ter os dados no BQ conseguimos facilmente montar gráficos no Metabase!

@rdahis o que acha de exportarmos essa informação para o BQ?

Alguns pontos que li que parecem relevantes:

  • Se quisermos ver o custo do GKE detalahado é necessário habilitar essa função, mais detalhes sobre isso nesse link
  • Eu não sei o que o GKE mede então não sei se isso é importante. Talvez podemos olhar juntos os relatórios pela interface do google para entender melhor sobre
  • Os conjuntos que contêm dados de preços coletam apenas dados de faturamento do Google Cloud incorridos a partir da data em que você configurou a exportação do Faturamento do Cloud. Ou seja, os dados do Google Cloud Billing não foram adicionados retroativamente. Sendo assim, você não verá os dados do Cloud Billing antes de ativar a exportação.

laura-l-amaral avatar Jan 05 '24 21:01 laura-l-amaral

tem um tutorial que parece bem prático aqui também!

(confesso que estou confusa com a quantidade de tutoriais)

laura-l-amaral avatar Jan 05 '24 21:01 laura-l-amaral

Já tínhamos todos os passos de setup feitos! Só não tenho certeza se está exportando dados de todos os projetos (em particular o basedosdados-dev) ou só o basedosdados.

Já viu esse conjunto basedosdados.br_bd_indicadores.gcp_billing_export_v1_01709D_1C0CEE_6E40BF? E esse basedosdados.br_bd_indicadores.gcp_billing_export_resource_v1_01709D_1C0CEE_6E40BF.

rdahis avatar Jan 06 '24 00:01 rdahis

opa! Não tinha visto, vou ver!

laura-l-amaral avatar Jan 08 '24 13:01 laura-l-amaral

Algumas anotações aqui:

  • Por enquanto não temos nenhuma tag

    aparentemente tags são ferramentas para gerenciar acessos de usuários, labels é o que precisamos usar aqui

  • As labels podem me ajudar a entender os custos, mas com certeza precisamos melhorar como elas estão sendo gravadas, por enquanto elas nao me ajudam em quase nada
  • Parece que os custos com k8 estão todos em dev, mas confesso que não entendo muito dessa parte de processamento
  • A tabela de dados detalhadas por recurso pode detalha os seguintes recursos: Compute Engine Google Kubernetes Engine (GKE) Cloud Functions Cloud Run Cloud SQL Cloud Spanner App Engine Firestore e Datastore
  • Os 2 recursos que temos contato direto em dados são Cloud Storage e BigQuery. Ambos não estão na lista e para melhor gerenciá-los vamos ter que usar labels
  • Ainda assim podemos ver se temos como entender melhor como funciona o Compute Engine e Kubernetes Engine pq são 2 custos importantes pra gente.
  • O próximo passo é ver se consigo entender de onde estão vindo as labels. Já temos algumas tabelas com labels, mas elas nao estão aparecendo do jeito que eu imaginei
  • Inclui algumas labels para ver sse segunda já consigo usar essas labels para montar um plano de acompanhamento
  • Seria interessante entender se temos como usar a label dbt_invocation_id para rastrear custos com o dbt

Query para visualizar os custos por projeto e por tipo de recurso:

SELECT 
  invoice.month,
  service.description,
  project.name,
  SUM(cost) as cost
FROM `basedosdados.br_bd_indicadores.gcp_billing_export_resource_v1_01709D_1C0CEE_6E40BF`
group by 1,2,3
order by 1 desc, 4 desc

Query para quais labels temos atualmente e os custos associados a elas mes a mes:

SELECT 
invoice.month,
labels.key,
labels.value,
SUM(cost) as cost
FROM `basedosdados.br_bd_indicadores.gcp_billing_export_resource_v1_01709D_1C0CEE_6E40BF`
LEFT JOIN UNNEST(labels) as labels
GROUP BY 1,2,3
ORDER BY invoice.month desc, cost desc

Query de todas as contas e labels que possuem a chave de dbt_invocation_id

SELECT 
invoice.month,
service.description,
project.name,
TO_JSON_STRING(labels),
SUM(cost) as cost
FROM `basedosdados.br_bd_indicadores.gcp_billing_export_resource_v1_01709D_1C0CEE_6E40BF`
WHERE TO_JSON_STRING(labels) LIKE ("%dbt_invocation_id%")
GROUP BY 1,2,3,4
ORDER BY invoice.month desc, cost desc

laura-l-amaral avatar Jan 12 '24 21:01 laura-l-amaral

Eu entendi certo que parece possível visualizar o custo de cada dbt run com labels?

rdahis avatar Jan 14 '24 05:01 rdahis

Parece, mas confesso que não entendi muito bem como que esse id é gerado e como podemos saber o que se relaciona com o que

laura-l-amaral avatar Jan 15 '24 13:01 laura-l-amaral

Aparentemente na parte de custos do BigQuery só aparecem as labels de conjunto, não de tabela, o que é uma pena pq é bem mais fácil gerenciar as labels de tabela com o dbt.

Próximos passos:

  • Pensar num modelo de colocar labels que facilite o gerenciamento de custos

laura-l-amaral avatar Jan 15 '24 20:01 laura-l-amaral

Primeira proposta de labels (já implementada no conjunto do cnpj)

  • dataset:dataset_slug
  • bdpro:true/false
  • environment:production/development/staging
  • pipeline:true/false
  • update-frequency:daily/weekly/monthly/yearly
  • size:small/medium/large
  • owner:owner_name
  • query-optimization: true

Descobri como usar a label dbt_invocation_id para monitorar custos do dbt: é necessário cruzar com a tabela INFORMATION_SCHEMA.JOBS

laura-l-amaral avatar Jan 26 '24 18:01 laura-l-amaral