Skip to content

Tìm hiểu quản lý hệ thống#

Đặt lịch#

Đặt lịch một lần với at#

Lệnh at có thể sử dụng để lên lịch đơn giản.

Ví dụ:

rootcloudtada:~# at now + 1 minutes
warning: commands will be executed using /bin/sh
at> echo hello
at> <EOT>
job 6 at Tue Jun 18 13:49:00 2019
rootcloudtada:~# at 16:50
warning: commands will be executed using /bin/sh
at> gitacp
at> <EOT>
job 7 at Tue Jun 18 16:50:00 2019

atq là lệnh để kiểm tra các job được lên lịch, bằng với lệnh at -l:

rootcloudtada:~# atq
7	Tue Jun 18 16:50:00 2019 a root
rootcloudtada:~# at -l
7	Tue Jun 18 16:50:00 2019 a root

Lệnh at có thể hiểu được các mốc thời gian bằng tiếng anh như: now, tomorow, midnight, next month, now + 2 minute (hour/week/year), ngày giờ chính xác (ví dụ: at 10:00 AM July 25 ),...

Để xóa các job được lên lịch sử dụng atrm <số của job>

/etc/at.allow/etc/at.deny là hai file dùng để quản lý những user có quyền sử dụng at để lên lịch

Cron#

crontab file là file dùng để lên lịch cho những việc lặp lại nhiều lần. Mỗi user có thể có crontab file độc lập. Thời gian trong crontab file gồm 5 cột là: phút, giờ, ngày trong tháng, tháng và ngày trong tuần. Nếu một cột được viết bởi dấu * thì nó có nghĩa là tất cả giá trị.

Ví dụ:

Chạy script99 lúc 2 giờ 8 phút mỗi ngày trong tháng, mỗi tuần và mỗi ngày trong tuần:

8 2 * * * script99

chạy script88 lúc 10 giờ 0 phút mỗi chủ nhật và thứ 4 trong tuần mỗi tháng:

0 10 * * 0,3 script88
Thay vì 5 giá trị trên, có thể gõ một trong những tùy chọn sau: @reboot, @daily, @monthly, @annually, @weekly, @midnight, @hourly và @yearly.

Người dùng được khuyên sử dụng crontab -e thay vì chỉ sửa trực tiếp crontab file.

Ngoài các crontab file của từng user thì có một crontab file cho toàn hệ thống thường là /etc/crontab. File này chỉ có superuser mới có quyền chỉnh sửa, file sẽ có thêm cột user chỉ định người dùng sẽ chạy job đó.

/etc/cron.allow/etc/cron.deny: cũng giống như at.allowat.deny thì hai file này cũng dùng để quản lý các user được sử dụng và không được sử dụng crontab.

Nếu file cron.alow tồn tại thì những user được liệt kê trong file này mới có quyền sử dụng crontab, nếu cron.allow không tồn tại thì user phải không có trong cron.deny thì mới được sử dụng.

Loging#

Login Logging#

Để theo dõi xem ai đang đăng nhập vào hệ thống, Linux có thể suy trì các file /var/log/wtmp, /var/log/btmp, /var/run/utmp/var/log/lastlog.

/var/run/utmp (who): Dùng lệnh who để xem file /var/run/utmp, file này lưu tất cả những người dùng hiện tại đang đăng nhập vào hệ thống.

lamthcloudtada:~$ who 
root     :0           2019-06-18 13:29 (:0)
lamth    pts/2        2019-06-18 15:18 (127.0.0.1)

/var/log/wtmp (last): là file được cập nhật bởi login program, nó bao gồm cả trạng thái hoạt động của hệ thông như reboot. Sử dụng lệnh last để xem file /var/log/wtmp

rootcloudtada:~# last |head -5
lamth    pts/2        127.0.0.1        Tue Jun 18 15:18   still logged in
root     :0           :0               Tue Jun 18 13:29   still logged in
reboot   system boot  4.15.0-51-generi Tue Jun 18 13:28   still running
root     :0           :0               Tue Jun 18 08:10 - down   (03:55)
reboot   system boot  4.15.0-51-generi Tue Jun 18 08:10 - 12:06  (03:56)

/var/log/lastlog (lastlog): lệnh lastlog dùng để xem file /var/log/lastlog, file này chứa tất cả các user và thông tin về lần cuối user đó đăng nhập vào hệ thống.

rootcloudtada:~# lastlog | grep -v "Never logged in"
Username         Port     From             Latest
root             tty6                      CN Thg 4 21 17:27:33 +0700 2019
lamth            pts/2    127.0.0.1        T3 Thg 6 18 15:18:53 +0700 2019

