Thứ sáu, 10/07/2020 | 00:00 GMT+7

Cách tập trung log với Journald trên Ubuntu 20.04

Nhật ký hệ thống là một thành phần cực kỳ quan trọng trong việc quản lý hệ thống Linux. Chúng cung cấp một cái nhìn sâu sắc vô giá về cách các hệ thống đang hoạt động và cũng như cách chúng đang được sử dụng vì ngoài lỗi, chúng còn ghi lại thông tin hoạt động như các sự kiện bảo mật. Cấu hình tiêu chuẩn cho hệ thống Linux là lưu trữ local log của chúng trên cùng một hệ thống nơi chúng xuất hiện. Điều này hoạt động đối với các hệ thống độc lập nhưng nhanh chóng trở thành vấn đề khi số lượng hệ thống tăng lên. Giải pháp để quản lý tất cả các log này là tạo một server ghi log tập trung, nơi mỗi server Linux gửi log của nó, trong thời gian thực, đến một server quản lý log chuyên dụng.

Giải pháp ghi log tập trung cung cấp một số lợi ích so với việc lưu trữ log trên mỗi server :

  • Giảm dung lượng ổ đĩa cần thiết trên mỗi server để lưu trữ các file log .
  • Nhật ký có thể được lưu giữ lâu hơn vì server log chuyên dụng có thể được cấu hình với nhiều dung lượng lưu trữ hơn.
  • Phân tích log nâng cao có thể được thực hiện yêu cầu log từ nhiều hệ thống và cũng có nhiều tài nguyên máy tính hơn có thể có trên server .
  • Administrator hệ thống có thể truy cập log cho tất cả hệ thống của họ mà họ có thể không đăng nhập được trực tiếp vì lý do bảo mật.

Trong hướng dẫn này, bạn sẽ cấu hình một thành phần của bộ công cụ systemd để chuyển tiếp các thông báo log từ hệ thống khách hàng đến một server thu thập log tập trung. Bạn sẽ cấu hình server và client sử dụng certificate TLS để mã hóa thông báo log khi chúng được truyền qua các mạng không an toàn như internet và cũng để xác thực lẫn nhau.

Yêu cầu

Trước khi bắt đầu hướng dẫn này, bạn cần những thứ sau:

  • Hai server Ubuntu 20.04.
  • User không phải root có quyền sudo trên cả hai server . Làm theo hướng dẫn Cài đặt Server Ban đầu với Ubuntu 20.04 để biết hướng dẫn về cách thực hiện việc này. Bạn cũng nên cấu hình firewall UFW trên cả hai server như được giải thích trong hướng dẫn.
  • Hai tên server trỏ đến server của bạn. Một tên server cho hệ thống máy khách tạo log và một tên khác cho server thu thập log . Tìm hiểu cách trỏ tên server tới DigitalOcean Server bằng cách tham khảo tài liệu Tên domain và DNS .

Hướng dẫn này sẽ sử dụng hai tên server mẫu sau:

  • client.your_domain : Hệ thống khách hàng tạo log .
  • server.your_domain : Server thu thập log .

Đăng nhập vào cả client và server trong các terminal riêng biệt thông qua SSH với quyền là user sudo không phải root để bắt đầu hướng dẫn này.

Lưu ý : Xuyên suốt các khối lệnh hướng dẫn được gắn nhãn tên server ( máy khách hoặc server ) mà lệnh sẽ được chạy.

Bước 1 - Cài đặt systemd-journal-remote

Trong bước này, bạn sẽ cài đặt gói systemd-journal-remote trên máy khách server . Gói này chứa các thành phần mà máy khách server sử dụng để chuyển tiếp thông báo log .

Trước tiên, trên cả máy khách server , hãy chạy bản cập nhật hệ thống đảm bảo rằng database gói và hệ thống hiện tại:

Máy khách và Server
  • sudo apt update
  • sudo apt upgrade

Tiếp theo, cài đặt gói systemd-journal-remote :

Máy khách và Server
  • sudo apt install systemd-journal-remote

