Простая инструкция как установить и начать мониторинг своих сервисов для небольшого Kubernetes кластера. В данном примере мы не будем использовать Prometheus оператор, но для сложных динамичных систем и огромного количества сервисов использование оператора просто необходимо.
Для начала подготовим Prometheus.yml файл:
global:
scrape_interval: 60s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 60s # Evaluate rules every 15 seconds. The default is every 1 minute.
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
scrape_configs:
- job_name: 'my-service-scrapper'
scheme: https
static_configs:
- targets: ['service.sassoft.ru:443']
В качестве target можно указывать как и URI сторонних сервисов так и внутренний fqdn kubernetes service name чтобы не ходить наружу.
Следующий шаг, создаем ConfigMap:
kubectl create configmap prometheus-cm —from-file=./prometheus.yml
Далее описываем Prometheus Kubernetes manifest:
apiVersion: apps/v1
kind: Deployment
metadata:
name: prometheus
labels:
app: prometheus
spec:
replicas: 1
selector:
matchLabels:
app: prometheus
template:
metadata:
labels:
app: prometheus
spec:
containers:
- name: prometheus
image: prom/prometheus
volumeMounts:
- name: prometheus-volume
mountPath: /etc/prometheus/prometheus.yml
subPath: prometheus.yml
ports:
- containerPort: 9090
volumes:
- name: prometheus-volume
configMap:
name: prometheus-cm
---
kind: Service
apiVersion: v1
metadata:
name: prometheus
spec:
type: NodePort
selector:
app: prometheus
ports:
- name: promui
protocol: TCP
port: 9090
targetPort: 9090
Применяем манифест:
kubectl apply -f prometheus-k8s.yaml
Смотрим, на каком порту был поднят Prometheus service:
kubectl get services
prometheus NodePort 10.245.136.99 <none> 9090:30698/TCP 2m
Отлично! Теперь можем зайти на UI (как пример http://0.0.0.0:30698) и посмотреть что Prometheus стал опрашивать наш сервис (вы же не забыли добавить /metrics в ваш сервис?).
Для безопасности необходимо закрыть Prometheus от посторонних глаз, это можно сделать через Basic Auth + Nginx. Также вместо NodePort можно сделать сервис типа ClusterIP и прописать красивое имя и соответсвующий Ingress. Ну это как дополнение.