/var/log/btmp (lastb): Đây là file được cập nhật bởi login program ghi lại những lần đăng nhập thất bại, như sai mật khẩu.

Tùy vào bản phân phối, có thể có file /var/log/secure hoặc /var/log/auth.log chứa thông tin về những xác thực, như khi đăng nhập ssh, su,.. bao gồm cả những xác thực lỗi.

syslogd#

syslog: Phương thức lưu log chính trên Linux là daemon syslogd. Syslogd có thể nhận tin nhắn trên port 514 từ nhiều ứng dụng và có thể nhập vào log file, in và hiển thị lên terminal và có thể forward log đến hệ thống khác. Syslogd được cấu hình ở /etc/syslog.conf.

rsyslog: Là bản syslogd đáng tin cậy và mở rộng hơn và sử dụng daemon rsyslogd và file config là /etc/rsyslog.conf. Mỗi dòng trong file cấu hình sử dụng một facility để xác định xem tin nhắn đến từ đâu, nó cũng chứa priority để lưu mực độ nghiêm trọng của tin nhắn và action để quyết định làm gì với tin nhắn đó.Hiện nay rsyslog là phần mềm được cài đặt sẵn trên hầu hết hệ thống Unix và các bản phân phối của Linux như : Fedora, openSUSE, Debian, Ubuntu, Red Hat Enterprise Linux, FreeBSD…

Nguồn sinh ra log

Facility Number Nguồn tạo log Ý nghĩa
0 kernel Những log mà do kernel sinh ra
1 user Log ghi lại cấp độ người dùng
2 mail Log của hệ thống mail
3 daemon Log của các tiến trình trên hệ thống
4 auth Log từ quá trình đăng nhập hệ hoặc xác thực hệ thống
5 syslog Log từ chương trình syslogd
6 lpr Log từ quá trình in ấn
7 news Thông tin từ hệ thống
8 uucp Log UUCP subsystem
9 Clock deamon
10 authpriv Quá trình đăng nhập hoặc xác thực hệ thống
11 ftp Log của FTP deamon
12 Log từ dịch vụ NTP của các subserver
13 Kiểm tra đăng nhập
14 Log cảnh báo hệ thống
15 cron Log từ clock daemon
16 - 23 local 0 -local 7 Log dự trữ cho sử dụng nội bộ

Mức độ cảnh bảo

Code Mức cảnh báo Ý nghĩa
0 emerg Thông báo tình trạng khẩn cấp
1 alert Hệ thống cần can thiệp ngay
2 crit Tình trạng nguy kịch
3 error Thông báo lỗi đối với hệ thống
4 warn Mức cảnh báo đối với hệ thống
5 notice Chú ý đối với hệ thống
6 info Thông tin của hệ thống
7 debug Quá trình kiểm tra hệ thống

Xem log với tail -f#

Một cách hữu ích để theo dõi một file log là dùng lệnh tail -f để xem các dòng cuối của log thay đổi theo file.

Để lặp lại một câu lệnh, và theo dõi output của nó có thể sử dụng lệnh watch <command>

rotating log#

Logrotate là một công cụ chương trình hỗ trợ cho việc quản lý các file log trên hệ thống.

Rotate ở đây có thể hiểu là tiến trình tạo ra 1 file log mới, còn file log cũ sẽ được xử lý theo các quy định cấu hình như xoá đi/nén lại/cất đi đâu đó.

Logrotate đơn thuần là một chương trình hoạt động theo việc xếp lịch crontab chứ không phải là một dịch vụ.

Memory managerment#

/proc/meminfo#

Hiển thị file /proc/meminfo sẽ hiển thị thông tin về memory trên Linux.

[root@cloudtada ~]# cat /proc/meminfo
MemTotal:         997956 kB
MemFree:          768100 kB
MemAvailable:     746548 kB
Buffers:            2092 kB
Cached:            84868 kB
SwapCached:            0 kB
...

free#

free là lệnh để hiển thị một số thông tin trong /proc/meminfo ở dạng có dễ đọc hơn. Dùng lần lượt các tùy chọn -b, -k, -m, -g để đọc các thông số ở dạng byte, kilobyte, megabyte, gigabyte.

Ví dụ:

rootcloudtada:~# free -m
              total        used        free      shared  buff/cache   available
Mem:          15943        3442        8631        1516        3869       10836
Swap:          9764           0        9764

