Prometheus là một bộ công cụ giám sát và cảnh báo hệ thống mã nguồn mở ban đầu được xây dựng bởi công ty SoundCloud. Kể từ khi thành lập vào năm 2012, nhiều công ty và tổ chức đã áp dụng Prometheus vào hệ thống và dự án này có một cộng đồng người dùng và nhà phát triển rất tích cực.
Prometheus bây giờ đã trở thành một dự án mã nguồn mở độc lập và được duy trì độc lập với bất kỳ công ty nào. Prometheus đã tham gia vào tổ chức Cloud Native Computing Foundation vào năm 2016 với tư cách là dự án được ưu tiên phát triển lớn thứ hai, sau Kubernetes (k8s).
Prometheus có khả năng thu thập thông số/số liệu (metric) từ các mục tiêu được cấu hình theo các khoảng thời gian nhất định, đánh giá các biểu thức quy tắc, hiển thị kết quả và có thể kích hoạt cảnh báo nếu một số điều kiện được thảo mãn yêu cầu.
Trong bài viết này, mình sẽ hướng dẫn bạn cách triển khai Prometheus lên cụm k8s nhé.
Mình đang có 1 cụm lab Kubernetes như dưới.
root@loadbalancer3:~# kubectl get no -A -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
master1 Ready control-plane,master 3d2h v1.23.8 192.168.13.207 <none> Ubuntu 18.04.6 LTS 4.15.0-191-generic containerd://1.6.8
master2 Ready control-plane,master 3d2h v1.23.8 192.168.13.208 <none> Ubuntu 18.04.6 LTS 4.15.0-192-generic containerd://1.6.8
master3 Ready control-plane,master 3d2h v1.23.8 192.168.13.209 <none> Ubuntu 18.04.6 LTS 4.15.0-192-generic containerd://1.6.8
worker1 Ready <none> 3d2h v1.23.8 192.168.13.210 <none> Ubuntu 18.04.6 LTS 4.15.0-192-generic containerd://1.6.8
worker2 Ready <none> 3d2h v1.23.8 192.168.13.211 <none> Ubuntu 18.04.6 LTS 4.15.0-191-generic containerd://1.6.8
worker3 Ready <none> 3d2h v1.23.8 192.168.13.212 <none> Ubuntu 18.04.6 LTS 4.15.0-192-generic containerd://1.6.8
worker4 Ready <none> 3d2h v1.23.8 192.168.13.213 <none> Ubuntu 18.04.6 LTS 4.15.0-191-generic containerd://1.6.8
worker5 Ready <none> 3d2h v1.23.8 192.168.13.214 <none> Ubuntu 18.04.6 LTS 4.15.0-192-generic containerd://1.6.8
Tạo file prometheus-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: prometheus
spec:
selector:
matchLabels:
run: prometheus
replicas: 2
template:
metadata:
labels:
run: prometheus
spec:
containers:
- name: prometheus
image: prom/prometheus
ports:
- containerPort: 9090
Tạo file prometheus-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: prometheus
labels:
run: prometheus
spec:
ports:
- name: prometheus
port: 80
targetPort: 9090
type: LoadBalancer
selector:
run: prometheus
Tạo file prometheus-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: prometheus
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: prometheus.hoanghd.fun
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: prometheus
port:
number: 80
Sau khi tạo xong cách file manifest ta tạo namespace
kubectl create namespace prometheus
Verify namespace
$ kubectl get ns prometheus
NAME STATUS AGE
prometheus Active 9m41s
Triển khai deployment.
kubectl apply -f ./prometheus-deployment.yaml
Verify deployment.
$ kubectl get po -o wide -n prometheus
NAME READY STATUS RESTARTS AGE IP NODEREADINESS GATES
prometheus-578745d58b-wqpvx 1/1 Running 0 92s 10.244.235.132 worker1
prometheus-578745d58b-zzstg 1/1 Running 0 92s 10.244.42.69 worker5
Triển khai service.
kubectl apply -f ./prometheus-svc.yaml
Verify service.
$ kubectl get svc -n prometheus
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
prometheus LoadBalancer 10.111.208.172 <pending> 80:31177/TCP 4m57s
Triển khai ingress.
kubectl apply -f ./prometheus-ingress.yaml
Verify ingress. Ta có domain là prometheus.hoanghd.fun như đã khai báo trong ingress.
$ kubectl get ingress -n prometheus
NAME CLASS HOSTS ADDRESS PORTS AGE
prometheus nginx prometheus.hoanghd.fun 192.168.13.230 80 14s
Nếu không có domain thì ta có thể trỏ domain local như dưới.
hoanghd@Has-MacMB ~ % cat /etc/hosts | grep prometheus.hoanghd.fun
192.168.13.230 prometheus.hoanghd.fun
Kiểm tra kết nối tới domain.
ping prometheus.hoanghd.fun
PING prometheus.hoanghd.fun (192.168.13.230): 56 data bytes
64 bytes from 192.168.13.230: icmp_seq=0 ttl=64 time=0.384 ms
64 bytes from 192.168.13.230: icmp_seq=1 ttl=64 time=0.484 ms
64 bytes from 192.168.13.230: icmp_seq=2 ttl=64 time=0.405 ms
64 bytes from 192.168.13.230: icmp_seq=3 ttl=64 time=0.472 ms
--- prometheus.hoanghd.fun ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.384/0.436/0.484/0.043 ms
Kết quả.
Để xóa ứng dụng, ta có thể xóa namespace liên quan đến ứng dụng.
kubectl delete ns prometheus