Share This
//Thiết Lập Và Monitoring Hệ Thống Với Prometheus / Loki / Grafana (Phần 1)

Thiết Lập Và Monitoring Hệ Thống Với Prometheus / Loki / Grafana (Phần 1)

Trong thế giới số hóa như hiện nay, hệ thống thông tin đóng một vai trò không thể thiếu đối với hầu hết các khía cạnh của cuộc sống và doanh nghiệp. Từ ứng dụng web, dịch vụ trực tuyến đến các cơ sở dữ liệu và hạ tầng mạng. Vì vậy, việc đảm bảo hiệu suất và độ tin cậy của các hệ thống là yếu tố cực kỳ quan trọng trong việc vận hành của bất cứ tổ chức doanh nghiệp nào. Một hệ thống ổn định giúp tăng hiệu suất công việc cũng như trải nghiệm người dùng đối với sản phẩm của doanh nghiệp. Việc xây dựng hệ thống giám sát đảm bảo rằng mọi thứ hoạt động trong tầm kiểm soát và có thể ứng phó với sự cố một cách hiệu quả. Vậy việc không xây dựng một hệ thống giám sát sẽ ảnh hưởng như thế nào, cách thiết lập mô hình giám sát bằng Prometheus/Loki/Grafana ra sao, hãy cùng nhau tìm hiểu thông qua bài viết dưới đây:

Thiếu Giám sát Hệ thống: Nguy cơ và Tác động

Hệ thống nếu thiếu đi sự giám sát sẽ đối mặt với nhiều nguy cơ cũng như đối mặt với các tác động tiêu cực, từ đó sẽ ảnh hưởng đến chất lượng và hiệu suất của tổ chức. Dưới đây là một vài vấn đề có thể gặp phải nếu không triển khai hệ thống giám sát hoặc việc giám sát không có hiệu quả:

Hiệu suất thấp và sự cố ẩn

Chúng ta sẽ không nhận biết được các vấn đề tiềm ẩn trong hệ thống ảnh hưởng đến hiệu suất nếu không có hệ thống giám sát. Nếu không có cơ chế để theo dõi và ghi nhận dữ liệu liên quan đến hiệu suất thì các vấn đề như: “tốc độ xử lý chậm”, “tài nguyên sử dụng quá mức”, “thời gian đáp ứng dài hơn có thể xảy ra”,… sẽ khó phát hiện chính xác. Điều này có thể dẫn đến các sự cố không lường trước được và thậm chí có thể gây gián đoạn, đình trệ công việc.

Khả năng dự báo và lập kế hoạch yếu

Không có hệ thống giám sát sẽ không có dữ liệu giúp cho doanh nghiệp có thể dự báo các sự cố có thể xảy ra cũng như lập kế hoạch cho tương lai. Dữ liệu giám sát giúp định rõ xu hướng tăng trưởng và biến đổi trong hiệu suất hệ thống. Khi thiếu thông tin này, việc lập kế hoạch tài nguyên, mở rộng hạ tầng và tối ưu hóa sẽ gặp khó khăn. Điều này có thể dẫn đến sự lãng phí tài nguyên và gây cản trở trong việc lên kế hoạch đáp ứng nhanh chóng với nhu cầu thay đổi.

Khả năng điều tra và khắc phục yếu

Khi xảy ra sự cố hoặc vấn đề hệ thống, việc không có dữ liệu sẽ gây khó khăn trong việc xác định nguyên nhân và khắc phục sự cố. Thiếu thông tin về hoạt động hệ thống trước, trong và sau sự cố làm tăng thời gian cần thiết để xác định nguyên nhân gốc rễ và thực hiện các biện pháp khắc phục sự cố. Điều này có thể dẫn đến thời gian điều tra kéo dài không cần thiết, ảnh hưởng đến sự hài lòng của khách hàng và uy tín của doanh nghiệp.

Thiếu khả năng theo dõi và cảnh báo

Các hệ thống không được giám sát có thể bỏ lỡ các tình huống quan trọng cần can thiệp ngay lập tức. Nếu không có cơ chế cảnh báo hoặc bảng điều khiển để theo dõi các metric (chỉ số) quan trọng, các vấn đề như sự cạn kiệt tài nguyên, các sự cố về bảo mật và tình trạng rủi ro, không mong muốn có thể xảy ra mà không bị phát hiện sớm. Điều này có thể gây ra hậu quả nghiêm trọng đối với sự ổn định và an ninh của hệ thống.

