Thứ năm, 09/11/2017 | 00:00 GMT+7

Cách sử dụng Logrotate và S3cmd để lưu trữ log vào bộ nhớ đối tượng trên Ubuntu 16.04

Các file log do server và ứng dụng của bạn tạo ra chứa đầy thông tin có thể hữu ích khi gỡ lỗi phần mềm, điều tra các sự cố bảo mật và tạo các số liệu và thống kê sâu sắc.

Một chiến lược ghi log điển hình hiện nay là tập trung tất cả thông tin này thông qua một dịch vụ tổng hợp log như ngăn xếp elastic hoặc Graylog . Điều này rất tốt cho phân tích thời gian thực và điều tra lịch sử ngắn hạn đến trung hạn, nhưng thường không thể lưu giữ dữ liệu lâu dài trong các hệ thống này do các hạn chế về lưu trữ hoặc các vấn đề về tài nguyên server khác.

Một giải pháp phổ biến cho những nhu cầu lưu trữ dài hạn này là lưu trữ log bằng dịch vụ lưu trữ đối tượng. Các bản ghi có thể vẫn có sẵn vô thời hạn để phân tích sau này, các yêu cầu lưu giữ hợp lệ hoặc cho các mục đích backup .

Trong hướng dẫn này, ta sẽ sử dụng Logrotate trên server Ubuntu 16.04 để gửi syslog đến dịch vụ lưu trữ đối tượng. Kỹ thuật này có thể được áp dụng cho bất kỳ bản ghi nào được Logrotate xử lý.

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần những thứ sau:

  • Server Ubuntu 16.04, với user không hỗ trợ sudo root, như được mô tả trong Cài đặt server ban đầu với Ubuntu 16.04 . Các cấu hình trong hướng dẫn này sẽ hoạt động rộng rãi hơn trên nhiều bản phân phối Linux khác nhau, nhưng có thể yêu cầu một số điều chỉnh.
  • Bạn nên làm quen với Logrotate và cách cài đặt cấu hình mặc định trên Ubuntu 16.04. Vui lòng đọc Cách quản lý file log bằng Logrotate trên Ubuntu 16.04 để biết thêm thông tin.
  • Bạn cần biết các chi tiết sau về dịch vụ lưu trữ đối tượng của bạn :

    • Khóa truy cập
    • Chìa khoá bí mật
    • URL server (hoặc "Điểm cuối")
    • Tên group

    Nếu đang sử dụng DigitalOcean , bạn có thể đọc Cách tạo DigitalOcean và Khóa API để tạo group mới và truy xuất thông tin ở trên.

Khi bạn đã hoàn thành các yêu cầu , hãy SSH vào server của bạn để bắt đầu.

Bước 1 - Cài đặt S3cmd

Ta sẽ sử dụng một công cụ có tên là S3cmd để gửi log của ta tới bất kỳ dịch vụ lưu trữ đối tượng nào tương thích với S3. Trước khi cài đặt S3cmd, ta cần cài đặt một số công cụ để giúp ta cài đặt các chương trình Python (S3cmd được viết bằng Python):

  • sudo apt-get update
  • sudo apt-get install python-setuptools

Tiếp theo, thay đổi folder bạn có thể ghi vào, sau đó download file S3cmd .tar.gz :

  • cd /tmp
  • curl -LO https://github.com/s3tools/s3cmd/releases/download/v2.0.1/s3cmd-2.0.1.tar.gz

Lưu ý: Bạn có thể kiểm tra xem có version S3cmd mới hơn hay không bằng cách truy cập trang Phát hành của họ trên Github . Nếu bạn tìm thấy version mới, hãy sao chép URL .tar.gz và thay thế nó bằng lệnh curl ở trên.

Khi quá trình download hoàn tất, hãy extract và extract file bằng tiện ích tar :

  • tar xf s3cmd-*.tar.gz

Sau đó, thay đổi vào folder kết quả và cài đặt phần mềm bằng sudo :

  • cd s3cmd-*
  • sudo python setup.py install

Kiểm tra cài đặt bằng cách hỏi s3cmd để biết thông tin version của nó:

  • s3cmd --version
Output
s3cmd version 2.0.1

