SlideShare uma empresa Scribd logo
1 de 77
Baixar para ler offline
Quem somos ?
Paulo Castro
Físico pela USP e desenvolvedor de software, arquiteto e agora
coordenador de operações back ti na B2W.
http://paulorcf.com - @paulorcf
Felipe Signorini, DevOps na B2W, arquiteto padawan e grande
entusiasta do desenvolvimento durável.
https://github.com/Signorini - @signorini
Introdução - As coisas caem
As coisas caem, todos os profissionais de TI conhecem essa
verdade, como podemos minimizar esse problema.
Monitoramento é o pilar da equipe de operação e infraestrutura,
sendo assim, em um mundo de datacenters híbridos precisamos
pensar uma maneira nova de entender, monitorar e quantificar
os sistemas.
INtrodução
Monitoramento para que te quero
Sistema de monitoramento servem para agilizar a tomada de
decisões quando algo está errado.
Não impactar nossos clientes e consequentemente
nosso negócio.
Introdução
Saindo do código e visualizando o negócio.
Normalmente a implementação de um sistema de
monitoramento se limita a informações de servidor como
memória, cpu, disco e etc, mais podemos ir além com análise
de aplicativo até o negócio.
Introdução
Borg e SRE
Novas culturas, novos meios
Borg e SRE
SRE (Site Reliability Engineer) é uma
disciplina que incorpora engenharia
de software e aplica para operações,
como objetivo criar sistemas
ultra-escaláveis e que nunca param.
Definição Ben Treynor:
"what happens when a software
engineer is tasked with what used
to be called operations."
Borg e SRE
https://research.google.com/pubs/pub43438.html
https://github.com/kubernetes/kubernetes
Borg Kubernetes
Borg e SRE
Borg e SRE
https://research.google.com/pubs/pub43438.html
https://github.com/kubernetes/kubernetes
Borg Kubernetes
μServices
Palavra para reunir tudo isso Microserviços.
Pensando em todo esse novo cenário procuramos uma maneira
de entender a operação como developers.
Prometheus apareceu de uma maneira natural já que foi
pensado em como monitorar aplicação publicadas no
Kubernetes.
Borg e SRE
μServices
Palavra para reunir tudo isso Microserviços.
Pensando em todo esse novo cenário procuramos uma maneira
de entender a operação como developers.
Prometheus apareceu de uma maneira natural já que foi
pensado em como monitorar aplicação publicadas no
Kubernetes.
Borg e SRE
Entendendo o problema
O desafio de multi-datacenter
Datacenter híbridos
Entendendo os problemas
Open
Stack
AWS
1
AWS
2
AWS
3
Bare
Metal
Bare
Metal
Direct Connect
Requisição simples?
Entendendo os problemas
Micro
App
Micro
App
DB X DB X
Micro
App
Micro
App
LoadBalance
Scan Oracle
AWS
OpenStack
Bare Metal
E o tamanho?
Entendendo os problemas
~ 800 Servidores
~ 9000 CPUs ~ 25k Memory
~ 12 Zones
E o tamanho?
Entendendo os problemas
Quantos GB de Storage preciso
para armazenar todos os dados em um mês ?
Introdução ao
Prometheus.io
Tudo começou no Sound Cloud
Prometheus
Sistema de monitoramento e alerta open source desenvolvido internamente na SoundCloud.
Escrito em Go (Golang).
Vantagens e desvantagens
Prometheus
Vantagens
•Sistema multi dimensional de dados.
•Totalmente customizável, com funcionalidades poderosas.
•Banco TimeSeries otimizado.
•Totalmente Open Source com uma boa aprovação pela comunidade.
•Suporte a Services discovery.
•Modelo Pull.
Desvantagens
•Não tem nenhuma, mentira… :-)
•HA é difícil.
•Exportação dos dados históricos não é simples.
•Um setup em cada datacenter.
Arquitetura
Prometheus
•Prometheus Server
•Exporters
•AlertMananger
•Grafana
Arquitetura
Prometheus
•Prometheus Server
•Exporters
•AlertMananger
•Grafana
Arquitetura
Prometheus
•Prometheus Server
•Exporters
•AlertMananger
•Grafana
Arquitetura
Prometheus
•Prometheus Server
•Exporters
•AlertMananger
•Grafana
Arquitetura
Prometheus
•Prometheus Server
•AlertMananger
•Grafana
•Exporters
Pull, sim senhor
Prometheus
A grande maioria dos sistemas de monitoramento
tem a arquitetura baseada no modelo push.
Os servidores enviam informações para servidor
de monitoramento.
Modelo Pull o servidor expõe um endpoint e o Prometheus
consome.
Todo o trabalho fica a cargo do Prometheus deixando os
servidores fazerem seus trabalhos, que é atender os clientes!
ServiceDiscovery
Prometheus
Federação
Prometheus
Prometheus
Server
Prometheus
Server
Prometheus
Server
Exporter Exporter Exporter Exporter Exporter Exporter
Prometheus
Server
Subindo o Prometheus
Prometheus
docker run -p 9090:9090
-v /prometheus-data prom/prometheus
-v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml
-config.file=/prometheus-data/prometheus.yml
Prometheus
prometheus.yml
Prometheus
Tags
Banco de dados
TimeSeries
Banco TimeSeries
BIT TALKS
Banco feitos especialmente para armazenar informações
temporais.
•InfluxDB
•Open TSDB
•Graphite
•PromQL (Este é do prometheus)
Banco TimeSeries
Banco timeseries
Como funciona um banco TimeSeries ?
Imagine que você consegue facilmente no seu laptop
correlacionar "data objects" na ordem de
68.000.000.000 (68*10^9), o que equivale a coletar
por 10 segundos 72 métricas com 15 processos em 20
hosts por 1 ano.
Banco TimeSeries
Banco timeseries
Como funciona um banco TimeSeries ?
Imagine que você consegue facilmente no seu laptop
correlacionar "data objects" na ordem de
68.000.000.000 (68*10^9), o que equivale a coletar
por 10 segundos 72 métricas com 15 processos em 20
hosts por 1 ano.
Banco TimeSeries
Banco timeseries
Como funciona um banco TimeSeries ?
Imagine que você consegue facilmente no seu laptop
correlacionar "data objects" na ordem de
68.000.000.000 (68*10^9), o que equivale a coletar
por 10 segundos 72 métricas com 15 processos em 20
hosts por 1 ano.
Banco TimeSeries
Banco timeseries
A mágica é:
● Separar em pequenos "chunks" de mesmo tamanho com "data objects"
em séries temporais.
● Comprimir os "chunks" para reduzir o volume da informação.
● Guardar os dados comprimidos e seu atributo em apenas um "record".
Após a mágica, ganhamos:
● 32 Gb de disco armazena 68 bilhões de data objects.
● Leitura dos "data objects" em milisegundos.
● A navegação nos atributos é super rápida (lendo os "chunks").
● Dá para rodar no seu laptop :-)
Complicado ?
Banco TimeSeries
Banco timeseries
Vamos a teoria:
● Definição 1
○ "Data object" é uma tupla de {timestamp, value} onde "value" pode
ser qualquer objeto.
● Definição 2
○ Uma série temporal T é uma lista arbitrária e cronologicamente
ordenada de "data objects" de um tipo de "value".
● Definição 3
○ Um "chunk" é cronologicamente ordenada como parte de uma série
temporal.
● Definição 4
○ Um banco de dados de séries temporais é específico para
armazenar e recuperar informação no tempo de forma eficiente e
optimizada.
Métricas
customizada com os exporter
Histogram
Matriz de dados
Requisições por
segundo distribuídos
Counter
Dado incremental.
Soma de requisições
Gauge
Incremental e
decremental
Consumo de CPU
Estilos de métricas
Métricas
Summary
Matriz de dados
multidimensional.
Consumo por
requisição, max, med,
min etc.
Tipos de exporter
Métricas
Dentro da documentação oficial temos mais de 50 tipos de
exporter, deste de serviços específicos, redes, tipos de negócio,
se olharmos os oferecidos pela comunidade as opções são
infinitas, destacamos alguns exporters:
•Node: Informações de infra
•JMX: Exportar todas as informações JMX
•JSON : Exportar métricas vindo de jsons
•Cadvisor: Informações detalhadas de containers dockers
•BlackBox: Informações sobre a saúde de serviços
•Rabbit: Informações detalhadas sobre o Rabbit
•MongoDb: Informações detalhadas sobre o MONGODB
•ElasticSearch: Informações de saúde ElasticSearch
Código
Frameworks
Subindo o Node exporter
Prometheus
go get github.com/prometheus/node_exporter
cd ${GOPATH-$HOME/go}/src/github.com/prometheus/node_exporter
make
./node_exporter <flags>
wget http://node_exporter-0.14.0.darwin-386.tar.gz
nohup ./node_exporter &
Instrumentação
de código
Construindo suas próprias métricas
Instrumentação de código
Poderá criar e expor métricas personalizadas com
instrumentação no próprio código, atualmente quase todas as
linguagens possuem suas bibliotecas.
•Python
•Java
•Node
•Go
•Elixir
•Ruby
•Entre outros
Exemplo de instrumentação
Java (Linguagem)
Instrumentação de código
Counter
Gauge
Exemplo de instrumentação
Python (Linguagem)
Python
from prometheus_client import start_http_server,
Metric, REGISTRY
import json
import requests
metric = Metric('svc_requests_duration_seconds',
'Requests time taken in seconds', 'summary')
metric.add_sample('svc_requests_duration_seconds_count',
value=response['requests_handled'], labels={})
metric.add_sample('svc_requests_duration_seconds_sum',
value=response['requests_duration_milliseconds'] /
1000.0, labels={})
Exemplo de instrumentação
SpringBoot (Framework)
Instrumentação de código
Adicionou a dependência, registrou
e acabou.
PushGateway
Instrumentação de código
Métricas que não podem ser capturadas, muito utilizado para
processos em batch, cron jobs entre outros.
Push Gateway em Java
import io.prometheus.client.CollectorRegistry;
import io.prometheus.client.Gauge;
import io.prometheus.client.exporter.PushGateway;
void executeBatchJob() throws Exception {
CollectorRegistry registry = new CollectorRegistry();
Gauge duration = Gauge.build()
.name("my_batch_job_duration_seconds")
.help("Duration of my batch job in seconds.")
.register(registry);
Gauge.Timer durationTimer = duration.startTimer();
try {
// Your code here.
Gauge lastSuccess = Gauge.build()
.name("my_batch_job_last_success_unixtime")
.help("Last time my batch job succeeded, in unixtime.")
.register(registry);
lastSuccess.setToCurrentTime();
} finally {
durationTimer.setDuration();
PushGateway pg = new PushGateway("127.0.0.1:9091");
pg.pushAdd(registry, "my_batch_job");
}
}
Alertas
com AlertManager
Definição por queries
Alertas
Sistema de alertas delimitados por queries, possibilitando uma
completa customização em como os alertas irão funcionar.
Integração com E-mail, Hipchat, slack, pageduty e etc.
Alertas
ALERT node_down
IF up == 0
FOR 1m
LABELS {severity="low", title="Cliente node exporter morto"}
Alertas
Alertas
Granularidade nos alertas
Alertas
Com um sistema de tags e um grande poder do AlertManager,
podemos delimitar regras e pesos para cada tipo de alertas.
•Severidade de cada alerta
•Diferentes canais de atendimento e equipes
•Históricos de alertas
Alertas
Alertas
Receivers
Alertas
WebHook
Alertas
# Whether or not to notify about resolved alerts.
[ send_resolved: <boolean> | default = true ]
# The endpoint to send HTTP POST requests to.
url: <string>
Visualização
com o Grafana
Templates
Grafana
Grafana possui compatibilidade com Prometheus nativamente,
além de possuir uma gama de templates produzido pela
comunidade.
Todas as métricas são automaticamente disponíveis para
Grafana, sendo possível de forma fácil criar um dashboard
customizado para cada necessidade.
Quer navegar sobre dados históricos de 4 meses atrás, sem
problemas.
Quer ver em tempo real o quê está acontecendo também dá.
Grafana
Grafana
Counter
Grafana
Gauge
Grafana
Histogram
Grafana
Summary
Grafana
Grafana
Grafana
Grafana
Grafana
Mapa pirata
Mapa pirata
Exporters
Demo
Futuro próximo
Inteligência com dados!
Futuro próximo
Com dados temporais que coletamos podemos junto com áreas de
negócio descobrir coisas fantásticas, hoje já sabemos:
Operações
● Será que sua aplicação precisa de mais ou menos recurso ?
● Diminuição drástico do MTTR (Tempo médio de recuperação
do sistema).
● Entendemos arquitetura da sua aplicação e te ajudamos a
nunca mais ficar fora do ar.
Indicadores de negócio
● Quanto realmente seu app vendeu.
● GMV por app.
● Cliente não percebe problemas, são resolvidos antes.
Dashboards são compartilhados para equipe que centraliza as
estatísticas de seu app.
TDC 2017 - Borg até o Prometheus: Site Reliability Engineering