Trên server , bật và khởi động hai thành phần systemd mà nó cần để nhận thông báo log bằng lệnh sau:

Người phục vụ
  • sudo systemctl enable --now systemd-journal-remote.socket
  • sudo systemctl enable systemd-journal-remote.service

Tùy chọn --now trong lệnh đầu tiên khởi động các dịch vụ ngay lập tức. Bạn đã không sử dụng nó trong lệnh thứ hai vì dịch vụ này sẽ không bắt đầu cho đến khi nó có certificate TLS, mà bạn sẽ tạo trong bước tiếp theo.

Trên máy khách , kích hoạt thành phần mà systemd sử dụng để gửi thông báo log đến server :

Khách hàng
  • sudo systemctl enable systemd-journal-upload.service

Tiếp theo, trên server , mở cổng 1953280 trong firewall UFW. Điều này sẽ cho phép server nhận thông báo log từ client . Cổng 80 là cổng mà certbot sẽ sử dụng để tạo certificate TLS. Các lệnh sau sẽ mở các cổng này:

Người phục vụ
  • sudo ufw allow in 19532/tcp
  • sudo ufw allow in 80/tcp

Trên client , bạn chỉ cần mở cổng 80 bằng lệnh này:

Khách hàng
  • sudo ufw allow in 80/tcp

Đến đây bạn đã cài đặt các thành phần cần thiết và hoàn thành cấu hình hệ thống cơ sở trên client và server . Trước khi bạn có thể cấu hình các thành phần này để bắt đầu chuyển tiếp thông báo log , bạn sẽ đăng ký certificate Let's Encrypt TLS cho máy khách server bằng tiện ích certbot .

Bước 2 - Cài đặt Certbot và Đăng ký Chứng chỉ

Let's Encrypt là Tổ chức phát hành certificate cung cấp certificate TLS miễn phí. Các certificate này cho phép các máy tính mã hóa dữ liệu gửi giữa chúng và cũng xác minh danh tính của nhau. Các certificate này là những gì cho phép bạn bảo mật duyệt Internet của bạn bằng HTTPS. Các certificate tương tự được dùng bởi bất kỳ ứng dụng nào khác muốn cùng mức độ bảo mật. Quá trình đăng ký certificate giống nhau cho dù bạn sử dụng chúng để làm gì.

Trong bước này, bạn sẽ cài đặt tiện ích certbot và sử dụng nó để đăng ký certificate . Nó cũng sẽ tự động quan tâm đến việc gia hạn các certificate khi chúng hết hạn. Quá trình đăng ký ở đây giống nhau trên máy khách server . Bạn chỉ cần thay đổi tên server để trùng với server lưu trữ mà bạn đang chạy lệnh đăng ký.

Đầu tiên, kích hoạt repository universe của Ubuntu vì tiện ích certbot nằm trong repository lưu trữ universe . Nếu bạn đã bật repository universe , việc chạy các lệnh này sẽ không ảnh hưởng gì đến hệ thống của bạn và có thể an toàn khi chạy:

Máy khách và Server
  • sudo apt install software-properties-common
  • sudo add-apt-repository universe
  • sudo apt update

Tiếp theo, cài đặt certbot trên cả hai server :

Máy khách và Server
  • sudo apt install certbot

Đến đây bạn đã cài đặt certbot , hãy chạy lệnh sau để đăng ký certificate trên máy khách server :

Máy khách và Server
  • sudo certbot certonly --standalone --agree-tos --email sammy@your_domain -d your_domain

Các tùy chọn trong lệnh này có nghĩa như sau:

  • certonly : Đăng ký certificate và không thực hiện thay đổi nào khác trên hệ thống.
  • --standalone : Sử dụng web server tích hợp của certbot để xác minh certificate request .
  • --agree-tos : Tự động đồng ý với Điều khoản dịch vụ của Let's Encrypt.
  • --email your_email : Đây là địa chỉ email mà Let's Encrypt sẽ sử dụng để thông báo cho bạn về việc hết hạn certificate và các thông tin quan trọng khác.
  • -d your_domain : Tên server mà certificate sẽ được đăng ký. Điều này phải phù hợp với hệ thống mà bạn chạy nó.

