LapTrinhBlockchain

Chia sẻ kiến thức về Lập Trình Blockchain

Kiến thức phần mềm, Nâng cao Kiến thức

Hướng dẫn sử dụng Prometheus và Grafana để giám sát hệ thống server

Hướng dẫn sử dụng Prometheus và Grafana để giám sát hệ thống server

Hướng dẫn sử dụng Prometheus và Grafana để giám sát hệ thống server

Chia sẻ bài viết
5
(88)

Hiện có nhiều công cụ để giám sát server như Zabbix, Nagios, Cacti, Centreon, MRTG, Grafana+Prometheus,.. Mỗi hệ thống đều có điểm mạnh và điểm yếu khác nhau, do đó trước khi sử dụng chúng ta cần cân nhắc kỹ. Nhưng với yêu cầu giám sát đơn giản thì Prometheus và Grafana là khá đủ để sử dụng.

So sánh đánh giá 3 nền tảng giám sát máy chủ: Nagios, Zabbix và Prometheus

Nagios, Zabbix và Prometheus đều là những giải pháp giám sát cơ sở hạ tầng CNTT phổ biến. Tuy nhiên, Nagios Core thiếu nhiều tính năng quan trọng có trong Zabbix và Prometheus, trừ khi bạn sẵn sàng trả tiền cho phiên bản thương mại (Nagios XI).

Zabbix và Prometheus đều là những nền tảng xuất sắc nhưng có những điểm mạnh khác nhau. Prometheus dễ cài đặt hơn và thu thập dữ liệu tốt hơn nhờ ngôn ngữ truy vấn mạnh mẽ (PromQL). Nó cũng có một cộng đồng lớn hơn đáng kể, nơi bạn có thể nhận được hỗ trợ trong khi định cấu hình nó để đáp ứng nhu cầu của mình.

Khi nói đến trực quan hóa dữ liệu, Zabbix rõ ràng chiếm ưu thế. Không giống như Prometheus, bạn có thể tạo biểu đồ, bản đồ và trang tổng quan mà không cần dựa vào các dịch vụ của bên thứ ba như Grafana. Zabbix cũng có giao diện người dùng được thiết kế tốt hơn, giải pháp quản lý người dùng tốt hơn và chức năng cảnh báo tốt hơn.

  • Nagios Core:
    • Là một ứng dụng mã nguồn mở và miễn phí có thể giám sát các máy chủ và dịch vụ của bạn cũng như cảnh báo cho bạn khi có sự cố. Nó được viết bởi Ethan Galstad và một nhóm các nhà phát triển như một chương trình giám sát hệ thống Linux, nhưng nó có thể được cài đặt trên các biến thể Unix khác.
    • Nagios Core thiếu nhiều tính năng quan trọng có trong Zabbix và Prometheus, trừ khi bạn sẵn sàng trả tiền cho phiên bản thương mại (Nagios XI).
  • Zabbix:
    • Là một phần mềm nguồn mở khác được thiết kế chủ yếu để giám sát cơ sở hạ tầng CNTT. Nó được phát hành lần đầu tiên vào năm 2004 và vẫn đang được phát triển tích cực với các bản phát hành mới sáu tháng một lần.
  • Cuối cùng, Prometheus là một công cụ giám sát máy chủ có thể thu thập dữ liệu chuỗi thời gian từ máy chủ của bạn và biên dịch chúng thành biểu đồ. Ban đầu nó được tạo bởi SoundCloud và hiện là một dự án nguồn mở được lưu trữ trên GitHub.
So sánh đánh giá 3 nền tảng giám sát máy chủ: Nagios, Zabbix và Prometheus

Chi tiết các bạn xem bài viết: Nagios vs Zabbix vs Prometheus: The Key Differences to Know

Hiện tại Prometheus sử dụng kết hợp với Grafana đều là miễn phí, cài đặt dễ dàng và đang được sử dụng rộng rãi hơn. Vì thế bài viết này sẽ tập trung vào Hướng dẫn sử dụng Prometheus và Grafana để giám sát hệ thống server.

Tìm hiểu về Prometheus và Grafana

Tổng quan Prometheus và Grafana