Mais conteúdo relacionado

Mais procurados

Deploy de aplicações Ruby com Mina - TDC Floripa 2014
Deploy de aplicações Ruby com Mina - TDC Floripa 2014Deploy de aplicações Ruby com Mina - TDC Floripa 2014
Deploy de aplicações Ruby com Mina - TDC Floripa 2014Ismael Stahelin
 
Performance tunning de servidores ColdFusion MX
Performance tunning de servidores ColdFusion MXPerformance tunning de servidores ColdFusion MX
Performance tunning de servidores ColdFusion MXAlex Hübner
 
Performance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos CorreiosPerformance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos CorreiosAlex Hübner
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsIgo Coelho
 
TDC 2012 Goiânia: Trilha Windows Phone / Windows 8 - Desenvolvimento de apps ...
TDC 2012 Goiânia: Trilha Windows Phone / Windows 8 - Desenvolvimento de apps ...TDC 2012 Goiânia: Trilha Windows Phone / Windows 8 - Desenvolvimento de apps ...
TDC 2012 Goiânia: Trilha Windows Phone / Windows 8 - Desenvolvimento de apps ...Rogério Moraes de Carvalho
 
Dicas para Turbinar o servidor de Aplicações JBoss 7
Dicas para Turbinar o servidor de Aplicações JBoss 7Dicas para Turbinar o servidor de Aplicações JBoss 7
Dicas para Turbinar o servidor de Aplicações JBoss 7Claudio Miranda
 