Khi bạn chạy lệnh này, bạn sẽ được hỏi có muốn chia sẻ địa chỉ email với Let's Encrypt để họ có thể gửi email cho bạn tin tức và thông tin khác về công việc của họ hay không. Thực hiện việc này là tùy chọn, nếu bạn không chia sẻ địa chỉ email của bạn , việc đăng ký certificate sẽ vẫn hoàn thành bình thường.

Khi quá trình đăng ký certificate hoàn tất, quá trình này sẽ đặt certificate và các file khóa vào /etc/letsencrypt/live/ your_domain / trong đó your_domain là tên server mà bạn đã đăng ký certificate .

Cuối cùng, bạn cần download bản sao CA và certificate trung gian của Let's Encrypt và đặt chúng vào cùng một file . journald sẽ sử dụng file này để xác minh tính xác thực của các certificate trên máy khách server khi chúng giao tiếp với nhau.

Lệnh sau sẽ download hai certificate từ trang web của Let's Encrypt và đặt chúng vào một file duy nhất có tên letsencrypt-combined-certs.pem trong folder chính của user của bạn.

Chạy lệnh này trên máy khách server để download certificate và tạo file kết hợp:

Máy khách và Server
  • curl -s https://letsencrypt.org/certs/{isrgrootx1.pem.txt,letsencryptauthorityx3.pem.txt} > ~/letsencrypt-combined-certs.pem

Tiếp theo, di chuyển file này vào folder Let's Encrypt chứa các certificate và khóa:

Máy khách và Server
  • sudo cp ~/letsencrypt-combined-certs.pem /etc/letsencrypt/live/your_domain/

Đến đây bạn đã đăng ký certificate và khóa. Trong bước tiếp theo, bạn sẽ cấu hình server thu thập log để bắt đầu lắng nghe và lưu trữ thông báo log từ máy khách .

Bước 3 - Cấu hình server

Trong bước này, bạn sẽ cấu hình server để sử dụng certificate và các file khóa mà bạn đã tạo ở bước cuối cùng để nó có thể bắt đầu chấp nhận thông báo log từ máy khách .

systemd-journal-remote là thành phần lắng nghe thông báo log . Mở file cấu hình của nó tại /etc/systemd/journal-remote.conf bằng editor để bắt đầu cấu hình nó trên server :

  • sudo nano /etc/systemd/journal-remote.conf

Tiếp theo, bỏ ghi chú tất cả các dòng trong phần [Remote] và đặt các đường dẫn để trỏ đến file TLS bạn vừa tạo:

/etc/systemd/journal-remote.conf
[Remote] Seal=false SplitMode=host ServerKeyFile=/etc/letsencrypt/live/server.your_domain/privkey.pem ServerCertificateFile=/etc/letsencrypt/live/server.your_domain/fullchain.pem TrustedCertificateFile=/etc/letsencrypt/live/server.your_domain/letsencrypt-combined-certs.pem 

Đây là các tùy chọn bạn đã sử dụng ở đây:

  • Seal=false : Ký vào dữ liệu log trong log . Bật tính năng này nếu bạn cần bảo mật tối đa; nếu không, bạn có thể để nó là false .
  • SplitMode=host : Nhật ký từ các client từ xa sẽ được chia theo server trong /var/log/journal/remote . Nếu bạn muốn tất cả log được thêm vào một file duy nhất, hãy đặt giá trị này thành SplitMode=false .
  • ServerKeyFile : Tệp private key của server .
  • ServerCertificateFile : Tệp certificate của server .
  • TrustedCertificateFile : Tệp chứa certificate Let's Encrypt CA.

Bây giờ, bạn cần thay đổi quyền trên folder Let's Encrypt có chứa certificate và khóa để systemd-journal-remote có thể đọc và sử dụng chúng.

Trước tiên, hãy thay đổi các quyền để certificate và private key có thể đọc được:

  • sudo chmod 0755 /etc/letsencrypt/{live,archive}
  • sudo chmod 0640 /etc/letsencrypt/live/server.your_domain/privkey.pem

