GoAccess là một trình phân tích nhật ký nhẹ mã nguồn mở có thể đọc và phân tích các tệp nhật ký ở nhiều định dạng, bao gồm Apache, Nginx, Amazon S3, Elastic Load Balancing, CloudFront, Caddy, v.v. Nó được viết bằng ngôn ngữ C và sử dụng thư viện ncurses cho giao diện bảng điều khiển của nó, có thể được truy cập từ dòng lệnh.
Nó có thể tạo báo cáo ở định dạng HTML, JSON và CSV, có thể chia sẻ với người khác. Bạn thậm chí có thể tạo báo cáo HTML thời gian thực có thể hiển thị qua liên kết công khai.
Trong hướng dẫn này, bạn sẽ học cách cài đặt GoAccess Analyzer trên máy chủ chạy Rocky Linux và cấu hình để đọc nhật ký Nginx và phục vụ báo cáo thời gian thực.
Giải nén các tệp từ kho lưu trữ.
Cấu hình và cài đặt gói.
Xác minh rằng GoAccess đang chạy.
Tải xuống tệp zip quốc gia từ bất kỳ nguồn nào ở trên. Sau khi tải xuống, hãy giải nén chúng và tải tệp .mmdb lên máy chủ vào một thư mục tùy chỉnh như /home/<user>/geoip.
Mở tệp để chỉnh sửa.
Hầu hết các tùy chọn đều được chú thích. Bạn có thể sử dụng các tùy chọn này thông qua dòng lệnh hoặc đặt chúng trong tệp tại đây. Để bật tùy chọn, hãy xóa ký tự # trước tùy chọn đó.
Trước tiên, hãy bật tùy chọn time-format. Chúng ta sẽ phân tích cú pháp các tệp Nginx trong hướng dẫn của mình, vì vậy hãy bật tùy chọn dành cho nhật ký Apache/Nginx.
Tiếp theo, bật tùy chọn date-format của Nginx.
Tiếp theo, bật tùy chọn log-format. Trong hướng dẫn này, chúng tôi sẽ sử dụng định dạng nhật ký kết hợp, đây là định dạng mà Nginx thường sử dụng.
Nếu tệp nhật ký của bạn chứa trường Virtual Host, hãy bật tùy chọn sau.
Giả sử bạn muốn kiểm soát định dạng nhật ký nhiều hơn. Trong trường hợp đó, bạn có thể bật dòng sau thay thế (tùy thuộc vào nhật ký bạn đang truy cập) và thêm hoặc xóa các tham số theo nhu cầu của bạn.
Để bật mô-đun GeoIP, hãy bật tùy chọn sau bằng cách nhập đường dẫn đến cơ sở dữ liệu GeoIP.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc sau khi hoàn tất.
Chúng ta cần sử dụng sudo vì người dùng thông thường không thể mở tệp nhật ký. Ngoài ra, bạn sẽ cần sử dụng đường dẫn đầy đủ cho tệp thực thi với lệnh sudo vì lệnh sudo không nhận dạng được các ứng dụng trong thư mục /usr/local/bin. Tuy nhiên, bạn có thể vượt qua giới hạn này bằng cách tạo một liên kết tượng trưng.
Để thực hiện điều đó, hãy chạy lệnh sau.
Bây giờ, bạn có thể chạy GoAccess trực tiếp.
Các tệp nhật ký Nginx lưu giữ bản ghi của tất cả lưu lượng HTTP đến. Nếu máy chủ của bạn đã chạy trong một thời gian dài, bạn sẽ thấy nhiều nhật ký truy cập với các nhật ký cũ hơn ở định dạng .gz được nén. Các tệp nhật ký cũ hơn được tạo ra do kết quả của việc xoay vòng nhật ký.
Sau khi chạy lệnh, bạn sẽ được chào đón bằng bảng điều khiển sau.
GoAccess cung cấp cho bạn một số phím tắt để điều hướng bảng điều khiển.
Các tệp nhật ký máy chủ thường là một phần của nhóm adm. Bạn có thể xác minh điều đó bằng lệnh sau.
Như bạn thấy, bạn không cần phải là người dùng root để mở tệp nhật ký. Bất kỳ người dùng nào thuộc nhóm adm đều có thể mở tệp.
Cách dễ nhất để chạy GoAccess mà không cần root là thêm người dùng hiện đang đăng nhập vào nhóm adm. Theo cách đó, bạn có thể chạy GoAccess dưới người dùng đó mà không cần sudo.
Chạy lệnh sau để thêm người dùng hiện tại vào nhóm adm.
Bây giờ, hãy đăng xuất và đăng nhập lại để áp dụng thay đổi. Hoặc bạn có thể chạy lệnh sau mà không cần phải đăng xuất để thực hiện thay đổi.
Bạn sẽ có thể chạy GoAccess trực tiếp mà không cần sudo.
Bạn có thể tải tệp xuống PC cục bộ của mình hoặc thư mục trang web của mình để phục vụ công khai.
Bạn thậm chí có thể tạo báo cáo HTML thời gian thực bằng GoAccess. Nhưng trước tiên, bạn cần mở cổng 7890 để GoAccess Websocket chạy. Mở cổng bằng lệnh sau.
Tải lại tường lửa để áp dụng thay đổi.
Bây giờ, hãy chạy lệnh sau để tạo báo cáo HTML thời gian thực.
Điều này sẽ tạo báo cáo thời gian thực tại vị trí đã chỉ định. Lệnh trên sẽ giữ GoAccess chạy ở chế độ nền trước như một WebSocket lắng nghe kết nối.
Có một lưu ý nhỏ khi chạy lệnh trên. Lệnh trên sẽ hoạt động khi GoAccess có quyền người dùng trên thư mục /usr/share/nginx/html. Vì chúng ta đang chạy GoAccess dưới người dùng hiện đang đăng nhập, bạn cần cấp cho người dùng đó quyền trên thư mục /usr/share/html. Nếu vì lý do nào đó bạn không thể đợi, bạn sẽ cần chạy GoAccess bằng sudo.
Nếu bạn muốn chạy GoAccess ở chế độ nền, bạn có thể chạy nó dưới dạng daemon bằng cách sử dụng lệnh sau.
Để dừng GoAccess Daemon, hãy kết thúc tiến trình bằng lệnh sau.
Ở đây, chúng tôi đang sử dụng ID tiến trình mà chúng tôi đã lấy được trong lệnh trước đó. Nếu bạn không nhớ ID tiến trình, bạn cũng có thể sử dụng lệnh sau để tắt tiến trình.
Lưu ý rằng chúng ta đang sử dụng dấu ngoặc kép ngược (`) trong lệnh của mình. Sử dụng dấu ngoặc kép thông thường sẽ khiến lệnh không chạy được.
Nó có thể tạo báo cáo ở định dạng HTML, JSON và CSV, có thể chia sẻ với người khác. Bạn thậm chí có thể tạo báo cáo HTML thời gian thực có thể hiển thị qua liên kết công khai.
Trong hướng dẫn này, bạn sẽ học cách cài đặt GoAccess Analyzer trên máy chủ chạy Rocky Linux và cấu hình để đọc nhật ký Nginx và phục vụ báo cáo thời gian thực.
Đ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.
-
Nginx chạy trên máy chủ để truy cập nhật ký.
-
Đảm bảo mọi thứ đã được cập nhật.
Mã:$ sudo dnf update
Bước 1 - Cài đặt Dependencies cho GoAccess
Phiên bản mới nhất của GoAccess v1.5.2 không có trong kho lưu trữ mặc định. Để cài đặt phiên bản mới nhất của GoAccess, chúng tôi sẽ xây dựng nó từ nguồn. Bước đầu tiên là tải xuống các phần phụ thuộc cần thiết để xây dựng gói GoAccess.
Mã:
$ sudo dnf install ncurses-devel libmaxminddb-devel openssl-devel$ sudo dnf groupinstall 'Development Tools'
Bước 2 - Tải xuống và cài đặt GoAccess
Tải xuống phiên bản mới nhất của kho lưu trữ GoAccess. Bạn có thể tìm phiên bản mới nhất của GoAccess từ trang tải xuống chính thức.
Mã:
$ wget https://tar.goaccess.io/goaccess-1.5.2.tar.gz
Mã:
$ tar -xzvf goaccess-1.5.2.tar.gz
Mã:
$ cd goaccess-1.5.2$ autoreconf -fi$ sudo ./configure --enable-utf8 --enable-geoip=mmdb --with-openssl$ sudo make$ sudo make install
Mã:
$ goaccess --versionGoAccess - 1.5.2.Để biết thêm chi tiết, hãy truy cập: https://goaccess.io/Bản quyền (C) 2009-2020 của Gerardo OrellanaXây dựng đối số cấu hình: --enable-utf8 --enable-geoip=mmdb --with-openssl
Bước 3 - Tải xuống Cơ sở dữ liệu GeoIP
Bạn có thể tải xuống Cơ sở dữ liệu GeoIP từ DB-IP hoặc Maxmind. Nếu bạn định tải xuống từ Maxmind, bạn sẽ cần tạo một tài khoản và tạo khóa cấp phép miễn phí. Có thể tải xuống trực tiếp từ DB-IP.Tải xuống tệp zip quốc gia từ bất kỳ nguồn nào ở trên. Sau khi tải xuống, hãy giải nén chúng và tải tệp .mmdb lên máy chủ vào một thư mục tùy chỉnh như /home/<user>/geoip.
Bước 4 - Cấu hình GoAccess
GoAccess lưu trữ tệp cấu hình của nó tại /usr/local/etc/goaccess/goaccess.conf. Bạn có thể kiểm tra vị trí của tệp trên hệ thống của mình bằng lệnh sau.
Mã:
$ goaccess --dcf/usr/local/etc/goaccess/goaccess.conf
Mã:
$ sudo nano /usr/local/etc/goaccess/goaccess.conf
Trước tiên, hãy bật tùy chọn time-format. Chúng ta sẽ phân tích cú pháp các tệp Nginx trong hướng dẫn của mình, vì vậy hãy bật tùy chọn dành cho nhật ký Apache/Nginx.
Mã:
# Định dạng thời gian sau đây hoạt động với bất kỳ# Định dạng nhật ký Apache/NGINX nào bên dưới.#time-format %H:%M:%S
Mã:
# Định dạng ngày sau đây hoạt động với bất kỳ# Định dạng nhật ký Apache/NGINX nào bên dưới.#date-format %d/%b/%Y
Mã:
log-format COMBINED
Mã:
log-format VCOMBINED
Mã:
log-format %v:%^ %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
Mã:
# Đối với cơ sở dữ liệu GeoIP2 Country:# Tải xuống GeoLite2-Country.mmdb.gz# gunzip GeoLite2-Country.mmdb.gz#geoip-database /home/geoip/dbip-country-lite-2021-10.mmdb
Bước 5 - Chạy GoAccess
Thông thường, nếu bạn muốn chạy GoAccess, bạn sẽ cần sử dụng lệnh sau.
Mã:
$ sudo /usr/local/bin/goaccess /var/log/nginx/access.log
Để thực hiện điều đó, hãy chạy lệnh sau.
Mã:
$ sudo ln -s /usr/local/bin/goaccess /usr/bin/goaccess
Mã:
$ sudo goaccess /var/log/nginx/access.log
Sau khi chạy lệnh, bạn sẽ được chào đón bằng bảng điều khiển sau.
GoAccess cung cấp cho bạn một số phím tắt để điều hướng bảng điều khiển.
- TAB để di chuyển về phía trước qua các mô-đun có sẵn và SHIFT+TAB để di chuyển về phía sau.
- F5 để làm mới bảng điều khiển.
- g để di chuyển lên đầu màn hình bảng điều khiển và G để di chuyển xuống dưới.
- o hoặc ENTER để mở rộng mô-đun đã chọn.
- j và k để cuộn xuống và lên trong mô-đun đang hoạt động.
- s để hiển thị loại các tùy chọn cho mô-đun đang hoạt động.
- / để tìm kiếm trên tất cả các mô-đun và n để di chuyển đến kết quả khớp tiếp theo.
- 0-9 và SHIFT+0 để nhanh chóng kích hoạt mô-đun được đánh số tương ứng.
- ? để xem hộp thoại trợ giúp nhanh.
- q để thoát chương trình.
-
Số lượt truy cập duy nhất mỗi ngày - Bảng điều khiển này tự giải thích. Bảng này liệt kê số lượt truy cập duy nhất, lượt truy cập và băng thông tích lũy cho mỗi ngày. Bảng này cũng bao gồm trình thu thập dữ liệu web và nhện theo mặc định.
-
Tệp được yêu cầu (URL) - Bảng điều khiển này cung cấp số liệu thống kê liên quan đến các tệp không tĩnh được yêu cầu nhiều nhất trên máy chủ của bạn.
-
Yêu cầu tĩnh - Bảng này tương tự như bảng điều khiển ở trên, ngoại trừ việc nó xử lý các tệp tĩnh như hình ảnh, CSS, JavaScript, v.v.
-
URL không tìm thấy (404) - Bảng điều khiển này ghi lại tất cả các yêu cầu đến các tệp và đường dẫn không tìm thấy trên máy chủ của bạn.
-
Tên máy chủ và IP của khách truy cập - Bảng điều khiển này cung cấp thêm thông tin về khách truy cập vào trang web của bạn. Bạn có thể nhấn o để mở rộng bảng điều khiển để có thông tin chi tiết như quốc gia gốc, thành phố và DNS ngược.
-
Hệ điều hành - Bảng điều khiển này hiển thị các Hệ điều hành khác nhau được khách truy cập sử dụng.
-
Trình duyệt - Bảng điều khiển này hiển thị các trình duyệt khác nhau được khách truy cập sử dụng.
-
Phân phối thời gian - Bảng điều khiển này sẽ cung cấp báo cáo hàng giờ về số lượt truy cập, khách truy cập duy nhất và băng thông đã sử dụng.
-
Máy chủ ảo - Bảng điều khiển này hiển thị các máy chủ ảo được phân tích cú pháp từ tệp nhật ký. Nó sẽ chỉ hiển thị nếu bạn sử dụng định dạng nhật ký VCOMBINED trong tệp cấu hình ở trên hoặc nếu %v là một phần của cấu hình định dạng nhật ký.
-
URL giới thiệu - Điều này liệt kê các URL giới thiệu khách truy cập đến máy chủ của bạn. Bảng điều khiển này bị vô hiệu hóa theo mặc định. Để bật nó, hãy bình luận dòng sau trong tệp cấu hình bằng cách thêm # vào phía trước nó.
Mã:#ignore-panel REFERRERS
-
Trang web giới thiệu - Bảng điều khiển này hiển thị địa chỉ IP của máy chủ giới thiệu.
-
Cụm từ khóa - Bảng điều khiển này hiển thị các từ khóa được sử dụng trên Google Tìm kiếm, bộ nhớ đệm Google hoặc Google Dịch dẫn đến trang web của bạn. Bảng điều khiển này cũng bị vô hiệu hóa theo mặc định. Bật tính năng này bằng cách bình luận dòng sau trong tệp cấu hình.
Mã:#ignore-panel KEYPHRASES
-
Mã trạng thái HTTP - Bảng điều khiển này hiển thị số liệu thống kê cho các mã trạng thái HTTP do máy chủ của bạn trả về khi phản hồi yêu cầu.
-
Người dùng từ xa (Xác thực HTTP) - Bảng điều khiển này hiển thị ID người dùng của người truy cập tài liệu trên máy chủ của bạn, được bảo vệ bằng xác thực HTTP. Bảng điều khiển này chỉ hoạt động nếu %e là một phần của cấu hình định dạng nhật ký.
-
Trạng thái bộ đệm - Bảng điều khiển này xác định xem yêu cầu có đang được lưu vào bộ đệm và phục vụ từ yêu cầu đó hay không. Bảng điều khiển này chỉ hoạt động nếu %c là một phần của cấu hình định dạng nhật ký.
-
Vị trí địa lý - Bảng điều khiển này cung cấp danh sách các vị trí địa lý của khách truy cập vào trang web của bạn. Nó sẽ chỉ hiển thị nếu bạn đã tải xuống và thêm vị trí của nó vào tệp cấu hình.
Bước 6 - Chạy GoAccess dưới dạng không có đặc quyền
Theo một biện pháp bảo mật tốt, càng ít mã hoạt động dưới dạng root thì càng tốt. Để chạy GoAccess mà không cần root, nó cần có quyền đọc tệp nhật ký.Các tệp nhật ký máy chủ thường là một phần của nhóm adm. Bạn có thể xác minh điều đó bằng lệnh sau.
Mã:
$ ls -l /var/log/nginxtổng cộng 68-rw-r----- 1 nginx adm 30547 10 tháng 10 12:47 access.log-rw-r----- 1 nginx adm 35063 10 tháng 10 12:47 error.log
Cách dễ nhất để chạy GoAccess mà không cần root là thêm người dùng hiện đang đăng nhập vào nhóm adm. Theo cách đó, bạn có thể chạy GoAccess dưới người dùng đó mà không cần sudo.
Chạy lệnh sau để thêm người dùng hiện tại vào nhóm adm.
Mã:
$ sudo usermod -aG adm $USER
Mã:
$ su $USER
Mã:
$ goaccess /var/log/nginx/access.log
Bước 7 - Tạo báo cáo HTML
GoAccess có thể được sử dụng để tạo báo cáo HTML mà bạn có thể phục vụ trực tuyến. Sử dụng lệnh sau để tạo báo cáo HTML.
Mã:
$ goaccess /var/log/nginx/access.log -o stats.html
Bạn thậm chí có thể tạo báo cáo HTML thời gian thực bằng GoAccess. Nhưng trước tiên, bạn cần mở cổng 7890 để GoAccess Websocket chạy. Mở cổng bằng lệnh sau.
Mã:
$ sudo firewall-cmd --permanent --add-port=7890/tcp
Mã:
$ sudo firewall-cmd --reload
Mã:
$ goaccess /var/log/nginx/access.log -o /usr/share/nginx/html/livereport.html --real-time-html
Có một lưu ý nhỏ khi chạy lệnh trên. Lệnh trên sẽ hoạt động khi GoAccess có quyền người dùng trên thư mục /usr/share/nginx/html. Vì chúng ta đang chạy GoAccess dưới người dùng hiện đang đăng nhập, bạn cần cấp cho người dùng đó quyền trên thư mục /usr/share/html. Nếu vì lý do nào đó bạn không thể đợi, bạn sẽ cần chạy GoAccess bằng sudo.
Mã:
$ sudo goaccess /var/log/nginx/access.log -o /usr/share/nginx/html/livereport.html --real-time-html
Mã:
$ goaccess /var/log/nginx/access.log -o /usr/share/nginx/html/livereport.html --real-time-html --daemonizeGoAccess đã được daemon hóa: 78315
Mã:
$ sudo kill -9 78315
Mã:
$ sudo kill -9 `pidof goaccess`