Path: blob/master/site/pt-br/io/tutorials/prometheus.ipynb
25118 views
Copyright 2020 The TensorFlow IO Authors.
Carregue métricas a partir de um servidor Prometheus
Atenção: além dos pacotes Python, este notebook usa sudo apt-get install
para instalar pacotes de terceiros.
Visão geral
Este tutorial carrega métricas CoreDNS a partir de um servidor Prometheus em um tf.data.Dataset
e depois usa o tf.keras
para treinamento e inferência.
O CoreDNS é um servidor DNS com foco em descoberta de serviços e é amplamente implantado como parte do cluster de Kubernetes. Por esse motivo, costuma ser monitorado com atenção por operações devops.
Este tutorial é um exemplo do que pode ser usado por devops em busca de automatizar suas operações por meio de aprendizado de máquina.
Configuração e uso
Instale os pacotes tensorflow-io necessários e reinicie o runtime
Instale e configure o CoreDNS e o Prometheus
Para fins de demonstração, será usado um CoreDNS local com porta 9053
aberta para receber consultas DNS e porta 9153
(padrão) aberta para expor as métricas para extração. Veja abaixo uma configuração básica de Corefile para o CoreDNS, disponível para download:
Confira mais detalhes sobre a instalação na documentação do CoreDNS.
A próxima etapa é configurar o servidor Prometheus e usá-lo para extrair métricas do CoreDNS expostas na porta 9153
, conforme visto acima. O arquivo prometheus.yml
para configuração também está disponível para download:
Para mostrar alguma atividade, o comando dig
deve ser usado para gerar algumas consultas DNS ao servidor CoreDNS configurado:
Agora, temos um servidor CoreDNS cujas métricas são extraídas por um servidor Prometheus, prontas para serem consumidas pelo TensorFlow.
Crie um dataset para métricas do CoreDNS e utilize-o no TensorFlow
Crie um dataset para métricas do CoreDNS que estão disponíveis no servidor Prometheus, o que pode ser feito usando tfio.experimental.IODataset.from_prometheus
. São necessários dois argumentos, no mínimo. query
(consulta) é passada ao servidor Prometheus para selecionar as métricas, e length
(tamanho) é o período que você deseja carregar no dataset.
Você pode começar com "coredns_dns_request_count_total"
e "5"
(segundos) para criar o dataset abaixo. Como foram enviadas duas consultas DNS anteriormente neste tutorial, esperamos que as métricas "coredns_dns_request_count_total"
sejam "2.0"
no fim da série temporal:
Vamos ver mais detalhes da especificação do dataset:
É óbvio que o dataset consiste de uma tupla (time, values)
(horário, valores), em que o campo values
é um dicionário (dict) do Python, expandido para:
No exemplo acima, 'coredns'
é o nome do trabalho, 'localhost:9153'
é o nome da instância, e 'coredns_dns_request_count_total'
é o nome da métrica. Observe que, dependendo da consulta Prometheus usada, é possível que diversos trabalhos/instâncias/métricas sejam retornados. Também é por esse motivo que um dicionário (dict) do Python foi usado na estrutura do dataset.
Vejamos outra consulta "go_memstats_gc_sys_bytes"
como exemplo. Como tanto o CoreDNS quanto o Prometheus são escritos em Golang, a métrica "go_memstats_gc_sys_bytes"
está disponível tanto para o trabalho "coredns"
quanto para o trabalho "prometheus"
:
Observação: pode ocorrer um erro para esta célula na primeira vez em que é executada. Execute novamente para que funcione.
Agora, o Dataset
criado está pronto para ser passado ao tf.keras
diretamente para treinamento ou inferência.
Use o dataset para treinamento do modelo
Com o dataset de métricas criado, é possível passá-lo diretamente ao tf.keras
para fazer treinamento e inferência do modelo.
Para fins de demonstração, este tutorial usará somente um modelo LSTM bem simples, com 1 característica e 2 passos como entrada:
O dataset a ser usado é o valor 'go_memstats_sys_bytes' para o CoreDNS, com 10 amostras. Porém, como uma janela deslizante de window=n_steps
e shift=1
são formados, são necessárias amostras adicionais (para quaisquer dois elementos consecutivos, o primeiro é recebido como x
, e o segundo é recebido como y
para o treinamento). O total é de 10 + n_steps - 1 + 1 = 12
segundos.
O valor dos dados também é redimensionado no intervalo [0, 1]
.
O modelo treinado acima não é muito útil, pois o servidor CoreDNS configurado neste tutorial não tem carga de trabalho nenhuma. Porém, esse é um pipeline funcional que pode ser usado para carregar métricas de servidores de produção reais. O modelo pode ser aprimorado para resolver problemas reais de automação de devops.