Data protection, Kubernetes, ciberseguridad e IA. Guías prácticas desde la trinchera: Veeam, Kasten, VMware, Oracle, cloud y lo que sea que esté rompiendo en el homelab esta semana.
Tabla de contenidoTabla de contenido
En este guía revisaremos la instalación y configuración de prometheus con el objetivo de obtener alertas vía correo utilizando la federación, reglas y alertmanager de prometheus en conjunto con el monitoreo de Kasten K10.
Realizaremos la configuración en una primera parte con la integración de K10 Multi-Cluster Manager y luego veremos como configurar las reglas cuando sea una instalación sin la administración centralizada.
Prometheus es una solución enfocada en el monitoreo de los recursos de kubernetes basados en métricas en series temporales, es decir, monitoreo en tiempo real de las acciones que se tengan configuradas. Por ejemplo con prometheus podrías monitorear, vía reglas, el uso de CPU, Memoria, Conexiones, sesiones o lo que quieras configurar.
Ademas es la solución estándar para el monitoreo de clústers de kubernetes ya que permite tener una vista muy detallada de los recursos a monitorear como también ayudarnos a la solución de los errores que existan.
Kasten también utiliza Prometheus para su monitoreo interno de K10. De hecho, en el link anterior, podemos ver que hay muchas métricas que Kasten k10 exporta a Prometheus como por ejemplo:
catalog
jobs
actions
backup
restore
export
import
report
run
Entonces, como podemos realizar la configuración para que Prometheus nos envíe un email cuando por ejemplo, alguna política de respaldo no funcione correctamente?
Como sabemos, prometheus ya viene pre-instalado en Kasten K10, pero para esta instancia no se recomienda que sea modificada, ya que es administrado por helm y tiene ciertas configuraciones que funcionan directamente con los reportes por defecto de Kasten K10 y también para K10 Multi-Cluster Manager si lo tienes activado. Por tanto la idea es federar Prometheus que viene pre-instalado (para no modificarlo) con una instancia nueva de Prometheus:
Ahora procederemos a realizar la creación de un namespace para nuestra instancia de monitoreo, en este caso lo llamaremos alertas, para ello ejecutaremos lo siguiente en nuestro cluster de kubernetes:
kubectl create ns alertas
```bash
Y ahora agregaremos el repositorio para helm de Prometheus:
```bash
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
```bash
Y crearemos un nuevo archivo de nombre "kasten\_prometheus\_values\_smtp.yaml":
```bash
defaultRules:
create: falsealertmanager:
config:
global:
resolve_timeout: 5m
route:
repeat_interval: 30m
receiver: 'email' routes:
- receiver: 'email' match:
severity: kasten
receivers:
- name: 'email' email_configs:
- to: [email protected] from: [email protected] smarthost: smtp.24xsiempre.com:25
auth_username: SuperDuperUserName
auth_password: SuperDuperPassword
prometheus:
prometheusSpec:
additionalScrapeConfigs:
- job_name: k10
scrape_interval: 15s
honor_labels: true scheme: http
metrics_path: '/k10/prometheus/federate' params:
'match[]':
- '{__name__=~"jobs.*"}' - '{__name__=~"catalog.*"}' static_configs:
- targets:
- 'prometheus-server.kasten-io.svc.cluster.local' labels:
app: "k10"#Valores para deshabilitar componentes que no son necesariosgrafana:
enabled: falsekubeApiServer:
enabled: falsekubelet:
enabled: falsekubeStateMetrics:
enabled: falsekubeControllerManager:
enabled: falsekubeEtcd:
enabled: falsekubeProxy:
enabled: falsecoreDns:
enabled: falsekubeScheduler:
enabled: false```bash
Donde se debe editar las siguientes lineas:
- **to**: [email protected]- **from**: [email protected]- **smarthost**: smtp.24xsiempre.com:25
- **auth\_username**: SuperDuperUserName
- **auth\_password**: SuperDuperPassword
Modificar las variables anteriores con los datos correctos y guardar "kasten\_prometheus\_values\_smtp.yaml":
Y ahora realizamos la instalacion de Prometheus con el siguiente comando:
```bash
helm install prometheus prometheus-community/kube-prometheus-stack -n alertas -f kasten_prometheus_values_smtp.yaml
```bash
Y para validar que se haya instalado correctamente, ejecutamos:
```bash
kubectl --namespace alertas get pods -l "release=prometheus"```bash
## Creación de Reglas Prometheus para K10 Multi-Cluster ManagerAquí realizaremos la configuración más importante, ya que estamos usando K10 Multi-Cluster Manager, debemos saber identificar correctamente cada uno de los clusters que esta siendo protegidos por Kasten K10, por tanto, al leer la documentación aparece un "Tip" clave, donde indica que para identificar los clusters secundarios hay que agregar la variable {cluster="desarrollo"} donde el nombre del cluster es como lo identificamos en Multi-Cluster Manager. Y para el cluster primario debe ser {cluster=""}.
Para esta guía, tengo configurado 3 clusters:
- produccion (cluster primario para K10 Multi-Cluster)- desarrollo (cluster secundario para K10 Multi-Cluster)- tanzu (cluster secundario para K10 Multi-Cluster)Por tanto, crearemos el archivo de configuración con el nombre "alertas\_cluster.yaml" y copiaremos el contenido:
```bash
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
labels:
app: kube-prometheus-stack
release: prometheus
name: prometheus-kube-prometheus-kasten.rules
spec:
groups:
- name: kasten_alert
rules:
- alert: K10JobsFailsClusterProd
expr: |-
increase(catalog_actions_count{cluster="", status="failed"}[10m]) > 0for: 1m
labels:
severity: kasten
annotations:
summary: "Politicas de Kasten K10 con error hace 10 minutos" description: "Politica << {{ $labels.policy }} >> en cluster << produccion >> Ha fallado en los ultimos 10 minutos" - alert: K10JobsFailsClusterDev
expr: |-
increase(catalog_actions_count{cluster="desarrollo", status="failed"}[10m]) > 0for: 1m
labels:
severity: kasten
annotations:
summary: "Politicas de Kasten K10 con error hace 10 minutos" description: "Politica << {{ $labels.policy }} >> en cluster << {{ $labels.cluster }} >> Ha fallado en los ultimos 10 minutos" - alert: K10JobsFailsClusterTanzu
expr: |-
increase(catalog_actions_count{cluster="tanzu", status="failed"}[10m]) > 0for: 1m
labels:
severity: kasten
annotations:
summary: "Politicas de Kasten K10 con error hace 10 minutos" description: "Politica << {{ $labels.policy }} >> en cluster << {{ $labels.cluster }} >> Ha fallado en los ultimos 10 minutos"```bash
Las variable a editar son en cada una de las alertas:
- alert: Nombre de la Alerta
- expr: SOLO editar el nombre del cluster (recuerda el tip anterior)- summary: Texto de resumen sin editar las variables
- description: Texto descriptivo
La variable mas importante en el archivo anterior es "expr" la cual es la "query" o consulta a prometheus de acuerdo con las metricas de Kasten K10 para detectar la falla en los jobs, si deseas crear nuevas consultas puedes visitar:
[https://prometheus.io/docs/prometheus/latest/querying/basics/](https://prometheus.io/docs/prometheus/latest/querying/basics/)Y por ultimo crearemos las reglas en nuestra instancia de Prometheus:
```bash
kubectl apply -f alertas_cluster.yaml -n alertas
```bash
Y para validar la creación de la regla:
```bash
kubectl get prometheusrules.monitoring.coreos.com -n alertas
```bash
## Creación de Reglas Prometheus sin K10 Multi-ClusterEn caso de que tengas instalado Kasten K10 sin la utilización de K10 Multi-Cluster, también, es posible configurar reglas sin la necesidad de declarar el nombre del cluster, la única diferencia es la creación de la regla que debe ser como la siguiente:
```bash
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
labels:
app: kube-prometheus-stack
release: prometheus
name: prometheus-kube-prometheus-kasten.rules
spec:
groups:
- name: kasten_alert
rules:
- alert: K10JobsFail
expr: |-
increase(catalog_actions_count{status="failed"}[10m]) > 0for: 1m
labels:
severity: kasten
annotations:
summary: "Politicas de Kasten K10 con error hace 10 minutos" description: "Politica << {{ $labels.policy }} Ha fallado en los ultimos 10 minutos"```bash
## Prueba Alertas por EmailPara probar esta configuración, necesitamos generar errores en las políticas de respaldo de los clusters, para eso, en los políticas de respaldos existentes eliminaremos los repositorios de respaldo de Kasten K10 o "Location Profiles" para forzar el error, donde las políticas se mostrarán así:
Y por ultimo ejecutamos las políticas que generamos el error. Con esto deberíamos esperar que nos lleguen las alertas por email. Si ejecutamos el siguiente comando:
```bash
kubectl port-forward service/prometheus-kube-prometheus-prometheus 9090:9090 -n alertas
Podremos ingresar a la consola web de Prometheus para ver las reglas creadas:
El ejecutar las políticas de respaldo con errores, prometheus, detectara a través de las reglas que existen algunos errores:
Donde por ultimo lo marca y se ejecuta el envío de la alertas por email:
Algunos ejemplos de las notificaciones o alertas que llegan al correo, donde incluye el nombre de la política de respaldo y su respectivo cluster donde existe el error:
En algunos casos donde ya existan instancias de Prometheus, es posible, que al agregar la instancia para monitorear y federar prometheus de Kasten K10 no funcione correctamente, por ejemplo en Rancher, con “cattle-monitoring” es necesario deshabilitar el operator de prometheus, si no, ambas instancias trataran de sobreponerse con la otra obligando a los pods a reiniciarse.
Con respecto a las notificaciones o alertas de Kasten K10, es posible crear nuevas querys o consultas para obtener otros tipos de datos, como por ejemplo, licencias, espacio utilizado, etc.