Trong đó, dòng Mem là thông tin về RAM vật lý và dòng Swap chứa các thông tin về bộ nhớ Swap bao gồm: - total: là tổng bộ nhớ được cài đặt(MemTotal và SwapTotal trong /proc/meminfo) - used: là bộ nhớ đã được sử dụng( được tính bằng total - free - buffer -cache) - free: là bộ nhớ không được sử dụng(MemFree và SwapFree trong /proc/meminfo) - shared: là bộ nhớ được sử dụng bởi tmfs(Shmem trong /proc/meminfo) - buffers:Bộ nhớ được sử dụng bởi kernel buffer(Buffers trong /proc/meminfo). - cache: Bộ nhớ được sử dụng bởi page cache và slabs (Cached và SReclaimable trong /proc/meminfo) - buff/cache Tổng của bộ nhớ buffer và cache. - available**: là số bộ nhớ sẵn sàng cho việc tạo một ứng dụng mới, không tính swap.

Quản lý swap#

Swap#

  • Swap là bộ nhớ được sử dụng thêm khi hệ thống cần thêm bộ nhớ so với bộ nhớ Ram vật lý đang có.
  • Swap có thể là một file, một phân vùng, hay kết hợp của file và phân vùng.
  • Hiển thị swap với câu lệnh free hoặc cat /proc/swap
rootcloudtada:~# free -m |grep -v Mem
              total        used        free      shared  buff/cache   available
Swap:          9764           0        9764
rootcloudtada:~# cat /proc/swaps
Filename				Type		Size	Used	Priority
/dev/sdb1                               partition	9999356	0	-2

Tạo phân vùn swap#

Kích hoạt hoặc tắt một swap space bằng lệnh swaponswapoff. Tạo một swap space với lệnh mkswap

Ví dụ:

