Bom dia, residentes de Habr!
Hoje, quero dizer como realmente queremos monitorar o postgres e algumas entidades dentro do cluster OpenShift e como fizemos isso.
Na entrada, eles tinham:
Para trabalhar com um aplicativo java, tudo era bastante simples e transparente, e para ser mais preciso, então:
1) Adicionando ao build.gradle
implementation "io.micrometer:micrometer-registry-prometheus"
2) Inicie 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 no Grafana
Tudo era bastante simples e prosaico até a hora de monitorar as bases localizadas nas proximidades em nosso espaço para nome (sim, isso é ruim, ninguém faz, mas acontece de maneira diferente).
Como isso funciona?
Além da lareira com o postgres e o próprio prometheus, precisamos de outra entidade - exportadora.
Um exportador abstrato é um agente que coleta métricas de um aplicativo ou mesmo de um servidor. Para o postgres, o exportador é escrito em Go, funciona com o princípio de executar scripts baseados em sql inside e, em seguida, o prometheus obtém os resultados. Também permite expandir as métricas coletadas adicionando suas próprias.
Nós o implementamos desta forma (exemplo deployment.yaml, não vinculativo a nada):
--- 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
Ele também precisava de um serviço e um fluxo de imagens.
Após a implantação, realmente queremos 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 então tudo funcionou, resta acrescentar toda essa bondade ao veado e aproveitar o resultado.
Além da capacidade de adicionar suas próprias consultas, no prometheus você pode alterar a configuração, coletando as métricas necessárias mais direcionadas.
Um método semelhante foi feito para:
PS Todos os dados sobre nomes, portas e o resto são retirados do teto e não carregam nenhuma informação.
Links úteis:
Lista de vários exportadores