-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1 from nataliagranato/main
feat: day-10, service monitor
- Loading branch information
Showing
6 changed files
with
157 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |