Depois de um ano trabalhando de casa e aproveitando o último fim de semana prolongado, resolvi monitorar a conectividade do home office.
Temos muitas opções disponíveis (MUITAS) para esse tipo de monitoramento, mas como o objetivo era usar um Raspberry Pi, um dos requisitos era que os softwares fossem leves. Além disso as métricas seriam baseadas em ICMP e DNS (posteriormente acabei adicionando verificação HTTP e dados sobre o WiFi, pois o Telegraf tinha esses plugins prontos) então não tinha porque usar soluções mais elaboradas/pesadas.
Com isso em mente, escolhi o combo Telegraf (para coletar as métricas), Prometheus (banco de dados) e Grafana (dashboard com os gráficos).
Instalando as aplicações
Vou descrever de forma geral pois a) muda a sintaxe de acordo com a distribuição Linux b) é possível encontrar tutoriais detalhados para cada aplicação. Espero que sirva de roteiro, ao menos.
Estou usando Raspberry Pi OS, que é baseado no Debian, mas funciona em outras plataformar (a primeira versão montei em uma máquina virtual com CentOs).
1) Instale o Telegraf.
sudo apt-get update && sudo apt-get install apt-transport-https wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add -source /etc/os-release test $VERSION_ID = "7" && echo "deb https://repos.influxdata.com/debian wheezy stable" | sudo tee /etc/apt/sources.list.d/influxdb.list test $VERSION_ID = "8" && echo "deb https://repos.influxdata.com/debian jessie stable" | sudo tee /etc/apt/sources.list.d/influxdb.list test $VERSION_ID = "9" && echo "deb https://repos.influxdata.com/debian stretch stable" | sudo tee /etc/apt/sources.list.d/influxdb.list sudo apt-get update && sudo apt-get install telegraf sudo systemctl start telegraf
2) Instale o Prometheus (baixe a versão adequada para seu sistema, e opcionalmente mude o nome do diretório).
sudo wget https://github.com/prometheus/prometheus/releases/download/v2.26.0/prometheus-2.26.0.linux-arm64.tar.gz tar xvfz prometheus-2.26.0.linux-arm64.tar.gz cd prometheus-*
Pode transformar o Prometheus em serviço (recomendado), ou executar com o comando ./prometheus.
3) Temos opção de instalar o Grafana localmente ou usar o Grafana Cloud (preferi usar na nuvem). Se for usar local, instale a aplicação.
apt install gnupg2 apt-transport-https software-properties-common wget wget -q -O - https://packages.grafana.com/gpg.key | apt-key add - echo "deb https://packages.grafana.com/oss/deb stable main" | tee -a /etc/apt/sources.list.d/grafana.list apt update apt install grafana systemctl daemon-reload systemctl enable grafana-server systemctl start grafana-server
4) Libere o Prometheus e o Grafana no firewall, caso esteja usando. O Grafana usa a porta 3000 e o Prometheus a porta 9090.
sudo ufw allow ssh sudo ufw allow 3000/tcp sudo ufw allow 9090/tcp
Configurando Telegraf
O Telegraf funciona baseado em plugins de input e output. Para input (coleta dos dados) usei os plugins Ping, DNS, HTTP e Wireless (não funciona no CentOS). Para output o plugin Prometheus (para onde os dados serão enviados).
As configurações são feitas no arquivo telegraf.conf.
## Input plugins #Ping plugin [[inputs.ping]] urls = ["192.168.15.1", "1.1.1.1", "8.8.8.8", "208.67.222.222", "201.10.207.83", "186.230.16.42", "189.86.140.98", "google.com", "twitter.com", "amazon.in", "facebook.com"] count = 4 ping_interval = 5.0 timeout = 2.0 #DNS plugin [[inputs.dns_query]] servers = ["208.67.222.222"] domains = ["www.uol.com.br", "google.com", "twitter.com", "amazon.in", "facebook.com"] #HTTP request [[inputs.http_response]] urls = ["https://site.desk.ms/?Login","https://cisco.com","https://outlook.live.com/owa/","https://site.pipedrive.com/auth/login?return"] response_timeout = "3s" method = "GET" follow_redirects = true insecure_skip_verify = false #Wifi signal [[inputs.wireless]] ## Sets 'proc' directory path ## If not specified, then default is /proc ## host_proc = "/proc" ## Output format plugins #Prometheus [[outputs.prometheus_client]] listen = ":9283" metric_version = 2
Depois de configurar reinicie o telegraf (service telegraf restart) e verifique o status.
pi@raspy:/etc/telegraf $ service telegraf status * telegraf.service - The plugin-driven server agent for reporting metrics into InfluxDB Loaded: loaded (/lib/systemd/system/telegraf.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2021-04-07 17:03:34 -03; 29min ago Docs: https://github.com/influxdata/telegraf Main PID: 9375 (telegraf) Tasks: 35 (limit: 4915) CGroup: /system.slice/telegraf.service |- 9375 /usr/bin/telegraf -config /etc/telegraf/telegraf.conf -config-directory /etc/telegraf/telegraf.d
Configurando o Prometheus
A configuração do Prometheus é feita no arquivo prometheus.yml. Basicamente definimos o tempos de consulta, criamos um job e target para o telegraf (porta 9283) e definimos o Grafana Cloud como destino (para Grafana local não é necessário nenhuma configuração).
# my global config global: scrape_interval: 30s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 30s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout is set to the global default (10s). # Alertmanager configuration alerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093 # Load rules once and periodically evaluate them according to the global 'evaluation_interval'. rule_files: # - "first_rules.yml" # - "second_rules.yml" # A scrape configuration containing exactly one endpoint to scrape: # Here it's Prometheus itself. scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. - job_name: 'prometheus' - job_name: 'ispmonitor' # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['localhost:9090'] - targets: ['localhost:9283'] #telegraf # Send metrics to Grafana Cloud remote_write: - url: https://prometheus-blocks-prod-us-central1.grafana.net/api/prom/push basic_auth: username: 11111 password: eyJrIjoiN2E2NWNiZTY1ZTZjMjg5MTVjZGI4NWEyNjZlNSIsxxxxxxxxxaWQiOjQ30NX0=
Se não tiver convertido o Prometheus em serviço, pode usar o netstat e o ps para verificar o status (e ./prometheus para iniciar o serviço).
pi@raspy:/etc/telegraf $ netstat -an | grep 9090 tcp6 0 0 :::9090 :::* LISTEN pi@raspy:/etc/telegraf $ ps -ef | grep prometheus root 3418 1 0 Apr05 ? 00:00:00 sudo ./prometheus root 3419 3418 4 Apr05 ? 01:39:13 ./prometheus pi 4934 2405 0 11:49 pts/1 00:00:00 grep --color=auto prometheus
Neste ponto podemos acessar a interface gráfica do Prometheus (http://ip:9090) e ver os dados sendo populados. Procure por ping ou dns para ver as opções, selecione uma e clique em Execute.
Se não aparecer nada, verifique se os serviços estão rodando, se as portas (9283 e 9090) estão abertas (listen) e se o Telegraf está fazendo os pings.
Configurando o Grafana
No caso de instalação local, acesse a interface gráfica (http://ip:3000) e adicione o Prometheus como Data Source. Aponte o IP e porta do Prometheus, use Access = Server e HTTP Method = Get.
Caso esteja usando o Grafana Cloud, acesse a sua conta e gere um token para o Prometheus (necessário adicionar o remote_write na config do Prometheus).
E então faça a integração.
Dashboard no Grafana
Finalmente a parte legal. Cada um pode montar sua dashboard da forma que preferir.
A minha ficou dividida em 5 blocos, onde:
- Web Apps: Tenho a verficação HTTP (GET) de 4 URLs.
- WiFi: Mostra a potência e qualidade do sinal do Raspberry Pi para meu roteador.
- Availability: Monitora a disponibilidade de alguns serviços populares, usando ICMP.
- ICMP: Tempo de reposta para serviços populares e links/serviços da empresa que trabalho. Também tem o gráfico de perda de pacotes.
- DNS Reponse: Gráfico com o tempo de resposta para resolução de nome para algumas URLs populares.
É possível baixar essa (e outras) dashboard do repositório Grafana. Note que após baixar e adicionar ao seu Grafana é necessário editar o data source, apontando para o seu Prometheus.
Referências:
Até a próxima.
You must be logged in to post a comment.