How To View and Configure Linux Logs on Ubuntu, Debian, and CentOS

2988
05-05-2023
How To View and Configure Linux Logs on Ubuntu, Debian, and CentOS

Giới thiệu

Quản trị viên hệ thống Linux thường cần xem các log files cho mục đích khắc phục sự cố. Đây là một trong những điều đầu tiên mà quản trị viên hệ thống sẽ làm.

Linux và các ứng dụng chạy trên nó có thể tạo ra nhiều loại log messages khác nhau, các loại đó được ghi lại trong các log files. Linux sử dụng một tập hợp các tệp cấu hình, thư mục, chương trình, lệnh và daemon để tạo, lưu trữ và xóa, ghi đè các logs . Do đó, việc biết hệ thống lưu giữ các log files của nó ở đâu và cách sử dụng các lệnh liên quan có thể giúp tiết kiệm thời gian quý báu trong quá trình khắc phục sự cố.

Trong hướng dẫn này, chúng ta sẽ xem xét các phần khác nhau của cơ chế ghi logs của Linux.

Bước 1 - Kiểm tra vị trí mặc định của log file

Vị trí mặc định của các log file trong Linux là `/var/log` Bạn có thể xem danh sách log files trong thư mục này bằng lệnh sau:

➜ ~ ls -l /var/log

total 158172

-rw-r--r-- 1 root root 8564 Thg 4 10 08:42 alternatives.log

-rw-r--r-- 1 root root 61810 Thg 3 21 06:07 alternatives.log.1

-rwxrwxrwx 1 root root 944866 Thg 4 11 14:03 anydesk.trace

-rw-r----- 1 root adm 0 Thg 4 11 00:00 apport.log

drwxr-xr-x 2 root root 4096 Thg 4 10 10:33 apt

-rw-r----- 1 syslog adm 34249 Thg 4 11 14:17 auth.log

-rw------- 1 root root 0 Thg 4 11 00:00 boot.log

-rw-r--r-- 1 root root 108494 Thg 8 9 2022 bootstrap.log

-rw-rw---- 1 root utmp 0 Thg 4 1 00:00 btmp

drwxr-xr-x 2 root root 4096 Thg 4 11 00:00 cups

drwxr-xr-x 2 root root 4096 Thg 8 3 2022 dist-upgrade

-rw-r----- 1 root adm 75398 Thg 4 10 09:25 dmesg

...

Bước 2 - Xem nội dung của log files

Dưới đây là một số log files phổ biến mà bạn sẽ tìm thấy bên dưới `/var/log`:

- `wtmp`

- `utmp`

- `dmesg`

- `messages`

- `maillog` hoặc `mail.log`

- `spooler`

- `auth.log` hoặc `secure`

Các file `wtmp`và `utmp` theo dõi người dùng đăng nhập và đăng xuất khỏi hệ thống. Ta không thể đọc trực tiếp nội dung của các files này bằng lệnh `cat` trong termial. Thay vào đó , có một số lệnh cụ thể khác cho việc xem nội dung của log files `wtmp`và `utmp` .

Để xem ai hiện đang đăng nhập vào máy chủ Linux, ta dùng lệnh `who` . Lệnh này lấy các giá trị của nó từ file`/var/run/utmp` (đối với CentOS và Debian) hoặc `/run/utmp`(đối với Ubuntu).

Bên dưới là ví dụ từ Ubuntu:

good@ubuntu-22:~# who

good pts/0 2023-04-10 11:06 (tmux(5509).%6)

Trong trường hợp cụ thể này, mình là người dùng duy nhất của hệ thống.

Lệnh `last`cho bạn biết lịch sử đăng nhập của người dùng:

good@ubuntu-22:~# last

root pts/0 198.211.111.194 Mon Apr 10 17:11 still logged in

reboot system boot 5.19.0-23-generi Mon Apr 10 09:25 still running

wtmp begins Fri Mar 10 16:22:21 2023

Ta cũng có thể sử dụng lệnh `last` với dấu gạch đứng ( `|`) để thêm `grep`tìm kiếm cho những người dùng cụ thể.

Để biết khi nào hệ thống được khởi động lại lần cuối, ta có thể chạy lệnh sau:

last reboot

Kết quả trên Ubuntu như dưới:

good@huydv:~# last reboot