Prometheus Grafana là bộ công cụ thường sử dụng cùng nhau để tạo nên hệ thống giám sát dữ liệu (Logs, CPU, RAM, Disk, IO operations…) trực quan. Trong đó:

  • Prometheus được dùng để giám sát hệ thống thông qua các daemon cài sẵn trên các node, qua đó thu thập các thông tin cần thiết. Prometheus giao tiếp với node qua giao thức http/https và lưu trữ data theo dạng time-series database (TSDB).
    • Prometheus sẽ thực hiện quá trình kéo (pull) các thông số/số liệu (metric) từ các job (exporter).
    • Prometheus sẽ lưu trữ các dữ liệu thu thập được ở local máy chủ.
    • Prometheus sẽ chạy các rule để xử lý các dữ liệu theo nhu cầu cũng như kiểm tra thực hiện các cảnh báo mà bạn mong muốn.
  • Grafana là một giao diện hiển thị các metric dưới dạng các biểu đồ (chart) hoặc đồ thị (graph), được tập hợp lại thành dashboard có tính tùy biến cao, giúp dễ dàng theo dõi tình trạng của node.

Đơn giản cho các bạn dễ hiểu 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 như CPURAMdisksIO operations…

Hoạt động của Prometheus, Node Exporter và Grafana

Việc sử dụng Prometheus Grafana cũng sẽ giúp chúng ta không bị phụ thuộc vào dịch vụ của các bên như AWS (Amazon Web Services), GCP (Google Cloud Platform), mà lại có thể giám sát server một cách tập trung không cần biết chúng ta đang sử dụng dịch vụ bên nào. Mặt khác việc sử dụng dịch vụ bên khác như AWS hay GCP, có khi chúng ta cũng cần phải trả phí thêm khá cao so với nhu cầu.

Hướng dẫn cài đặt, cấu hình và sử dụng Prometheus và Grafana

Cài đặt Node Exporter

Trên các máy cần giám sát, chúng ta cần cài Node Exporter. Đây là công cụ giúp thu thập dữ liệu cần giám sát, gồm các thông tin như CPU, RAM, Disk, Network,…

Cài đặt Node Exporter – Bản Standalone

Bạn truy cập vào trang Node Exporter Releases để tìm bản mới nhất và tải xuống. Tôi sử dụng lệnh sau để tải và cài đặt:

# Tải ứng dụng
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz

# Giải nén
tar -xzf node_exporter-1.7.0.linux-amd64.tar.gz

# Xóa tệp tải về
rm node_exporter-1.7.0.linux-amd64.tar.gz

# Đổi tên
mv node_exporter-1.7.0.linux-amd64 node_exporter-1.7.0

# Vào thư mục ứng dụng
cd node_exporter-1.7.0

# Kiểm tra phiên bản
./node_exporter --version

# Chạy ứng dụng
./node_exporter

Thông thường chúng ta sẽ chạy ở cấu hình mặc định, tức ở port 9100 và đường dẫn lấy dữ liệu là /metrics. Trong trường hợp bạn muốn thay đổi hai thông số này thì bạn sử dụng lệnh sau:

# Sử dụng tham số web.listen-address và web.telemetry-path để thay đổi cấu hình mặc định
node_exporter --web.listen-address=":9600" --web.telemetry-path="/node_metrics"

Cài đặt Node Exporter dưới dạng dịch vụ

Chạy ứng dụng kiểu Standalone hơi bất tiện nếu server có vấn đề cần phải khởi động lại thì ta phải chạy lại ứng dụng thủ công. Vì thế chúng ta nên chuyển sang sử dụng dịch vụ sẽ tiện hơn rất nhiều.

Đầu tiên chúng ta vẫn phải tải về như bước ở trên, sau đó thực hiện thêm một số bước như sau:

# Chuyển Node Exporter tới thư mục /usr/local/bin/
cd ..
sudo cp node_exporter-1.7.0/node_exporter /usr/local/bin/

# Tạo user node_exporter để chạy dịch vụ
sudo useradd -rs /bin/false node_exporter

# Tạo tệp service
# Nội dung tệp xem bên dưới
sudo nano /etc/systemd/system/node_exporter.service

# Xóa thư mục thừa nếu cần
rm -rf node_exporter-1.7.0

Nội dung tệp node_exporter.service như sau:

[Unit]
Description=Node Exporter
After=network.target
 
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
 
