Monitor Giám sát hệ thống LINUX/AIX thông qua giải pháp Njmon - InfluxDB - Grafana [Phần 1]

l3g0n

Super Moderator
Phần mềm giám sát hệ thống là một công cụ quan trọng giúp cho việc quản lý và bảo trì hệ thống được hiệu quả hơn. Nó giúp cho người quản trị có thể giám sát các thông số của hệ thống như tài nguyên CPU, bộ nhớ, đĩa và mạng để có thể phát hiện và khắc phục các vấn đề kịp thời. Ngoài ra, phần mềm giám sát hệ thống còn cung cấp các tính năng như giám sát thời gian thực, cảnh báo và ghi lại lịch sử giám sát. Điều này giúp cho người quản trị có thể đưa ra các quyết định đúng đắn và kịp thời để đảm bảo hoạt động của hệ thống được ổn định và hiệu quả.

Trong bài này mình sẽ giới thiệu giải pháp giám sát hệ thống máy chủ AIX thông qua giải pháp Njmon - InfluxDB - Grafana
1681659667384.png


Với bộ giải pháp này ngoài có thể giám sát hệ thống AIX nói chung thì chúng ta cũng có thể giám sát các máy VIOS power của IBM hay giám sát thu thập thông tin của các máy chủ Linux (Ubuntu, SLES, RHEL,...)

Để xây dựng giải pháp này chúng ta cần:
  • 1 tool Njmon để thu thập thông tin của server ( các thông tin này sẽ được collect thành dạng file json)
  • 1 Database InfluxDB (Database chứa dữ liệu được collect từ tool njmon được lấy từ các server)
  • 1 Grafana (Sử dụng dữ liệu từ Database InfluxDB -> Hiển thị dữ liệu trên các dashboard dễ dàng phân tích và theo dõi)
1. Giới thiệu
1.1 Tool Njmon:

NJMon là một phần mềm giám sát hệ thống mã nguồn mở được viết bằng Perl. Nó được thiết kế để giám sát các thông số hệ thống như tài nguyên CPU, bộ nhớ, đĩa và mạng. NJMon cung cấp các tính năng như giám sát thời gian thực, cảnh báo và ghi lại lịch sử giám sát.
Njmon giống như nmon nhưng thu thập nhiều dữ liệu cấu hình và hiệu suất hơn cũng như đầu ra ở định dạng JSON sẵn sàng để tải ngay lên cơ sở dữ liệu thống kê hiệu suất để vẽ biểu đồ gần thời gian thực bằng các công cụ vẽ biểu đồ trực tuyến. njmon cũng có thể được chuyển sang chế độ nimon, chế độ này tạo định dạng Giao thức dòng InfluxDB để gửi trực tiếp tới InfluxDB. Có một phiên bản njmon cho AIX và một njmon khác cho Linux.
  • njmon for AIX
    • Sử dụng AIX libperfstat để trích xuất số liệu thống kê hiệu suất.
    • 1400 stats cho AIX, thêm 55 cho Virtual I/O Server (VIOS) và thêm 35 nếu máy chủ sử dụng VIOS Shared Storage Pool.
  • njmon for Linux
    • Các số liệu thống kê hiệu suất chủ yếu đến từ /proc file system and system calls.
    • 800 stats - số liệu thống kê có thể có trong tương lai bao gồm số liệu thống kê FC SAN.
    • Spectrum Scale (GPFS) & Process stats được thêm gần đây
1681660611474.png


Những Infrastructure có thể chọn lựa cho Njmon
1681660689470.png

Có thể kết hợp giải pháp Njmon cho database influxDB, splunk, elastic hay Prometheus, tất cả những database trên đều tích hợp tốt với Grafana
Trong bài này mình sẽ hướng dẫn với giải pháp Njmon -> InfluxDB -> Grafana

1.2. Database InfluxDB
InfluxDB là bộ công cụ chuỗi thời gian thiết yếu - một cơ sở dữ liệu chuỗi thời gian mã nguồn mở được thiết kế để xử lý tải lượng ghi và truy vấn cao. Nó có thể lưu trữ các số liệu, sự kiện, nhật ký, dấu vết từ hệ thống, cảm biến, hàng đợi, cơ sở dữ liệu và mạng; và có thể nhập hàng triệu điểm dữ liệu mỗi giây.

Có hơn 260.000 phiên bản InfluxDB đang được sử dụng trên khắp thế giới, bao gồm một số nhiều hệ thống giám sát (giám sát DevOps, IoT và giám sát cảm biến, phân tích thời gian thực, giám sát mạng và học máy) trong một số ngành. Vì nó là một dự án mã nguồn mở, InfluxDB là nơi bắt đầu nếu bạn cần một cơ sở dữ liệu chuỗi thời gian.

