Closed3
k8s環境でpostgres_exporterを使ってpostgresqlを監視する

まとめ

コード
コード
postgres.yaml
# kubectl port-forward svc/postgres -n postgres-namespace 5432:5432
# PGPASSWORD=posPGPASSWORD=postgres psql -h localhost -U postgres -d postgres
---
apiVersion: v1
kind: Namespace
metadata:
name: postgres-namespace
labels:
app: postgres
---
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-config
namespace: postgres-namespace
data:
postgres.conf: |
listen_addresses = '*'
max_connections = 100
shared_buffers = 128MB
log_statement = 'all'
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_rotation_age = 1d
log_rotation_size = 10MB
---
apiVersion: v1
kind: Secret
metadata:
name: postgres-secret
namespace: postgres-namespace
type: Opaque
data:
# "postgres" encoded in base64
password: cG9zdGdyZXM=
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
namespace: postgres-namespace
spec:
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:14
ports:
- containerPort: 5432
env:
- name: POSTGRES_USER
value: postgres
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: postgres-secret
key: password
- name: POSTGRES_DB
value: postgres
- name: PGDATA
value: /var/lib/postgresql/data/pgdata
volumeMounts:
- name: postgres-config-volume
mountPath: /etc/postgresql/conf.d
- name: postgres-data
mountPath: /var/lib/postgresql/data
readinessProbe:
exec:
command:
- pg_isready
- -U
- postgres
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
exec:
command:
- pg_isready
- -U
- postgres
initialDelaySeconds: 30
periodSeconds: 10
volumes:
- name: postgres-config-volume
configMap:
name: postgres-config
# In a production environment, this would be a PersistentVolumeClaim
- name: postgres-data
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: postgres
namespace: postgres-namespace
labels:
service: postgres
spec:
selector:
app: postgres
ports:
- port: 5432
targetPort: 5432
type: ClusterIP
helmfile.yaml
repositories:
- name: prometheus-community
url: https://prometheus-community.github.io/helm-charts
releases:
- name: prometheus-stack
namespace: monitoring
createNamespace: true
chart: prometheus-community/kube-prometheus-stack
version: 71.2.0
values:
- ./values.yaml
- name: postgres-exporter
namespace: postgres-namespace
createNamespace: true
chart: prometheus-community/prometheus-postgres-exporter
version: 6.0.0
values:
- serviceMonitor:
enabled: true
namespace: postgres-namespace
# prometheusで許可されているラベルを指定
labels:
release: prometheus-stack
# postgres serviceのlabelを指定
targetLabels:
- service
values.yaml
alertmanager:
enabled: false
nodeExporter:
enabled: false
prometheus:
enabled: true
prometheusSpec:
serviceMonitorSelector: {}
serviceMonitorNamespaceSelector: {}
grafana:
enabled: true
adminPassword: admin
kubeStateMetrics:
enabled: false
prometheusOperator:
enabled: true
manageCrds: true
defaultRules:
create: true

servicemonitorについて
ここがわかりやすい
このスクラップは4ヶ月前にクローズされました