Nếu bạn thấy kết quả tương tự, S3cmd đã được cài đặt thành công. Tiếp theo, ta sẽ cấu hình S3cmd để kết nối với dịch vụ lưu trữ đối tượng của ta .

Bước 2 - Cấu hình S3cmd

S3cmd có một quy trình cấu hình tương tác có thể tạo file cấu hình mà ta cần để kết nối với server lưu trữ đối tượng của ta . User root cần quyền truy cập vào file cấu hình này, vì vậy ta sẽ bắt đầu quá trình cấu hình bằng sudo và đặt file cấu hình vào folder chính của user root :

  • sudo s3cmd --configure --config=/root/logrotate-s3cmd.config

Quá trình cài đặt tương tác sẽ bắt đầu. Khi thích hợp, bạn có thể chấp nhận các câu trả lời mặc định (trong ngoặc) bằng cách nhấn ENTER . Ta sẽ đi qua các tùy chọn bên dưới, với các câu trả lời được đề xuất cho Không gian trong khu vực NYC3 của DigitalOcean. Thay thế điểm cuối S3 và mẫu group nếu cần cho các trung tâm dữ liệu DigitalOcean khác hoặc các nhà cung cấp lưu trữ đối tượng khác:

  • Khóa truy cập: khóa your-access-key
  • Khóa bí mật: khóa your-secret-key
  • Khu vực mặc định [US]: ENTER
  • Điểm cuối S3 [s3.amazonaws.com]: nyc3.digitaloceanspaces.com
  • Group kiểu DNS + tên server : mẫu cổng để truy cập group [% (bucket) s.s3.amazonaws.com]: %(bucket)s.nyc3.digitaloceanspaces.com
  • Mật khẩu mã hóa: ENTER hoặc chỉ định password để mã hóa
  • Đường dẫn đến chương trình GPG [/ usr / bin / gpg]: ENTER
  • Sử dụng giao thức HTTPS [Có]: ENTER
  • Tên server proxy HTTP: ENTER hoặc điền thông tin proxy của bạn

Đến đây, s3cmd sẽ tổng hợp các phản hồi của bạn, sau đó yêu cầu bạn kiểm tra kết nối. Nhấn y rồi ENTER để bắt đầu kiểm tra:

Output
Test access with supplied credentials? [Y/n] y Please wait, attempting to list all buckets... Success. Your access key and secret key worked fine :-)

Sau khi kiểm tra, bạn sẽ được yêu cầu lưu cài đặt. , gõ y rồi ENTER để thực hiện . Tệp cấu hình sẽ được ghi vào vị trí mà ta đã chỉ định trước đó bằng cách sử dụng tùy chọn dòng lệnh --config .

Trong bước tiếp theo, ta sẽ cài đặt Logrotate để sử dụng S3cmd để tải lên log của ta .

Bước 3 - Cài đặt Logrotate để Gửi Nhật ký Xoay đến Lưu trữ Đối tượng

Logrotate là một hệ thống mạnh mẽ và linh hoạt để quản lý việc xoay và nén các file log . Ubuntu sử dụng nó theo mặc định để duy trì tất cả log hệ thống được tìm thấy trong /var/log .

Đối với hướng dẫn này, ta sẽ cập nhật cấu hình để gửi syslog đến bộ nhớ đối tượng khi nào nó được xoay.

Đầu tiên, mở file cấu hình Logrotate cho rsyslog , bộ xử lý log hệ thống:

  • sudo nano /etc/logrotate.d/rsyslog

Sẽ có hai đoạn cấu hình . Ta quan tâm đến cái đầu tiên, giao dịch với /var/log/syslog :

/etc/logrotate.d/rsyslog
/var/log/syslog {     rotate 7     daily     missingok     notifempty     delaycompress     compress     postrotate         invoke-rc.d rsyslog rotate > /dev/null     endscript } . . . 

Cấu hình này chỉ định rằng /var/log/syslog sẽ được xoay vòng hàng ngày ( daily ), với bảy bản ghi cũ được lưu giữ ( rotate 7 ). Nó sẽ không tạo ra một lỗi nếu file log là mất tích ( missingok ) và nó sẽ không xoay log nếu nó rỗng ( notifempty ). Nhật ký đã xoay sẽ được nén ( compress ), nhưng không phải là log mới nhất ( compress delaycompress ). Cuối cùng, tập lệnh postrotate yêu cầu rsyslog chuyển sang file log mới sau khi file cũ đã được xoay đi.

