Netdata là một hệ thống giám sát mã nguồn mở dành cho các hệ điều hành dựa trên Linux. Nó cung cấp hiệu suất và giám sát theo thời gian thực bằng cách sử dụng các bảng điều khiển đẹp và chi tiết. Nó cung cấp hàng trăm công cụ để giám sát máy chủ, CPU, mức sử dụng bộ nhớ, quy trình hệ thống, mức sử dụng đĩa, mạng IPv4 và IPv6, tường lửa hệ thống và các ứng dụng như Nginx, MySQL, MongoDB, Redis, ElasticSearch, PostgreSQL, PHP-FPM, v.v. Nó tích hợp với các công cụ giám sát khác như Prometheus, Graphite, Kafka, Grafana, v.v.
Trong hướng dẫn này, bạn sẽ học cách cài đặt và giám sát nhiều dịch vụ khác nhau bằng Netdata Tool trên máy chủ Rocky Linux 8. Chúng tôi sẽ sử dụng Netdata để theo dõi số liệu của ngăn xếp LEMP và công cụ Docker.
Tường lửa hoạt động với nhiều vùng khác nhau và vùng công cộng là vùng mặc định mà chúng ta sẽ sử dụng. Liệt kê tất cả các dịch vụ và cổng đang hoạt động trên tường lửa.
Nó sẽ hiển thị đầu ra sau.
Cho phép các cổng HTTP và HTTPS.
Kiểm tra lại trạng thái của tường lửa.
Bạn sẽ thấy đầu ra tương tự.
Tải lại tường lửa để kích hoạt các thay đổi.
Lưu tệp và thoát khỏi trình chỉnh sửa.
Cài đặt trên sẽ gửi cảnh báo nếu mức sử dụng CPU nằm trong khoảng từ 60 đến 70% và cảnh báo nghiêm trọng khi mức sử dụng CPU nằm trong khoảng từ 75 đến 85%.
Khởi động lại dịch vụ Netdata.
Chúng ta hãy kiểm tra cài đặt bằng cách cài đặt ứng dụng Stress.
Chạy lệnh sau để tăng đột biến mức sử dụng CPU của máy chủ.
Để lệnh chạy trong 5-10 phút và bạn sẽ nhận được thông báo Mức sử dụng CPU cao. Sau khi nhận được những thông báo này, hãy quay lại terminal và thoát lệnh bằng cách nhấn Ctrl + Z.
Sau khi dừng dịch vụ, bạn sẽ nhận được thông báo CPU đã phục hồi trên Slack.
Để bật giám sát máy chủ Nginx, chúng ta cần sử dụng ngx_http_stub_status_module. Nó thường được cài đặt sẵn với Nginx. Bạn có thể kiểm tra xem mô-đun có hiện diện hay không.
Nếu bạn không nhận được phản hồi, điều đó có nghĩa là cài đặt Nginx của bạn không hỗ trợ tính năng này. Bạn sẽ cần phải biên dịch Nginx trong trường hợp đó.
Mở tệp cấu hình mặc định của Nginx /etc/nginx/conf.d/default.conf để chỉnh sửa. Vị trí của tệp khác vì chúng tôi đã cài đặt Nginx từ kho lưu trữ chính thức của nó. Nếu bạn đang cài đặt Nginx từ kho lưu trữ của hệ điều hành, thì vị trí của tệp sẽ là /etc/nginx/nginx.conf.
Nhập mã sau vào khối máy chủ trước dấu ngoặc nhọn đóng cuối cùng.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Xác minh cấu hình Nginx.
Khởi động lại máy chủ Nginx.
Khởi động lại dịch vụ Netdata.
Bạn sẽ thấy thông tin chi tiết về kết nối Nginx trong bảng điều khiển Netdata của mình.
Chạy lệnh sau để tạo tệp cấu hình để theo dõi Nhật ký truy cập.
Cuộn xuống cuối tệp và tìm phần sau.
Thay đổi đường dẫn để theo dõi các tệp nhật ký tương ứng. Bạn có thể thêm nhiều phần để theo dõi nhiều máy chủ và tệp nhật ký truy cập của chúng. Tệp cấu hình của chúng tôi trông như sau.
Lưu và thoát khỏi trình chỉnh sửa.
Để truy cập các tệp nhật ký, Netdata cần có quyền truy cập vào thư mục. Theo mặc định, nhóm hệ thống adm có quyền truy cập vào các tệp nhật ký. Để cấp quyền truy cập Netdata, chúng ta cần thêm người dùng netdata vào nhóm adm.
Khởi động lại Nginx và dịch vụ Netdata.
Tải lại bảng điều khiển Netdata để xem dữ liệu tệp nhật ký của bạn.
Thêm kho lưu trữ cho MariaDB 10.6.
Dán mã sau vào đó.
Lưu tệp bằng nhấn Ctrl + X và nhập Y khi được nhắc.
Cài đặt MariaDB.
Bật máy chủ MariaDB.
Khởi chạy tập lệnh cài đặt bảo mật MySQL. Tên tệp khác nhau trong trường hợp của MariaDB.
Mở tệp /etc/my.cnf.d/server.cnf để chỉnh sửa.
Tìm phần [mariadb] trong tệp và dán dòng sau như hiển thị bên dưới để kích hoạt plugin Userstats. Thiết lập này chỉ hoạt động trên MariaDB và không hoạt động trên máy chủ MySQL.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Khởi động máy chủ MariaDB.
Khởi động lại dịch vụ Netdata.
Bảng điều khiển MariaDB/MySQL sẽ bắt đầu xuất hiện trong bảng điều khiển Netdata.
Chúng tôi sẽ cài đặt PHP bằng kho lưu trữ Remi. Chúng tôi đã cài đặt kho EPEL ở bước 3. Cài đặt kho Remi.
Kiểm tra các luồng PHP khả dụng.
Phiên bản mặc định là 7.2. Kích hoạt kho lưu trữ PHP 8.0 của Remi.
Tiếp theo, cài đặt PHP và các tiện ích mở rộng mà Firefly III yêu cầu. Gói php chứa một số phần phụ thuộc mà Firefly III yêu cầu, vì vậy hãy đảm bảo bạn bao gồm chúng.
Xác minh cài đặt.
Chúng ta cần đặt người dùng/nhóm Unix của các quy trình PHP thành nginx. Tìm các dòng user=www-data và group=www-data trong tệp và thay đổi chúng thành nginx.
Cuộn xuống tệp để tìm tùy chọn ;pm.status_path = /status. Bỏ chú thích dòng bằng cách xóa dấu chấm phẩy ở phía trước, như được hiển thị bên dưới.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Bật và khởi động dịch vụ PHP.
Nhập mã sau vào bên trong khối máy chủ trước dấu ngoặc nhọn đóng cuối cùng.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Xác minh cấu hình Nginx.
Khởi động lại máy chủ Nginx.
Khởi động lại dịch vụ Netdata.
Tải lại bảng điều khiển Netdata và bạn sẽ thấy số liệu thống kê PHP-FPM.
Bật và khởi động dịch vụ Docker.
Để giám sát công cụ Docker, bạn cần bật tính năng số liệu của Docker.
Tạo và mở tệp /etc/docker/daemon.jsonđể chỉnh sửa.
Dán mã sau vào đó.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Khởi động lại dịch vụ Netdata và Docker.
Tải lại bảng điều khiển Netdata và bạn có thể thấy số liệu thống kê Docker.
Bạn sẽ thấy một mục nhập khác có tên Prometheus Metrics trên bảng điều khiển của mình vì tùy chọn số liệu thống kê được tạo cho bảng điều khiển Prometheus.
Bước tiếp theo là theo dõi vùng chứa Docker. Netdata sử dụng nhóm điều khiển, được gọi là cgroups để theo dõi vùng chứa Docker. Nhóm điều khiển là một tính năng của Linux giới hạn và theo dõi mức sử dụng tài nguyên của một tập hợp các quy trình, trong trường hợp này là vùng chứa. Nếu bạn có các container Docker đang chạy khi bạn cài đặt Netdata, chúng sẽ tự động được theo dõi. Tuy nhiên, nếu bạn chạy một container sau khi cài đặt Netdata, bạn cần khởi động lại nó.
Chạy một container thử nghiệm.
Kiểm tra trạng thái của container.
Tên của container là tender_murdock như hiển thị. Vì container đã được khởi động sau khi cài đặt Netdata, hãy khởi động lại dịch vụ.
Tải Dashboard và bạn sẽ có thể thấy số liệu thống kê của Container.
Trong hướng dẫn này, bạn sẽ học cách cài đặt và giám sát nhiều dịch vụ khác nhau bằng Netdata Tool trên máy chủ Rocky Linux 8. Chúng tôi sẽ sử dụng Netdata để theo dõi số liệu của ngăn xếp LEMP và công cụ Docker.
Điều kiện tiên quyết
- Máy chủ chạy Rocky Linux 8.
- Người dùng không phải root có quyền sudo.
- Tên miền đủ điều kiện (FQDN) như netdata.example.com trỏ đến máy chủ của bạn.
- Tài khoản Slack và không gian làm việc để nhận thông báo.
- Tài khoản SMTP có dịch vụ email như Amazon SES hoặc Mailgun.
- Vô hiệu hóa SELinux.
Bước 1 - Cấu hình Tường lửa
Bước đầu tiên là cấu hình tường lửa. Rocky Linux sử dụng Tường lửa Firewalld. Kiểm tra trạng thái của tường lửa.
Mã:
$ sudo firewall-cmd --staterunning
Mã:
$ sudo firewall-cmd --permanent --list-services
Mã:
cockpit dhcpv6-client ssh
Mã:
$ sudo firewall-cmd --permanent --add-service=http$ sudo firewall-cmd --permanent --add-service=https
Mã:
$ sudo firewall-cmd --permanent --list-services
Mã:
cockpit dhcpv6-client http https ssh
Mã:
$ sudo firewall-cmd --reload
Bước 2 - Cài đặt NetData
Netdata đi kèm với một tập lệnh cài đặt có thể hoạt động trên bất kỳ bản phân phối Linux nào. Chạy lệnh sau để tải xuống và chạy tập lệnh cài đặt.
Mã:
$ bash (($status >= $WARNING) ? (60) : (70))crit: $this > (($status == $CRITICAL) ? (75) : (85))
Cài đặt trên sẽ gửi cảnh báo nếu mức sử dụng CPU nằm trong khoảng từ 60 đến 70% và cảnh báo nghiêm trọng khi mức sử dụng CPU nằm trong khoảng từ 75 đến 85%.
Khởi động lại dịch vụ Netdata.
Mã:
$ sudo systemctl restart netdata
Mã:
$ sudo dnf install stress
Mã:
$ stress --cpu 2
Sau khi dừng dịch vụ, bạn sẽ nhận được thông báo CPU đã phục hồi trên Slack.
Bước 10 - Cấu hình Nginx Monitoring
Một trong những ứng dụng được giám sát phổ biến nhất bằng Netdata là các gói máy chủ và SQL. Hãy giám sát máy chủ Nginx bằng Netdata.Để bật giám sát máy chủ Nginx, chúng ta cần sử dụng ngx_http_stub_status_module. Nó thường được cài đặt sẵn với Nginx. Bạn có thể kiểm tra xem mô-đun có hiện diện hay không.
Mã:
$ nginx -V 2>&1 | grep -o with-http_stub_status_modulewith-http_stub_status_module
Mở tệp cấu hình mặc định của Nginx /etc/nginx/conf.d/default.conf để chỉnh sửa. Vị trí của tệp khác vì chúng tôi đã cài đặt Nginx từ kho lưu trữ chính thức của nó. Nếu bạn đang cài đặt Nginx từ kho lưu trữ của hệ điều hành, thì vị trí của tệp sẽ là /etc/nginx/nginx.conf.
Mã:
$ sudo nano /etc/nginx/conf.d/default.conf
Mã:
# Bật mô-đun stub_statuslocation /stub_status { stub_status; allow 127.0.0.1; #only allow requests from localhost deny all; #từ chối tất cả các máy chủ khác}
Xác minh cấu hình Nginx.
Mã:
$ sudo nginx -tnginx: cú pháp tệp cấu hình /etc/nginx/nginx.conf là oknginx: thử nghiệm tệp cấu hình /etc/nginx/nginx.conf thành công
Mã:
$ sudo systemctl restart nginx
Mã:
$ sudo systemctl restart netdata
Theo dõi Nhật ký Nginx
Netdata cũng có thể theo dõi Nginx nhật ký truy cập. Để thực hiện điều đó, hãy chuyển sang thư mục Netdata.
Mã:
$ cd /etc/netdata
Mã:
$ sudo ./edit-config python.d/web_log.conf
Mã:
# ----------------------------------------# nginx log on various distros# debian, archnginx_log: name: 'nginx' path: '/var/log/nginx/access.log'# gentoonginx_log2: name: 'nginx_site' path: '/var/log/nginx/localhost.access_log'
Mã:
# -------------------------------------------# nginx log on various distros# debian, archnginx_log: name: 'nginx' path: '/var/log/nginx/access.log'nginx_log2: name: 'nginx_site1' path: '/var/log/nginx/site1.access_log'nginx_log3: name: 'nginx_site2' path: '/var/log/nginx/site2.access_log'nginx_log4: name: 'nginx_site3' path: '/var/log/nginx/site3.access_log'
Để truy cập các tệp nhật ký, Netdata cần có quyền truy cập vào thư mục. Theo mặc định, nhóm hệ thống adm có quyền truy cập vào các tệp nhật ký. Để cấp quyền truy cập Netdata, chúng ta cần thêm người dùng netdata vào nhóm adm.
Mã:
$ sudo usermod -aG adm netdata
Mã:
$ sudo systemctl restart nginx netdata
Bước 11 - Cấu hình Giám sát MySQL/MariaDB
Chúng ta sẽ cài đặt MariaDB cho hướng dẫn này. Các bước vẫn giữ nguyên nếu bạn đang sử dụng máy chủ MySQL.Thêm kho lưu trữ cho MariaDB 10.6.
Mã:
$ sudo nano /etc/yum.repos.d/MariaDB.repo
Mã:
# MariaDB 10.6 CentOS repository list - created 2022-04-12 11:12 UTC# https://mariadb.org/download/[mariadb]name = MariaDBbaseurl = https://download.nus.edu.sg/mirror/mariadb/yum/10.6/centos8-amd64module_hotfixes=1gpgkey=https://download.nus.edu.sg/mirror/mariadb/yum/RPM-GPG-KEY-MariaDBgpgcheck=1
Cài đặt MariaDB.
Mã:
$ sudo dnf install MariaDB-server
Mã:
$ sudo systemctl enable mariadb
Mã:
$ sudo mariadb-secure-installation....Nhập mật khẩu hiện tại cho root (nhập nếu không có): (Nhấn Enter)....Chuyển sang xác thực unix_socket [Y/n] Y (Nhập Y và Nhấn Enter)....Đổi mật khẩu root? [Y/n] Y (Nhập Y và Nhấn Enter)Mật khẩu mới:Nhập lại mật khẩu mới:Đã cập nhật mật khẩu thành công!....Xóa người dùng ẩn danh? [Y/n] Y (Nhập Y và nhấn Enter)...Không cho phép đăng nhập root từ xa? [Y/n] Y (Nhập Y và nhấn Enter)....Xóa cơ sở dữ liệu thử nghiệm và quyền truy cập vào cơ sở dữ liệu đó? [Y/n] Y (Nhập Y và nhấn Enter)....Tải lại bảng đặc quyền ngay bây giờ? [Y/n] Y (Nhập Y và nhấn Enter)....Xong! Nếu bạn đã hoàn tất tất cả các bước trên, thì cài đặt MariaDBcủa bạn hiện đã an toàn.Cảm ơn bạn đã sử dụng MariaDB!
Mã:
$ sudo nano /etc/my.cnf.d/server.cnf
Mã:
[mariadb]userstat = 1
Khởi động máy chủ MariaDB.
Mã:
$ sudo systemctl start mariadb
Mã:
$ sudo systemctl restart netdata
Bước 12 - Cấu hình Giám sát PHP-FPM
Bạn có thể giám sát một hoặc nhiều phiên bản PHP-FPM bằng Netdata. Đối với hướng dẫn của chúng tôi, chúng tôi sẽ cài đặt PHP 8.0 và sau đó bật tính năng giám sát của nó.Chúng tôi sẽ cài đặt PHP bằng kho lưu trữ Remi. Chúng tôi đã cài đặt kho EPEL ở bước 3. Cài đặt kho Remi.
Mã:
$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
Mã:
$ dnf module list php -yKiểm tra ngày hết hạn siêu dữ liệu gần nhất: 0:00:12 trước vào Thứ sáu, ngày 03 tháng 12 năm 2021 lúc 09:39:32 sáng UTC.Rocky Linux 8 - AppStreamTên Stream Profiles Tóm tắtphp 7.2 [d] common [d], devel, minimal PHP scripting languagephp 7.3 common [d], devel, minimal PHP scripting languagephp 7.4 common [d], devel, minimal PHP scripting languageRemi's Modular repository for Enterprise Linux 8 - x86_64Tên Stream Profiles Tóm tắtphp remi-7.2 common [d], devel, minimal PHP scripting languagephp remi-7.3 common [d], devel, minimal PHP scripting languagephp remi-7.4 common [d], devel, minimal PHP scripting languagephp remi-8.0 common [d], devel, minimal PHP scripting languagephp remi-8.1 common [d], devel, minimal PHP scripting languageGợi ý: [d]efault, [e]nabled, [x]disabled, [i]ninstalled
Mã:
$ sudo dnf module reset php -y$ sudo dnf module enable php:remi-8.0
Mã:
$ sudo dnf install php php-fpm php-mbstring php-xml php-curl php-mysqlnd php-zip php-intl php-bcmath php-gd php-ldap php-cli
Mã:
$ php --versionPHP 8.0.16 (cli) (xây dựng: 15 tháng 2 năm 2022 21:34:32) (NTS gcc x86_64)Bản quyền (c) The PHP GroupZend Engine v4.0.16, Bản quyền (c) Zend Technologies với Zend OPcache v8.0.16, Bản quyền (c), của Zend Technologies
Cấu hình PHP
Mở tệp /etc/php-fpm.d/www.conf.
Mã:
$ sudo nano /etc/php-fpm.d/www.conf
Mã:
...; Người dùng/nhóm quy trình Unix; Lưu ý: Người dùng là bắt buộc. Nếu nhóm không được đặt, nhóm người dùng mặc định; sẽ được sử dụng.; RPM: người dùng apache được chọn để cung cấp quyền truy cập vào cùng thư mục với httpduser = nginx; RPM: Giữ một nhóm được phép ghi vào thư mục nhật ký.group = nginx...
Mã:
; Lưu ý: Có một trang web mẫu giám sát trạng thái FPM theo thời gian thực; Trang web này có sẵn trong: @EXPANDED_DATADIR@/fpm/status.html;; Lưu ý: Giá trị phải bắt đầu bằng dấu gạch chéo (/) ở đầu. Giá trị có thể là; bất kỳ giá trị nào, nhưng có thể không nên sử dụng phần mở rộng .php hoặc có thể; xung đột với tệp PHP thực.; Giá trị mặc định: không được thiết lậppm.status_path = /status
Bật và khởi động dịch vụ PHP.
Mã:
$ sudo systemctl enable php-fpm --now
Thêm cài đặt PHP vào Nginx
Mở tệp cấu hình mặc định của Nginx /etc/nginx/conf.d/default.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/conf.d/default.conf
Mã:
# định nghĩa giám sát PHP-FPMvị trí ~ ^/(status|ping)$ { cho phép 127.0.0.1; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_index index.php; bao gồm fastcgi_params; fastcgi_pass unix:/run/php-fpm/.sock; # Tùy thuộc vào Phiên bản PHP và Bản phân phối HĐH}
Xác minh cấu hình Nginx.
Mã:
$ sudo nginx -tnginx: cú pháp tệp cấu hình /etc/nginx/nginx.conf là oknginx: thử nghiệm tệp cấu hình /etc/nginx/nginx.conf thành công
Mã:
$ sudo systemctl restart nginx
Mã:
$ sudo systemctl restart netdata
Bước 13 - Cấu hình Docker Engine và Giám sát Container Nó cũng có thể giám sát các ứng dụng đang chạy bên trong các container này, nhưng chúng tôi sẽ không đề cập đến nó trong hướng dẫn này.
Trước tiên, hãy cài đặt Docker.
Mã:
$ sudo dnf install yum-utils$ sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo$ sudo dnf install docker-ce docker-ce-cli containerd.io
Mã:
$ sudo systemctl enable docker --now
Tạo và mở tệp /etc/docker/daemon.jsonđể chỉnh sửa.
Mã:
$ sudo nano /etc/docker/daemon.json
Mã:
{ "metrics-addr" : "127.0.0.1:9323", "experimental" : true}
Khởi động lại dịch vụ Netdata và Docker.
Mã:
$ sudo systemctl restart docker netdata
Bạn sẽ thấy một mục nhập khác có tên Prometheus Metrics trên bảng điều khiển của mình vì tùy chọn số liệu thống kê được tạo cho bảng điều khiển Prometheus.
Bước tiếp theo là theo dõi vùng chứa Docker. Netdata sử dụng nhóm điều khiển, được gọi là cgroups để theo dõi vùng chứa Docker. Nhóm điều khiển là một tính năng của Linux giới hạn và theo dõi mức sử dụng tài nguyên của một tập hợp các quy trình, trong trường hợp này là vùng chứa. Nếu bạn có các container Docker đang chạy khi bạn cài đặt Netdata, chúng sẽ tự động được theo dõi. Tuy nhiên, nếu bạn chạy một container sau khi cài đặt Netdata, bạn cần khởi động lại nó.
Chạy một container thử nghiệm.
Mã:
$ docker container run -d nginx
Mã:
$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES938b2cf30927 nginx "/docker-entrypoint.…" 3 giây trước Lên 2 giây 80/tcp pensive_lovelace
Mã:
$ sudo systemctl restart netdata