No menu items!
No menu items!
More

    [Prometheus] Push metric lên Pushgateway sử dụng bash script

    Phần này mình sẽ hướng dẫn các bạn dùng bash script để đẩy metric lên Prometheus thông qua Pushgateway. Pushgateway nó như 1 bộ nhớ tạm để chứa các metric và các metric này sẽ được Prometheus pull về định kỳ. Cụ thể mình sẽ hướng dẫn các bạn viết 1 đoạn script nhỏ để lấy thông tin CPU và Memory thông qua top của hệ thống, sau khi đẩy được metric lên Prometheus mình cũng sẽ hướng dẫn các bạn tạo 1 dashboard để chúng ta có 1 cái nhìn trực quan hơn.

    1. Triển khai Prometheus

    Hãy tạo thư mục lưu file config của Promtheus.

    mkdir /home/prometheus

    Tiếp theo bạn hãy tạo file config Promtheus /home/prometheus/prometheus.yml với nội dung như dưới. Chúng ta sẽ có 2 job prometheus và jenkins, với 192.168.13.205:8080 là ip address của jenkins và 8080 là port của nó.

    global:
      scrape_interval: 15s
      evaluation_interval: 15s
    
    scrape_configs:
      - job_name: 'prometheus'
        static_configs:
          - targets: [192.168.13.205:9090]
    
      - job_name: 'jenkins'
        metrics_path: /prometheus
        static_configs:
          - targets: [192.168.13.205:9091]

    Sau khi hoàn thành tạo các thu mục và file, bạn sẽ có cây thư mục như dưới.

    .
    ├── prometheus
        └── prometheus.yml

    Chúng ta chạy lệnh dưới để triển khai Prometheus, nhớ mount file config prometheus.yml vào container.

    docker run -d -u root --name prometheus -p 9090:9090 -v /home/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

    Kết quả sau khi khởi tạo xong chúng ta có kết quả, ở đây mình có thêm container gitlab được triển khai chung host với prometheus.

    $ docker ps
    CONTAINER ID   IMAGE                     COMMAND                  CREATED          STATUS                PORTS                                                                                                               NAMES
    03c5619941de   prom/prometheus           "/bin/prometheus --c…"   49 seconds ago   Up 47 seconds         0.0.0.0:9090->9090/tcp, :::9090->9090/tcp                                                                           prometheus

    Do chưa triển khai Pushgateway nên trạng thái target của nó sẽ báo down.

    2. Triển khai Pushgateway

    Chạy lệnh Docker Run để triển khai Pushgateway.

    docker run -d -u root --name pushgateway -p 9091:9091 prom/pushgateway

    Xác nhận Pushgateway đã thực sự chạy thành công.

    $ docker ps
    CONTAINER ID   IMAGE                     COMMAND                  CREATED          STATUS                 PORTS                                                                                                               NAMES
    8fa3517c6eab   prom/pushgateway          "/bin/pushgateway"       15 seconds ago   Up 14 seconds          0.0.0.0:9091->9091/tcp, :::9091->9091/tcp                                                                           pushgateway
    03c5619941de   prom/prometheus           "/bin/prometheus --c…"   6 hours ago      Up 2 minutes           0.0.0.0:9090->9090/tcp, :::9090->9090/tcp                                                                           prometheus

    Kết quả trong targets.

    Chúng ta cũng có thể sử dụng trình duyệt để login vào Pushgateway theo url http://<pushgateway_ipaddr>:9091

    3. Triển khai Grafana

    Bước tiếp theo chúng ta triển khai Grafana để đưa thông tin metric đã lấy được từ Jenkins lên dashboard.

    Hãy chạy lệnh dưới để tạo 1 container Grafana.

    docker run -d -u root --name grafana -p 3000:3000 grafana/grafana

    Xác nhận Grafana đã triển khai thành công.

    $ docker ps
    CONTAINER ID   IMAGE                     COMMAND                  CREATED            STATUS                 PORTS                                                                                                               NAMES
    8fa3517c6eab   prom/pushgateway          "/bin/pushgateway"       15 seconds ago     Up 14 seconds          0.0.0.0:9091->9091/tcp, :::9091->9091/tcp                                                                           pushgateway
    744c9ab6dc1d   grafana/grafana           "/run.sh"                6 minutes ago      Up 6 minutes           0.0.0.0:3000->3000/tcp, :::3000->3000/tcp                                                                           grafana
    03c5619941de   prom/prometheus           "/bin/prometheus --c…"   2 minutes ago      Up 2 minutes           0.0.0.0:9090->9090/tcp, :::9090->9090/tcp                                                                           prometheus

    Dùng trình duyệt login vào url theo cú pháp http://<grafana_ipaddr>:3000

    http://192.168.13.205:3000/

    Bạn sẽ có kết quả như dưới, hãy thực hiện tiếp các bước như hình để chúng ta thêm data source của Prometheus.

    Chọn data source là Prometheus

    Tại mục name bạn hãy đặt tên bất kỳ cho nó, tại URL bạn điền url console của Prometheus.

    Sau khi hoàn thành 2 bước trên hãy kéo xuống dưới cùng và bấm Save & test. Nếu kết quả trả về Data source is working có nghĩ là data source đã được thêm thành công.

    Sau khi thêm xong bạn sẽ có 1 data source Prometheus như dưới.

    4. Viết script lấy metric

    – Lấy thông tin cho CPU

    Mình sẽ tạo 1 file có tên better-top và phân quyền thực thi cho nó.

    touch better-top 
    chmod u+x better-top 
    vi better-top

    File better-top sẽ có nội dung như dưới.

    #!/bin/bash
    z=$(ps aux)
    while read -r z
    do
       var=$var$(awk '{print "cpu_usage{process=\""$11"\", pid=\""$2"\"}", $3z}');
    done <<< "$z"
    curl -X POST -H  "Content-Type: text/plain" --data "$var
    " http://192.168.13.205:9091/metrics/job/top/instance/machine

    Giờ mình sẽ chạy file better-top cứ 1 giây lặp lại 1 lần để lấy metric.

    while sleep 1; do ./better-top; done;

    – Lấy thông tin cho Memory

    Tạo file có tên memory-top-script và phân quyền thực thi cho nó.

    touch memory-top-script 
    chmod u+x memory-top-script 
    vi memory-top-script

    File memory-top-script sẽ có nội dung như dưới.

    #!/bin/bash
    z=$(ps aux)
    while read -r z
    do
       var=$var$(awk '{print "memory_usage{process=\""$11"\", pid=\""$2"\"}", $4z}');
    done <<< "$z"
    curl -X POST -H  "Content-Type: text/plain" --data "$var
    " http://192.168.13.205:9091/metrics/job/top/instance/machine

    Giờ mình sẽ chạy file better-top cứ 1 giây lặp lại 1 lần để lấy metric

    while sleep 1; do ./memory-top-script; done;

    Kết quả trên trang console của Pushgateway

    Đây là kết quả khi show metric trên Prometheus.

    5. Đưa kết quả lên Grafana

    Đầu tiên hãy tạo 1 dashboard mới.

    Tiếp theo hãy tạo 1 panel mới

    Chọn virtualization là Gauge, thực hiện thứ tự như hình dưới, ở dòng metric hãy sửu dụng phép tính sum(cpu_usage) để tính tổng phần trăm CPU đã được sử dụng.

    Đặt tên cho panel ở mục 1 và mở mục 2 hãy chọn last * để nếu grafana không lấy được giá trị gần nhất thì nó sẽ lấy giá trị cuối cùng để hiện lên dashboard

    Set ngưỡng cảnh bảo ở đây nhé.

    Phần này ta hiển thị phần trăm từ 0-100 như mục 1, 2. Sau khi setup thành công bạn sẽ có kết quả như ở mục 3.

    Kết quả sau khi bấm Apply và Save lại, bạn sẽ có 1 panel tên là Current CPU Usage như hình dưới.

    Áp dụng tương tự cho Average CPU Usage và Current Memory Usage ta được kết quả như sau.

    Tiếp theo mình sẽ tạo 1 panel mới để hiện thị top 10 services sử dụng CPU nhiều nhất, lần này mình sẽ lựa chọn virtualization là Bar gauge. Bạn hãy setup thứ tự như hình dưới nhé.

    Mình sẽ chọn kiểu hiển thi là Horizontal.

    Vẫn như phần trên mình sẽ lựa chọn kiểu hiện thị là phần trăm, nếu bạn có lựa chọn như mình thì hãy setup như hình dưới.

    Phần này mình sẽ hiện cảnh báo khi có service sử dụng vượt ngưỡng.

    Áp dụng tương tự cho Memory, hãy setup theo hình dưới và nhớ chọn last * để nếu grafana không lấy được giá trị gần nhất thì nó sẽ lấy giá trị cuối cùng để hiện lên dashboard.

    Phần này ta hiển thị phần trăm từ 0-100.

    Và cuối cùng là cài đặt ngưỡng cảnh báo cho Memory.

    Và chúng ta có kết quả như dưới.

    Tiếp theo nếu dashboard của bạn đang ít thì bạn có thể thiết kế thêm 1 virtualization Time series hiển thị top 10 CPU như sau.

    Phần này mình vẫn để hiển thị phần trăm từ 0-100.

    Cài đặt ngưỡng cảnh báo cho pannel mới.

    Làm tương tự cho phần Memory bạn sẽ có 1 dashboard hiển thị thông tin resource của CPU và Memory như dưới.

    Và đây là kết quả khi mình thử test sử dụng CPU và Ram. Bạn có thể tham khảo 1 số cách test của mình ở phần dưới.

    5. Cách test kết quả

    – Test CPU

    sha1sum /dev/zero $

    – Test memory

    tail /dev/zero

    – Mình sẽ cài đặt Stress để test kết quả

    sudo apt install stress -y 
    • sử dụng CPU trong 15 giây và sử dụng 4 core
    $ stress --cpu 4  --timeout 15
    stress: info: [29562] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd
    stress: info: [29562] successful run completed in 15s
    • Sử dụng I/O
    $ stress --io 4
    stress: info: [30329] dispatching hogs: 0 cpu, 4 io, 0 vm, 0 hdd
    • Sử dụng Memory
    $ stress -m 7 --timeout 15
    stress: info: [30757] dispatching hogs: 0 cpu, 0 io, 7 vm, 0 hdd
    stress: info: [30757] successful run completed in 15s
    • Sử dụng số lượng Memory cụ thể
    $ stress --vm 2 --vm-bytes 128M --vm-hang 10
    stress: info: [31207] dispatching hogs: 0 cpu, 0 io, 2 vm, 0 hdd

    Bài viết gần đây

    spot_img

    Related Stories

    Leave A Reply

    Please enter your comment!
    Please enter your name here

    Đăng ký nhận thông tin bài viết qua email