Tiếp theo, thay đổi quyền sở hữu group của private key thành group của systemd-journal-remote :

  • sudo chgrp systemd-journal-remote /etc/letsencrypt/live/server.your_domain/privkey.pem

Đến đây bạn có thể khởi động systemd-journal-remote :

  • sudo systemctl start systemd-journal-remote.service

Server thu thập log của bạn hiện đang chạy và sẵn sàng bắt đầu chấp nhận thông báo log từ một ứng dụng client . Trong bước tiếp theo, bạn sẽ cấu hình máy khách để chuyển tiếp các bản ghi đến server thu thập của bạn.

Bước 4 - Cấu hình client

Trong bước này, bạn sẽ cấu hình thành phần chuyển tiếp các thông báo log đến server thu thập log . Thành phần này được gọi là systemd-journal-upload .

Cấu hình mặc định cho systemd-journal-upload là nó sử dụng một user tạm thời chỉ tồn tại trong khi quá trình đang chạy. Điều này làm cho việc cho phép systemd-journal-upload để đọc các certificate và khóa TLS trở nên phức tạp hơn. Để giải quyết vấn đề này, bạn sẽ tạo một user hệ thống mới có cùng tên với user tạm thời sẽ được sử dụng ở vị trí của nó.

Đầu tiên, tạo user mới có tên systemd-journal-upload trên máy khách bằng lệnh adduser sau:

  • sudo adduser --system --home /run/systemd --no-create-home --disabled-login --group systemd-journal-upload

Các tùy chọn này cho lệnh là:

  • --system : Tạo user mới với quyền là user hệ thống. Điều này cung cấp cho user số UID (Mã định danh user ) dưới 1000 . Hơn 1000 UID thường được cấp cho các account user mà một người sẽ sử dụng để đăng nhập.
  • --home /run/systemd : Đặt /run/systemd làm folder chính cho user này.
  • --no-create-home : Không tạo bộ folder chính vì nó đã tồn tại.
  • --disabled-login : User không thể đăng nhập vào server thông qua, ví dụ: SSH.
  • --group : Tạo một group có cùng tên với user .

Tiếp theo, đặt quyền và quyền sở hữu file certificate Let's Encrypt:

  • sudo chmod 0755 /etc/letsencrypt/{live,archive}
  • sudo chmod 0640 /etc/letsencrypt/live/client.your_domain/privkey.pem
  • sudo chgrp systemd-journal-upload /etc/letsencrypt/live/client.your_domain/privkey.pem

Bây giờ, hãy chỉnh sửa cấu hình cho systemd-journal-upload , tại /etc/systemd/journal-upload.conf . Mở file này bằng editor :

  • sudo nano /etc/systemd/journal-upload.conf

Chỉnh sửa file này để nó trông giống như sau:

/etc/systemd/journal-upload.conf
[Upload] URL=https://server.your_domain:19532 ServerKeyFile=/etc/letsencrypt/live/client.your_domain/privkey.pem ServerCertificateFile=/etc/letsencrypt/live/client.your_domain/fullchain.pem TrustedCertificateFile=/etc/letsencrypt/live/client.your_domain/letsencrypt-combined-certs.pem 

Cuối cùng, khởi động lại dịch vụ systemd-journal-upload để nó sử dụng cấu hình mới:

  • sudo systemctl restart systemd-journal-upload.service

Máy khách của bạn hiện đã được cài đặt và chạy và đang gửi thông báo log của nó đến server thu thập log . Trong bước tiếp theo, bạn sẽ kiểm tra xem các bản ghi đang được gửi và ghi lại một cách chính xác.

Bước 5 - Kiểm tra Máy khách và Server

Trong bước này, bạn sẽ kiểm tra xem máy khách có đang chuyển tiếp các thông báo log đến server server có đang lưu trữ chúng một cách chính xác hay không.

