Prometheus: Recuperar métricas de Linux

Como recuperar métricas de servidores Linux no Prometheus usando Node Exporter

👋 Bem-vindo à documentação da Stackhero!

A Stackhero oferece uma solução Prometheus cloud pronta a usar que proporciona uma série de benefícios, incluindo:

  • Alert Manager incluído para enviar alertas para Slack, Mattermost, PagerDuty, etc.
  • Servidor de email dedicado para enviar alertas de email ilimitados.
  • Blackbox para sondar HTTP, ICMP, TCP, e mais.
  • Configuração fácil com editor de ficheiros de configuração online.
  • Atualizações sem esforço com apenas um clique.
  • Desempenho ótimo e segurança robusta alimentados por uma VM privada e dedicada.

Poupe tempo e simplifique a sua vida: leva apenas 5 minutos para experimentar a solução de hospedagem cloud Prometheus da Stackhero!

Node Exporter é um software que pode ser instalado em kernels *NIX (Linux, OpenBSD, FreeBSD ou Darwin) para expor métricas do sistema para o Prometheus. É um componente essencial para monitorizar o desempenho dos servidores e a saúde da infraestrutura.

Na terminologia do Prometheus, o Node Exporter atua como um exportador e é adicionado como um alvo na sua configuração do Prometheus. O Prometheus conecta-se ao Node Exporter usando a porta TCP 9100 via HTTP em intervalos regulares para recuperar métricas.

Em resumo, o Node Exporter permite monitorizar um sistema baseado em Linux. Para sistemas Windows, pode usar o Windows Exporter.

Imagem geral do Stackhero para PrometheusImagem geral do Stackhero para Prometheus

Pode descarregar o Node Exporter da sua página de releases no GitHub. É distribuído como um binário que corre diretamente no seu sistema. Como é projetado para funcionar continuamente, é recomendado configurá-lo para iniciar automaticamente quando o servidor arranca.

Por padrão, o Node Exporter abre a porta 9100 para o mundo sem autenticação ou encriptação. É altamente recomendado adicionar tanto autenticação quanto encriptação TLS (veja abaixo) e configurar um firewall para restringir o acesso à porta 9100 para que apenas o seu servidor Prometheus ou outros endereços IP autorizados possam conectar-se.

Pode seguir estes passos no Ubuntu:

# Vá para https://github.com/prometheus/node_exporter/releases para obter o número da última versão.
node_exporter_version="1.2.0"
node_exporter_release="linux-amd64"

# Descarregar e instalar node_exporter
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v${node_exporter_version}/node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz
tar xvfa node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz
sudo mv node_exporter-${node_exporter_version}.${node_exporter_release}/node_exporter /usr/local/bin/
rm -rf node_exporter-${node_exporter_version}.${node_exporter_release} node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz

# Criar um utilizador "node_exporter"
sudo useradd -rs /bin/false node_exporter

# Criar um serviço systemd para iniciar node_exporter automaticamente no arranque
sudo bash -c 'cat << EOF > /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
After=network.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter --web.config=/etc/prometheus_node_exporter/configuration.yml

[Install]
WantedBy=multi-user.target
EOF'

