Xây dựng hệ thống Monitoring bằng Prometheus, Grafana và Node-exporter

Giây Phút – Chào mọi người, do gần đây mình có làm 1 project nhỏ ở công ty và dùng để báo cáo ở trường, project là xây dựng hệ thống monitoring giám sát máy chủ bằng prometheus, grafana và node-exporter, trong quá trình mình triển khai và thực hiện gặp khá nhiều vấn đề, nhưng tìm hiểu các bài viết ở Việt Nam và nước ngoài thì rất hạn chế, và không đủ nội dung cần thiết. Nên sau khi mình triển khai xong, nay mình viết bài này để nói về cách làm cũng những các lỗi thường gặp trong quá trình mình làm.

Trong bài viết này mình sẽ hướng dẫn mọi người cách cài đặt trên Docker và cài đặt bằng cách thông thường, nếu ai chưa biết Docker thì tìm hiểu giúp mình và cài đặt nha, nếu mà hướng dẫn cài Docker thì tốn khá nhiều thời gian.

1/Prometheus và Node-exporter là gì

Prometheus là một open-source systems monitoring và alerting ban đầu được xây dựng tại SoundCloud. Vào năm 2012 nhiều công ty, tổ chức đã đứng ra bảo trợ cho Prometheus, và project này cực kỳ và phát và có rất nhiều người dùng. Hiện tại nó không còn là một project độc lập mà được phát triển bởi rất nhiều công ty khác nhau. Nó sử dụng mã nguồn GoLang của google. Hiện tại thì Prometheus 100% là open source và có Apache 2 License on GitHub.

Prometheus Node Exporter là một chương trình exporter viết bằng ngôn ngữ Golang. Exporter là một chương trình được sử dụng với mục đích thu thập, chuyển đổi các metric không ở dạng kiểu dữ liệu chuẩn Prometheus sang chuẩn dữ liệu Prometheus. Sau đấy exporter sẽ expose web service api chứa thông tin các metrics hoặc đẩy về Prometheus.

Node Exporter này sẽ đi thu thập các thông số về máy chủ Linux như : ram, load, cpu, disk, network,…. từ đó tổng hợp và xuất ra kênh truy cập các metrics hệ thống này ở port TCP 9100 để Prometheus đi lấy dữ liệu metric cho việc giám sát.

2/Grafana là gì

Là một công cụ trực quan hóa, Grafana là một thành phần phổ biến trong các ngăn xếp giám sát,  thường được sử dụng kết hợp với cơ sở dữ liệu chuỗi thời gian như InfluxDB , Prometheus và Graphite ;  các nền tảng giám sát như Sensu, Icinga , Checkmk , Zabbix , Netdata , và PRTG ; SIEM như Elasticsearch  và Splunk ; và các nguồn dữ liệu khác.

Nói  dễ hình dung là sau khi lấy được metric từ các thiết bị, grafana sẽ sử dụng metric đó để phân tích và tạo ra dashboard mô tả trực quan các metric cần thiết cho việc monitoring ví dụ như cpu, ram, disk, network, iops, session.

Việc xây dựng Dashboard nó là một phần quan trọng trong việc monitor của hệ thống. Grafana support rất nhiều giải pháp monitor khác nhau.

3/Cách cài đặt.

3.1/Cài đặt thông thường:

*Cài Prometheus và Node-exporter

Đầu tiên chúng ta sẽ cài đặt prometheus và node-exporter 2 chương trình này chúng ta có thể tải tại đây.

Sau khi chúng ta tải prometheus và node-exporter thì chúng ta sẽ thu được 2 file nén .tar.gz chúng ta sẽ giải nén và thu được 2 file như thế này.

Trước khi chạy prometheus và node-exporter thì chúng ta cần chỉnh sửa lại file cấu hình của prometheus là prometheus.yml để có thể liên kết với node-exporter.

Tùy vào số lượng server mà chúng ta cài đặt node-exporter thì chúng ta sẽ config ip của server đó vào file cấu hình của prometheus.

Để chạy được prometheus và node-exporter thì chúng và truy cập vào nơi chứa file và chạy các file cài đặt.

Sao khi cài đặt chúng ta sẽ truy cập địa chỉ ip mà chúng ta đã khai báo trong file cấu hình của prometheus. Mặc định prometheus sẽ chạy ở port 9090 và node-exporter sẽ chạy ở port 9100.

*Prometheus.

*Node-exporter

*Cài đặt Grafana

Tiếp theo chúng ta sẽ cài đặt grafana, do grafana cài đặt cần khá nhiều bước, nên mình sẽ không đề cập ở đây, mọi người có thể tìm kiếm cách cài đặt trên internet, rất nhiều bài viết hướng dẫn.