[root@cloudtada ~]# mkswap /dev/sdb1 
mkswap: /dev/sdb1: warning: wiping old ext4 signature.
Setting up swapspace version 1, size = 10485756 KiB
no label, UUID=f2f3363e-fab9-4985-b33a-ef4c2f49f375
[root@cloudtada ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            974          83         758           7         132         735
Swap:             0           0           0
[root@cloudtada ~]# swapon /dev/sdb1
[root@cloudtada ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            974          91         750           7         132         727
Swap:         10240           0       10240

Swap space trong /etc/fstab#

Nếu muốn tự động thêm swap khi khởi động thì cần thêm vào /etc/fstab. Trong /etc/fstab, swap sẽ có dạng như sau: Ví dụ:

/dev/sdb1 swap swap defaults 0 0  

Resource mornitoring#

Các tài nguyên cơ bản cần theo dõi là cpu,network,bộ nhớ ram, storage.

top#

Công cụ top giúp monitor ram, cpu, swap. top sẽ tự động làm mới. Trong top có thể sử dụng nhiều câu lệnh như k để kill tiến trình, tm để chỉnh định dạng thông số task,cpu và memory,...

top - 09:52:19 up 58 min,  1 user,  load average: 0,57, 0,72, 0,84
Tasks: 371 total,   2 running, 301 sleeping,   0 stopped,   0 zombie
%Cpu(s):  7,9 us,  1,3 sy,  0,0 ni, 90,8 id,  0,0 wa,  0,0 hi,  0,0 si,  0,0 st
KiB Mem : 16326272 total,  5512916 free,  3282204 used,  7531152 buff/cache
KiB Swap:  9999356 total,  9999356 free,        0 used. 12207280 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                              
  351 lamth     20   0 1091536 284576  94740 S  32,5  1,7   8:17.47 chrome                               
 2179 lamth     20   0 3191304 166280  82052 S  14,6  1,0   1:30.69 Telegram                             
 3370 lamth     20   0  606140 125848  90984 S   7,0  0,8   2:32.31 Xorg                                 
 5023 lamth     20   0 1121096  89512  51464 S   4,0  0,5   0:35.15 python                               
 3586 lamth      9 -11 2542932  13060   9812 S   3,3  0,1   1:28.97 pulseaudio                           
 3576 lamth     20   0 4189732 427584  78020 S   3,0  2,6   3:32.87 gnome-shell  
 ```

### free

Lệnh `free`  lệnh phổ biến để monitor bộ nhớ trên Linux. Bạn  thể hiển thị thông tin lệnh free mỗi x giây với -s option.

``` bash
$ free -om -s 10
total used free shared buffers cached
Mem: 249 222 27 0 50 109
Swap: 511 0 511
total used free shared buffers cached
Mem: 249 222 27 0 50 109
Swap: 511 0 511

watch#

Lệnh watch là lệnh dùng để theo dõi output của một lệnh bằng cách thức hiện câu lệnh đó lặp lai say một khoảng thời gian. Ví dụ một trường hợp thường dùng là dùng vơi lệnh free để theo dõi bộ nhớ liên tục.

[paul@RHELv4u3 ~]$ watch -d -n 3 free -om
...
Every 3.0s: free -om Sat Jan 27 12:13:03 2007
total used free shared buffers cached
Mem: 249 230 19 0 56 109
Swap: 511 0 511

vmstat#

Để theo dõi số liệu thống kê CPU, disk và bộ nhớ trong một dòng dùng vmstat. Ví dụ bên dưới hiển thị vmstat chạy cứ sau hai giây 100 lần (hoặc cho đến khi Ctrl-C). Bên dưới r, bạn thấy số lượng tiến trình đang chờ CPU, sleep process ở dưới b. Swap được sử dụng (swpd) không đổi ở mức 144 kilobyte, bộ nhớ trống giảm từ 16,7 MB đến 12,9 MB,...

$ vmstat 2 100
procs ----------memory--------- --swap-- ---io--- --system-- ---cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 144 16708 58212 111612 0 0 3 4 75 62 0 1 99 0
0 0 144 16708 58212 111612 0 0 0 0 976 22 0 0 100 0
0 0 144 16708 58212 111612 0 0 0 0 958 14 0 1 99 0
1 0 144 16528 58212 111612 0 0 0 18 1432 7417 1 32 66 0
1 0 144 16468 58212 111612 0 0 0 0 2910 20048 4 95 1 0
1 0 144 16408 58212 111612 0 0 0 0 3210 19509 4 97 0 0
1 0 144 15568 58816 111612 0 0 300 1632 2423 10189 2 62 0 36
0 1 144 13648 60324 111612 0 0 754 0 1910 2843 1 27 0 72
0 0 144 12928 60948 111612 0 0 312 418 1346 1258 0 14 57 29
0 0 144 12928 60948 111612 0 0 0 0 977 19 0 0 100 0
0 0 144 12988 60948 111612 0 0 0 0 977 15 0 0 100 0
0 0 144 12988 60948 111612 0 0 0 0 978 18 0 0 100 0

iostat#

Công cụ iostat hiển thị trạng thái disk và cpu. Option -d để chỉ hiển thị thông tin của disk.

lamthcloudtada:~$ iostat -d
Linux 4.15.0-51-generic (m4700) 	19/06/2019 	_x86_64_	(8 CPU)

Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
loop0             0,05         0,25         0,00       1268          0
loop1             0,03         0,24         0,00       1176          0
loop2             4,93         5,13         0,00      25664          0
loop3             0,01         0,07         0,00        328          0
loop4             0,01         0,02         0,00        112          0
loop5             0,01         0,03         0,00        132          0
loop6             0,00         0,01         0,00         54          0
loop7             0,01         0,02         0,00        121          0
sda               0,04         1,67         0,00       8372          0
sdb              25,89       446,51      1100,21    2234203    5505152

mpstat#

mpstat là lệnh dùng để hiển thị trạng thái về cpu, hiển thị trạng thái của tất cả các cpu bằng cách thêm option -P ALL, hoặc có thể chỉ hiển thị một cpu nào đó.

lamthcloudtada:~$ mpstat -P ALL
Linux 4.15.0-51-generic (m4700) 	19/06/2019 	_x86_64_	(8 CPU)

10:22:02     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
10:22:02     all    6,44    0,02    1,66    0,16    0,00    0,01    0,00    0,00    0,00   91,70
10:22:02       0    6,79    0,04    1,54    0,07    0,00    0,03    0,00    0,00    0,00   91,53
10:22:02       1    6,66    0,03    1,48    0,05    0,00    0,02    0,00    0,00    0,00   91,75
10:22:02       2    6,46    0,00    1,51    0,10    0,00    0,04    0,00    0,00    0,00   91,88
10:22:02       3    6,96    0,01    1,61    0,62    0,00    0,02    0,00    0,00    0,00   90,79
10:22:02       4    6,21    0,00    1,46    0,14    0,00    0,00    0,00    0,00    0,00   92,19
10:22:02       5    5,74    0,00    2,32    0,10    0,00    0,00    0,00    0,00    0,00   91,84
10:22:02       6    6,36    0,08    1,61    0,11    0,00    0,00    0,00    0,00    0,00   91,84
10:22:02       7    6,33    0,00    1,78    0,07    0,00    0,00    0,00    0,00    0,00   91,82
lamthcloudtada:~$ 

nmon và htop#

nmonhtop cũng là hai công cụ phổ biến dùng để giám sát, quản lý các thông số tài nguyên của hệ thống.

Cấu hình rsyslog#

File cấu hình rsyslog#

  • Trên Centos, file cấu hình của rsyslog là /etc/rsyslog.conf. File bao gồm cả các rule về log.
  • Trên Ubuntu, file cấu hình của rsyslog là /etc/rsyslog.conf. Nhưng các các file cấu hình rule của log thì ở /etc/rsyslog.d/50-defaul.conf.

File cấu hình và khai báo rule trong centos#

# rsyslog configuration file

# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html

#### MODULES ####

# The imjournal module bellow is now used as a message source instead of imuxsock.
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
#$ModLoad imklog # reads kernel messages (the same are read from journald)
#$ModLoad immark  # provides --MARK-- message capability

# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514

# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514


#### GLOBAL DIRECTIVES ####

# Where to place auxiliary files
$WorkDirectory /var/lib/rsyslog

# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

# File syncing capability is disabled by default. This feature is usually not required,
# not useful and an extreme performance hit
#$ActionFileEnableSync on

# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf

# Turn off message reception via local log socket;
# local messages are retrieved through imjournal now.
$OmitLocalLogging on

# File to store the position in the journal
$IMJournalStateFile imjournal.state


#### RULES ####

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog


# Log cron stuff
cron.*                                                  /var/log/cron

# Everybody gets emergency messages
*.emerg                                                 :omusrmsg:*

# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log


# ### begin forwarding rule ###
# The statement between the begin ... end define a SINGLE forwarding
# rule. They belong together, do NOT split them. If you create multiple
# forwarding rules, duplicate the whole block!
# Remote Logging (we use TCP for reliable delivery)
#
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
#$ActionQueueFileName fwdRule1 # unique name prefix for spool files
#$ActionQueueMaxDiskSpace 1g   # 1gb space limit (use as much as possible)
#$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
#$ActionQueueType LinkedList   # run asynchronously
#$ActionResumeRetryCount -1    # infinite retries if host is down
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
#*.* @@remote-host:514
# ### end of the forwarding rule ###

Một rule có hai trường là SelectorAction. Trong đó:

  • Trường Selector chỉ ra nguồn tạo ra log và mức độ cảnh báo mà nó muốn chọn để thực hiện hành động ở trường Action. Hai thành phần trong Selector được ngăn cách bởi dấu chấm. Có thể thêm mục ở phần selector với dấu chấm phẩy.
  • Trường Action: là trường dùng để xác định hành động sẽ áp dụng với log được chọn ở phần selector. Có thể lưu log đến một file nào đó, gửi log đến user, hoặc gửi log đến một server khác qua mạng.

Ví dụ:

cron.info       /var/log/cron
Rule trên sẽ chọn log sinh ra bởi tiến trình cron trong hệ thống ở tất cả mức độ cảnh báo từ mức info đổ lên và lưu vào file /var/log/cron. Một số ký tự đặc biệt như * là chọn tất cả, ! chọn tất cả trừ mục sau dấu chấm than, = chỉ chọn mục sau dấu bằng.

Ví dụ:

*.info;mail.none;user.!notice      /var/log/message

Rule trên sẽ chọn log sinh ra từ tất cả các nguồn và từ mức độ info trở lên nhưng không lưu log của mail và không lưu log mức độ notice của user. Sau đó lưu vào file /var/log/message.

Rotating log#

Roting log là quá trình giúp quản lý log bằng cách đổi tên các file log cũ để lưu log mới hoặc có thể lên lịch để xóa các log cũ sau một khoảng thời gian nhất định. Tiện ích dùng để rotating log là logrotate. File cấu hình /etc/logrotate.conf, ngoài ra còn có thư mục /etc/logrotate.d chứa các cấu hình rotate log cho những phần mềm được chay cùng file logrotate.conf.

Ví dụ về file `logrotate.conf.

# see "man logrotate" for details
# 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

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
	minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

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

Trong ví dụ trên:

  • Log sẽ được rotate hàng tuần(weekly).
  • Lưu lại 4 bản log của 4 lần rotate gần nhất (rotate 4).
  • Thêm ngày dạng YYMMDD vào trong file được rotate (dateext).
  • Cấu hình rotate cho hai file /var/log/wtmp/var/log/btmp.

Mặc định logrotate sẽ được chạy định kỳ mỗi ngày một lần với file thực thi logrotate trong /etc/cron.daily. Nhưng trong file cấu hình logrotate.conf cấu hình là hàng tuần thì hàng tuần logrotate mới rotage file chứ không phải là hàng ngày.