Server thu thập log lưu trữ log từ các client trong một folder tại /var/log/journal/remote/ . Khi bạn khởi động lại ứng dụng client ở cuối bước cuối cùng, nó bắt đầu gửi thông báo log , do đó bây giờ có một file log trong /var/log/journal/remote/ . Tệp sẽ được đặt tên theo tên server mà bạn đã sử dụng cho certificate TLS.

Sử dụng ls để kiểm tra xem file log của ứng dụng client có trên server hay không :

Người phục vụ
  • sudo ls -la /var/log/journal/remote/

Thao tác này sẽ in nội dung folder hiển thị file log :

Output
total 16620 drwxr-xr-x 2 systemd-journal-remote systemd-journal-remote 4096 Jun 30 16:17 . drwxr-sr-x+ 4 root systemd-journal 4096 Jun 30 15:55 .. -rw-r----- 1 systemd-journal-remote systemd-journal-remote 8388608 Jul 1 10:46 'remote-CN=client.your_domain'

Tiếp theo, viết thông báo log trên máy khách để kiểm tra xem server có đang nhận thông báo của client như bạn mong đợi hay không. Bạn sẽ sử dụng trình ghi log để tạo thông báo log tùy chỉnh trên máy khách . Nếu mọi thứ đang hoạt động systemd-journal-upload sẽ chuyển tiếp thông báo này đến server .

Trên máy khách, hãy chạy lệnh logger sau:

Khách hàng
  • sudo logger -p syslog.debug "### TEST MESSAGE from client.your_domain ###"

-p syslog.debug trong lệnh này đặt cơ sở và mức độ nghiêm trọng của thông báo. Đặt điều này thành syslog.debug sẽ làm rõ đó là một thông báo thử nghiệm. Lệnh này sẽ ghi lại thông báo ### TEST MESSAGE from client.your_domain ### vào log của khách hàng, sau đó systemd-journal-upload sẽ chuyển đến server .

Tiếp theo, đọc file log của khách hàng trên server để kiểm tra xem các thông báo log có đến từ máy khách hay không . Tệp này là file log binary nên bạn sẽ không thể đọc nó bằng các công cụ như less . Thay vào đó, hãy đọc file bằng journalctl với tùy chọn --file= cho phép bạn chỉ định file tạp chí tùy chỉnh:

Người phục vụ
  • sudo journalctl --file=/var/log/journal/remote/remote-CN=client.your_domain.journal

Thông báo log sẽ xuất hiện như sau:

Test log message
. . . Jun 29 13:10:09 client root[3576]: ### TEST MESSAGE from client.your_domain ###

Server tập trung log của bạn hiện đang thu thập thành công log từ hệ thống khách hàng của bạn.

Kết luận

Trong bài viết này, bạn cài đặt một server thu thập log trung tâm và cấu hình một client để chuyển tiếp một bản sao của log hệ thống của nó đến server . Bạn có thể cấu hình bao nhiêu client mà bạn cần để chuyển tiếp thông báo đến server thu thập log bằng cách sử dụng các bước cấu hình client mà bạn đã sử dụng tại đây.


Tags:

Các tin liên quan

Cách cài đặt và cấu hình Drone trên Ubuntu 20.04
2020-07-09
Cách thiết lập Mattermost trên Ubuntu 18.04
2020-07-07
Cách cài đặt Jenkins trên Ubuntu 20.04
2020-07-03
Cách cài đặt và cấu hình Zabbix để giám sát an toàn server từ xa trên Ubuntu 20.04
2020-06-30
Cách thiết lập ứng dụng Node.js để sản xuất trên Ubuntu 20.04
2020-06-30
Cách cài đặt WordPress trên Ubuntu 20.04 với LAMP
2020-06-30
Cài đặt Elasticsearch, Logstash và Kibana (Elastic Stack) trên Ubuntu 20.04
2020-06-23
Cách cài đặt TensorFlow trên Ubuntu 20.04
2020-06-23
Cách tạo người dùng mới hỗ trợ Sudo trên Ubuntu 20.04 [Quickstart]
2020-06-22
Cách cài đặt Prosody trên Ubuntu 18.04
2020-06-15