PMM2: Redis


Como ya sabemos Prometheus permite la monitorización de un amplio abanico de servicios, esta monitorización se lleva a cabo mediante determinados exporters que colectan las métricas consumidas por Prometheus, en este artículo explicaré como montar dos servidores Redis en modo master/slave y como monitorizarlos mediante PMM2.

Compilamos e instalamos Redis:

emerge -av dev-db/redis

Habilitamos el servicio en el arranque:

rc-update add redis default
/etc/init.d/redis start

En el master bindeamos el servicio a todas las ips y le asignamos un password de acceso:

vi /etc/redis.conf
bind 0.0.0.0
requirepass PASSWORD

Aplicamos la configuración reiniciando el servicio:

/etc/init.d/redis restart

En el slave realizamos la misma configuración que en el master pero además le indicamos quién es su master y con que password conectar a este:

vi /etc/redis.conf
bind 0.0.0.0
requirepass PASSWORD
slaveof MASTER_IP 6379
masterauth PASSWORD

Aplicamos la configuración reiniciando el servicio:

/etc/init.d/redis restart

Comprobamos que el slave esté sincronizado con el master:

redis-cli -a PASSWORD info
# Replication
role:slave
master_host:MASTER_IP
master_port:6379
master_link_status:up

En la lista de exporters de la web de Prometheus podemos encontrar el exporter de Redis.

Compilamos e instalamos las dependencias para compilar el exporter:

emerge -av dev-lang/go dev-vcs/git

Nos bajamos el exporter y lo compilamos:

mkdir go
export GOPATH=/root/go
export GOPATH=$(go env GOPATH)
go get github.com/oliver006/redis_exporter
cd /root/go/bin/
export REDIS_PASSWORD=PASSWORD

Arrancamos manualmente el exporter para comprobar que no haya ningún problema:

./redis_exporter

Creamos un script de arranque:

vi /etc/local.d/redis_exporter.start
#! /bin/bash
export GOPATH=/root/go
export REDIS_PASSWORD=PASSWORD
/root/go/bin/redis_exporter &

Le asignamos los permisos necesarios y arrancamos el servicio:

chmod 700 /etc/local.d/redis_exporter.start
/etc/local.d/redis_exporter.start

Telegrambot y la API de PMM necesitan la etiqueta node_name para identificar correctamente el servidor y que las alarmas aparezcan con el la información correcta:

vi prometheusConf/prometheus.base.yml
scrape_configs:
- job_name: redis_exporter
  static_configs:
    - targets: ['SERVER1:9121', 'SERVER2:9121']
  relabel_configs:
  - source_labels: [__address__]
    target_label: node_name

NOTA: La source_label la podemos averiguar si vamos a Status -> Targets y mantenemos el cursor encima de las labels.

Recargamos la configuración de PMM:

docker stop pmm-server && docker start pmm-server

El exporter no pide autenticación ya que se trata de un exporter sin utilizar la capa de PMM, asignamos reglas de firewall tanto en el master como en el slave para que solo se pueda acceder desde la ip del servidor PMM:

iptables -I INPUT 1 -p tcp --dport 9121 -j DROP
iptables -I INPUT 1 -p tcp --dport 9121 -s PMM_SERVER_IP -j ACCEPT

Las alertas de Prometheus serían estas, recordad que en PMM las alertas se configuran desde Grafana(http://pmm.alfaexploit.com/graph/d/pmm-settings/):

- name: redisRules
  rules:
  - alert: RedisDown
    expr: redis_up == 0
    for: 5m
    labels:
      severity: critical
  - alert: RedisMem
    expr: redis_memory_used_bytes > (60 * node_memory_MemTotal) / 100
    for: 5m
    labels:
      severity: critical
  - alert: RedisRejectingConnections
    expr: delta(redis_rejected_connections_total[1m]) > 5
    for: 5m
    labels:
      severity: critical
  - alert: BrokenRedisSlave
    expr: redis_master_last_io_seconds_ago == -1
    for: 5m
    labels:
      severity: critical

Recargamos la configuración de PMM:

docker stop pmm-server && docker start pmm-server

Si paramos un master por ejemplo, saltarán las alarmas de RedisDown por el master y BrokenRedisSlave por el slave:

Importamos en grafana el template de redis para ver las gráficas de las métricas:

Pegamos el json del template:

Le damos a Load.

Asignamos un nombre al dashboard:

Le damos a Import.

El resultado final es este:

Si te ha gustado el artículo puedes invitarme a un redbull aquí.
Si tienes cualquier pregunta siempre puedes enviarme un Email o escribir en el grupo de Telegram de AlfaExploit.
Autor: kr0m -- 10/09/2020 00:21:50 -- Categoria: Db Monitoring