Explorando o novo .NET multiplataforma: ASP.NET Core, .NET Core e EF Core
Explorando o novo .NET multiplataforma:ASP.NET Core, .NET Core e EF CoreExplorando o novo .NET multiplataforma:ASP.NET Core, .NET Core e EF Core
Explorando o novo .NET multiplataforma: ASP.NET Core, .NET Core e EF CoreRogério Moraes de Carvalho
 
Periódicos MundoJ e Java Magazine Fevereiro 2012
Periódicos MundoJ e Java Magazine Fevereiro 2012Periódicos MundoJ e Java Magazine Fevereiro 2012
Periódicos MundoJ e Java Magazine Fevereiro 2012rogerlista
 
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NETASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NETRenato Groff
 
TDC 2012 Goiânia: Trilha .NET - Novidades do .NET Framework 4.5
TDC 2012 Goiânia: Trilha .NET - Novidades do .NET Framework 4.5TDC 2012 Goiânia: Trilha .NET - Novidades do .NET Framework 4.5
TDC 2012 Goiânia: Trilha .NET - Novidades do .NET Framework 4.5Rogério Moraes de Carvalho
 
Monitoramento Enterprise com Zabbix+RHEL
Monitoramento Enterprise com Zabbix+RHELMonitoramento Enterprise com Zabbix+RHEL
Monitoramento Enterprise com Zabbix+RHELAlessandro Silva
 