reboot system boot 5.19.0-38-generi Mon Apr 10 09:25 still running

reboot system boot 5.19.0-38-generi Fri Apr 7 09:02 - 09:25 (3+00:22)

reboot system boot 5.19.0-38-generi Mon Apr 3 19:39 - 09:02 (3+13:23)

...

wtmp begins Fri Mar 10 16:22:21 2023

Để xem lần cuối ai đăng nhập vào hệ thống và khi nào, ta sử dụng `lastlog` và kết quả của được hiển thị trong Ubuntu:

good@huydv:~# lastlog

Username Port From Latest

root pts/0 162.243.188.66 T6 Thg 4 7 10:21:10 +0700 2023T6 Thg 4 7 10:21:10 +0700 2023T6 Thg 4 7 10:21:10 +0700 2023

daemon **Never logged in**

bin **Never logged in**

sys **Never logged in**

sync **Never logged in**

games **Never logged in**

man **Never logged in**

lp **Never logged in**

...

Đối với các log files khác, bạn có thể sử dụng `cat` , `head` hoặc `tail`.

Trong ví dụ bên dưới, để xem 10 dòng cuối cùng của file `/var/log/syslog` trên máy chủ Ubuntu, ta dùng lệnh `tail`:

sudo tail /var/log/syslog

Bạn nhận được kết quả như sau:

good@huydv:/var/log# sudo tail /var/log/syslog.1

Apr 9 00:00:08 huydv systemd[1]: Stopping CUPS Scheduler...

Apr 9 00:00:08 huydv systemd[1]: Listening on CUPS Scheduler.

Apr 9 00:00:08 huydv systemd[1]: Starting CUPS Scheduler...

Apr 9 00:00:08 huydv systemd[1]: Started CUPS Scheduler.

Apr 9 00:00:08 huydv kernel: [140251.978790] audit: type=1400 audit(1680973208.430:96): apparmor="DENIED" operation="capable" class="cap" profile="/usr/sbin/cupsd" pid=86382 comm="cupsd" capability=12 capname="net_admin"

Apr 9 00:00:08 huydv systemd[1]: Started Make remote CUPS printers available locally.

Apr 9 00:00:09 huydv com.docker.backend[9952]: [2023-04-08T17:00:09.085576316Z][com.docker.backend][W] still waiting to update HTTP proxy on http-proxy-control.sock after 37h38m45.824013689s. Last error was Post "http://localhost/http_proxy.json": dial unix http-proxy-control.sock: connect: no such file or directory

Apr 9 00:00:09 huydv systemd[1]: rsyslog.service: Sent signal SIGHUP to main process 628 (rsyslogd) on client request.

Apr 9 00:00:09 huydv systemd[1]: logrotate.service: Deactivated successfully.

Apr 9 00:00:09 huydv systemd[1]: Finished Rotate log files.

Bước 3 - Sử dụng `rsyslog` Daemon

Cơ chế ghi logs là xoay quanh dịch vụ `rsyslog`. Dịch vụ này chịu trách nhiệm listen các log messages từ các dịch vụ hoặc của người dùng trên hệ thống Linux và định tuyến thông báo tới một log files thích hợp trong thư mục `/var/log`.  Dịch vụ`rsyslog` cũng có thể được dùng để chuyển tiếp các log messages đến một máy chủ Linux khác.

Tập tin cấu hình `rsyslog`

`rsyslog`daemon lấy thông tin cấu hình của nó từ file `rsyslog.conf`. File `rsyslog.conf` được đặt tại thư mục `/etc`.

File `rsyslog.conf` cấu hình dịch vụ `rsyslog` mặc định cho ta biết nơi lưu trữ các tiến trình log của hệ thống. Trong file `50-default.conf` trên Ubuntu, có các dòng cho biết nguồn tạo ra log và mức độ cảnh báo của logs đó thì được lưu tại vị trí nào.

Dưới đây là một phần cấu hình của file `50-default.conf` :

...

auth,authpriv.* /var/log/auth.log

*.*;auth,authpriv.none -/var/log/syslog

cron.* /var/log/cron.log

daemon.* -/var/log/daemon.log

kern.* -/var/log/kern.log

lpr.* -/var/log/lpr.log

mail.* -/var/log/mail.log

user.* -/var/log/user.log

mail.info -/var/log/mail.info