# Criar um diretório e ficheiro de configuração
sudo mkdir -p /etc/prometheus_node_exporter/
sudo touch /etc/prometheus_node_exporter/configuration.yml
sudo chmod 700 /etc/prometheus_node_exporter
sudo chmod 600 /etc/prometheus_node_exporter/*
sudo chown -R node_exporter:node_exporter /etc/prometheus_node_exporter

sudo systemctl daemon-reload
sudo systemctl enable node_exporter

# Iniciar o daemon node_exporter e verificar o seu estado
sudo systemctl start node_exporter
sudo systemctl status node_exporter

Neste ponto, o binário node_exporter deve estar a correr no seu servidor. Para confirmar que está a funcionar, pode conectar-se a ele e verificar se retorna métricas:

curl http://localhost:9100/metrics

O Node Exporter abre a porta 9100 para a rede pública. Isto significa que qualquer pessoa pode conectar-se e recuperar as métricas do seu servidor! No mínimo, deve adicionar autenticação e encriptação TLS (veja abaixo) e é fortemente recomendado configurar um firewall para bloquear pedidos para a porta 9100 de IPs que não sejam o seu servidor Prometheus.

O processo de instalação do Node Exporter no Debian é idêntico ao método do Ubuntu descrito acima. Basta seguir as mesmas instruções.

Os passos de instalação do Node Exporter dependem do sistema que utiliza. Embora a documentação detalhada para cada plataforma não seja fornecida, o procedimento básico envolve descarregar o binário que corresponde ao seu sistema e configurá-lo para iniciar no arranque.

Por padrão, o Node Exporter não realiza autenticação, o que significa que qualquer pessoa pode recuperar as métricas expostas. Para proteger o acesso, pode adicionar autenticação básica para um utilizador.

Gere uma palavra-passe usando os seguintes comandos:

password=`openssl rand -base64 32`
passwordHashed=`echo ${password} | htpasswd -inBC 10 "" | tr -d ':'`
echo "Palavra-passe clara a manter para o servidor Prometheus: ${password}"

Se não tiver o binário htpasswd, pode instalá-lo no Debian/Ubuntu usando apt-get install --no-install-recommends apache2-utils.

Mantenha a palavra-passe clara segura, pois irá precisar dela ao configurar o Prometheus.

Adicione as seguintes linhas ao ficheiro de configuração para adicionar um utilizador chamado "prometheus" com o hash da palavra-passe gerada:

sudo cat << EOF >> /etc/prometheus_node_exporter/configuration.yml
basic_auth_users:
  prometheus: ${passwordHashed}

EOF

# Reiniciar Node Exporter
sudo systemctl restart node_exporter

Finalmente, verifique se a autenticação está a funcionar corretamente:

  • Executar curl http://localhost:9100/metrics deve retornar "Unauthorized".
  • Executar curl -u prometheus:${password} http://localhost:9100/metrics deve retornar a lista de métricas.

Por padrão, o Node Exporter não encripta as comunicações. Isto significa que as credenciais, incluindo a palavra-passe definida anteriormente, são transmitidas em texto simples. Para proteger as comunicações, pode ativar a encriptação TLS da seguinte forma.

Execute os seguintes comandos para criar um certificado e uma chave TLS:

# Criar certificado TLS
cd /tmp
sudo openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 \
  -keyout /etc/prometheus_node_exporter/tlsCertificate.key \
  -out /etc/prometheus_node_exporter/tlsCertificate.crt \
  -subj "/CN=`hostname`" \
  -addext "subjectAltName = DNS:`hostname`"
sudo chmod 600 /etc/prometheus_node_exporter/*
sudo chown -R node_exporter:node_exporter /etc/prometheus_node_exporter

Adicione as seguintes linhas ao ficheiro de configuração para adicionar as definições TLS e depois reinicie o Node Exporter:

sudo cat << 'EOF' >> /etc/prometheus_node_exporter/configuration.yml
tls_server_config:
  cert_file: /etc/prometheus_node_exporter/tlsCertificate.crt
  key_file: /etc/prometheus_node_exporter/tlsCertificate.key

EOF

# Reiniciar Prometheus Node Exporter
sudo systemctl restart node_exporter

Pode verificar que o TLS está ativo conectando-se via HTTPS com o seguinte comando:

curl -k -u prometheus:${password} https://localhost:9100/metrics

Note que este método não usa um certificado CA, por isso precisa passar a opção "-k" para o cURL para ignorar a verificação do certificado.

Depois de instalar o Node Exporter e protegê-lo, configure o seu servidor Prometheus para recolher métricas numa agenda regular.

No Stackhero, selecione o seu serviço Prometheus e vá para o URL "Prometheus configuration". Depois adicione o seguinte à sua secção scrape_configs:

scrape_configs:

  - job_name: "My servers pool"
    static_configs:
      - targets: [ "<yourLinuxServerDomain>:9100" ]
    basic_auth:
      username: "prometheus"
      password: "<password>"
    scheme: https
    tls_config:
      insecure_skip_verify: true
    # Relabeling "instance" para remover a parte ":9100"
    relabel_configs:
      - source_labels: [__address__]
        target_label: instance
        regex: '([^:]+)(:[0-9]+)?'
        replacement: '${1}'

Guarde o ficheiro e verifique os logs do Prometheus para confirmar que foi recarregado com sucesso (pode ver os logs a partir do painel de controlo do Stackhero selecionando o seu serviço Prometheus e clicando no separador "Logs").

Finalmente, verifique se o Prometheus está a recolher métricas acedendo à interface do utilizador do Prometheus no painel de controlo do Stackhero e navegando para Status > Targets. O seu servidor Linux deve aparecer na lista de alvos como UP.

O alvo "myLinuxServer" está UPO alvo "myLinuxServer" está UP

Para visualizar as métricas recuperadas do Node Exporter, inicie sessão no Prometheus através do painel de controlo do Stackhero usando o URL "Prometheus UI" ou diretamente em https://<prometheusDomain>/.

No campo "Expression", digite node_memory_MemTotal_bytes e pressione enter. Se tudo estiver configurado corretamente, verá a RAM total do servidor exibida em bytes.

A quantidade total de RAM para este servidor é 4068794368 bytes, que é 3.78GBA quantidade total de RAM para este servidor é 4068794368 bytes, que é 3.78GB

O Grafana pode gerar dashboards facilmente com base nos dados do Prometheus. Para instruções detalhadas sobre como configurar o Grafana para exibir dados do Prometheus, consulte a documentação do Grafana.

Exemplo de um dashboard gerado pelo Grafana, baseado nos dados do Prometheus Node ExporterExemplo de um dashboard gerado pelo Grafana, baseado nos dados do Prometheus Node Exporter