Desenvolvimento web no Linux
Desenvolvimento web no LinuxDesenvolvimento web no Linux
Desenvolvimento web no LinuxEduardo Rozario
 
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)Aryel Tupinambá
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingEder Magalhães
 

Mais procurados (20)

Deploy de aplicações Ruby com Mina - TDC Floripa 2014
Deploy de aplicações Ruby com Mina - TDC Floripa 2014Deploy de aplicações Ruby com Mina - TDC Floripa 2014
Deploy de aplicações Ruby com Mina - TDC Floripa 2014
 
Performance tunning de servidores ColdFusion MX
Performance tunning de servidores ColdFusion MXPerformance tunning de servidores ColdFusion MX
Performance tunning de servidores ColdFusion MX
 
Redis
RedisRedis
Redis
 
Performance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos CorreiosPerformance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos Correios
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e Servlets
 
Treinamento RMAN Workshop 12c
Treinamento RMAN Workshop 12cTreinamento RMAN Workshop 12c
Treinamento RMAN Workshop 12c
 
TDC 2012 Goiânia: Trilha Windows Phone / Windows 8 - Desenvolvimento de apps ...
TDC 2012 Goiânia: Trilha Windows Phone / Windows 8 - Desenvolvimento de apps ...TDC 2012 Goiânia: Trilha Windows Phone / Windows 8 - Desenvolvimento de apps ...
TDC 2012 Goiânia: Trilha Windows Phone / Windows 8 - Desenvolvimento de apps ...
 
As novidades da nova versão do Java 9
As novidades da nova versão do Java 9As novidades da nova versão do Java 9
As novidades da nova versão do Java 9
 
Dicas para Turbinar o servidor de Aplicações JBoss 7
Dicas para Turbinar o servidor de Aplicações JBoss 7Dicas para Turbinar o servidor de Aplicações JBoss 7
Dicas para Turbinar o servidor de Aplicações JBoss 7
 
Explorando o novo .NET multiplataforma: ASP.NET Core, .NET Core e EF Core
Explorando o novo .NET multiplataforma:ASP.NET Core, .NET Core e EF CoreExplorando o novo .NET multiplataforma:ASP.NET Core, .NET Core e EF Core
Explorando o novo .NET multiplataforma: ASP.NET Core, .NET Core e EF Core
 
O Futuro do ASP.NET
O Futuro do ASP.NETO Futuro do ASP.NET
O Futuro do ASP.NET
 
Periódicos MundoJ e Java Magazine Fevereiro 2012
Periódicos MundoJ e Java Magazine Fevereiro 2012Periódicos MundoJ e Java Magazine Fevereiro 2012
Periódicos MundoJ e Java Magazine Fevereiro 2012
 