mail.warn -/var/log/mail.warn

mail.err /var/log/mail.err

local4.crit /var/log/local4crit.log

local4.=info /var/log/local4info.log

...

Mỗi dòng trên được chia ra thành 2 trường:

- Trường *selector:* chỉ định nguồn và mức độ cảnh báo của log messages đó. Trường selector được tạo bởi ***facility** (nguồn gốc của log message đó)*/***priority** (mức độ cảnh báo của message đó)* được tách nhau bởi dấu "."

- Trường *action*: là trường để chỉ ra nơi lưu logs. Có 2 kiểu lưu log là lưu tại file [localhost](http://localhost) hoặc gửi đến IP của máy chủ Log

Để hiểu thêm về trường *selector* có nghĩa là gì, hãy xem các ***facility** và **priority*** khác nhau của Linux qua hai bảng sau:

How To View and Configure Linux Logs on Ubuntu, Debian, and CentOS - Ảnh 1.

How To View and Configure Linux Logs on Ubuntu, Debian, and CentOS - Ảnh 2.

Hãy xem các dòng dưới từ tệp:

# Log cron stuff

cron.* /var/log/cron

Cấu hình này yêu cầu `rsyslog`daemon lưu tất cả các thông báo đến từ `cron` daemon vào một tệp có tên `/var/log/cron`. Dấu hoa thị ( `*`) sau dấu chấm có nghĩa là thông báo có bất kì mức độ ưu tiên (priority) đều được ghi lại. Tương tự, nếu facility được chỉ định là dấu hoa thị, điều đó có nghĩa là tất cả các nguồn.

Facilities và priorities có thể được liên kết theo một số cách:

Ở dạng mặc định, khi chỉ có một prioty được chỉ định sau dấu chấm, điều đó có nghĩa là tất cả các sự kiện bằng hoặc lớn hơn mức độ ưu tiên đó sẽ bị giữ lại. Vì vậy, bản ghi bên dưới của file `50-default.conf` khiến mọi log messages đến từ hệ thống mail có mức độ ưu tiên (priority) là `warn` hoặc cao hơn (`err`, `crit`, `alert`, hoặc `emerg`) đều được ghi vào một file`/var/log/mail.warn`

Output

mail.warn /var/log/mail.warn

Sử dụng dấu bằng ( `=`) sau dấu chấm sẽ chỉ ghi lại mức độ ưu tiên (priority) đã chỉ định. Vì vậy, nếu muốn lưu logs có mức độ ưu tiên (priority) là `info` ****của hệ thống mail, trong file cấu hình ghi như sau:

Output

mail.=info /var/log/mail.info

Nếu bạn muốn lưu tất cả logs từ hệ thống mail ngoại trừ logs có mức độ ưu tiên (priority) là `info`, trong file cấu hình ghi như sau:

Output

mail.!info /var/log/mail.info

hoặc

Output

mail.!=info /var/log/mail.info

Trong trường hợp đầu tiên, file `mail.info` sẽ chứa mọi log messages có mức độ ưu tiên (priority) thấp hơn mức `info`. Trong trường hợp thứ hai, file `mail.info` sẽ chứa tất cả các log messages có mức độ ưu tiên (priority) cao hơn `info`.

Nhiều nguồn gốc của log messages (`facility`) trong cùng một dòng có thể được phân tách bằng dấu phẩy (`,`).

Nhiều nguồn ( `facility.priority`) trong cùng một dòng được phân tách bằng dấu chấm phẩy (`;`).

Hãy xem những gì có trong file `rsyslog.conf` của hệ thống Linux. Đây là một đoạn trích từ máy chủ Debian cho một ví dụ khác:

# /etc/rsyslog.conf configuration file for rsyslog

#

# For more information install rsyslog-doc and see

# /usr/share/doc/rsyslog-doc/html/configuration/index.html

#################

#### MODULES ####

#################

module(load="imuxsock") # provides support for local system logging

module(load="imklog") # provides kernel logging support

#module(load="immark") # provides --MARK-- message capability

# provides UDP syslog reception

#module(load="imudp")

#input(type="imudp" port="514")

# provides TCP syslog reception

#module(load="imtcp")

#input(type="imtcp" port="514")

###########################

#### GLOBAL DIRECTIVES ####

###########################

#

# Use traditional timestamp format.

# To enable high precision timestamps, comment out the following line.

#

$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

#

# Set the default permissions for all log files.

#

$FileOwner root

$FileGroup adm

$FileCreateMode 0640

$DirCreateMode 0755

$Umask 0022

Như bạn có thể thấy, Debian lưu tất cả các thông báo security/authorization trong `/var/log/auth.log`khi CentOS lưu nó tại file `/var/log/secure`.

Các cấu hình cho `rsyslog`cũng có thể cấu hình từ các file tùy chỉnh khác. Các file cấu hình tùy chỉnh này thường nằm trong các thư mục khác nhau dưới đường dẫn `/etc/rsyslog.d`. File `rsyslog.conf` có dùng các file cấu hình khác bằng cách sử dụng chỉ thị `$IncludeConfig`

Phần cấu hình sử dụng `$IncludeConfig` của file `/etc/rsyslog.conf` trên Ubuntu:

#

# Include all config files in /etc/rsyslog.d/

#

$IncludeConfig /etc/rsyslog.d/*.conf

```

Kiểm tra nội dung trong thư mục `/etc/rsyslog.d` với:

```

ls -l /etc/rsyslog.d

```

Kết quả hiển thị với thiết bị của mình:

```

-rw-r--r-- 1 root root 314 Sep 19 2021 20-ufw.conf

-rw-r--r-- 1 root root 255 Sep 30 22:07 21-cloudinit.conf

-rw-r--r-- 1 root root 1124 Nov 16 2021 50-default.conf

Đích đến của một log message không nhất thiết phải là một log file;.

Log messages có thể được gửi đến console của người dùng. Trong trường hợp log messages được gửi đến console, trường *action* sẽ chứa tên người dùng.

- Nhiều người dùng cần nhận log messages, tên người dùng của họ được phân tách bằng dấu phẩy (`,`).

- Log messages cần được gửi cho tất cả người dùng, thì trường *action* trong file cấu hình được bằng thay bằng dấu hoa thị (`*`) .

Do `rsyslog`daemon không chỉ lưu các log messages tại local mà còn có thể chuyển tiếp chúng đến một máy chủ Linux khác trong mạng hoặc hoạt động như một kho lưu trữ cho các hệ thống khác. Khi đó `rsyslog` daemon lắng nghe các log messages trên cổng UDP 514. Ví dụ bên dưới sẽ chuyển tiếp các thông báo quan trọng của kernel tới một máy chủ có tên là "texas".

Output

kern.crit @texas

Bước 4 - Tạo và kiểm tra log messages cho riêng mình

Bây giờ là lúc để bạn tạo các log files của riêng mình. Để thực hiện, bạn làm theo các bước sau:

- Thêm cấu hình log messages vào file `/etc/rsyslog.conf`

- Khởi động lại `rsyslog`daemon

- Kiểm tra cấu hình bằng cách sử dụng tiện ích`logger` để sinh ra log messages

Trong ví dụ sau, bạn sẽ thêm hai dòng mới vào file `rsyslog.conf` của CentOS.

vi /etc/rsyslog.conf

Output

# New lines added for testing log message generation

local4.crit /var/log/local4crit.log

local4.=info /var/log/local4info.log

Như bạn có thể thấy với hai dòng trên, log messages đến từ **facility** gọi là **local4** và chúng có các mức độ ưu tiên **(priority**) khác nhau.

Tiếp theo, bạn sẽ khởi động lại dịch vụ `rsyslog`:

/etc/init.d/rsyslog restart

Để tạo log message, ta dùng ứng dụng có tên **logger**:

logger -p local4.info " This is a info message from local 4"

Bây giờ tìm trong thư mục `/var/log` hiển thị hai file mới:

Output

-rw------- 1 root root 0 Apr 10 11:21 local4crit.log

-rw------- 1 root root 72 Apr 10 11:22 local4info.log

Kích thước của file `local4info.log`là khác không. Vì vậy, khi bạn mở nó, bạn sẽ thấy thông báo đã được ghi lại:

cat /var/log/local4info.log

Apr 10 11:22:32 TestLinux root: This is a info message from local 4

Bước 5 - Rotating Log Files

Khi ngày càng có nhiều log messages được ghi vào log files chúng sẽ ngày càng lớn hơn. Điều này rõ ràng đặt ra một vấn đề hiệu năng làm việc. Ngoài ra, việc quản lý các tập tin trở nên cồng kềnh hơn.

Linux sử dụng khái niệm **rotating log files** thay vì xóa chúng. Khi file logs được rotate, một log files mới sẽ được tạo và log files cũ được đổi tên và nén lại. Do đó, một log files có thể có nhiều phiên bản cũ.  Khi một số lượng tồn đọng nhất định đã được tạo, rotating log files mới sẽ xoá các log files cũ.

Rotating log files bằng sử dụng tiện ích `logrotate`.

### File cấu hình `logrotate`

Giống như `rsyslog`, `logrotate`cũng phụ thuộc vào file cấu hình và tên của file này là `/etc/logrotate.conf`.

Đây là những gì bạn thấy trong file `logrotate.conf` của máy chủ Debian của mình:

cat /etc/logrotate.conf

# see "man logrotate" for details

# global options do not affect preceding include directives

# rotate log files weekly

weekly

# keep 4 weeks worth of backlogs

rotate 4

# create new (empty) log files after rotating old ones

create

# use date as a suffix of the rotated file

#dateext

# uncomment this if you want your log files compressed

#compress

# packages drop log rotation information into this directory

include /etc/logrotate.d

# system-specific logs may also be configured here.

Theo mặc định, các log files sẽ được rotate hàng tuần và giữ lại 4 file logs được nén lại . Khi chương trình chạy, một log files mới sẽ được tạo và những tệp cũ sẽ được nén.

Ngoại lệ duy nhất là cho các tập tin `wtmp`và `btmp`. `wtmp`theo dõi các lần đăng nhập hệ thống và `btmp`theo dõi các lần đăng nhập không hợp lệ. Cả hai log files này sẽ được rotate hàng tháng.

Tùy chỉnh cấu hình cho **rotating log files** trong thư mục  `/etc/logrotate.d`. Tùy chỉnh cấu hình cho **rotating log files** cũng có thể cấu hình trong file `/etc/logrotate.conf` với  tham số`include`. Trong Debian để hiển thị nội dung của thư mục `/etc/logrotate.d`:

ls -l /etc/logrotate.d

total 32

-rw-r--r-- 1 root root 120 Jan 30 2021 alternatives

-rw-r--r-- 1 root root 173 Jun 10 2021 apt

-rw-r--r-- 1 root root 130 Oct 14 2019 btmp

-rw-r--r-- 1 root root 160 Oct 19 2021 chrony

-rw-r--r-- 1 root root 112 Jan 30 2021 dpkg

-rw-r--r-- 1 root root 374 Feb 17 2021 rsyslog

-rw-r--r-- 1 root root 235 Feb 19 2021 unattended-upgrades

-rw-r--r-- 1 root root 145 Oct 14 2019 wtmp

Nội dung của `rsyslog` : cách chương sử dụng lại một số log files:

cat /etc/logrotate.d/rsyslog

/var/log/syslog

/var/log/mail.info

/var/log/mail.warn

/var/log/mail.err

/var/log/mail.log

/var/log/daemon.log

/var/log/kern.log

/var/log/auth.log

/var/log/user.log

/var/log/lpr.log

/var/log/cron.log

/var/log/debug

/var/log/messages

{

rotate 4

weekly

missingok

notifempty

compress

delaycompress

sharedscripts

postrotate

/usr/lib/rsyslog/rsyslog-rotate

endscript

}

Như bạn có thể thấy file `messages` sẽ được khởi tạo lại mỗi đầu tuần với lưu giữ 4 file nén của rotation logs file . Các log files khác được rotate hàng tuần.

Đáng chú ý là tham số `postrotate`.  sau quá trình log rotation hoàn tất, logrotate sẽ chạy script ở đường dẫn `/usr/lib/rsyslog/rsyslog-rotate`.

Bước 6 - Kiểm tra rotating log files

`logrotate`có thể được chạy thủ công.  Để làm điều này, ta chỉ định file cấu hình trong thư mục `/etc/logrotate.d`.

Để xem cách thức hoạt động của tính năng này, đây là danh sách một phần các log files trong `/var/log`thư mục trong máy chủ CentOS:

ls -l /var/log

total 49324

-rw-------. 1 root root 84103 Jan 3 17:20 messages

-rw-------. 1 root root 165534 Dec 10 23:12 messages-20221211

-rw-------. 1 root root 254743 Dec 18 00:00 messages-20221218

-rw-------. 1 root root 217810 Dec 25 00:00 messages-20221225

-rw-------. 1 root root 237726 Dec 31 23:45 messages-20230101

drwx------. 2 root root 6 Mar 2 2022 private

drwxr-xr-x. 2 root root 6 Feb 24 2022 qemu-ga

lrwxrwxrwx. 1 root root 39 Mar 2 2022 README -> ../../usr/share/doc/systemd/README.logs

-rw-------. 1 root root 2514753 Jan 3 17:25 secure

-rw-------. 1 root root 2281107 Dec 10 23:59 secure-20221211

-rw-------. 1 root root 9402839 Dec 17 23:59 secure-20221218

-rw-------. 1 root root 8208657 Dec 25 00:00 secure-20221225

-rw-------. 1 root root 7081010 Dec 31 23:59 secure-20230101

drwxr-x---. 2 sssd sssd 6 Jan 17 2022 sssd

-rw-------. 1 root root 0 Dec 8 22:11 tallylog

-rw-rw-r--. 1 root utmp 2688 Jan 3 16:22 wtmp

Một phần nội dung của file `logrotate.conf` trông như thế này:

cat /etc/logrotate.conf

# see "man logrotate" for details

# global options do not affect preceding include directives

# rotate log files weekly

weekly

# keep 4 weeks worth of backlogs

rotate 4

# create new (empty) log files after rotating old ones

create

# use date as a suffix of the rotated file

dateext

# uncomment this if you want your log files compressed

#compress

# packages drop log rotation information into this directory

include /etc/logrotate.d

# system-specific logs may be also be configured here.

Tiếp theo bạn chạy `logrotate`lệnh:

logrotate -fv /etc/logrotate.conf

Sau khi chạy câu lệnh trên console khi đó có thông báo cho quá trình rotation log files. Kiểm tra các file `kern`, `wtmp`, `syslog` để xem lại thành quả:

ls -l /var/log/kern*

-rw-r----- 1 syslog adm 0 Thg 4 13 13:18 kern.log

-rw-r----- 1 syslog adm 289K Thg 4 13 13:18 kern.log.1

-rw-r----- 1 syslog adm 67K Thg 4 9 00:00 kern.log.2.gz

-rw-r----- 1 syslog adm 26K Thg 4 2 00:00 kern.log.3.gz

-rw-r----- 1 syslog adm 26K Thg 3 25 20:32 kern.log.4.gz

```

ls -l /var/log/wtmp*

-rw-rw-r-- 1 root utmp 0 Thg 4 13 13:18 wtmp

-rw-rw-r-- 1 root utmp 240K Thg 4 13 12:48 wtmp.1

```

ls -l /var/log/syslog*

-rw-r----- 1 syslog adm 358K Thg 4 13 13:20 syslog

-rw-r----- 1 syslog adm 157M Thg 4 13 13:18 syslog.1

-rw-r----- 1 syslog adm 4,6M Thg 4 9 00:00 syslog.2.gz

-rw-r----- 1 syslog adm 2,8M Thg 4 2 00:00 syslog.3.gz

-rw-r----- 1 syslog adm 751K Thg 3 26 00:00 syslog.4.gz

Như chúng ta có thể thấy, cả ba log files mới đã được tạo. Các file `wtmp` và `kern` vẫn còn trống, nhưng file `syslog` mới đã có một số dữ liệu trong đó.

Kết luận

Trên đây những kiến thức về hệ thống log là gì và quy trình các cài đặt log cho hệ thống cơ bản nhất. Hy vọng rằng hướng dẫn này đã cung cấp cho bạn một số ý tưởng về cấu hình log cho các Cloud Server Linux của bạn. Bạn cũng có thể phát triển hoặc tạo một hệ thống thử nghiệm để có thể thử nghiệm cho hệ thống của mình. Khi bạn đã quen thuộc với vị trí của các log files và các cấu hình liên quan đến log files, hãy sử dụng chúng vào hệ thống của bạn. Hãy theo dõi tiếp những bài viết của Bizfly Cloud để nhận được các thông tin hữu ích khác nhé!

>> Có thể bạn quan tâm: Cách kiểm tra hiệu năng trên Cloud Server Linux

SHARE