Không giống như các loại cơ sở dữ liệu khác được điều chỉnh cho chuỗi thời gian, InfluxDB được xây dựng nhằm mục đích xử lý dữ liệu được đóng dấu thời gian, giúp dễ dàng tích lũy, phân tích và hành động dựa trên các số liệu mà hệ thống của bạn được thiết kế.

1.3. Grafana
Grafana là một nền tảng quan sát mã nguồn mở để trực quan hóa các số liệu, nhật ký và dấu vết được thu thập từ các ứng dụng của bạn. Đó là một giải pháp gốc trên đám mây để nhanh chóng tập hợp các bảng điều khiển dữ liệu cho phép bạn kiểm tra và phân tích ngăn xếp của mình.

Grafana kết nối với nhiều nguồn dữ liệu khác nhau như Prometheus, InfluxDB, ElasticSearch và các công cụ cơ sở dữ liệu quan hệ truyền thống. Trang tổng quan phức tạp được tạo bằng cách sử dụng các nguồn này để chọn các trường có liên quan từ dữ liệu của bạn. Bảng điều khiển có thể kết hợp nhiều thành phần trực quan khác nhau như biểu đồ, bản đồ nhiệt và biểu đồ.

2. Triển khai
2.1 Yêu cầu máy chủ

CPU4vCPU
Memory8 GB
Disk50 GB SDA, 100 GB SDB
OSUbuntu 20.04
ApplianceDocker
InfluxDBInfluxDB version 1.8 (Container) listen port 8086
GrafanaGrafana CE (Container) listen port 3000

Cấu hình LVM cho disk sdb 100GB và mount vào thư mục /data
1681662913955.png


Cấu hình LVM disk sdb:
  1. sudo pvcreate /dev/sdb
  2. sudo vgcreate datavg /dev/sdb
  3. sudo lvcreate -l 100%FREE -n datalv datavg
    1681665607724.png
  4. mkfs.xfs /dev/datavg/datalv
  5. sudo mount /dev/datavg/datalv /data
  6. df -h
    1681667516157.png
2.2 Cài đặt InfluxDB và Grafana thông qua docker-compose
Tạo file docker-compose.yml trong thư mục /data/influxdb-grafana
Code:
version: '3.6'
services:
  influxdb:
    image: influxdb:1.8-alpine
    container_name: influxdb
    restart: always
    environment:
      - INFLUXDB_DB=influx
      - INFLUXDB_ADMIN_USER=admin
      - INFLUXDB_ADMIN_PASSWORD=admin
    ports:
      - '8086:8086'
    volumes:
      - /data/influxdb-grafana/influxdb:/var/lib/influxdb
  grafana:
    image: grafana/grafana
    container_name: grafana-server
    restart: always
    depends_on:
      - influxdb
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=admin
      - GF_INSTALL_PLUGINS=
    links:
      - influxdb
    ports:
      - '3000:3000'
    volumes:
      - /data/influxdb-grafana/grafana:/var/lib/grafana
với file docker-compose.yml, thông tin tổng quát gồm:
InfluxDB:​
  • Version 1.8-alpine
  • port: 10.120.201.222:8086
  • database: influx
  • user: admin
  • password: admin
Grafana:​
  • port: 10.120.201.222:3000
  • user: admin
  • password: admin
Chạy lệnh để khởi tạo 2 service influxdb và grafana: docker-compose up -d
1681669549904.png


Sau khi dịch vụ grafana và influxdb lên. truy cập vào grafana tiến hành cấu hình ban đầu cho hệ thống
1681669787080.png


Chọn Data source để map với database InfluxDB
1681669853932.png


Chọn InfluxDB
1681669882924.png


Điền IP của máy influxDB server
1681669948622.png


Nhập database, username, pass mình đã cấu hình trong file docker-compose
1681670031226.png


Sau đó nhấn Save & Test để hoàn tất bước cấu hình 2 dịch vụ InfluxDB và Grafana bằng file docker-compose
1681670102129.png


Như vậy phần này mình đã giới thiệu sơ lược hệ thống giám sát các máy chủ AIX cũng như các máy chủ linux thông qua giải pháp NJMON - InfluxDB - Grafana.
Ở phần này mình cũng đã xây dựng xong 2 dịch vụ quan trọng của hệ thống là InfluxDB và Grafana thông qua file Docker-compose. (chỉ bẳng 1 lệnh đơn giản để chạy file này thì chúng ta đã dựng xong 1 server gồm 2 service Influx DB và Grafana rồi).