DevTalk 08/2019
DevTalk 08/2019DevTalk 08/2019
DevTalk 08/2019
 
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NETASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
 
TDC 2012 Goiânia: Trilha .NET - Novidades do .NET Framework 4.5
TDC 2012 Goiânia: Trilha .NET - Novidades do .NET Framework 4.5TDC 2012 Goiânia: Trilha .NET - Novidades do .NET Framework 4.5
TDC 2012 Goiânia: Trilha .NET - Novidades do .NET Framework 4.5
 
Monitoramento Enterprise com Zabbix+RHEL
Monitoramento Enterprise com Zabbix+RHELMonitoramento Enterprise com Zabbix+RHEL
Monitoramento Enterprise com Zabbix+RHEL
 
Desenvolvimento web no Linux
Desenvolvimento web no LinuxDesenvolvimento web no Linux
Desenvolvimento web no Linux
 
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)
 
Treinamento Oracle GoldenGate 19c
Treinamento Oracle GoldenGate 19cTreinamento Oracle GoldenGate 19c
Treinamento Oracle GoldenGate 19c
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computing
 

Semelhante a TDC 2017 - Borg até o Prometheus: Site Reliability Engineering

Foco no app, viva o serverless!
Foco no app, viva o serverless!Foco no app, viva o serverless!
Foco no app, viva o serverless!Mario Guedes
 
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)Tiago Marchetti Dolphine
 
Melhores práticas para Arquitetura em Cloud Computing
Melhores práticas para Arquitetura em Cloud ComputingMelhores práticas para Arquitetura em Cloud Computing
Melhores práticas para Arquitetura em Cloud ComputingDaniel Checchia
 
Mudança de paradigma no monitoramento de banco de dados
Mudança de paradigma no monitoramento de banco de dadosMudança de paradigma no monitoramento de banco de dados
Mudança de paradigma no monitoramento de banco de dadosPolis Consulting
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoComunidade NetPonto
 
Como um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoComo um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoDavid Robert Camargo de Campos
 
AWS Meetup - Processando dados em alta escala com Node.js e AWS Lambda
AWS Meetup - Processando dados em alta escala com Node.js e AWS LambdaAWS Meetup - Processando dados em alta escala com Node.js e AWS Lambda
AWS Meetup - Processando dados em alta escala com Node.js e AWS LambdaDaniel Baptista Dias
 
Data center MCSBRC2010-slides.pdf
Data center MCSBRC2010-slides.pdfData center MCSBRC2010-slides.pdf
Data center MCSBRC2010-slides.pdfssuser1198af
 
Minicurso IOT com javascript - SBTI
Minicurso IOT com javascript - SBTIMinicurso IOT com javascript - SBTI
Minicurso IOT com javascript - SBTImarcochella
 
Desenvolvendo Produtos para Internet das Coisas
Desenvolvendo Produtos para Internet das CoisasDesenvolvendo Produtos para Internet das Coisas
Desenvolvendo Produtos para Internet das CoisasMarco Antonio Maciel
 
SonarQube
SonarQubeSonarQube
SonarQubeCDS
 
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenhoBig Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenhoRicardo Longa
 
Primeiros passos com o framework Sencha Ext JS
Primeiros passos com o framework Sencha Ext JSPrimeiros passos com o framework Sencha Ext JS
Primeiros passos com o framework Sencha Ext JSWemerson Januario
 
TDC - Qual o tamanho adequado de um micro serviço?
TDC - Qual o tamanho adequado de um micro serviço?TDC - Qual o tamanho adequado de um micro serviço?
TDC - Qual o tamanho adequado de um micro serviço?Rafael Salerno de Oliveira
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
Webinar: Monitorando sensores IoT: Do ESP32 ao Grafana
Webinar: Monitorando sensores IoT: Do ESP32 ao GrafanaWebinar: Monitorando sensores IoT: Do ESP32 ao Grafana
Webinar: Monitorando sensores IoT: Do ESP32 ao GrafanaEmbarcados
 
Rodando uma API Com Django Rest Framework no Google Cloud
Rodando uma API Com Django Rest Framework  no Google CloudRodando uma API Com Django Rest Framework  no Google Cloud
Rodando uma API Com Django Rest Framework no Google CloudAlvaro Viebrantz
 

Semelhante a TDC 2017 - Borg até o Prometheus: Site Reliability Engineering (20)

Foco no app, viva o serverless!
Foco no app, viva o serverless!Foco no app, viva o serverless!
Foco no app, viva o serverless!
 
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
 
Melhores práticas para Arquitetura em Cloud Computing
Melhores práticas para Arquitetura em Cloud ComputingMelhores práticas para Arquitetura em Cloud Computing
Melhores práticas para Arquitetura em Cloud Computing
 
