Monitorização de condutas de dados em grande escala
ShareThis is growing rapidly! Nos últimos 4 anos que trabalho aqui, temos crescido de uma empresa de um quarto para uma empresa de muitos quartos. Também começamos a ter todas as vantagens típicas de uma empresa de quartos: comida grátis, escritório chique, passeios de empresa, etc.
Coisas divertidas acontecem quando criamos valor, mas há um custo para a engenharia em termos de complexidade. Agora geramos terabytes de dados por dia em tempo real. Também esperamos ingerir ainda mais dados no próximo ano ou dois; duplicando ou triplicando o nosso fluxo de dados. É gratificante quando falo com colegas para dizer-lhes o que estamos fazendo e eles respondem com "uau".
O problema não é a ingestão - ferramentas como Kafka, Cassandra, Aerospike, BigQuery, etc, tornam a escalada um problema mais fácil do que era há 4 anos. A dificuldade vem quando alguém pergunta "como você sabe que os dados lá dentro estão certos?" ou "como você sabe que todos os dados estão lá?
"Simplesmente é." - Não é suficientemente bom.
Para nos ajudar a responder a perguntas como esta, dobrámos a monitorização gratuita através de todos os pipelines de dados. Felizmente, nosso código é construído sobre um framework comum para que quando adicionamos monitoramento a uma biblioteca, ele seja adicionado dinamicamente a todas as aplicações que usam essa biblioteca. Bastante legal.
Talvez um pequeno colapso da tecnologia ajude aqueles que estão tentando fazer isso no futuro:
Grafite: Graphite é uma "aplicação web baseada em Django que produz gráficos e dashboards". É construído sobre dois outros projetos, Carbon e Whisper (ambos projetos são parte do Graphite). Carbon atua como uma camada de agregação e cache que torna a interface de usuário responsiva. Whisper é uma "base de dados de tamanho fixo, semelhante em design e propósito ao RRD (round-robin-database de dados). Ele fornece armazenamento rápido e confiável de dados numéricos ao longo do tempo. Whisper permite que a maior resolução (segundos por ponto) de dados recentes se degrade em resoluções mais baixas para retenção a longo prazo de dados históricos".
Codahale: A biblioteca da Codahale tem conectores para uma variedade de serviços diferentes (como Ganglia). Para os nossos propósitos usamos os conectores Java Graphite e estamos prontos para ir. Os objetos de métrica podem ser criados dinamicamente e permitirão que você registre estatísticas básicas, histogramas e temporizadores. Configuramos a biblioteca para logar por servidor por minuto, para que as chamadas sejam agrupadas e o tráfego permaneça baixo.
Seyren: Nós usamos uma versão modificada de este projecto portuário internamente com os nossos componentes agrupados no interior. Apontamos para grafite e slack usando variáveis de ambiente do sistema. Uma vez na IU, criamos verificações com métricas de grafite (muitas vezes usando algumas das funcionalidades bem documentadas) para alertar para o nosso canal Slack.
Espero que isto ajude! Feliz hacking