Trước khi ta thêm các chỉ thị cấu hình mới, hãy xóa dòng delaycompress đánh dấu ở trên. Ta muốn tất cả log cũ của ta được nén ngay lập tức trước khi gửi chúng đến bộ nhớ đối tượng.

Tiếp theo, thêm các dòng sau vào cuối đoạn cấu hình (bên ngoài khối postrotateendscript nhưng bên trong dấu ngoặc đóng } ):

/etc/logrotate.d/rsyslog
. . .         dateext         dateformat -%Y-%m-%d-%s         lastaction                 HOSTNAME=`hostname`                 /usr/local/bin/s3cmd sync --config=/root/logrotate-s3cmd.config /var/log/syslog*.gz "s3://your-bucket-name/$HOSTNAME/"         endscript . . . 

Đảm bảo thay thế tên group chính xác cho phần được đánh dấu ở trên. Các tùy chọn này sẽ bật phần mở rộng tên file dựa trên ngày ( dateext ) để ta có thể đánh dấu thời gian cho các file log của bạn . Sau đó ta cài đặt các định dạng của các phần mở rộng với dateformat . Các file sẽ có tên file như syslog-2017-11-07-1510091490.gz : năm, tháng, ngày, sau đó là dấu thời gian. Dấu thời gian đảm bảo ta có thể gửi hai file log trong cùng một ngày mà không có xung đột tên file . Điều này là cần thiết trong trường hợp ta cần buộc xoay bản ghi vì một lý do nào đó (thêm về điều đó ở bước tiếp theo).

Tập lệnh lastaction chạy sau khi tất cả các file log đã được nén. Nó đặt một biến với tên server của server , sau đó sử dụng s3cmd sync để đồng bộ hóa tất cả các file log hệ thống với group lưu trữ đối tượng của bạn, đặt chúng vào một folder có tên server . Lưu ý dấu gạch chéo cuối cùng trong "s3:// your-bucket-name /$HOSTNAME/" là quan trọng. Nếu không có nó, s3cmd sẽ coi /$HOSTNAME là một file duy nhất, không phải là một folder chứa đầy file log .

Lưu file cấu hình. Lần tiếp theo Logrotate chạy hàng ngày, /var/log/syslog sẽ được chuyển sang tên file dựa trên ngày tháng, được nén và tải lên.

Ta có thể buộc điều này xảy ra ngay lập tức để kiểm tra xem nó có hoạt động bình thường không:

  • sudo logrotate /etc/logrotate.conf --verbose --force
Output
rotating pattern: /var/log/syslog . . . considering log /var/log/syslog log needs rotating . . . running last action script switching euid to 0 and egid to 0 upload: '/var/log/syslog-2017-11-08-1510175806.gz' -> 's3://example-bucket/example-hostname/syslog-2017-11-08-1510175806.gz' [1 of 1] 36236 of 36236 100% in 0s 361.16 kB/s done Done. Uploaded 36236 bytes in 1.0 seconds, 35.39 kB/s.

Điều này sẽ xuất ra nhiều thông tin cho nhiều file log . Các phần liên quan đến syslog và tải lên của ta được trích dẫn ở trên. Đầu ra của bạn trông giống nhau, với một số bằng chứng về việc tải lên thành công. Bạn có thể có nhiều file hơn đang được tải lên nếu server không phải là thương hiệu mới.

Tiếp theo, ta sẽ tùy chọn cài đặt một dịch vụ để giúp ta tải lên log trước khi hệ thống ngừng hoạt động.

Bước 4 - Gửi log khi tắt máy

Bước này là tùy chọn và chỉ cần thiết nếu bạn đang cấu hình các server tạm thời thường xuyên bị tắt và phá hủy. Nếu đúng như vậy, bạn có thể mất tới một ngày log mỗi khi phá hủy server .

Để khắc phục điều này, ta cần buộc Logrotate chạy lần cuối trước khi hệ thống tắt. Ta sẽ thực hiện việc này bằng cách tạo một dịch vụ systemd chạy lệnh logrotate khi nó bị dừng.

Trước tiên, hãy mở file dịch vụ mới trong editor :

  • sudo nano /etc/systemd/system/logrotate-shutdown.service