[Install]
WantedBy=multi-user.target

Bây giờ chúng ta reload lại System Daemon và start dịch vụ:

# Reload lại System Daemon
sudo systemctl daemon-reload

# Bật dịch vụ tự chạy khi khởi động
sudo systemctl enable node_exporter

# Bật dịch vụ
sudo service node_exporter start

# Xem trạng thái dịch vụ
sudo service node_exporter status

# Tắt dịch vụ
sudo service node_exporter stop

Cài đặt Prometheus

Bạn vào trang Prometheus Download để chọn phiên bản phù hợp, mình sử dụng Ubuntu 18.04.6 nên sử dụng bản cho Ubuntu:

# Tải prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.49.1/prometheus-2.49.1.linux-amd64.tar.gz

# Giải nén bẳng tar
tar -xzf prometheus-2.49.1.linux-amd64.tar.gz

# Xóa tệp cài đặt và đổi tên thư mục
rm prometheus-2.39.0.linux-amd64.tar.gz
mv prometheus-2.49.1.linux-amd64 prometheus-2.49.1

# Vào thư mục
cd prometheus-2.49.1

# Kiểm tra phiên bản
./prometheus --version

# Chạy prometheus
./prometheus --config.file prometheus.yml

Sau khi chạy xong, mở trình duyệt vào link http://localhost:9090/ bạn sẽ thấy giao diện như ảnh dưới. Trong giao diện này bạn có thể kiểm tra các job đang chạy và truy vấn dữ liệu:

Giao diện truy vấn dữ liệu trên Prometheus

Để thay đổi cấu hình bạn sửa tệp prometheus.yml, mặc định tệp này như sau:

# 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:
          # - alertmanager: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=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:9090"]

Để thu thập dữ liệu từ nhiều server khác nhau chúng ta thêm job mới tên là “node”, cụ thể xem phần dưới. Nhưng để dữ liệu dễ nhìn chúng ta ánh xa IP sang tên miền trước bằng cách trên server cài đặt prometheus, chú ta sửa tệp “/etc/hosts” thêm vào các dòng sau vào cuối tệp:

x.x.x.x frontend
y.y.y.y database
z.z.z.z service

Sau đó ta sửa tệp prometheus.yml như sau:

# 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:
          # - alertmanager: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=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]
  - job_name: "node"
    static_configs:
      - targets: ["frontend:9100"]
      - targets: ["database:9100"]
      - targets: ["service:9100"]

Cài đặt và cấu hình Grafana

Bạn vào trang Grafana Download để chọn phiên bản phù hợp và có cả hướng dẫn cài đặt luôn. Do sử dụng bản Standalone nên lệnh cài đặt như sau:

# Tải bản cài đặt
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-10.3.1.linux-amd64.tar.gz


# Giải nén
tar -zxvf grafana-enterprise-10.3.1.linux-amd64.tar.gz

# Xóa tệp cài đặt
rm grafana-enterprise-10.3.1.linux-amd64.tar.gz

# Vào thư mục ứng dụng
cd grafana-v10.3.1

# Sửa cấu hình nếu muốn
#     http_port: Cấu hình port của UI
nano conf/defaults.ini

# Chạy Grafana
./bin/grafana-server

Nếu sử dụng bản cài đặt, bạn có thể dùng lệnh sau:

# Cài đặt
sudo apt-get install -y adduser libfontconfig1 musl
wget https://dl.grafana.com/enterprise/release/grafana-enterprise_10.3.1_amd64.deb
sudo dpkg -i grafana-enterprise_10.3.1_amd64.deb

# Bật chế độ chạy mặc định khi khởi động
sudo systemctl enable grafana-server.service

# Chạy grafana
sudo service grafana-server start

Bây giờ chúng ta vào trình duyệt, mở link http://localhost:3000, và đăng nhập vào với tài khoản mặc định admin / admin, sau đó đổi mật khẩu mới, sau khi hoàn thành sẽ thấy giao diện như hình vẽ:

Giao diện chính của Grafana