Mudança de paradigma no monitoramento de banco de dados
Mudança de paradigma no monitoramento de banco de dadosMudança de paradigma no monitoramento de banco de dados
Mudança de paradigma no monitoramento de banco de dados
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis Paulino
 
Como um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoComo um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenho
 
AWS Meetup - Processando dados em alta escala com Node.js e AWS Lambda
AWS Meetup - Processando dados em alta escala com Node.js e AWS LambdaAWS Meetup - Processando dados em alta escala com Node.js e AWS Lambda
AWS Meetup - Processando dados em alta escala com Node.js e AWS Lambda
 
Data center MCSBRC2010-slides.pdf
Data center MCSBRC2010-slides.pdfData center MCSBRC2010-slides.pdf
Data center MCSBRC2010-slides.pdf
 
Minicurso IOT com javascript - SBTI
Minicurso IOT com javascript - SBTIMinicurso IOT com javascript - SBTI
Minicurso IOT com javascript - SBTI
 
Arquiteturas de Software para o Século XXI
Arquiteturas de Software para o Século XXIArquiteturas de Software para o Século XXI
Arquiteturas de Software para o Século XXI
 
IoT Frameworks
IoT FrameworksIoT Frameworks
IoT Frameworks
 
Desenvolvendo Produtos para Internet das Coisas
Desenvolvendo Produtos para Internet das CoisasDesenvolvendo Produtos para Internet das Coisas
Desenvolvendo Produtos para Internet das Coisas
 
SonarQube
SonarQubeSonarQube
SonarQube
 
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenhoBig Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
 
Primeiros passos com o framework Sencha Ext JS
Primeiros passos com o framework Sencha Ext JSPrimeiros passos com o framework Sencha Ext JS
Primeiros passos com o framework Sencha Ext JS
 
TDC - Qual o tamanho adequado de um micro serviço?
TDC - Qual o tamanho adequado de um micro serviço?TDC - Qual o tamanho adequado de um micro serviço?
TDC - Qual o tamanho adequado de um micro serviço?
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Webinar: Monitorando sensores IoT: Do ESP32 ao Grafana
Webinar: Monitorando sensores IoT: Do ESP32 ao GrafanaWebinar: Monitorando sensores IoT: Do ESP32 ao Grafana
Webinar: Monitorando sensores IoT: Do ESP32 ao Grafana
 
Sql Server
Sql ServerSql Server
Sql Server
 
Rodando uma API Com Django Rest Framework no Google Cloud
Rodando uma API Com Django Rest Framework  no Google CloudRodando uma API Com Django Rest Framework  no Google Cloud
Rodando uma API Com Django Rest Framework no Google Cloud
 