Sau khi chúng ta cài đặt grafana thì chúng ta sẽ start nó bằng cách.

Grafana mặc định sẽ chạy ở port 3000. Khi lần đầu chúng ta chạy grafana thì username và password mặc định sẽ là admin.

*Setup grafana

Sau khi cài đặt thành công grafana thì chúng ta cần tạo 1 data source cho prometheus trong grafana để có thể kết nối và lấy dữ liệu.

Grafana hỗ trợ rất nhiều data source, ở đây chúng ta sử dụng prometheus nên chọn prometheus.

Sau khi chọn data source thì chúng sẽ điền thông tin URL của grafana vào và chọn save & test để kiểm tra data source của chúng ta có hoạt động hay không.

Khi data source hoạt động thì chúng ta chỉ cần cài đặt dashboard để hiển các thông số ra nữa thôi. Grafana có hỗ trợ chúng ta rất nhiều dashboard có cấu hình sẵn rất đẹp mắt. Ta chỉ tìm cái nào mà chúng ta thích và grafana nhập mã của dashboard đó vào rồi ấn load để load cái dashboard lên là được.

Sau khi chúng load dashboard lên thì chúng ta cần chọn data source cho dashboard đấy.

Và đây là kết quả chúng ta có được.

Ngoài cách dùng dashboard có sẵn chúng ta cũng có thể tự tay mình thiết kế những khung hiển thị tùy ý.

Để tạo được dashboard thì chúng ta chọn create và chọn Add new panel để có thể tùy chỉnh.

Vào giao diện setting thì chúng ta sẽ dùng các đoạn metric của node-exporter để hiển thị ra thông tin, và chúng ta có thể thay đổi màu sắc cũng như các biểu đồ hiển thị một cách rất đơn giản

*Cấu hình Alert (cảnh báo)

Tiếp theo chúng ta cần cấu hình cảnh báo cho grafana, có 1 điều cần chú ý là: khi sử dụng dashboard được cấu hình sẵn thì chúng ta sẽ không cấu hình alert được,lý do là khi gọi các metric có sử dụng biến để có thể phân biệt được thời gian cũng như của server nào, vì thế nếu chúng ta có nhiều server thì chúng ta phải tạo ra nhiều khung hiển thị để hiển thị từng thông tin tài nguyên của server đó và bỏ đi phần biến lúc gọi metric để có thể cấu hình alert.

Chúng ta cần phải cấu hình lại grafana.ini để có thể gửi cảnh báo về mail của chúng ta, đường dẫn để truy cập file grafana.ini là: /etc/grafana/grafana.ini

Ta cần thêm 1 số thông tin ở phần smtp, cần chú ý là gmail mà chúng ta nhập vào ở đây, grafana sẽ dùng gmail đó để viết và gửi cảnh báo cho chúng ta, sao khi chỉnh sửa thì chạy lệnh  sudo service grafana-server restart để restart lại grafana.

Trước khi thiết lập cảnh báo thì chúng ta cần tạo 1 kênh thông báo với 1 email cụ thể để có thể gửi cảnh báo đến email đó. Ta ấn test để kiểm tra thử email có được gửi thành công hay không.

Và đây là email chúng ta nhận được

Để cấu hình cảnh báo thì chúng chọn Alert và chọn Create Alert để bắt.

Tại đây chúng ta điền vào các thông số mà chúng ta quy định, ví dụ như trong ảnh, hệ thống sẽ cảnh báo khi CPU vượt ngưỡng 1, sau đó chúng ta chọn test rule để kiêm tra alert chúng ta cài đặt có hoạt động không, sao đó chọn save để có thể lưu lại

Khi chúng ta thiết lập cảnh báo thành công là phía trên mỗi khung dữ liệu điều có hình trái tim, màu xanh là an toàn các tài nguyên thấp hơn mức quy định, màu vàng là khi tài nguyên vượt mức quy định, nhưng chưa đủ thời gian gây ra nguy hiểm mà chúng ta thiết lập, màu đỏ là vượt qua thời gian an toàn thì hệ thống sẽ gửi cảnh báo qua email của chúng ta kèm theo hình ảnh khi vượt ngưỡng an toàn.

3.2/Cài đặt bằng Docker-compose

Với sự phát triển mạnh mẽ của docker thì chúng ta rất dễ dàng có thể deploy các chương trình, chúng ta sẽ sử dụng docker để có thể triển khai hệ thống monitor này.

Đầu tiên chúng ta cần cài đặt docker, mọi người có thể truy cập vào đây để cài đặt

Chúng ta có thể kiểm tra xem docker đã được cài đặt thành công chưa.

Tiếp theo chúng ta cần cài docker compose để có thể run multi-container.

