Bom dia, moradores de Habr!
Hoje quero contar como realmente queríamos monitorar o postgres e algumas outras entidades dentro do cluster OpenShift e como fizemos isso.
Na entrada eles tinham:
- OpenShift
- Capacete
- Prometeu
Para trabalhar com uma aplicação java tudo era bastante simples e transparente, ou para ser mais preciso:
1) Adicionando ao build.gradle
implementation "io.micrometer:micrometer-registry-prometheus"
2) Execute o prometheus com configuração
- job_name: 'job-name'
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
kubernetes_sd_configs:
- role: pod
namespaces:
names:
- 'name'
3) Adicionando uma exibição ao Grafana
Tudo era bastante simples e prosaico até que chegou o momento de monitorar as bases que estão localizadas próximas ao nosso namespace (sim, isso é ruim, ninguém faz isso, mas acontecem coisas diferentes).
Como funciona?
Além do pod com postgres e do próprio prometheus, precisamos de mais uma entidade - o exportador.
Um exportador em um conceito abstrato é um agente que coleta métricas de uma aplicação ou mesmo de um servidor. Para o exportador postgres, ele é escrito em Go, funciona segundo o princípio de rodar scripts SQL dentro do banco de dados e então o prometheus pega os resultados obtidos. Isso também permite expandir as métricas coletadas adicionando as suas próprias.
Vamos implantá-lo assim (exemplo deploy.yaml, não vinculativo):
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: postgres-exporter
labels:
app: {{ .Values.name }}
monitoring: prometheus
spec:
serviceName: {{ .Values.name }}
replicas: 1
revisionHistoryLimit: 5
template:
metadata:
labels:
app: postgres-exporter
monitoring: prometheus
spec:
containers:
- env:
- name: DATA_SOURCE_URI
value: postgresdb:5432/pstgr?sslmode=disable
- name: DATA_SOURCE_USER
value: postgres
- name: DATA_SOURCE_PASS
value: postgres
resources:
limits:
cpu: 100m
memory: 50Mi
requests:
cpu: 100m
memory: 50Mi
livenessProbe:
tcpSocket:
port: metrics
initialDelaySeconds: 30
periodSeconds: 30
readinessProbe:
tcpSocket:
port: metrics
initialDelaySeconds: 10
periodSeconds: 30
image: exporter
name: postgres-exporter
ports:
- containerPort: 9187
name: metrics
Também exigia um serviço e fluxo de imagens
Após a implantação, queremos muito que todos se vejam.
Adicione a seguinte peça à configuração do Prometheus:
- job_name: 'postgres_exporter'
metrics_path: '/metrics'
scrape_interval: 5s
dns_sd_configs:
- names:
- 'postgres-exporter'
type: 'A'
port: 9187
E aí deu tudo certo, só falta colocar tudo isso na grafana e curtir o resultado.
Além da capacidade de adicionar suas próprias consultas, você pode alterar as configurações no prometheus, coletando métricas mais direcionadas.
Isso foi feito de maneira semelhante para:
- Kafka
- ElasticSearch
- Mongo
PS Todos os dados sobre nomes, portos e demais são retirados do ar e não contêm nenhuma informação.
Links úteis:
Fonte: habr.com