{"id":81888,"date":"2020-05-17T13:42:23","date_gmt":"2020-05-17T11:42:23","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/thanos-masshtabiruemyj-prometheus"},"modified":"2020-05-17T13:42:23","modified_gmt":"2020-05-17T11:42:23","slug":"thanos-masshtabiruemyj-prometheus","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/thanos-masshtabiruemyj-prometheus","title":{"rendered":"Thanos \u2014 um Prometheus escal\u00e1vel.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><b><i>A tradu\u00e7\u00e3o do artigo foi preparada especialmente para os alunos do curso <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/jYQP\/\">\u00abPr\u00e1ticas e Ferramentas DevOps\u00bb<\/a><\/noindex>.<\/i><\/b><\/p>\n<p>\n<i><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/fabxc\">Fabian Reinartz<\/a><\/noindex> \u2014 desenvolvedor de software, entusiasta de Go e amante de resolver problemas complexos. Tamb\u00e9m \u00e9 mantenedor do Prometheus e cofundador do Kubernetes SIG instrumentation. No passado, foi engenheiro de produ\u00e7\u00e3o no SoundCloud e liderou o grupo de monitoramento na CoreOS. Atualmente, trabalha no Google.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Bplotka\">Bartek Plotka<\/a><\/noindex> \u2014 engenheiro de infraestrutura na Improbable. \u00c9 apaixonado por novas tecnologias e desafios em sistemas distribu\u00eddos. Tem experi\u00eancia em programa\u00e7\u00e3o de baixo n\u00edvel na Intel, experi\u00eancia como contribuinte no Mesos e experi\u00eancia em SRE em escala mundial na Improbable. Est\u00e1 focado em melhorar o mundo dos microsservi\u00e7os. Suas tr\u00eas paix\u00f5es: Golang, c\u00f3digo aberto e v\u00f4lei.<\/i><\/p>\n<p>Olhando para nosso produto flagship SpatialOS, voc\u00ea pode imaginar que a Improbable precisa de uma infraestrutura de nuvem de alta din\u00e2mica em escala global com dezenas de clusters Kubernetes. Fomos um dos primeiros a come\u00e7ar a usar o sistema de monitoramento <noindex><a rel=\"nofollow\" href=\"https:\/\/prometheus.io\/\">Prometheus<\/a><\/noindex>. O Prometheus \u00e9 capaz de monitorar milh\u00f5es de m\u00e9tricas em tempo real e vem com uma poderosa linguagem de consulta que permite extrair as informa\u00e7\u00f5es necess\u00e1rias.<\/p>\n<p>A simplicidade e confiabilidade do Prometheus \u00e9 uma de suas principais vantagens. No entanto, ao passar por uma certa escala, encontramos algumas desvantagens. Para resolver esses problemas, desenvolvemos <noindex><a rel=\"nofollow\" href=\"https:\/\/thanos.io\/\">Thanos<\/a><\/noindex> \u2014 um projeto de c\u00f3digo aberto criado pela Improbable, para a transforma\u00e7\u00e3o sem costura de clusters existentes do Prometheus em um \u00fanico sistema de monitoramento com armazenamento ilimitado de dados hist\u00f3ricos. O Thanos est\u00e1 dispon\u00edvel no Github <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/improbable-eng\/thanos\">aqui<\/a><\/noindex>.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/gdk.improbable.io\/l\/169082\/2020-01-10\/2j9yxq\">Fique por dentro das \u00faltimas not\u00edcias da Improbable.<\/a><\/noindex><\/p>\n<h2>Nossos objetivos com o Thanos<\/h2>\n<p>\nEm uma certa escala, surgem problemas que v\u00e3o al\u00e9m das capacidades do Prometheus vanilla. Como armazenar de forma confi\u00e1vel e econ\u00f4mica petabytes de dados hist\u00f3ricos? \u00c9 poss\u00edvel fazer isso sem comprometer o tempo de resposta das consultas? \u00c9 poss\u00edvel acessar todas as m\u00e9tricas localizadas em diferentes servidores Prometheus atrav\u00e9s de uma \u00fanica solicita\u00e7\u00e3o API? \u00c9 poss\u00edvel, de alguma forma, combinar dados replicados coletados com o Prometheus HA?<\/p>\n<p>Para responder a essas perguntas, criamos o Thanos. Nas se\u00e7\u00f5es a seguir, abordamos como enfrentamos essas quest\u00f5es e explicamos os objetivos que buscamos.<\/p>\n<h4>Consulta de dados de v\u00e1rias inst\u00e2ncias do Prometheus (consulta global)<\/h4>\n<p>\nPrometheus oferece uma abordagem funcional para sharding. Mesmo um \u00fanico servidor Prometheus fornece escalabilidade suficiente para liberar os usu\u00e1rios das complexidades do sharding horizontal na maioria dos casos de uso.<\/p>\n<p>Embora este seja um excelente modelo de implanta\u00e7\u00e3o, frequentemente \u00e9 necess\u00e1rio acessar dados de diferentes servidores Prometheus por meio de uma \u00fanica API ou UI \u2014 vis\u00e3o global. Claro, \u00e9 poss\u00edvel exibir v\u00e1rias consultas em um \u00fanico painel Grafana, mas cada consulta s\u00f3 pode ser realizada em um servidor Prometheus. Por outro lado, com o Thanos, voc\u00ea pode consultar e agregar dados de v\u00e1rios servidores Prometheus, uma vez que todos est\u00e3o acess\u00edveis a partir de um \u00fanico endpoint.<\/p>\n<p>Anteriormente, para obter uma vis\u00e3o global na Improbable, organizamos nossas inst\u00e2ncias Prometheus em uma hierarquia de <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/prometheus\/prometheus\/blob\/master\/docs\/federation.md#hierarchical-federation\">Federa\u00e7\u00e3o Hier\u00e1rquica<\/a><\/noindex>Isso significou a cria\u00e7\u00e3o de um meta-servidor Prometheus, que coleta parte das m\u00e9tricas de cada servidor \"leaf\".<\/p>\n<p><img decoding=\"async\" alt=\"Thanos \u2014 um Prometheus escal\u00e1vel.\" src=\"\/wp-content\/uploads\/2020\/05\/82590f017734f5dc1038a0e13f772d2a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEssa abordagem se mostrou problem\u00e1tica. Ela resultou em uma configura\u00e7\u00e3o mais complicada, adicionando um ponto de falha potencial adicional e aplicando regras complexas para fornecer ao endpoint federado apenas os dados necess\u00e1rios. Al\u00e9m disso, federa\u00e7\u00f5es desse tipo n\u00e3o permitem obter uma verdadeira vis\u00e3o global, uma vez que nem todos os dados est\u00e3o dispon\u00edveis em uma \u00fanica solicita\u00e7\u00e3o de API.<\/p>\n<p>Isso est\u00e1 intimamente relacionado \u00e0 vis\u00e3o unificada dos dados coletados em servidores Prometheus de alta disponibilidade (high-availability, HA). O modelo HA do Prometheus coleta dados de forma independente duas vezes, sendo t\u00e3o simples que n\u00e3o poderia ser mais f\u00e1cil. No entanto, usar uma vis\u00e3o combinada e deduplicada de ambos os fluxos seria muito mais conveniente.<\/p>\n<p>Claro, existe a necessidade de servidores Prometheus de alta disponibilidade. Na Improbable, levamos a monitoriza\u00e7\u00e3o em tempo real de dados muito a s\u00e9rio, mas ter uma \u00fanica inst\u00e2ncia do Prometheus em um cluster \u00e9 um ponto \u00fanico de falha. Qualquer erro de configura\u00e7\u00e3o ou falha de hardware pode potencialmente resultar na perda de dados importantes. At\u00e9 mesmo uma implanta\u00e7\u00e3o simples pode levar a breves falhas na coleta de m\u00e9tricas, uma vez que um rein\u00edcio pode levar consideravelmente mais tempo do que o intervalo de raspagem.<\/p>\n<h4>Armazenamento confi\u00e1vel de dados hist\u00f3ricos<\/h4>\n<p>\nUm armazenamento de m\u00e9tricas econ\u00f4mico, r\u00e1pido e de longo prazo \u00e9 o nosso sonho (compartilhado pela maioria dos usu\u00e1rios do Prometheus). Na Improbable, tivemos que configurar o per\u00edodo de reten\u00e7\u00e3o de m\u00e9tricas para nove dias (para o Prometheus 1.8). Isso imp\u00f5e limita\u00e7\u00f5es \u00f3bvias sobre o qu\u00e3o longe podemos olhar para tr\u00e1s.<\/p>\n<p>O Prometheus 2.0 melhorou nesse aspecto, pois a quantidade de s\u00e9ries temporais n\u00e3o afeta mais o desempenho geral do servidor (veja <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=nDalewt4BOw\">a apresenta\u00e7\u00e3o principal do KubeCon sobre o Prometheus 2<\/a><\/noindex>). No entanto, o Prometheus armazena dados no disco local. Embora uma Compress\u00e3o de Dados altamente eficiente possa reduzir significativamente o uso do SSD local, ainda assim existe um limite para a quantidade de dados hist\u00f3ricos armazenados.<\/p>\n<p>Al\u00e9m disso, na Improbable, nos preocupamos com confiabilidade, simplicidade e custo. Discos locais grandes s\u00e3o mais dif\u00edceis de operar e fazer backup. Eles s\u00e3o mais caros e requerem mais ferramentas para backup, resultando em complexidade excessiva.<\/p>\n<h4>Downsampling<\/h4>\n<p>\nAssim que come\u00e7amos a trabalhar com dados hist\u00f3ricos, percebemos que existem complexidades fundamentais com O-grande, que tornam as consultas cada vez mais lentas se trabalharmos com dados de semanas, meses e anos.<\/p>\n<p>A solu\u00e7\u00e3o padr\u00e3o para esse problema \u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Decimation_(signal_processing)\">downsampling<\/a><\/noindex> \u2014 reduzir a frequ\u00eancia de amostragem do sinal. Ao diminuir a amostragem, podemos 'ampliar' para um intervalo de tempo maior e manter o mesmo n\u00famero de amostras, o que ajuda a manter a responsividade das consultas.<\/p>\n<p>O downsampling de dados antigos \u00e9 um requisito inevit\u00e1vel de qualquer solu\u00e7\u00e3o de armazenamento de longo prazo e vai al\u00e9m do Prometheus vanilla.<\/p>\n<h4>Objetivos adicionais<\/h4>\n<p>\nUm dos objetivos iniciais do projeto Thanos era a integra\u00e7\u00e3o perfeita com quaisquer instala\u00e7\u00f5es existentes do Prometheus. O segundo objetivo era uma opera\u00e7\u00e3o simples com uma barreira de entrada m\u00ednima. Quaisquer depend\u00eancias devem ser facilmente atendidas tanto para usu\u00e1rios pequenos quanto para grandes, implicando tamb\u00e9m um custo b\u00e1sico insignificante.<\/p>\n<h2>Arquitetura do Thanos<\/h2>\n<p>\nDepois de listar nossos objetivos na se\u00e7\u00e3o anterior, vamos trabalhar neles e ver como o Thanos aborda esses desafios.<\/p>\n<h4>Vis\u00e3o global<\/h4>\n<p>\nPara obter uma vis\u00e3o global sobre as inst\u00e2ncias existentes do Prometheus, precisamos conectar um \u00fanico ponto de entrada de solicita\u00e7\u00f5es a todos os servidores. \u00c9 exatamente isso que o componente Thanos faz. <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/blog\/2015\/06\/the-distributed-system-toolkit-patterns#example-1-sidecar-containers\">Sidecar<\/a><\/noindex>. Ele \u00e9 implantado ao lado de cada servidor Prometheus e atua como um proxy, atendendo aos dados locais do Prometheus atrav\u00e9s da interface gRPC Store API, que permite selecionar dados de s\u00e9ries temporais por r\u00f3tulos e intervalo de tempo.<\/p>\n<p>Do outro lado, temos o componente Querier, que \u00e9 escal\u00e1vel horizontalmente e sem estado, e que faz um pouco mais do que apenas responder a solicita\u00e7\u00f5es PromQL atrav\u00e9s da API HTTP padr\u00e3o do Prometheus. Os componentes Querier, Sidecar e outros do Thanos interagem por meio do <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Gossip_protocol\">protocolo gossip.<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Thanos \u2014 um Prometheus escal\u00e1vel.\" src=\"\/wp-content\/uploads\/2020\/05\/fbcf1e756f5da4e8529f17abd4cedd00.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ol>\n<li>Quando o Querier recebe uma solicita\u00e7\u00e3o, ele se conecta ao servidor correspondente da Store API, ou seja, aos nossos Sidecars, e obt\u00e9m os dados de s\u00e9ries temporais dos servidores Prometheus correspondentes.<\/li>\n<li>Depois disso, ele combina as respostas e executa a consulta PromQL sobre elas. O Querier pode combinar dados que n\u00e3o se sobrep\u00f5em, bem como dados duplicados de servidores HA do Prometheus.<\/li>\n<\/ol>\n<p>\nIsso resolve a maior parte do nosso quebra-cabe\u00e7a \u2014 combinar dados de servidores do Prometheus isolados em uma \u00fanica vis\u00e3o. De fato, o Thanos pode ser utilizado apenas por causa dessa capacidade. N\u00e3o s\u00e3o necess\u00e1rias altera\u00e7\u00f5es nos servidores Prometheus existentes!<\/p>\n<h4>Armazenamento ilimitado!<\/h4>\n<p>\nNo entanto, mais cedo ou mais tarde, desejaremos armazenar dados que ultrapassam o per\u00edodo de reten\u00e7\u00e3o comum do Prometheus. Para o armazenamento de dados hist\u00f3ricos, escolhemos o armazenamento de objetos. Ele est\u00e1 amplamente dispon\u00edvel em qualquer nuvem, bem como em data centers locais e \u00e9 muito econ\u00f4mico. Al\u00e9m disso, praticamente qualquer armazenamento de objetos \u00e9 acess\u00edvel atrav\u00e9s da famosa API S3.<\/p>\n<p>O Prometheus grava dados da mem\u00f3ria para o disco a cada duas horas. Um bloco de dados armazenados cont\u00e9m todos os dados para um intervalo de tempo fixo e \u00e9 imut\u00e1vel. Isso \u00e9 muito conveniente, pois o Thanos Sidecar pode simplesmente observar o diret\u00f3rio de dados do Prometheus e, \u00e0 medida que novos blocos aparecem, carreg\u00e1-los nos buckets do armazenamento de objetos.<\/p>\n<p><img decoding=\"async\" alt=\"Thanos \u2014 um Prometheus escal\u00e1vel.\" src=\"\/wp-content\/uploads\/2020\/05\/2be803d8d7e0ce9a5ffa441b7778a40b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nFazer o upload para o armazenamento de objetos imediatamente ap\u00f3s a grava\u00e7\u00e3o no disco tamb\u00e9m permite manter a simplicidade do 'scraper' (Prometheus e Thanos Sidecar), o que simplifica a manuten\u00e7\u00e3o, o custo e o design do sistema.<\/p>\n<p>Como voc\u00ea pode ver, o backup de dados \u00e9 implementado de forma muito simples. Mas e quanto \u00e0 consulta de dados em um armazenamento de objetos?<\/p>\n<p>O componente Thanos Store atua como um proxy para a obten\u00e7\u00e3o de dados do armazenamento de objetos. Assim como o Thanos Sidecar, ele participa do cluster gossip e implementa a API Store. Assim, os Querier existentes podem v\u00ea-lo como um Sidecar, como outra fonte de dados de s\u00e9ries temporais \u2014 nenhuma configura\u00e7\u00e3o especial \u00e9 necess\u00e1ria.<\/p>\n<p><img decoding=\"async\" alt=\"Thanos \u2014 um Prometheus escal\u00e1vel.\" src=\"\/wp-content\/uploads\/2020\/05\/5a437ae1bf8a6f79b8d24aeb9dde2d17.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOs blocos de dados de s\u00e9ries temporais consistem em v\u00e1rios arquivos grandes. Carreg\u00e1-los sob demanda seria bastante ineficiente, e o cache local exigiria uma enorme quantidade de mem\u00f3ria e espa\u00e7o de armazenamento.<\/p>\n<p>Em vez disso, o Store Gateway sabe como lidar com o formato de armazenamento do Prometheus. Gra\u00e7as a um planejador de consultas inteligente e ao cache apenas das partes de \u00edndice necess\u00e1rias dos blocos, foi poss\u00edvel reduzir consultas complexas ao m\u00ednimo de solicita\u00e7\u00f5es HTTP para os arquivos do armazenamento de objetos. Assim, o n\u00famero de solicita\u00e7\u00f5es pode ser reduzido em quatro a seis ordens de magnitude e alcan\u00e7ar um tempo de resposta que \u00e9, em geral, dif\u00edcil de distinguir das consultas de dados em um SSD local.<\/p>\n<p><img decoding=\"async\" alt=\"Thanos \u2014 um Prometheus escal\u00e1vel.\" src=\"\/wp-content\/uploads\/2020\/05\/ebcbe1ee16dbac18daa474e7cb4b12b2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nComo mostrado no diagrama acima, o Thanos Querier reduz significativamente o custo por consulta de dados no armazenamento de objetos, utilizando o formato de armazenamento do Prometheus e colocando dados relacionados pr\u00f3ximos uns dos outros. Usando essa abordagem, podemos combinar v\u00e1rias solicita\u00e7\u00f5es individuais em um n\u00famero m\u00ednimo de opera\u00e7\u00f5es em lote.<\/p>\n<h4>Compacta\u00e7\u00e3o e downsampling<\/h4>\n<p>\nDepois que um novo bloco de dados de s\u00e9ries temporais \u00e9 carregado com sucesso no armazenamento de objetos, o consideramos como dados \"hist\u00f3ricos\", que imediatamente se tornam dispon\u00edveis atrav\u00e9s do Store Gateway.<\/p>\n<p>No entanto, ap\u00f3s algum tempo, os blocos de uma fonte (Prometheus com Sidecar) se acumulam e j\u00e1 n\u00e3o utilizam todo o potencial de indexa\u00e7\u00e3o. Para resolver esse problema, introduzimos mais um componente chamado Compactor. Ele simplesmente aplica o mecanismo de compacta\u00e7\u00e3o local do Prometheus aos dados hist\u00f3ricos no armazenamento de objetos e pode ser executado como uma simples tarefa em lote peri\u00f3dica.<\/p>\n<p><img decoding=\"async\" alt=\"Thanos \u2014 um Prometheus escal\u00e1vel.\" src=\"\/wp-content\/uploads\/2020\/05\/c7dd83dab074a4c5f93069a4bc152342.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nGra\u00e7as \u00e0 compacta\u00e7\u00e3o eficiente, uma solicita\u00e7\u00e3o ao armazenamento por um longo per\u00edodo de tempo n\u00e3o apresenta problemas em termos de tamanho de dados. No entanto, o custo potencial de descompactar bilh\u00f5es de valores e process\u00e1-los atrav\u00e9s do manipulador de consultas inevitavelmente levar\u00e1 a um aumento acentuado no tempo de execu\u00e7\u00e3o da consulta. Por outro lado, como cada pixel da tela corresponde a centenas de pontos de dados, torna-se imposs\u00edvel at\u00e9 mesmo visualizar os dados em plena resolu\u00e7\u00e3o. Assim, o downsampling n\u00e3o s\u00f3 \u00e9 vi\u00e1vel, mas tamb\u00e9m n\u00e3o resultar\u00e1 em uma perda significativa de precis\u00e3o. <\/p>\n<p><img decoding=\"async\" alt=\"Thanos \u2014 um Prometheus escal\u00e1vel.\" src=\"\/wp-content\/uploads\/2020\/05\/5f36a05aba3fbffa905b6a8da482ab3d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPara o downsampling de dados, o Compactor agrega continuamente dados com resolu\u00e7\u00e3o de cinco minutos e uma hora. Para cada fragmento bruto codificado com compacta\u00e7\u00e3o TSDB XOR, diferentes tipos de dados agregados s\u00e3o armazenados, como min, max ou sum para um bloco. Isso permite que o Querier selecione automaticamente a agrega\u00e7\u00e3o que se adapta \u00e0 consulta PromQL dada. <\/p>\n<p>Para usar dados com menor precis\u00e3o, o usu\u00e1rio n\u00e3o precisa de nenhuma configura\u00e7\u00e3o especial. O Querier alterna automaticamente entre diferentes resolu\u00e7\u00f5es e dados brutos \u00e0 medida que o usu\u00e1rio aumenta ou diminui o zoom. Se desejado, o usu\u00e1rio pode gerenciar isso diretamente atrav\u00e9s do par\u00e2metro \u201cstep\u201d na consulta. <\/p>\n<p>Como o custo de armazenamento de um GB \u00e9 pequeno, por padr\u00e3o o Thanos armazena dados brutos, dados com resolu\u00e7\u00e3o de cinco minutos e uma hora. N\u00e3o h\u00e1 necessidade de excluir dados brutos.<\/p>\n<h2>Regras de grava\u00e7\u00e3o<\/h2>\n<p>\nMesmo com o Thanos, as regras de grava\u00e7\u00e3o s\u00e3o uma parte essencial da pilha de monitoramento. Elas reduzem a complexidade, a lat\u00eancia e o custo das consultas. Tamb\u00e9m s\u00e3o convenientes para os usu\u00e1rios que desejam obter dados agregados por m\u00e9tricas. O Thanos baseia-se em inst\u00e2ncias vanilla do Prometheus, portanto, \u00e9 perfeitamente aceit\u00e1vel armazenar regras de grava\u00e7\u00e3o e regras de alerta no servidor Prometheus existente. No entanto, em alguns casos, isso pode n\u00e3o ser suficiente:<\/p>\n<ul>\n<li>Alertas e regras globais (por exemplo, um alerta quando o servi\u00e7o n\u00e3o est\u00e1 funcionando em mais de dois dos tr\u00eas clusters).<\/li>\n<li>Regra para dados fora do armazenamento local.<\/li>\n<li>O desejo de armazenar todas as regras e alertas em um \u00fanico lugar.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Thanos \u2014 um Prometheus escal\u00e1vel.\" src=\"\/wp-content\/uploads\/2020\/05\/ab48e044b952bd891932b99e248120fa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPara todos esses casos, o Thanos inclui um componente separado chamado Ruler, que calcula as regras e alertas por meio de consultas Thanos. Fornecendo uma StoreAPI bem conhecida, o n\u00f3 Query pode acessar m\u00e9tricas rec\u00e9m-calculadas. Mais tarde, elas tamb\u00e9m s\u00e3o armazenadas em um armazenamento de objetos e se tornam acess\u00edveis por meio do Store Gateway.<\/p>\n<h2>O Poder do Thanos<\/h2>\n<p>\nO Thanos \u00e9 suficientemente flex\u00edvel para ser configurado de acordo com suas necessidades. Isso \u00e9 especialmente \u00fatil ao migrar de um Prometheus simples. Vamos rapidamente relembrar, com um pequeno exemplo, o que aprendemos sobre os componentes do Thanos. Aqui est\u00e1 como transferir seu Prometheus vanilla para o mundo de \u201carmazenamento ilimitado de m\u00e9tricas\u201d:<\/p>\n<p><img decoding=\"async\" alt=\"Thanos \u2014 um Prometheus escal\u00e1vel.\" src=\"\/wp-content\/uploads\/2020\/05\/f6ee4185af57d2a1869890014e6a0062.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ol>\n<li>Adicione o Thanos Sidecar aos seus servidores Prometheus \u2014 por exemplo, como um cont\u00eainer adjacente em um pod do Kubernetes.<\/li>\n<li>Implante v\u00e1rias r\u00e9plicas do Thanos Querier para permitir a visualiza\u00e7\u00e3o dos dados. Nesta fase, \u00e9 f\u00e1cil configurar o gossip entre o Scraper e o Querier. Para verificar a intera\u00e7\u00e3o entre os componentes, utilize a m\u00e9trica 'thanos_cluster_members'.<\/li>\n<\/ol>\n<p>\nApenas esses dois passos s\u00e3o suficientes para garantir uma vis\u00e3o global e uma deduplica\u00e7\u00e3o perfeitamente integrada dos dados de potenciais r\u00e9plicas HA do Prometheus! Basta conectar seus pain\u00e9is ao endpoint HTTP do Querier ou usar diretamente a interface do Thanos UI.<\/p>\n<p>No entanto, se voc\u00ea precisar de backup de m\u00e9tricas e armazenamento a longo prazo, ser\u00e3o necess\u00e1rios mais tr\u00eas passos:<\/p>\n<ol>\n<li>Crie um bucket AWS S3 ou GCS. Configure o Sidecar para copiar dados para esses buckets. Agora voc\u00ea pode minimizar o armazenamento local de dados.<\/li>\n<li>Implante o Store Gateway e conecte-o ao cluster gossip existente. Agora voc\u00ea pode fazer consultas aos dados nos backups!<\/li>\n<li>Implante o Compactor para aumentar a efici\u00eancia das consultas para longos intervalos de tempo, utilizando compacta\u00e7\u00e3o e downsampling.<\/li>\n<\/ol>\n<p>\nSe voc\u00ea quiser saber mais, n\u00e3o hesite em conferir nossos <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/improbable-eng\/thanos\/tree\/master\/kube\">exemplos de manifesto kubernetes<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/improbable-eng\/thanos\/blob\/master\/docs\/getting-started.md\">come\u00e7ando<\/a><\/noindex>!<\/p>\n<p>Em apenas cinco passos, transformamos o Prometheus em um sistema de monitoramento confi\u00e1vel com uma vis\u00e3o global, tempo de armazenamento ilimitado e alta disponibilidade potencial das m\u00e9tricas.<\/p>\n<h3>Solicita\u00e7\u00e3o de pull: precisamos de voc\u00ea!<\/h3>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/improbable-eng\/thanos\">Thanos<\/a><\/noindex> desde o in\u00edcio, foi um projeto de c\u00f3digo aberto. A integra\u00e7\u00e3o perfeita com o Prometheus e a capacidade de usar apenas uma parte do Thanos tornam-no uma excelente escolha para escalar o sistema de monitoramento sem esfor\u00e7o extra.<\/p>\n<p>Estamos sempre abertos a Pull Requests e Issues do GitHub. Ao mesmo tempo, sinta-se \u00e0 vontade para entrar em contato conosco atrav\u00e9s de Issues do Github ou pelo Slack.<noindex><a rel=\"nofollow\" href=\"https:\/\/join.slack.com\/t\/improbable-eng\/shared_invite\/enQtMzQ1ODcyMzQ5MjM4LWY5ZWZmNGM2ODc5MmViNmQ3ZTA3ZTY3NzQwOTBlMTkzZmIxZTIxODk0OWU3YjZhNWVlNDU3MDlkZGViZjhkMjc\"> Improbable-eng #thanos<\/a><\/noindex>, se voc\u00ea tiver perguntas ou feedback, ou quiser compartilhar sua experi\u00eancia de uso! Se voc\u00ea gosta do que fazemos na Improbable, n\u00e3o hesite em nos contatar \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/improbable.io\/careers\/\">sempre temos vagas dispon\u00edveis.<\/a><\/noindex>!<\/p>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/jYQP\/\">Saiba mais sobre o curso.<br \/>\n<\/a><\/noindex><\/p>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/502122\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432 \u043a\u0443\u0440\u0441\u0430 \u00abDevOps \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b\u00bb. \u0424\u0430\u0431\u0438\u0430\u043d \u0420\u0435\u0439\u043d\u0430\u0440\u0446 (Fabian Reinartz) \u2014 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f, \u0444\u0430\u043d\u0430\u0442 Go \u0438 \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c \u0440\u0435\u0448\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438. \u0422\u0430\u043a\u0436\u0435 \u043e\u043d \u043c\u044d\u0439\u043d\u0442\u0435\u0439\u043d\u0435\u0440 Prometheus \u0438 \u0441\u043e\u0443\u0447\u0440\u0435\u0434\u0438\u0442\u0435\u043b\u044c Kubernetes SIG instrumentation. \u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u043e\u043d \u0431\u044b\u043b production-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u043c \u0432 SoundCloud \u0438 \u0432\u043e\u0437\u0433\u043b\u0430\u0432\u043b\u044f\u043b \u0433\u0440\u0443\u043f\u043f\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0432 CoreOS. \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 Google. \u0411\u0430\u0440\u0442\u0435\u043a [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":81889,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-81888","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432 \u043a\u0443\u0440\u0441\u0430 \u00abDevOps \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b\u00bb.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/thanos-masshtabiruemyj-prometheus\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Thanos \u2014 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u0439 Prometheus | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432 \u043a\u0443\u0440\u0441\u0430 \u00abDevOps \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b\u00bb.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/thanos-masshtabiruemyj-prometheus\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-05-17T11:42:23+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-17T11:42:23+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Thanos \u2014 Prometheus escal\u00e1vel | ProHoster","description":"A tradu\u00e7\u00e3o do artigo foi preparada especialmente para os alunos do curso 'Pr\u00e1ticas e Ferramentas de DevOps'.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/thanos-masshtabiruemyj-prometheus","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Thanos \u2014 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u0439 Prometheus | ProHoster","og:description":"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432 \u043a\u0443\u0440\u0441\u0430 \u00abDevOps \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b\u00bb.","og:url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/thanos-masshtabiruemyj-prometheus","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-05-17T11:42:23+00:00","article:modified_time":"2020-05-17T11:42:23+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"81888","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 15:48:24","updated":"2022-09-30 01:06:17","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/81888","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=81888"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/81888\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/81889"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=81888"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=81888"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=81888"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}