TDC 2017 - Borg até o Prometheus: Site Reliability Engineering

  • 1.
  • 2. Quem somos ? Paulo Castro Físico pela USP e desenvolvedor de software, arquiteto e agora coordenador de operações back ti na B2W. http://paulorcf.com - @paulorcf Felipe Signorini, DevOps na B2W, arquiteto padawan e grande entusiasta do desenvolvimento durável. https://github.com/Signorini - @signorini
  • 3. Introdução - As coisas caem As coisas caem, todos os profissionais de TI conhecem essa verdade, como podemos minimizar esse problema. Monitoramento é o pilar da equipe de operação e infraestrutura, sendo assim, em um mundo de datacenters híbridos precisamos pensar uma maneira nova de entender, monitorar e quantificar os sistemas. INtrodução
  • 4. Monitoramento para que te quero Sistema de monitoramento servem para agilizar a tomada de decisões quando algo está errado. Não impactar nossos clientes e consequentemente nosso negócio. Introdução
  • 5. Saindo do código e visualizando o negócio. Normalmente a implementação de um sistema de monitoramento se limita a informações de servidor como memória, cpu, disco e etc, mais podemos ir além com análise de aplicativo até o negócio. Introdução
  • 6. Borg e SRE Novas culturas, novos meios
  • 7. Borg e SRE SRE (Site Reliability Engineer) é uma disciplina que incorpora engenharia de software e aplica para operações, como objetivo criar sistemas ultra-escaláveis e que nunca param. Definição Ben Treynor: "what happens when a software engineer is tasked with what used to be called operations." Borg e SRE https://research.google.com/pubs/pub43438.html https://github.com/kubernetes/kubernetes Borg Kubernetes
  • 8. Borg e SRE Borg e SRE https://research.google.com/pubs/pub43438.html https://github.com/kubernetes/kubernetes Borg Kubernetes
  • 9. μServices Palavra para reunir tudo isso Microserviços. Pensando em todo esse novo cenário procuramos uma maneira de entender a operação como developers. Prometheus apareceu de uma maneira natural já que foi pensado em como monitorar aplicação publicadas no Kubernetes. Borg e SRE
  • 10. μServices Palavra para reunir tudo isso Microserviços. Pensando em todo esse novo cenário procuramos uma maneira de entender a operação como developers. Prometheus apareceu de uma maneira natural já que foi pensado em como monitorar aplicação publicadas no Kubernetes. Borg e SRE
  • 11. Entendendo o problema O desafio de multi-datacenter
  • 12. Datacenter híbridos Entendendo os problemas Open Stack AWS 1 AWS 2 AWS 3 Bare Metal Bare Metal Direct Connect
  • 13. Requisição simples? Entendendo os problemas Micro App Micro App DB X DB X Micro App Micro App LoadBalance Scan Oracle AWS OpenStack Bare Metal
  • 14. E o tamanho? Entendendo os problemas ~ 800 Servidores ~ 9000 CPUs ~ 25k Memory ~ 12 Zones
  • 15. E o tamanho? Entendendo os problemas Quantos GB de Storage preciso para armazenar todos os dados em um mês ?
  • 17. Tudo começou no Sound Cloud Prometheus Sistema de monitoramento e alerta open source desenvolvido internamente na SoundCloud. Escrito em Go (Golang).
  • 18. Vantagens e desvantagens Prometheus Vantagens •Sistema multi dimensional de dados. •Totalmente customizável, com funcionalidades poderosas. •Banco TimeSeries otimizado. •Totalmente Open Source com uma boa aprovação pela comunidade. •Suporte a Services discovery. •Modelo Pull. Desvantagens •Não tem nenhuma, mentira… :-) •HA é difícil. •Exportação dos dados históricos não é simples. •Um setup em cada datacenter.
  • 24. Pull, sim senhor Prometheus A grande maioria dos sistemas de monitoramento tem a arquitetura baseada no modelo push. Os servidores enviam informações para servidor de monitoramento. Modelo Pull o servidor expõe um endpoint e o Prometheus consome. Todo o trabalho fica a cargo do Prometheus deixando os servidores fazerem seus trabalhos, que é atender os clientes!
  • 27. Subindo o Prometheus Prometheus docker run -p 9090:9090 -v /prometheus-data prom/prometheus -v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml -config.file=/prometheus-data/prometheus.yml
  • 31. Banco TimeSeries BIT TALKS Banco feitos especialmente para armazenar informações temporais. •InfluxDB •Open TSDB •Graphite •PromQL (Este é do prometheus)
  • 32. Banco TimeSeries Banco timeseries Como funciona um banco TimeSeries ? Imagine que você consegue facilmente no seu laptop correlacionar "data objects" na ordem de 68.000.000.000 (68*10^9), o que equivale a coletar por 10 segundos 72 métricas com 15 processos em 20 hosts por 1 ano.
  • 33. Banco TimeSeries Banco timeseries Como funciona um banco TimeSeries ? Imagine que você consegue facilmente no seu laptop correlacionar "data objects" na ordem de 68.000.000.000 (68*10^9), o que equivale a coletar por 10 segundos 72 métricas com 15 processos em 20 hosts por 1 ano.
  • 34. Banco TimeSeries Banco timeseries Como funciona um banco TimeSeries ? Imagine que você consegue facilmente no seu laptop correlacionar "data objects" na ordem de 68.000.000.000 (68*10^9), o que equivale a coletar por 10 segundos 72 métricas com 15 processos em 20 hosts por 1 ano.
  • 35. Banco TimeSeries Banco timeseries A mágica é: ● Separar em pequenos "chunks" de mesmo tamanho com "data objects" em séries temporais. ● Comprimir os "chunks" para reduzir o volume da informação. ● Guardar os dados comprimidos e seu atributo em apenas um "record". Após a mágica, ganhamos: ● 32 Gb de disco armazena 68 bilhões de data objects. ● Leitura dos "data objects" em milisegundos. ● A navegação nos atributos é super rápida (lendo os "chunks"). ● Dá para rodar no seu laptop :-) Complicado ?
  • 36. Banco TimeSeries Banco timeseries Vamos a teoria: ● Definição 1 ○ "Data object" é uma tupla de {timestamp, value} onde "value" pode ser qualquer objeto. ● Definição 2 ○ Uma série temporal T é uma lista arbitrária e cronologicamente ordenada de "data objects" de um tipo de "value". ● Definição 3 ○ Um "chunk" é cronologicamente ordenada como parte de uma série temporal. ● Definição 4 ○ Um banco de dados de séries temporais é específico para armazenar e recuperar informação no tempo de forma eficiente e optimizada.
  • 38. Histogram Matriz de dados Requisições por segundo distribuídos Counter Dado incremental. Soma de requisições Gauge Incremental e decremental Consumo de CPU Estilos de métricas Métricas Summary Matriz de dados multidimensional. Consumo por requisição, max, med, min etc.
  • 39. Tipos de exporter Métricas Dentro da documentação oficial temos mais de 50 tipos de exporter, deste de serviços específicos, redes, tipos de negócio, se olharmos os oferecidos pela comunidade as opções são infinitas, destacamos alguns exporters: •Node: Informações de infra •JMX: Exportar todas as informações JMX •JSON : Exportar métricas vindo de jsons •Cadvisor: Informações detalhadas de containers dockers •BlackBox: Informações sobre a saúde de serviços •Rabbit: Informações detalhadas sobre o Rabbit •MongoDb: Informações detalhadas sobre o MONGODB •ElasticSearch: Informações de saúde ElasticSearch Código Frameworks
  • 40. Subindo o Node exporter Prometheus go get github.com/prometheus/node_exporter cd ${GOPATH-$HOME/go}/src/github.com/prometheus/node_exporter make ./node_exporter <flags> wget http://node_exporter-0.14.0.darwin-386.tar.gz nohup ./node_exporter &
  • 42. Construindo suas próprias métricas Instrumentação de código Poderá criar e expor métricas personalizadas com instrumentação no próprio código, atualmente quase todas as linguagens possuem suas bibliotecas. •Python •Java •Node •Go •Elixir •Ruby •Entre outros
  • 46. Python from prometheus_client import start_http_server, Metric, REGISTRY import json import requests metric = Metric('svc_requests_duration_seconds', 'Requests time taken in seconds', 'summary') metric.add_sample('svc_requests_duration_seconds_count', value=response['requests_handled'], labels={}) metric.add_sample('svc_requests_duration_seconds_sum', value=response['requests_duration_milliseconds'] / 1000.0, labels={})
  • 48. Instrumentação de código Adicionou a dependência, registrou e acabou.
  • 49. PushGateway Instrumentação de código Métricas que não podem ser capturadas, muito utilizado para processos em batch, cron jobs entre outros.
  • 50. Push Gateway em Java import io.prometheus.client.CollectorRegistry; import io.prometheus.client.Gauge; import io.prometheus.client.exporter.PushGateway; void executeBatchJob() throws Exception { CollectorRegistry registry = new CollectorRegistry(); Gauge duration = Gauge.build() .name("my_batch_job_duration_seconds") .help("Duration of my batch job in seconds.") .register(registry); Gauge.Timer durationTimer = duration.startTimer(); try { // Your code here. Gauge lastSuccess = Gauge.build() .name("my_batch_job_last_success_unixtime") .help("Last time my batch job succeeded, in unixtime.") .register(registry); lastSuccess.setToCurrentTime(); } finally { durationTimer.setDuration(); PushGateway pg = new PushGateway("127.0.0.1:9091"); pg.pushAdd(registry, "my_batch_job"); } }
  • 52. Definição por queries Alertas Sistema de alertas delimitados por queries, possibilitando uma completa customização em como os alertas irão funcionar. Integração com E-mail, Hipchat, slack, pageduty e etc.
  • 53. Alertas ALERT node_down IF up == 0 FOR 1m LABELS {severity="low", title="Cliente node exporter morto"} Alertas
  • 55. Granularidade nos alertas Alertas Com um sistema de tags e um grande poder do AlertManager, podemos delimitar regras e pesos para cada tipo de alertas. •Severidade de cada alerta •Diferentes canais de atendimento e equipes •Históricos de alertas
  • 59. WebHook Alertas # Whether or not to notify about resolved alerts. [ send_resolved: <boolean> | default = true ] # The endpoint to send HTTP POST requests to. url: <string>
  • 61. Templates Grafana Grafana possui compatibilidade com Prometheus nativamente, além de possuir uma gama de templates produzido pela comunidade. Todas as métricas são automaticamente disponíveis para Grafana, sendo possível de forma fácil criar um dashboard customizado para cada necessidade. Quer navegar sobre dados históricos de 4 meses atrás, sem problemas. Quer ver em tempo real o quê está acontecendo também dá.
  • 74. Demo
  • 76. Inteligência com dados! Futuro próximo Com dados temporais que coletamos podemos junto com áreas de negócio descobrir coisas fantásticas, hoje já sabemos: Operações ● Será que sua aplicação precisa de mais ou menos recurso ? ● Diminuição drástico do MTTR (Tempo médio de recuperação do sistema). ● Entendemos arquitetura da sua aplicação e te ajudamos a nunca mais ficar fora do ar. Indicadores de negócio ● Quanto realmente seu app vendeu. ● GMV por app. ● Cliente não percebe problemas, são resolvidos antes. Dashboards são compartilhados para equipe que centraliza as estatísticas de seu app.