Skip to content

Commit

Permalink
Merge pull request #1 from nataliagranato/main
Browse files Browse the repository at this point in the history
feat: day-10, service monitor
  • Loading branch information
nataliagranato authored May 22, 2024
2 parents eace9d7 + 54c858c commit 20befef
Show file tree
Hide file tree
Showing 6 changed files with 157 additions and 0 deletions.
76 changes: 76 additions & 0 deletions docs/k8s/day-10/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# O que é um Service Monitor?

No contexto do Prometheus, um "Service Monitor" é um recurso personalizado do Kubernetes que permite ao Prometheus descobrir automaticamente os serviços a serem monitorados.

1. **Exposição de métricas**: Um endpoint de métricas exposto por uma aplicação em execução em um pod é mapeado para um serviço.
2. **Monitoramento de Serviço**: O endpoint de métricas mapeado para um serviço é exposto pelo serviço a um monitor de serviço.
3. **Descoberta de Serviço**: O operador do Prometheus descobre os endpoints expostos pelo monitor de serviço.
4. **Configuração do Prometheus**: O operador do Prometheus atualiza a configuração do Prometheus para incluir os endpoints expostos pelo monitor de serviço. O Prometheus agora raspará as métricas desses endpoints.

O Service Monitor deve ser configurado com a porta que seu serviço expõe suas métricas (e o caminho para essas métricas nessa porta) e definir o seletor para corresponder ao serviço.

Para configurar um Service Monitor no Prometheus é necessário seguir alguns passos. Aqui está um exemplo de como você pode fazer isso:

1. **Crie um serviço**: Primeiro, você precisa criar um serviço que expõe o endpoint de métricas da sua aplicação. Aqui está um exemplo de como o arquivo `service.yaml` pode parecer:

```yaml
apiVersion: v1
kind: Service
metadata:
name: service
namespace: application
labels:
name: service
spec:
ports:
- name: https
port: 10443
protocol: TCP
targetPort: 10443
- name: metrics
port: 8080
protocol: TCP
targetPort: 8080
selector:
app: myApplication
```
2. **Crie um Service Monitor**: Em seguida, você precisa criar um Service Monitor que irá descobrir o serviço que você acabou de criar. Aqui está um exemplo de como o arquivo service-monitor.yaml pode parecer:
```yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: service-monitor
namespace: monitoring
spec:
endpoints:
- interval: 30s
path: /prometheus
port: metrics
namespaceSelector:
matchNames:
- application
selector:
matchLabels:
app: myApplication
```
**Atenção** o selector é um campo usado para selecionar os serviços que devem ser monitorados. No exemplo, `matchLabels: app: myApplication` indica que o Service Monitor deve selecionar serviços que têm o label `app: myApplication`.

A importância dessas informações estarem corretas é que elas determinam quais serviços serão monitorados pelo Prometheus. Se essas informações estiverem incorretas, o Prometheus pode não ser capaz de descobrir e raspar as métricas dos serviços corretos.

### Informações adicionais

- **apiVersion**: Versão da API do Kubernetes que estamos utilizando.
- **kind**: Tipo de objeto que estamos criando.
- **metadata**: Informações sobre o objeto que estamos criando.
- **metadata.annotations**: Anotações que podemos adicionar ao nosso objeto.
- **metadata.labels**: Labels que podemos adicionar ao nosso objeto.
- **metadata.name**: Nome do nosso objeto.
- **metadata.namespace**: Namespace onde o nosso objeto será criado.
- **spec**: Especificações do nosso objeto.
- **spec.endpoints**: Endpoints que o nosso ServiceMonitor irá monitorar.
- **spec.endpoints.interval**: Intervalo de tempo que o Prometheus irá fazer a coleta de métricas.
- **spec.endpoints.port**: Porta que o Prometheus irá utilizar para coletar as métricas.
- **spec.selector**: Selector que o ServiceMonitor irá utilizar para encontrar os serviços que ele irá monitorar.
17 changes: 17 additions & 0 deletions docs/k8s/day-10/files/nginx-config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
apiVersion: v1 # versão da API
kind: ConfigMap # tipo de recurso, no caso, um ConfigMap
metadata: # metadados do recurso
name: nginx-config # nome do recurso
data: # dados do recurso
nginx.conf: | # inicio da definição do arquivo de configuração do Nginx
server {
listen 80;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /metrics {
stub_status on;
access_log off;
}
}
43 changes: 43 additions & 0 deletions docs/k8s/day-10/files/nginx-deployment.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
apiVersion: apps/v1 # versão da API
kind: Deployment # tipo de recurso, no caso, um Deployment
metadata: # metadados do recurso
name: nginx-server # nome do recurso
spec: # especificação do recurso
selector: # seletor para identificar os pods que serão gerenciados pelo deployment
matchLabels: # labels que identificam os pods que serão gerenciados pelo deployment
app: nginx # label que identifica o app que será gerenciado pelo deployment
replicas: 3 # quantidade de réplicas do deployment
template: # template do deployment
metadata: # metadados do template
labels: # labels do template
app: nginx # label que identifica o app
annotations: # annotations do template
prometheus.io/scrape: 'true' # habilita o scraping do Prometheus
prometheus.io/port: '9113' # porta do target
spec: # especificação do template
containers: # containers do template
- name: nginx # nome do container
image: nginx # imagem do container do Nginx
ports: # portas do container
- containerPort: 80 # porta do container
name: http # nome da porta
volumeMounts: # volumes que serão montados no container
- name: nginx-config # nome do volume
mountPath: /etc/nginx/conf.d/default.conf # caminho de montagem do volume
subPath: nginx.conf # subpath do volume
- name: nginx-exporter # nome do container que será o exporter
image: 'nginx/nginx-prometheus-exporter:0.11.0' # imagem do container do exporter
args: # argumentos do container
- '-nginx.scrape-uri=http://localhost/metrics' # argumento para definir a URI de scraping
resources: # recursos do container
limits: # limites de recursos
memory: 128Mi # limite de memória
cpu: 0.3 # limite de CPU
ports: # portas do container
- containerPort: 9113 # porta do container que será exposta
name: metrics # nome da porta
volumes: # volumes do template
- configMap: # configmap do volume, nós iremos criar esse volume através de um configmap
defaultMode: 420 # modo padrão do volume
name: nginx-config # nome do configmap
name: nginx-config # nome do volume
Empty file.
12 changes: 12 additions & 0 deletions docs/k8s/day-10/files/nginx-service.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
apiVersion: v1 # versão da API
kind: Service # tipo de recurso, no caso, um Service
metadata: # metadados do recurso
name: nginx-svc # nome do recurso
labels: # labels do recurso
app: nginx # label para identificar o svc
spec: # especificação do recurso
ports: # definição da porta do svc
- port: 9113 # porta do svc
name: metrics # nome da porta
selector: # seletor para identificar os pods/deployment que esse svc irá expor
app: nginx # label que identifica o pod/deployment que será exposto
9 changes: 9 additions & 0 deletions docs/k8s/day-9/files/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
Prometheus Operator e o Kube-Prometheus

Instalando o Kube-Prometheus

Acessando o Grafana e os Dashboards

Acessando o Prometheus e o Alertmanager

O que é um Service Monitor

0 comments on commit 20befef

Please sign in to comment.