grafanagrafana

Bài viết này mình sẽ sử dụng Grafana, Prometheus và Node Exporter để giám sát hệ thống hạ tầng một cách tập chung, và giúp chúng ta có thể kê cao gối ngủ khi giảm bớt những công việc thủ công hơn và có sự cố hệ thống sẽ gửi cảnh báo cho mình thông qua mail hoặc slack.

Công ty cụ thể hơn là dự án sử dụng rất nhiều server nào là server source, server database, server lưu trữ tài liệu (ảnh, video,..), server web mà server web lại còn có nhiều server để cân bằng tải, container,… Chúng ta phải nắm bắt được những tài nguyên của các server đó (cpu, ram, traffic, data, network…) đảm bảo các server hoạt động ổn định. Khi một trong các server gặp sự cố chúng ta lại truy tìm từng server rồi fix sao, công việc vừa khó khăn và mất thời gian. Vì vậy, chúng ta sẽ cần một công cụ để giúp chúng ta xử lý những công việc giám sát đó. Bạn có thể áp dụng được luôn sau khi xem xong bài viết này.

 

Monitoring là gì? Grafana là gì?

Monitoring ở khía cạnh kỹ thuật có thể được hiểu là cách mà DevOps Engineer sử dụng các công cụ để có thể truy xuất những thông tin như hiệu suất, tài nguyên, cấu hình, network,… của hệ thống và ứng dụng, để có thể thấy được những sự cố đang gặp phải rồi thực hiện những giải pháp khắc phục hiệu quả.

Đối với các hệ thống thương mại, cũng như hệ thống mạng xã hội việc monitoring có thể nói là việc cực kỳ quan trọng và không thể thiếu, vì không chỉ dừng lại ở việc thu thập các giá trị tài nguyên, cấu hình, network mà còn là lượng traffic khách hàng, thói quen mua hàng, trang web hay sản phẩm nào được truy cập nhiều,… Những data như vậy được coi là báu vật trong kinh doanh trên nền tảng công nghệ số như hiện nay.

Ở bài viết này, bạn sẽ biết và sử dụng Grafana dễ dàng một công cụ dashboard theo dõi hệ thống trực quan (open source) kết hợp với những công cụ khác (ở bài viết này mình sử dụng Prometheus) để tiến hành ghi nhận giám sát những tài nguyên Server cũng như config để có thể gửi thông báo khi hệ thống gặp sự cố(có thể setup vào mail, telegram, slack).

tài liệu tham khảo chuẩn tại:

Cách hoạt động của Grafana

workflow

Từng thành phần:

  • Các server, application, container, kubernetes được coi là những hệ thống mà ta cần giám sát (monitoring). Trên các hệ thống đó sẽ tiến hành cài đặt Node Exporter để nhận được những giá trị (metric) từ server đó.
  • Sau đó, Prometheus được setup trên 1 server để tiến hành lấy (pull) các metric của từng server qua Node Exporter ở trên. Tuy ở ngay trên Prometheus cũng có trình quản lý nhưng trong bài này mình sẽ tập chung vào Grafana để thấy được sự tiện dụng của nó.
  • Tiếp đó, mình sẽ setup Grafana lấy (pull) được data từ Prometheus bằng config data source và cách sử dụng Grafana để hiển thị những thông số dưới dạng biểu đồ trực quan.
  • Cuối cùng là config AlertManager để hệ thống giám sát sẽ gửi thông báo đến mail, slack hoặc telegram giúp giảm quá trình truy xuất thủ công đi.

Cách sử dụng Grafana (Step by step)

Step 0: Chuẩn bị

Như trong bài viết Cách dùng Vagrant tạo nhiều máy ảo mình đã hướng dẫn chi tiết cơ bản cách tạo server sao cho nhanh chóng hiệu quả. vậy nên để sử dụng grafana việc sẵn sàng các server là điều đầu tiên phải có (các server phải trong cùng private network). Ở đây mình chuẩn bị 4 server.

  • Server thứ nhất:
    • IP: 10.32.4.139
    • hostname: devops
    • Chức năng: Setup Grafana
  • Server thứ hai:
    • IP: 10.32.4.178
    • hostname: prometheus
    • Chức năng: Setup Prometheus và AlertManager
  • Server thứ 3:
    • IP: 10.32.4.122
    • hostname: server1
    • Chức năng: Tạm hiểu là server chạy dự án thứ nhất
  • Server thứ 4:
    • IP: 10.32.4.127
    • hostname: server2
    • Chức năng: Tạm hiểu là server chạy dự án thứ hai

Mục đích: Giám sát server1 và server2 tập chung, nhanh chóng, loại bỏ những công đoạn thủ công (bạn có nhiều có thể setup nhiều không vấn đề gì, ở đây mình sample 2 server).

chuẩn bị 4 server

Step 1: Setup Node Exporter

Như đã nói ở workflow, để sử dụng được grafana chúng ta sẽ phải cài đặt Node Exporter ở các server cần giám sát (ở đây là server1 và server1)

Truy cập Node Exporter để tải về phiên bản mới nhất và những lệnh Linux mình cũng đã có trong Linux cơ bản cho người mới bắt đầu

$ apt update && apt install wget -y

$ wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz

$ tar -xzvf node_exporter-1.5.0.linux-amd64.tar.gz

$ cd node_exporter-1.5.0.linux-amd64

$ mv node_exporter /usr/local/bin

$ cd ..

$ rm -rf node_exporter-1.5.0.linux-amd64.tar.gz node_exporter-1.5.0.linux-amd64

$ cd /usr/local/bin

$ chown node_exporter:node_exporter /usr/local/bin/node_exporter