Như theo hướng dẫn để hiển thị được dữ liệu bạn phải làm hai việc:

  1. Thêm mới “Data Source”:
    • B1: Trên giao diện Dashboard ta kích vào “Add your first data source”, hoặc trên Menu trái ta chọn “Connections -> Data sources
    • B2: Ta chọn prometheus, sau đó phần URL nhập “http://localhost:9090“, còn các cấu hình khác mặc định, sau đó nhấn “Save & test“. Hiện tại thấy hỗ trợ 152 kiểu Data Source khác nhau.
  2. Tạo Dashboard để hiển thị dữ liệu:

Sau khi xong, chúng ta nhìn thấy Dashboard hiển thị như sau (Còn rất nhiều chart ở bên dưới):

Giao diện Dashbard của Node Exporter Full
Giao diện Dashbard của Node Exporter Full
Giao diện giám sát mẫu 11074
Giao diện giám sát mẫu 11074

Cấu hình cảnh báo trong Prometheus gửi tin nhắn qua Telegram

Telegram hiện tại thông dụng, đặc biệt với dân Crypto, vì thế mong muốn cấu hình để cảnh báo qua Telegram. May mắn mình đã tìm thấy bài viết Cấu Hình Alert Trong Prometheus Gửi Tin Nhắn Qua Telegram

B1: Cài đặt và khởi chạy AlertManager

Các bước cài đặt như sau:

# Tải alertmanager
wget https://github.com/prometheus/alertmanager/releases/download/v0.20.0/alertmanager-0.20.0.linux-amd64.tar.gz

# Giải nén và xóa tệp tải về
tar -xvzf alertmanager-0.20.0.linux-amd64.tar.gz
rm alertmanager-0.20.0.linux-amd64.tar.gz

# Đẩy vào thư mục /usr/local
sudo mv alertmanager-0.20.0.linux-amd64 /usr/local/alertmanager

# Tạo tệp service, nội dung xem phần dưới
sudo nano /etc/systemd/system/alertmanager.service

Nội dung tệp alertmanager.service:

[Unit]
Description=AlertManager
Wants=network-online.target
After=network-online.target

[Service]
User=root
Group=root
Type=simple
ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml

[Install]
WantedBy=multi-user.target

Bây giờ chúng ta bật dịch vụ:

# Cấu hình để tự bật dịch vụ khi server khởi động
sudo systemctl daemon-reload
sudo systemctl enable alertmanager

# Bật dịch vụ
sudo service alertmanager start

# Tắt dịch vụ
sudo service alertmanager stop

# Xem trạng thái
sudo service alertmanager status

Sau khi khởi chạy, AlertManager sẽ sử dụng port mặc định 9093.

B2: Tạo các tệp rule xác định quy tắc cảnh báo

Trước khi tạo tệp rule, chúng ta phải biết một số công thức tính toán trước đã, chi tiết xem bài: Best practices for configuring alert rules in Prometheus, Awesome Prometheus alertsPrometheus alert rules for node exporter. Dưới đây là một số công thức tính toán, bạn có thể kiểm tra trực tiếp trên giao diện của Prometheus:

  • Công thức tính tỉ lệ RAM chưa sử dụng: Đơn vị %
    node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100
  • Công thức tính tỉ lệ sử dụng CPU: Đơn vị %
    100 – (avg by(instance) (rate(node_cpu_seconds_total{mode=”idle”}[2m])) * 100)
  • Công thức tính tỉ lệ Storage còn trống: Đơn vị %
    ((node_filesystem_avail_bytes * 100) / node_filesystem_size_bytes)
  • Xác định một VPS có vấn đề thông qua kiểm tra job “node” bằng điều kiện sau:
    up{job=”node”}==0

Vào thư mục của prometheus, bây giờ ta sẽ tạo thêm các tệp rule như dưới. Về một số công thức tính toán bạn xem tại:

Đầu tiên tạo tệp global_alert_rules.yml như sau:

############# Define Rule Alert ###############
# My global alert config
############# Define Rule Alert ###############

groups:
- name: global-alert
  rules:

################ Server Status
  - alert: Server Status
    expr: up{job="node"}==0
    for: 5m
    labels:
      severity: error
    annotations:
      summary: "Server Status (instance {{ $labels.instance }})"
      description: "Server state is not OK\n VALUE = {{ $value }}\n LABELS: {{ $labels }}"

