Monitoring Jenkins bằng Promethes và Grafana

206

Prometheus và Grafana có thể nói là đôi bạn cùng tiến trong mảng monitoring. Trong DevOps, thì việc monitoring để giám sát hệ thống là vấn đề cần quan tâm. Bài viết này sẽ chia sẻ vài điểm cơ bản về Prometheus và Grafana và cách thiết lập để giám sát một hệ thống Jenkins trên Kubernetes.

Prometheus and Grafana

Prometheus là một công cụ open source phục vụ cho việc giám sát và cảnh báo. Ban đầu được phát triển bởi SoundCloud sau này được open source và được cộng đồng phát triển.

Nếu như Prometheus là công cụ dùng để thu thập metrics thì Grafana là công cụ để thể hiện những dữ liệu đó lên dưới dạng biểu đồ. Nó giúp dữ liệu được hiển thị một cách trực quan.

Ví dụ về màn hình hiển thị của grafana:

Chi tiết lý thuyết về Prometheus và Grafana có rất nhiều trên Google, cho nên bài viết này sẽ đi sâu vào phần thực hành.

Setup Prometheus and Grafana

Cài đặt và cấu hình Prometheus và Grafana để giám sát 1 Jenkins cluster.

Ở phần thực hành này, Prometheus và Grafana được cài đặt 1 cluster K8s. Prometheus sẽ giám sát trạng thái của Jenkins cluster như node status, namespace, memory usage…

Dữ liệu thu thập bởi Prometheus được thể hiện trên Grafana. Trong trường hợp hệ thống gặp vấn đề, sẽ cảnh báo và được đẩy tới Altermanager và thông báo tới người dùng qua các kênh như Slack hoặc Webhook.

Giả sử Jenkins (Master + slaves) đã được cài đặt trên một cluster K8s. Bạn có thể dùng chính cluster này để cài đặt Prometheus và Grafana.

Thực tế dự án sẽ không cài đặt thủ công mà dùng Infra as Code.

Trên K8S, bạn có thể cài đặt Prometheus bằng yaml file như ở dưới:

File quan trọng nhất là *-deployment, định nghĩa các thông số của Prometheus bao gồm hình ảnh, port, volume.

Sau khi kết nối với cluster, bạn tiến hành triển khai Prometheus lên k8s bằng lệnh:

Prometheus sẽ được triển khai dưới dạng 1 k8s pod và service như ở dưới:

Prometheus service

Grafana sẽ lấy metrics từ Prometheus service để hiển thị.

Làm tương tự với grafana.

Tương tự như Prometheus, grafana cũng được triển khai lên k8s dưới dạng docker container, port 3000.

Pod grafana được expose bằng service LoadBalancer.

Bạn có thể giới hạn truy cập bằng các set thuộc tính loadBalancerSourceRanges bằng CIDIR.

Để có thể giám sát được pod, và node trong Jenkins K8S, bạn có thể sử dụng kube-state-metrics Add-on agent to generate and expose cluster-level metrics. Hiểu nhanh là 1 add-on agent có thể thu thập metric thông tin về cluster (pod, node…)

Alertmanager cũng được thiết lập tương tự.

Trong K8S có một khái niệm là config map, được hiểu là các thông tin config dùng chung giữa các pod. Mục đích là tách biệt giữa code và file cấu hình.

Khi cài đặt xong bạn sẽ thấy các service và pod được cài đặt trên k8s.

Bây giờ truy cập grafana bằng IP/Port như trên bạn có thể giám sát được trạng thái của Jenkins cluster như memory usage, container status….

Khi hệ thống có trục trặc, các cảnh báo sẽ được gửi bởi Alertmanager đến các kênh như mail hay slack.

Đỗ Trọng Nguyên 

Tin liên quan: