Atenção: Até o momento em que este tutorial foi elaborado (14 de maio de 2020) o InfluxDB 2.0 está na versão beta e ainda não é recomendado para ser utilizado em produção e o Prometheus 2.x ainda não é completamente compatível com a API do InfluxDB 2.0. Para uso em produção é recomendado o InfluxDB 1.8.x que pode visto nesse tutorial.
Issues:
https://github.com/prometheus/prometheus/issues/5657
https://github.com/influxdata/influxdb/issues/14127
InfluxDB
InfluxDB é um banco de dados para armazenamento de séries temporais. Ele possui o código fonte aberto e disponível em: https://github.com/influxdata/influxdb
O InfluxDB inclui APIs para armazenar e consultar dados, processando-os em segundo plano para fins de monitoramento, geração de alertas, exibição de dashboards, exploração dos dados e muito mais. Ele também possui outros componentes, tais como: Kapacitor (processamento de dados em segundo plano) e Chronograf (a interface web). Tudo isso está disponível em um único binário, desenvolvido utilizando a linguagem Go (https://golang.org).
A documentação oficial do InfluxDB está disponível em:
https://docs.influxdata.com
https://v2.docs.influxdata.com/v2.0/get-started
Instale o InfluxDB 2.0 com Docker.
Apenas com HTTP:
sudo mkdir -p /docker/influxdb2/
VERSION=2.0.0-beta docker run -d --name influxdb -p 9999:9999 -v /docker/influxdb2/:/root/.influxdbv2 quay.io/influxdb/influxdb:$VERSION
Apenas com HTTPS:
sudo mkdir -p /docker/influxdb2/certs
sudo openssl req -x509 -nodes -newkey rsa:2048 \
-keyout /docker/influxdb2/certs/influxdb-selfsigned.key \
-out /docker/influxdb2/certs/influxdb-selfsigned.crt \
-days 10800
docker run -d --name influxdb -p 9999:9999 \
-v /docker/influxdb2/certs/influxdb-selfsigned.key:/etc/ssl/influxdb-selfsigned.key \
-v /docker/influxdb2/certs/influxdb-selfsigned.crt:/etc/ssl/influxdb-selfsigned.crt \
-v /docker/influxdb2:/root/.influxdbv2 quay.io/influxdb/influxdb:$VERSION influxd \
--tls-cert "/etc/ssl/influxdb-selfsigned.crt" \
--tls-key "/etc/ssl/influxdb-selfsigned.key"
Mais informações sobre o InfluxDB podem ser encontradas nos links a seguir.
Slides: https://www.percona.com/live/e17/sessions/using-prometheus-with-influxdb-for-metrics-storage
https://dzone.com/articles/getting-started-with-influxdb-20
https://dzone.com/articles/how-to-query-influxdb
https://github.com/influxdata/telegraf/blob/master/plugins/inputs/prometheus/README.md
https://docs.influxdata.com/influxdb/v1.7/supported_protocols/prometheus/
https://docs.openstack.org/developer/performance-docs/methodologies/monitoring/influxha.html
https://www.slant.co/versus/1489/6000/~prometheus_vs_influxdb
https://v2.docs.influxdata.com/v2.0/security/enable-tls/
https://docs.influxdata.com/influxdb/v1.7/administration/https_setup/
https://monitoring-portal.org/t/ssl-with-influxdb-on-grafana/5005/7
https://dev.to/influxdata/spinning-up-influxdb-2-0-alpha-with-docker-14k8
Telegraf
É o coletor de métricas do InfluxDB. Ele tem suporte a mais de 100 plugins para coleta de dados. Os dados coletados devem estar no formato do Prometheus.
Instale o Telegraf usando o Docker.
Exportando o arquivo de configuração padrão.
Apenas com HTTP:
sudo mkdir -p /docker/telegraf2 sudo docker run --rm telegraf telegraf config > /docker/telegraf/telegraf.conf
Apenas com HTTPS:
Com base nos procedimentos deste tutorial: https://dzone.com/articles/getting-started-with-influxdb-20, as informações relevantes a ser definidas na configuração do Telegraf para enviar dados do sistema GNU/Linux que executa o conteiner do InfluxDB, sem utilizar TLS e autenticação na API, são as seguintes:
Arquivo: /docker/telegraf2/telegraf.conf
Configurações adicionais (altere os valores em negrito de acordo com o seu ambiente e configurações definidas no InfluxDB):
Se o InfluxDB 2 estiver acessível apenas com HTTP:
# Configuration for sending metrics to InfluxDB [[outputs.influxdb_v2]] # The URLs of the InfluxDB cluster nodes. # Multiple URLs can be specified for a single cluster, only ONE of the # urls will be written to each interval. urls = ["http://172.17.0.1:9999"] # Token for authentication. token = "5OhOi3km8ia9xCij56_fB4mxbzSNDkRkkkrzDs5k0P9t9TKuRphbzO_TLI76oSaZLBknuUJqzv0WV6D4-tj9Kg==" # Organization is the name of the organization you wish to write to; must exist. organization = "InfluxData" # Destination bucket to write into. bucket = "influx_metrics"
Se o InfluxDB 2 estiver acessível apenas com HTTPS:
# Configuration for sending metrics to InfluxDB [[outputs.influxdb_v2]] # The URLs of the InfluxDB cluster nodes. # Multiple URLs can be specified for a single cluster, only ONE of the # urls will be written to each interval. urls = ["https://172.17.0.1:9999"] # Token for authentication. token = "5OhOi3km8ia9xCij56_fB4mxbzSNDkRkkkrzDs5k0P9t9TKuRphbzO_TLI76oSaZLBknuUJqzv0WV6D4-tj9Kg==" # Organization is the name of the organization you wish to write to; must exist. organization = "InfluxData" # Destination bucket to write into. bucket = "influx_metrics" insecure_skip_verify = true
O arquivo de configuração devidamente preenchido também pode ser obtido a partir da interface web do InfluxDB 2, acessando o menu Data > Telegraf. Em seguinda, selecione o bucket e clique no botão Create Configuration. Selecione o tipo de instalação do Telegraf para Docker. Informe o nome da organização e clique em Create configuration. Depois clique no nome da organização recém criada e copie o conteúdo ou faça o download do arquivo de configuração gerado.
Executando o Telegraf.
docker run -d --name=telegraf -v /docker/telegraf2/telegraf.conf:/etc/telegraf/telegraf.conf:ro telegraf
No InfluxDB, acesse o menu Boards e localize o dashboard automaticamente criado pelo Telegraf para exibir as métricas do host que executa o conteiner do InfluxDB.
Mais informações sobre o Telegraf podem ser encontradas nos links a seguir:
https://v2.docs.influxdata.com/v2.0/write-data/use-telegraf/manual-config/
https://hub.docker.com/_/telegraf
https://v2.docs.influxdata.com/v2.0/reference/telegraf-plugins
Prometheus
Informações sobre o Prometheus e instruções de instalação via Docker podem ser encontradas nos links a seguir.
Acesso apenas com HTTP:
Abaixo está o arquivo de configuração do Prometheus para se conectar ao InfluxDB 2 para armazenamento das métricas.
Apenas com HTTPS entre o Prometheus e o InfluxDB.
sudo mkdir -p /docker/prometheus/
Conteúdo do arquivo /docker/prometheus/prometheus.yml. Altere as informações em negrito de acordo com o seu ambiente e configurações
de acesso definidas no InfluxDB (HTTP/HTTPS, token e bucket).
global: # Intervalo de raspagem de métricas. O padrão é a cada 60s scrape_interval: 10s # Intervalo para avaliação de regras. O padrão é a cada 60s evaluation_interval: 10s # scrape_timeout é definido como o padrão global (10s). alerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093 rule_files: # - "first_rules.yml" # - "second_rules.yml" scrape_configs: - job_name: 'prometheus' # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['172.17.0.1:9090'] # Output metrics for InfluxDB 2.0 remote_write: #- url: "https://172.17.0.1:9999/api/v2/prom/write?org=InfluxData&bucket=prometheus&token=rcRExVE1naRfEnjdfO-brpBr-md3_oscEjV5b35LPQB7WojDNqfyG8MB_j270smlVp1RDpsSNnKjLExWXkIEvA==" - url: "https://172.17.0.1:9999/api/v1/prom/write?db=prometheus&bearer_token=rcRExVE1naRfEnjdfO-brpBr-md3_oscEjV5b35LPQB7WojDNqfyG8MB_j270smlVp1RDpsSNnKjLExWXkIEvA==" name: send_to_influxdb tls_config: insecure_skip_verify: true
Iniciando o Prometheus.
docker run -d -p 9090:9090 \
--name prometheus \
-v /docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus