Day 10
Sumário
- 🎥 Intro Day-10 - 02:32
 - 🎥 O que é um ServiceMonitor? - 03:41
 - 📖 Os ServicesMonitors
 - 🎥 Criando o nosso Deployment e Service no Kubernetes - 23:01
 - 📖 Criando o nosso Deployment e Service no Kubernetes
 - 🎥 Criando o nosso primeiro ServiceMonitor - 11:29
 - 📖 Criando o nosso primeiro ServiceMonitor
 - 🎥 Criando um novo pod e o nosso PodMonitor - 13:39
 - 📖 Criando um novo pod e o nosso PodMonitor
 - 🎥 Criando alertas no Prometheus e AlertManager através do PrometheusRule - 22:04
 - 📖 Criando alertas no Prometheus e AlertManager através do PrometheusRule
 - 🎥 Encerramento do Day-10 - 02:26
 - 🎙️ Mentoria ao vivo - Carreira, open source e qualidade de vida - Carlos Panato - 02:15:54
 - 🎙️ Sessão ao vivo PICK - Jeferson Fernando - 04/05 - 01:16:52
 
Legenda
🎥 - Aula gravada
🎙️ - Aula ao Vivo
📖 - Material complementar
Dia 10
No dia 10, vamos falar sobre ServiceMonitors, Deployment, Service, PodMonitor e PrometheusRule. Vamos entender o que é um ServiceMonitor, como criar um Deployment e um Service no Kubernetes, como criar um ServiceMonitor, como criar um novo pod e um PodMonitor e como criar alertas no Prometheus e AlertManager através do PrometheusRule.
Material complementar: Leitura complementar do Day-10
O que é um ServiceMonitor?
O ServiceMonitor é um recurso do Prometheus Operator que permite monitorar os serviços que estão rodando em nosso cluster. Com o ServiceMonitor, podemos definir regras de monitoramento para os serviços que estão rodando em nosso cluster.
Criando o nosso Deployment e Service no Kubernetes
Vamos criar o nosso Deployment e Service no Kubernetes. O Deployment é um recurso do Kubernetes que permite definir como os pods devem ser criados e gerenciados. O Service é um recurso do Kubernetes que permite expor os pods para o mundo externo.
# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "9113"
    spec:
      containers:
      - name: nginx
        image: nginx:1.27
        ports:
        - containerPort: 80
          name: http
        volumeMounts:
        - name: nginx-config
          mountPath: /etc/nginx/conf.d/default.conf
          subPath: nginx.conf
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"
      - name: nginx-exporter
        image: nginx/nginx-prometheus-exporter:1.1.2
        args: 
          - '-nginx.scrape-uri=http://localhost/metrics'
        ports:
        - containerPort: 9113
          name: metrics
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"
      volumes:
      - name: nginx-config
        configMap:
          name: nginx-config
          defaultMode: 420
---
# nginx-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
data:
  nginx.conf: |
    server {
      listen 80;
      server_name localhost;
      location / {
        root /usr/share/nginx/html;
        index index.html index.htm;
      }
      location /metrics {
        stub_status on;
        access_log off;
        allow all;
      }
    }
---
# nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  labels:
    app: nginx
spec:
  selector:
    app: nginx
  ports:
    - port: 9113
      name: metrics
Criando o nosso primeiro ServiceMonitor
Vamos criar o nosso primeiro ServiceMonitor. O ServiceMonitor é um recurso do Prometheus Operator que permite monitorar os serviços que estão rodando em nosso cluster.
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    app: nginx
  name: nginx-servicemonitor
spec:
  endpoints:
  - interval: 10s
    path: /metrics
    port: 9113
  selector:
    matchLabels:
      app: nginx
Criando um novo pod e o nosso PodMonitor
Vamos criar um novo pod e o nosso PodMonitor. O PodMonitor é um recurso do Prometheus Operator que permite monitorar os pods que estão rodando em nosso cluster.
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx-pod
spec:
  containers:
  - name: nginx
    image: nginx:1.27
    ports:
    - containerPort: 80
    volumeMounts:
    - name: nginx-config
      mountPath: /etc/nginx/conf.d/default.conf
      subPath: nginx.conf
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"
  - name: nginx-exporter
    image: nginx/nginx-prometheus-exporter:1.1.2
    args: 
      - '-nginx.scrape-uri=http://localhost/metrics'
    ports:
    - containerPort: 9113
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"
  volumes:
  - name: nginx-config
    configMap:
      name: nginx-config
      defaultMode: 420
---
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
  labels:
    app: nginx-pod
  name: nginx-podmonitor
spec:
  podMetricsEndpoints:
  - interval: 10s
    port: metrics
    targetPort: 9113
  selector:
    matchLabels:
      app: nginx-pod
Criando alertas no Prometheus e AlertManager através do PrometheusRule
Os alertas no Prometheus e AlertManager são criados através do PrometheusRule. O PrometheusRule é um recurso do Prometheus Operator que permite definir regras de alertas para os serviços que estão rodando em nosso cluster.
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: nginx-prometheus-rule
  namespace: monitoring
  labels:
    prometheus: k8s
    role: alert-rules
    app.kubernetes.io/name: kube-prometheus
    app.kubernetes.io/part-of: kube-prometheus
spec:
  groups:
  - name: nginx-prometheus-rule
    rules:
    - alert: NginxDown
      expr: nginx_up == 0
      for: 1m
      labels:
        severity: critical
      annotations:
        summary: "Nginx está fora do ar"
        description: "O serviço do Nginx está fora do ar {{ $labels.instance }}"
E aplicamos o PrometheusRule no nosso cluster Kubernetes:
kubectl apply -f prometheus-rule.yaml
Encerramento do Day-10
No dia 10, aprendemos sobre ServiceMonitors, Deployment, Service, PodMonitor e PrometheusRule. Vimos como criar um Deployment e um Service no Kubernetes, como criar um ServiceMonitor, como criar um novo pod e um PodMonitor e como criar alertas no Prometheus e AlertManager através do PrometheusRule.