Phần tiếp theo mình sẽ hướng dẫn cách sử dụng tool njmon để collect thông tin của máy chủ linux cũng tương tự như máy chủ AIX, và cách push dữ liệu đó vào database influxdb.
 
Last edited:

l3g0n

Super Moderator
Phần 2 Collect thông tin của máy chủ LINUX/AIX thông qua NJMON (bài lab này mình sử dụng máy linux ubuntu để collect thông tin)
1. Tool NJmon

Với gói tool này cần 3 file
  • njmon2influx.py File này dùng để push dữ liệu trong những file json của njmon collect vào database influxdb
  • njmond.conf Lưu cấu hình connect đến database influxdb server
  • njmon tool collect thông tin server (Aix, linux)
download 3 file này vào thư mục /data/njmon trong máy chủ server Njmon (có thể tải 3 file này tại đây https://nmon.sourceforge.net/pmwiki.php?n=Site.Njmon)
1681707981218.png


Đối với từng loại OS khác nhau mà chọn tool njmon để collect khác nhau. Như bên dưới thì từng loại tương ứng với mỗi OS khác nhau:
1681707860690.png


Ở đây mình sử dụng Ubuntu x86_64 nên mình chọn gói njmon_Ubuntu20_x86_64_v78

Copy file njmon_Ubuntu20_x86_64_v78 Vào máy chủ Ubuntu muốn thu thập thông tin giám sát.
1681708089188.png


Set quyền thực thi cho file njmon_Ubuntu20_x86_64_v78: chmod +x njmon_Ubuntu20_x86_64_v78
copy file njmon_Ubuntu20_x86_64_v78 vào thư mục /usr/local/bin
để khi sử dụng chỉ cần gõ njmon thay vì phải trỏ đến file
cp /tmp/njmon_Ubuntu20_x86_64_v78 /usr/local/bin/njmon

sử dụng lệnh njmon -s 5 -c 5 -f -m /tmp để test tool trên máy chủ (với lệnh này sau 5 giây sẽ collect 1 lần, số lần collect là 5, file collect sẽ được lưu vào thư mục /tmp

Check trong ps -ef thấy process njmon đang chạy
1681708669440.png


Sau khi chạy xong sẽ có 2 file. 1 file err lưu lại thông tin lỗi nếu có, file còn lại là file json chứa thông tin collect đc

1681710964528.png


2. Push data json vào Database InfluxDB
Sau khi đã thu thập xong thông tin giám sát của server, bước tiếp theo là push dữ liệu đó vào cơ sở dữ liệu influxDB để grafana sử dụng
Như mình đã nói ở phần trước. bộ tool njmon sẽ có 3 file. 1 file để collect thông tin, 2 file còn lại để push json vào database influxDB

Edit file njmond.conf
1681711673602.png


Tiếp theo dùng lệnh push dữ liệu json vào database influxdb: cat /tmp/yh-grafana_20230417_1217.json | ./njmon2influx.py njmond.conf
1681711932869.png


3. Tạo Dashboard trên Grafana
Có thể vào trang https://grafana.com/grafana/dashboards/ để chọn những dashboard phù hợp

Nhấn vào Dashboard -> Import để tạo dashboard
1681712212034.png


Chọn file dashboard json đã tải
1681712299151.png


Như vậy dữ liệu sẽ được hiển thị thông qua dashboard của Grafana
1681712400675.png


1681712893661.png


Đối với một số máy chủ ở xa khác nhau chúng ta có thể sử dụng 1 path NFS để share với nhau, sử dụng công cụ crontab chạy các lệnh thu thập log cũng như đẩy dữ liệu vào database influxdb một cách tự động theo lịch trình.
Đối với AIX hay VIOS cũng tương tự như trên linux, đều lưu ý là chúng ta nên chọn tool njmon tương ứng với hệ điều hành cho phù hợp với mỗi loại hệ điều hành khác nhau. Chỗ dashboard cũng phân ra mỗi loại OS khác nhau thì có mỗi loại dashboard khác nhau.

Như vậy, ở lab này mình đã giới thiệu cũng như hướng dẫn xây dựng một giải pháp giám sát opensource giành cho các loại máy chủ AIX, VIOS, Linux
Nếu có thắc mắc hỏi đáp gì mong mọi người cứ comment bên dưới mình sẽ giải đáp.

--- HẾT ---​
 

Attachments

Top