Dán vào định nghĩa dịch vụ sau:

/etc/systemd/system/logrotate-shutdown.service
[Unit] Description=Archive logs before shutdown After=network.target  [Service] RemainAfterExit=yes ExecStop=/usr/sbin/logrotate /etc/logrotate.conf --force  [Install] WantedBy=multi-user.target 

Tệp này xác định một dịch vụ không làm gì khi khởi động (nó thiếu câu lệnh ExecStart ) và chạy logrotate (với --force chọn --force ) khi bị dừng. Nó sẽ được chạy trước khi kết nối mạng bị ngắt do dòng After=network.target .

Lưu file và thoát khỏi editor của bạn, sau đó startenable dịch vụ bằng systemctl :

  • sudo systemctl start logrotate-shutdown.service
  • sudo systemctl enable logrotate-shutdown.service

Kiểm tra trạng thái của dịch vụ mới:

  • sudo systemctl status logrotate-shutdown.service
Output
● logrotate-shutdown.service - Archive logs before shutdown Loaded: loaded (/etc/systemd/system/logrotate-shutdown.service; enabled; vendor preset: enabled) Active: active (exited) since Wed 2017-11-08 20:00:05 UTC; 8s ago Nov 08 20:00:05 example-host systemd[1]: Started Archive logs before shutdown.

Ta muốn thấy rằng nó đang active . Thực tế là nó đã exited thì vẫn ổn, đó là do không có lệnh ExecStart .

Bạn có thể kiểm tra xem dịch vụ mới có đang hoạt động hay không bằng cách dừng nó theo cách thủ công:

  • sudo systemctl stop logrotate-shutdown.service

hoặc bằng cách khởi động lại hệ thống của bạn:

  • sudo reboot

Một trong hai phương pháp sẽ kích hoạt lệnh Logrotate và tải lên file log mới. Bây giờ, trừ khi tắt máy vô tội vạ, bạn sẽ không mất log nào khi phá hủy server .

Lưu ý: nhiều nền tảng cloud không thực hiện quá trình tắt nhanh khi server bị phá hủy hoặc chấm dứt. Bạn cần phải kiểm tra chức năng này với cài đặt cụ thể của bạn và cấu hình nó để tắt nhanh hoặc tìm giải pháp khác để kích hoạt vòng quay log cuối cùng.

Kết luận

Trong hướng dẫn này, ta đã cài đặt S3cmd, cấu hình nó để kết nối với dịch vụ lưu trữ đối tượng của ta và cấu hình Logrotate để tải lên các file log khi nó xoay /var/log/syslog . Sau đó, ta cài đặt một dịch vụ systemd để chạy logrotate --force khi tắt máy, đảm bảo rằng ta không mất bất kỳ log nào khi phá hủy các server tạm thời.

Để tìm hiểu thêm về các cấu hình có sẵn cho Logrotate, hãy tham khảo trang hướng dẫn sử dụng của nó bằng lệnh man logrotate trên dòng lệnh. Thông tin thêm về S3cmd có thể được tìm thấy trên trang web của họ .


Tags:

Các tin liên quan

Cách quản lý các tệp log bằng Logrotate trên Ubuntu 16.04
2017-11-09
Cách tạo VPN điểm-điểm với WireGuard trên Ubuntu 16.04
2017-11-09
Cách đánh giá trang web bằng Firefox, Siege và Sproxy trên Ubuntu 16.04
2017-11-07
Cách cài đặt Nagios 4 và theo dõi server của bạn trên Ubuntu 16.04
2017-11-06
Cách cài đặt và cấu hình Nextcloud trên Ubuntu 16.04
2017-10-06
Cách cài đặt WordPress với Caddy trên Ubuntu 16.04
2017-08-03
Cách cài đặt và cấu hình GoCD trên Ubuntu 16.04
2017-08-01
Cách cấu hình GoCD với Let's Encrypt SSL Certificates trên Ubuntu 16.04
2017-08-01
Cách cài đặt và cấu hình SimpleSAMLphp để Xác thực SAML trên Ubuntu 16.04
2017-07-30
Cách sử dụng chế độ độc lập của Certbot để lấy chứng chỉ SSL mã hóa trên Ubuntu 16.04
2017-07-28