################ Memory Usage High
  - alert: Memory Usage Very High
    expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 10
    for: 5m
    labels:
      severity: error
    annotations:
      summary: "Memory Usage (instance {{ $labels.instance }})"
      description: "Memory Usage is more than 90%\n VALUE = {{ $value }}\n LABELS: {{ $labels }}"
  - alert: Memory Usage High
    expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 20
    for: 15m
    labels:
      severity: warning
    annotations:
      summary: "Memory Usage (instance {{ $labels.instance }})"
      description: "Memory Usage is more than 80%\n VALUE = {{ $value }}\n LABELS: {{ $labels }}"

################ CPU Usage High
  - alert: Cpu Usage Very High
    expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) > 90
    for: 5m
    labels:
      severity: error
    annotations:
      summary: "CPU Usage (instance {{ $labels.instance }})"
      description: "CPU Usage is more than 90%\n VALUE = {{ $value }}\n LABELS: {{ $labels }}"
  - alert: Cpu Usage High
    expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) > 80
    for: 15m
    labels:
      severity: warning
    annotations:
      summary: "CPU Usage (instance {{ $labels.instance }})"
      description: "CPU Usage is more than 80%\n VALUE = {{ $value }}\n LABELS: {{ $labels }}"

################ Disk Usage
  - alert: Disk SpaceUsage Very High
    expr: ((node_filesystem_avail_bytes * 100) / node_filesystem_size_bytes) < 5
    for: 5m
    labels:
      severity: error
    annotations:
      summary: "Disk Space Usage (instance {{ $labels.instance }})"
      description: "Disk Space on Drive is used more than 95%\n VALUE = {{ $value }}\n LABELS: {{ $labels }}"
  - alert: Disk SpaceUsage High
    expr: ((node_filesystem_avail_bytes * 100) / node_filesystem_size_bytes) < 20
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "Disk Space Usage (instance {{ $labels.instance }})"
      description: "Disk Space on Drive is used more than 80%\n VALUE = {{ $value }}\n LABELS: {{ $labels }}"

Bạn cũng có thể tạo thêm nhiều tệp rule khác. Tệp rule này rất hay gặp lỗi khi soạn thảo vì thế nên kiểm tra trước.

Nếu chúng ta đã cấu hình tệp rule này trong tệp prometheus.yml thì chúng ta có thể kiểm tra toàn bộ cấu hình bằng lệnh sau:

./promtool check config  prometheus.yml

Không thì chúng ta có thể sử dụng công cụ pint để kiểm tra trước. Cách sử dụng như sau:

# Tải ứng dụng pint
wget https://github.com/cloudflare/pint/releases/download/v0.53.0/pint-0.53.0-linux-amd64.tar.gz


# Giải nén và xóa tệp tải về
tar -zxvf pint-0.53.0-linux-amd64.tar.gz
rm pint-0.53.0-linux-amd64.tar.gz

# Sử dụng pint để kiểm tra tệp rule
./pint-linux-amd64 lint ./prometheus-2.49.1/global_alert_rules.yml

Màn hình thông báo như dưới là OKIE:

Tệp RULE được kiểm tra OK

B2: Cấu hình alert trong prometheus

Vào lại thư mục của prometheus và sửa tệp prometheus.yml. Nội dung sửa trong phần bôi đậm:

# 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:
   - "global_alert_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=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]
  - job_name: "node"
    static_configs:
      - targets: ["frontend:9100"]
      - targets: ["database:9100"]
      - targets: ["service:9100"]

B3: Cài đặt và cấu hình prometheus_bot để gửi thông báo qua Telegram

Đầu tiên bạn phải cài đăt Go, xem hướng dẫn: Cài đặt Go. Tiếp theo bạn token sử dụng cho TelegramBot, xem hướng dẫn: Làm thế nào để tạo riêng của bạn Telegram bot
Bây giờ chúng ta cài đặt prometheus_bot bằng lệnh sau:

# Tải mã nguồn
git clone https://github.com/inCaller/prometheus_bot.git

# Build mã nguồn
cd prometheus_bot
make clean
make

# Copy vào thư mục /usr/local
sudo mkdir /usr/local/prometheus_bot
sudo cp prometheus_bot /usr/local/prometheus_bot

# Tạo tệp cấu hình cho prometheus_bot
# Nội dung xem bên dưới
sudo nano /usr/local/prometheus_bot/config.yaml