Prometheus, Loki và Grafana: Giải pháp cho Hệ thống giám sát

Để giải quyết rủi ro trên, việc sử dụng các công cụ giám sát như Prometheus, Loki và Grafana là cần thiết. Bằng cách tự động thu thập dữ liệu hiệu suất, logs, trực quan hóa thông tin, công cụ hỗ trợ đã cung cấp cái nhìn toàn diện về chi tiết trạng thái cũng như hoạt động của hệ thống.

Bên cạnh đó, thiết lập hệ thống monitoring bằng cách sử dụng kết hợp giữa các công cụ nói trên sẽ giúp doanh nghiệp có thể cải thiện được khả năng dự báo, xử lý sự cố hay theo dõi và phát hiện các vấn đề bảo mật có thể xảy ra.

Prometheus là gì?

Prometheus là một dự án open source (mã nguồn mở), đã thay đổi cách chúng ta tiếp cận việc giám sát hệ thống. Với khả năng thu thập dữ liệu về hiệu suất và sức đề kháng của hệ thống từ các nguồn khác nhau, Prometheus cho phép chúng ta theo dõi và phân tích hệ thống theo cách linh hoạt và chính xác hơn.

Prometheus thu thập các metric về tài nguyên hệ thống, ứng dụng và các thành phần khác. Các thông số này sau đó được sử dụng để tạo cảnh báo, thống kê và biểu đồ cho việc theo dõi sự phát triển của hệ thống.

Prometheus thu thập và lưu trữ các chỉ số của nó dưới dạng dữ liệu chuỗi thời gian, tức là thông tin chỉ số được lưu trữ với dấu thời gian mà tại đó nó được ghi lại, cùng với các cặp key – value tùy chọn được gọi là label.

Loki là gì ?

Một thành phần quan trọng khác trong hệ thống giám sát là việc theo dõi logs. Loki – một dự án được thiết kế từ Prometheus – tập trung vào việc thu thập, truy vết và phân tích logs hệ thống.

Loki được thiết kế cho phép chúng ta tìm kiếm, lọc và truy vết logs từ các nguồn khác nhau một cách hiệu quả. Bằng cách kết hợp Prometheus và Loki, doanh nghiệp có thể nắm bắt được cả khía cạnh số liệu và logs của hệ thống, tạo ra một hình ảnh toàn diện và chi tiết về tình trạng hệ thống.

Grafana là gì ?

Việc giám sát và có dữ liệu là tốt, nhưng biến đổi dữ liệu thành thông tin hữu ích cho doanh nghiệp có thể nhìn được tổng quan hơn là nhiệm vụ của Grafana.

Grafana là một nền tảng trực quan hóa dữ liệu mạnh mẽ. Giúp tạo ra các dashboard, đồ thị từ các dữ liệu và metric lấy được từ các thiết bị giúp quan sát được các thông tin một cách trực quan và hiệu quả.

Sự kết hợp giữa Prometheus, Loki và Grafana cho phép doanh nghiệp tạo ra các bảng điều khiển tổng hợp, cung cấp cái nhìn tổng thể về tình trạng hệ thống và dễ dàng nhận biết các vấn đề và rủi ro về bảo mật tiềm ẩn tạo ra một hệ thống mạnh mẽ tạo tiền đề phát triển bền vững cho các tổ chức và doanh nghiệp hiện nay.

Triển khai mô hình giám sát hệ thống

Trong phạm vi bài hướng dẫn này, chúng ta sẽ thiết lập một hệ thống giám sát cơ bản các nguồn thông tin như : 

  1. Tỷ lệ sử dụng CPU của server
  2. Tỷ lệ sử dụng Memory của server
  3. Giám sát process của sshd
  4. Log của hệ thống /var/log/messages
  5. Log của Cron job

Công cụ sử dụng :

  1. Prometheus: 1 công cụ có thể thu thập và trực quan hóa các số liệu của service và app của server
  2. Loki: Log và query của hệ thống
  3. Grafana: Tool dùng để chuyển data thành công cụ giao diện nhìn trực quan
  4. Node Exporter:
    1. Tool để thu thập số liệu
    2. Truyền tải dữ liệu trong cài đặt ở phía máy chủ giám sát, thiết lập riêng để nhận thông tin Process Export từ phía máy chủ cần giám sát
  5. Promtail
    1. Tool dùng để format Log
    2. Thiết lập để format log từ server cần monitor đến server monitoring
  6. Cấu trúc server demo
Tên serverIP serverCấu hìnhTool sử dụng
Server cần theo dõi192.168.88.233OS: Centos8
Ram: 2GB
CPU: 2Core
・Node Exporter
・Process Exporter
・Promtail
Server monitor192.168.88.206OS: Centos8
Ram: 2GB
CPU: 2Core
・Grafana
・Loki
・Prometheus

Trình tự thiết lập

1. Thiết lập server cần theo dõi

Cài đặt các tool cần thiết như : Node Exporter, Process Exporter và Promtail

a. Install Node Exporter

Download phiên bản mới nhất từ Prometheus

# Tạo folder sử dụng để download source
$ mkdir /usr/local/src/prometheus
# Di chuyển đến folder source vừa tạo
$ cd /usr/local/src/prometheus
# Download file nén của source
$ wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
# Giải nén file vừa download
$ tar zxvf node_exporter-1.6.1.linux-amd64.tar.gz
$ mv node_exporter-1.6.1.linux-amd64.tar.gz node_exporter
# Lưu trữ vào /usr/bin
$ cp -r node_exporter /usr/bin

Tạo script start

# Tạo script start
$ vi /usr/lib/systemd/system/prometheus-node-exporter.service

Nội dung của prometheus-node-exporter.service như sau

[Unit]
Description=Node Exporter
Documentation=https://github.com/prometheus/node_exporter
[Service]
Type=simple
ExecStart=/usr/bin/node_exporter/node_exporter $OPTIONS
Restart=always
[Install]
WantedBy=multi-user.target

Khởi động và kiểm tra hoạt động

# Reload daemon
$ systemctl daemon-reload
# Setup tự động restart service
$ systemctl enable prometheus-node-exporter.service
# Khởi động service
$ systemctl start prometheus-node-exporter.service
# Kiểm tra status của service
$ systemctl status prometheus-node-exporter.service

Kiểm tra kết quả

# Gọi thử API kiểm tra
$ curl 192.168.88.233:9100/metrics

Kết quả kiểm thử như sau là chính xác

b. Install Process Exporter

Download và cài đặt phiên bản mới từ Process Exporter

# Tạo folder sử dụng để download source
$ mkdir /usr/local/src/process-exporter
# Di chuyển đến folder source vừa tạo
$ cd /usr/local/src/process-exporter
# Download file nén của source
$ wget https://github.com/ncabatoff/process-exporter/releases/download/v0.7.10/process-exporter-0.7.10.linux-amd64.tar.gz
# Giải nén file vừa download
$ tar zxvf process-exporter-0.7.10.linux-amd64.tar.gz
$ mv process-exporter-0.7.10.linux-amd64 process-exporter
# Lưu trữ vào /usr/bin
$ cp -r /usr/local/src/process-exporter/process-exporter /usr/bin
# Tạo folder chứa config file cho process exporter
$ mkdir /etc/process-exporter
# Tạo config file
$ vi /etc/process-exporter/config.yml

Ghi nội dung script vào file config process-exporterconfig.yml

# Ghi nội dung vào file
$ vi /etc/process-exporter/process-exporterconfig.yml

Nội dung như sau :

process_names:
  - cmdline:
    - .+

Tạo script start

# Tạo script start
$ vi /usr/lib/systemd/system/process-exporter.service

Nội dung của process-exporter.service như sau

[Unit]
Description=Process Exporter
Documentation=https://github.com/ncabatoff/process-exporter
[Service]
Type=simple
ExecStart=/usr/bin/process-exporter/process-exporter \
  -config.path /etc/process-exporter/config.yml
[Install]
WantedBy=multi-user.target

Khởi động và kiểm tra hoạt động

# Reload và khởi động
$ systemctl daemon-reload
$ systemctl enable process-exporter.service
$ systemctl start process-exporter.service
$ systemctl status process-exporter.service

Kiểm tra service status như sau là thành công

Kiểm tra kết quả

# Gọi thử API kiểm tra
$ curl 192.168.88.233:9256/metrics

Kết quả kiểm thử như sau là chính xác

c. Install Promtail

Download và cài đặt phiên bản mới từ Grafana/Loki

# Tạo folder sử dụng để download source
$ mkdir /usr/local/src/promtail
# Di chuyển đến folder source vừa tạo
$ cd /usr/local/src/promtail
# Download file nén của source
$ curl -O -L "https://github.com/grafana/loki/releases/download/v2.8.4/promtail-linux-amd64.zip"
# Giải nén file vừa download
$ unzip "promtail-linux-amd64.zip"
# Cấp quyền thực thi cho file
$ chmod a+x promtail-linux-amd64
# Lưu trữ vào /usr/bin
$ cp -r /usr/local/src/promtail/promtail-linux-amd64 /usr/bin

Download file config promtail-local-config.yaml

# Tạo folder sử dụng để download file
$ mkdir /etc/promtail
# Di chuyển đến folder source vừa tạo
$ cd /etc/promtail
# Download file config
$ wget https://raw.githubusercontent.com/grafana/loki/main/clients/cmd/promtail/promtail-local-config.yaml

Chỉnh sửa cấu hình promtail-local-config.yaml cho phù hợp

  • Cập nhật lại IP của server monitor dùng để push thông tin từ server theo dõi (server monitor ở đây đang dùng IP: 192.168.88.206)
  • Thiết lập để có thể thu thập được log của hệ thống và cron job log:
    /var/log/messages và /var/log/crond
  • Chỉnh lại file cấu hình /etc/promtail/promtail-local-config.yaml như sau:
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yam
clients:
- url: http://192.168.88.206:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs
      __path__: /var/log/messages
- job_name: cron
  static_configs:
  - targets:
     - localhost
    labels:
      job: cronlogs
      __path__: /var/log/cron

Tạo script khởi động

$ vi /usr/lib/systemd/system/promtail.service

Nội dung script promtail.service như sau

[Unit]
Description=Promtail
Documentation=https://github.com/grafana/loki/releases/
[Service]
Type=simple
ExecStart=/usr/bin/promtail-linux-amd64 \
  --config.file=/etc/promtail/promtail-local-config.yaml
[Install]
WantedBy=multi-user.target

Khởi động lại và kiểm tra kết quả

# Reload và khởi động
$ systemctl daemon-reload
$ systemctl enable promtail.service
$ systemctl start promtail.service
$ systemctl status promtail.service

Kiểm tra trạng thái dịch vụ như sau là thành công

Kiểm tra kết quả bằng API

# Gọi thử API kiểm tra
$ curl 192.168.88.233:9080/targets

Kết quả như sau

Xác nhận Promtail hoạt động trên browser (Chrome) theo địa chỉ
http://192.168.88.233:9080/targets

Hết phần 1

*Ở phần 2 chúng ta sẽ nói về Cách thiết lập server monitor. Hãy tiếp tục theo dõi bài viết nhé!

Phan Văn Liền
Web Developer

APPLY NOW






    Benefits

    SALARY & BONUS POLICY

    RiverCrane Vietnam sympathizes staffs' innermost feelings and desires and set up termly salary review policy. Performance evaluation is conducted in June and December and salary change is conducted in January and July every year. Besides, outstanding staffs receive bonus for their achievements periodically (monthly, yearly).

    TRAINING IN JAPAN

    In order to broaden staffs' view about technologies over the world, RiverCrane Vietnam set up policy to send staffs to Japan for study. Moreover, the engineers can develop their career paths in technical or management fields.

    ANNUAL COMPANY TRIP

    Not only bringing chances to the staffs for their challenging, Rivercrane Vietnam also excites them with interesting annual trips. Exciting Gala Dinner with team building games will make the members of Rivercrane connected closer.

    COMPANY'S EVENTS

    Activities such as Team Building, Company Building, Family Building, Summer Holiday, Mid-Autum Festival, etc. will be the moments worthy of remembrance for each individual in the project or the pride when one introduces the company to his or her family, and shares the message "We are One".

    INSURANCE

    Rivercrane Vietnam ensures social insurance, medical insurance and unemployment insurance for staffs. The company commits to support staffs for any procedures regarding these insurances. In addition, other insurance policies are taken into consideration and under review.

    OTHER BENEFITS

    Support budget for activities related to education, entertainment and sports. Support fee for purchasing technical books. Support fee for getting engineering or language certificates. Support fee for joining courses regarding technical management. Other supports following company's policy, etc.

    © 2012 RiverCrane Vietnam. All rights reserved.

    Close