$ node_exporter --version

$ node_exporter

Đến đây đã chạy rồi tuy nhiên bạn có thể thêm service cho node_exporter để chạy dạng service trên hệ thống nhé, tạo file sau

$ nano /etc/systemd/system/node-exporter.service

[Unit]
Description=Node Exporter
After=network.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter --collector.systemd

[Install]
WantedBy=multi-user.target

$ systemctl daemon-reload

$ systemctl start node-exporter.service

$ systemctl enable node-exporter.service

Vậy là bạn đã thêm thành công service, tiếp theo bạn mở firewall và mở port lên như sau

$ ufw enable

$ ufw allow 9100/tcp

  • khuyến nghị sử dụng $ ufw allow from <IP> to any port 9100 trong đó  <IP> tương ứng với IP private của bạn với câu lệnh này chúng ta có thể hạn chế được những người không có quyền xem data metric của server.

 

Như vậy là đã setup thành công Node Exporter ở server1 tương tự làm như vậy ở server2. Node Exporter listen port 9100. Ở đây mình setup thủ công trên server mới, trong bài Cách dùng Vagrant tạo nhiều máy ảo mình cũng hướng dẫn cách setup luôn ứng dụng khi tạo máy ảo.

Step 2: Setup Prometheus

Tiếp theo chúng ta sẽ tiến hành cài đặt Prometheus để pull những metric có được từ 2 server trên, trên server có hostname là prometheus và IP là 10.32.4.178

Truy cập Prometheus để tải về phiên bản mới nhất:

$ apt update && apt install wget -y

$ wget https://github.com/prometheus/prometheus/releases/download/v2.42.0-rc.0/prometheus-2.42.0-rc.0.linux-amd64.tar.gz

$ tar -xzvf prometheus-2.42.0-rc.0.linux-amd64.tar.gz

$ rm -f prometheus-2.42.0-rc.0.linux-amd64.tar.gz

$ prometheus --version

$ cd prometheus-2.42.0-rc.0.linux-amd64

$ vi prometheus.yml

Thêm 2 job_name là server1 và server2, tương ứng với IP của từng server như đã Setup ở Step 0, và listen port 9100 như step 1 đã setup.

# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - localhost:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=` to any timeseries scraped from this config.
  - job_name: "server_1"
    static_configs:
      - targets: ["10.32.4.122:9100"]

  - job_name: "server_2"
    static_configs:
      - targets: ["10.32.4.127:9100"]

$ ufw enable

$ ufw allow 9090/tcp

  • khuyến nghị sử dụng $ ufw allow from <IP> to any port 9090 trong đó  <IP> tương ứng với IP private của bạn với câu lệnh này chúng ta có thể hạn chế được những người không có quyền xem data.

$ ./prometheus

Thấy dòng “Server is ready to receive web requests” là thành công. Prometheus listen port 9090 bạn có thể check ngay trên brower theo IP:Port của mình sẽ là 10.32.4.178:9090

Bài viết mình làm sample khá đơn giản còn khá nhiều cách setup Prometheus hợp lý ví dụ: Installing Prometheus on Ubuntu 20.04

Step 3: Setup Grafana

Tiếp đến chúng ta sẽ cài đặt grafana tại server có hostname là devops và có IP là 10.32.4.139

$ apt install -y gnupg2 curl software-properties-common

$ curl -fsSL https://packages.grafana.com/gpg.key|sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/grafana.gpg

$ add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"

apt-get install grafana -y

grafana-server -v

$ systemctl start grafana-server start grafana server

$ systemctl enable grafana-server

$ systemctl status grafana-server

$ ufw enable

$ ufw allow 3000/tcp

  • khuyến nghị sử dụng $ ufw allow from <IP> to any port 3000 trong đó  <IP> tương ứng với IP private của bạn với câu lệnh này chúng ta có thể hạn chế được những người không có quyền xem data.

Như vậy là đã cài đặt được Grafana. Grafana listen port 3000 tương ứng với server của mình là: 10.32.4.139:3000

Step 4: Config Prometheus trên Grafana và sử dụng Grafana

Truy cập 10.32.4.139:3000 tài khoản mật khẩu mặc định sẽ là admin/admin và tiến hành đổi password khi đăng nhập thành công.

Nhấn chọn vào Data Source

Nhấn chọn Promethous

Nhập Url là Url của server setup Prometheus

Nhấp Save & Test và được kết quả. Thành công sẽ hiện thông báo.

Tiến hành Import Dashboard để monitoring

Truy cập Sử dụng Grafana – Dashboards để tìm kiếm dashboard phù hợp ở đây mình chọn dashboard 1860 và chỉ cần nhập vào và nhấn load

Tiếp tục nhập vào một số thông tin rồi nhấn import

Và được kết quả ở đây bạn có thể thấy chúng ta đã có monitoring của 2 server mà mình đã setup và bạn có thể thấy và sử dụng Grafana ngay từ những dữ liệu về hạ tầng được hiển thị trực quan ngay dưới dạng các thông số, biểu đồ.

Bài viết hiện tại khá dài mình sẽ hướng dẫn sử dụng chi tiết cũng như setup AlertManager vào bài viết kế tiếp series Monitoring. Vậy là qua bài viết này bạn đã có thể sử dụng Grafana được ngay setup một hệ thống giám sát các server tập chung giúp hiển thị những thông số về cpu, ram, network, traffic,… Mình sẽ làm nhiều hướng dẫn hơn về các kỹ năng, các tool khác để giúp bạn tối ưu được những tác vụ cũng như tiết kiệm những chi phí khi phát triển phần mềm. Thanks.

Nguồn: elroydevops.tech

By admin

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.