# Sao chép template gửi tin nhắn
sudo cp testdata/production_example.tmpl /usr/local/prometheus_bot/template.tmpl

# Test thử bằng lệnh, nhớ đổi lại chat_id
cp /usr/local/prometheus_bot/config.yaml .
export TELEGRAM_CHATID="-364942581"
make test

Nội dung tệp config.yaml như sau (Nhớ đổi telegram_token nhé):

telegram_token: "997872129:AAEPKYz3nPwmFsgq6ao-MdPsC5fy5z376GQ"

# ONLY IF YOU USING TEMPLATE required for test
# template_path: "/usr/local/prometheus_bot/template.tmpl"
time_zone: "Asia/Ho_Chi_Minh"
split_token: "|"

# ONLY IF YOU USING DATA FORMATTING FUNCTION, NOTE for developer: important or test fail
time_outdata: "02/01/2006 15:04:05"
split_msg_byte: 4000

Bây giờ chúng ta tạo service chạy prometheus_bot bằng cách tạo tệp /etc/systemd/system/prometheus_bot.service với nội dung như sau:

[Unit]
Description=Prometheus Bot
After=network.target
 
[Service]
User=root
Group=root
Type=simple
ExecStart=/usr/local/prometheus_bot/prometheus_bot -c /usr/local/prometheus_bot/config.yaml
 
[Install]
WantedBy=multi-user.target

Các lệnh chạy dịch vụ:

# Cấu hình để tự bật dịch vụ khi server khởi động
sudo systemctl daemon-reload
sudo systemctl enable prometheus_bot

# Bật dịch vụ
sudo service prometheus_bot start

# Tắt dịch vụ
sudo service prometheus_bot stop

# Xem trạng thái
sudo service prometheus_bot status

B4: Cấu hình lại alertmanager

Bây giờ ta sửa tệp /usr/local/alertmanager/alertmanager.yml, đổi tham số url và cập nhật một số tham số khác:

global:
  resolve_timeout: 5m

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 5m
  repeat_interval: 30m
  receiver: 'web.hook'
receivers:
- name: 'web.hook'
  webhook_configs:
  - url: 'http://localhost:9087/alert/-364942581'
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

B4: Chạy lại các dịch vụ

Bây giờ chúng ta chạy lại các dịch vụ bằng lệnh sau:

sudo service prometheus_bot restart
sudo service alertmanager restart
service prometheus restart

Kiểm tra kết quả trong Prometheus/Alert: http://dex-scanner.com:9090/alerts

Một số thao tác khác

Xóa dữ liệu của 1 Instance

Thông thường mỗi server theo dõi sẽ tương đương với 1 instance. Bây giờ nếu chúng ta tắt 1 server thì dữ liệu server đó vẫn còn trên hệ thống và hệ thống Prometheus sẽ vẫn có cảnh báo và liên tục sau bao nhiêu phút:

[FIRING:1]
grouped by: alertname=Server Status
labels: instance=server-tracking-01:9100, job=node, severity=error
description: Server state is not OK
 VALUE = 0
 LABELS: map[__name__:up instance:server-tracking-01 job:node]
summary: Server Status (instance server-tracking-01)

Để loại bỏ cảnh báo này, chúng ta cần xóa hết dữ liệu “Time Series” của một instance. Việc này chúng ta cần phải thực hiện thông qua Admin API trên Prometheus.

Trước tiên chúng ta cần chạy lại Prometheus bằng lệnh sau đển bật tính năng “Admin API“:

./prometheus --config.file prometheus.yml --web.enable-admin-api

Sau đó chúng ta chạy lệnh sau trên server chạy Prometheus để xóa dữ liệu cho instance “server-tracking-01“:

curl -X POST -g 'http://localhost:9090/api/v1/admin/tsdb/delete_series?match[]={instance="server-tracking-01:9100"}'

Tham khảo:

Bài viết này có hữu ích với bạn?

Kích vào một biểu tượng ngôi sao để đánh giá bài viết!

Xếp hạng trung bình 5 / 5. Số phiếu: 88

Bài viết chưa có đánh giá! Hãy là người đầu tiên đánh giá bài viết này.

Trả lời

Giao diện bởi Anders Norén