Sau khi chúng ta cài đặt thành công docker và docker-compose thì chúng sẽ bắt đầu triển khai.

Chúng ta tạo 2 file: docker-compose.yml chứa các cấu hình image để run tạo container, prometheus.yml chứa cấu hình của prometheus để chúng ta có thể ánh xạ để file cấu hình của container prometheus.

*Docker-compose.yml

Chúng ta sẽ sử dụng docker compose để có thể chạy cần khai báo đầy đủ các dịch vụ để chạy trong file docker-compose.yml.

*prometheus.yml

Giống như khi cài đặt thông thường, để có thể chạy được prometheus thì chúng ta chỉnh sửa file cấu hình prometheus.yml để có thể chạy được các IP của server.

Khi chúng ta triển khai bằng docker thì chúng ta cần tạo 1 file prometheus.yml để có thể viết cấu hình tương tự sao đó chúng ta có thể ánh xạ file này trong docker-compose.yml để container có thể file cấu hình này để có thể cấu hình cho prometheus.

  • scrape_interval: cài đặt thời gian để có thể prometheus cào dữ liệu về, ở đây tôi cài cứ 5s thì prometheus lại cào dữ liệu về 1 lần.
  • scarpe_configs: phần này rất quan trọng, chúng ta cần khai báo job_name tên của dịch vụ sẽ chạy, và phần targets chúng ta khi báo địa chỉ IP của prometheus và node-exporter mà chúng ta cài đặt, cũng như địa chỉ IP của server mà chúng ta muốn monitoring.

Một điều lưu ý là khi chúng ta triển khai bằng docker thì khi chúng ta cấu hình IP thì ta không thể sử dụng localhost hay 127.0.0.1 được mà chúng ta cần sử dụng IP của máy, để có thể check được IP của máy thì chúng ta cần chạy lệnh ifconfig trong terminal để có thể xem IP của máy.

Mọi người chỉ cần chú ý đến cái địa chỉ IP  192.168.69.157, sau đó mọi người sử dụng IP này để có thể cấu hình và gán port tùy vào service mà chúng ta chạy.

*Chạy docker-compose.

Sao khi cấu hình đầy đủ thì ta chạy lệnh docker-compose up -d để có thể chạy , thêm vào -d để có thể cho quá trình chạy được ngầm, nếu chúng ta muốn debug thì nên bỏ -d.

Nếu lần đầu chạy lệnh này có thể mất ít thời gian để docker có thể pull các image từ docker hub về để có thể run thành container cho chúng ta.

Sao khi run để kiểm tra xem các container có chạy thành công không, ta chạy lệnh docker ps để kiểm tra các container đang chạy.

Nếu hiển thị được tất cả container như thế này thì mọi thứ đã ổn, chỉ việc vào và cài như thông thường thôi.

*Prometheus

*Node-exporter

*Grafana

Do lúc cài đặt biến môi trường nên mật khẩu của grafana sẽ là pass.

Trên đây là những gì trong quá trình mình làm và tổng hợp được, nếu có thiếu sót xin mọi người thông cảm và góp ý, nếu hay hãy chia sẽ đến mọi người nha.

Nếu trong quá trình thực hiện có xảy ra lỗi gì bạn có thể liện hệ với mình thông qua facebook để được hỗ trợ nhé, nếu không có thể bình luận để được hổ trợ.

7 thoughts on “Xây dựng hệ thống Monitoring bằng Prometheus, Grafana và Node-exporter

  1. Thanks bạn đã chia sẻ,
    Mình có một thắc mắc là nếu muốn theo dõi trên nhiều server khác nhau thì đồng nghĩa ta phải caì Prometheus và Node-exporter trên mỗi server phải ko b?

    1. Nếu bạn muốn monitor nhiều server bạn chỉ cần cài node-exporter trên server đó, xong bạn cấu hình prometheus đến ip của node-exporter trên server đó là ok, không cần phải cài prometheus trên mỗi con server, file cấu hình prometheus.yml giống trong bài viết của mình

    1. Bạn kiểm tra lại các biến môi trường nếu bạn làm bằng docker, còn nếu bằng cách thông thuồng thì bạn lại file /etc/grafana/grafana.ini nha

  2. Cho em hỏi dashboard có sẵn ko alert đc mà phải tạo dashboard bằng tay! như vậy sẽ tốn rất nhiều thời gian khi có 100 node phải tạo 100 node bằng tay ạ???

    1. Nếu bạn dùng Grafana thì đúng là vậy, bạn cũng có thể tham khảo alertmanager của prometheus, nó cũng là 1 giải pháp, tại mình dùng grafana nên trong bài viết không đề cập đến alertmanager.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *