
Đối với người quản trị hệ thống mạng thì việc monitor và troubleshoot hệ thống là công việc thiết yếu thường phải thực hiện thường xuyên. Trong bài viết này mình sẽ giới thiệu một số công cụ nhỏ nhưng hiệu quả cao, đa số đều có sẵn trên hệ điều hành Linux để giúp chúng ta có thể thực hiện được công việc quản trị tốt hơn khi làm việc trong môi trường dòng lệnh.
1) sar
Sử dụng tiện ích sar chúng ta có thể làm việc là: monitor hiệu suất hoạt động của hệ thống theo thời gian thực (CPU, Memory, I/O,…) và thu thập các dữ liệu của các tiến trình đang xử lý để đưa ra thống kê và xử lý tắt nghẽn.
- Một vài nội dung chúng ta có thể sử dụng sar để xem:
- Tài nguyên CPU được sử dụng.
- Tài nguyên CPU được sử dụng theo từng core.
- Tình trạng bộ nhớ RAM.
- Tình trạng bộ nhớ SWAP.
- Tình trạng I/O trên hệ thống.
- Thống kê về mạng.
- Đưa ra các báo cáo từ khoản thời gian nào đó.
- …
# sar -b 1 3
[root@server ~]# sar -b 1 3 Linux 2.6.32-71.el6.x86_64 (server.khanh.com.vn) 01/09/2012 _x86_64_(1 CPU) 03:54:28 PM tps rtps wtps bread/s bwrtn/s 03:54:29 PM 346.00 264.00 82.00 2208.00 768.00 03:54:30 PM 100.00 36.00 64.00 304.00 816.00 03:54:31 PM 282.83 32.32 250.51 258.59 2537.37 Average: 242.81 111.04 131.77 925.75 1369.90
2) lostat
iostat sẽ đưa ra các thống kê về CPU, disk I/O và NFS. Khi sử dụng lệnh iostat không có đối số nào chúng ta sẽ có kết quả tổng quan về tình trạng CPU, disk I/O trên hệ thống.
# iostat
[root@server ~] # iostat Linux 2.6.32-71.el6.x86_64 (server.khanh.com.vn) 01/09/2012 _x86_64_(1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 5.68 0.00 0.52 2.03 0.00 91.76 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 194.72 1096.66 1598.70 2719068704 3963827344 sda1 178.20 773.45 1329.09 1917686794 3295354888 sda2 16.51 323.19 269.61 801326686 668472456 sdb 371.31 945.97 1073.33 2345452365 2661206408 sdb1 371.31 945.95 1073.33 2345396901 2661206408 sdc 408.03 207.05 972.42 513364213 2411023092 sdc1 408.03 207.03 972.42 513308749 2411023092
Để đưa thống kê trê một ổ đĩa ta thực hiện
# iostat –p sda
[root@server ~] # iostat -p sda Linux 2.6.32-71.el6.x86_64 (server.khanh.com.vn) 01/09/2012 avg-cpu: %user %nice %system %iowait %steal %idle 5.68 0.00 0.52 2.03 0.00 91.76 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 194.69 1096.51 1598.48 2719069928 3963829584 sda2 336.38 27.17 54.00 67365064 133905080 sda1 821.89 0.69 243.53 1720833 603892838
Chú ý: iostat là một phần của gói systat, vì thế trức khi sử dụng được lệnh iostat thì bạn cần cài đặt gói systat trước.
3) mpstat
Lệnh mpstat sẽ đưa ra các thống kê chi tiết về tình trạng xứ lý của CPU. Với tham số “-A” chúng ta có thể xem được tất cả các thống kê này.
# mpstat –A
[root@server ~]# mpstat -A Linux 2.6.32-71.el6.x86_64 (server.khanh.com.vn) 01/09/2012 _x86_64_(1 CPU) 03:34:27 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 03:34:27 PM all 0.15 0.01 0.34 1.16 0.00 0.11 0.00 0.00 98.23 03:34:27 PM 0 0.15 0.01 0.34 1.16 0.00 0.11 0.00 0.00 98.23 03:34:27 PM CPU intr/s 03:34:27 PM all 31.60 03:34:27 PM 0 10.35 03:34:27 PM CPU 0/s 1/s 3/s 4/s 7/s 8/s 9/s 12/s 14/s 15/s 16/s 17/s 18/s 19/s 24/s 25/s 26/s 27/s 28/s 29/s 30/s 31/s 32/s 33/s 34/s 35/s 36/s 37/s 38/s 39/s 40/s 41/s 42/s 43/s 44/s 45/s 46/s 47/s 48/s 49/s 50/s 51/s 52/s 53/s 54/s 55/s NMI/s LOC/s SPU/s PMI/s PND/s RES/s CAL/s TLB/s TRM/s THR/s MCE/s MCP/s ERR/s MIS/s 03:34:27 PM 0 0.06 0.00 0.00 0.00 0.00 0.00 0.00 0.04 0.00 0.06 0.00 3.17 0.00 7.01 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 21.25 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
# mpstat -P ALL
4) vmstat
Lệnh vmstat sẽ đưa ra các thống kê chi tiết về tình trạng bộ nhớ ảo. Ví dụ
# vmstat
[root@server ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 724176 20316 144060 0 0 60 13 30 120 0 0 98 1 0
5) ps
Một lệnh khác cũng khá quen thuộc với người sử dụng Linux đó là lệnh ps. Lệnh này giúp ta liệt kê các tiến trình đang chạy trên hệ thống và nhiều thông tin liên quan khác giúp ta xử lý được các sự cố xảy ra.
Để liệt kê các tiến trình đang chạy trên hệ thống
# ps –ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 14:51 ? 00:00:01 /sbin/init
root 2 0 0 14:51 ? 00:00:00 [kthreadd]
root 3 2 0 14:51 ? 00:00:00 [migration/0]
root 4 2 0 14:51 ? 00:00:00 [ksoftirqd/0]
root 5 2 0 14:51 ? 00:00:00 [watchdog/0]
root 6 2 0 14:51 ? 00:00:00 [events/0]
root 7 2 0 14:51 ? 00:00:00 [cpuset]
root 8 2 0 14:51 ? 00:00:00 [khelper]
root 9 2 0 14:51 ? 00:00:00 [netns]
root 10 2 0 14:51 ? 00:00:00 [async/mgr]
root 11 2 0 14:51 ? 00:00:00 [pm]
root 12 2 0 14:51 ? 00:00:00 [sync_supers]
root 13 2 0 14:51 ? 00:00:00 [bdi-default]
root 14 2 0 14:51 ? 00:00:00 [kintegrityd/0]
root 15 2 0 14:51 ? 00:00:00 [kblockd/0]
root 16 2 0 14:51 ? 00:00:00 [kacpid]
root 17 2 0 14:51 ? 00:00:00 [kacpi_notify]
root 18 2 0 14:51 ? 00:00:00 [kacpi_hotplug]
root 19 2 0 14:51 ? 00:00:00 [ata/0]
root 20 2 0 14:51 ? 00:00:00 [ata_aux]
root 21 2 0 14:51 ? 00:00:00 [ksuspend_usbd]
root 22 2 0 14:51 ? 00:00:00 [khubd]
root 23 2 0 14:51 ? 00:00:00 [kseriod]
root 25 2 0 14:51 ? 00:00:00 [khungtaskd]
....
Để hiển thị chi tiết hơn ta có thể sử dụng lệnh # ps -aux
[root@server ~]# ps -aux Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 19236 1424 ? Ss 14:51 0:01 /sbin/init root 2 0.0 0.0 0 0 ? S 14:51 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 14:51 0:00 [migration/0] root 4 0.0 0.0 0 0 ? S 14:51 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S 14:51 0:00 [watchdog/0] root 6 0.0 0.0 0 0 ? S 14:51 0:00 [events/0] root 7 0.0 0.0 0 0 ? S 14:51 0:00 [cpuset] root 8 0.0 0.0 0 0 ? S 14:51 0:00 [khelper] root 9 0.0 0.0 0 0 ? S 14:51 0:00 [netns] root 10 0.0 0.0 0 0 ? S 14:51 0:00 [async/mgr] ...
# ps -f -u apache,nginx
[root@server ~]# ps -f -u apache,nginx UID PID PPID C STIME TTY TIME CMD apache 1423 1422 0 14:51 ? 00:00:00 php-fpm: pool www apache 1424 1422 0 14:51 ? 00:00:00 php-fpm: pool www apache 1425 1422 0 14:51 ? 00:00:00 php-fpm: pool www apache 1426 1422 0 14:51 ? 00:00:00 php-fpm: pool www apache 1427 1422 0 14:51 ? 00:00:00 php-fpm: pool www nginx 1437 1435 0 14:51 ? 00:00:00 nginx: worker process
6) free
Lệnh free sẽ cho chúng ta thống kê về tình trạng sử dụng của dung lượng RAM và SWAP của hệ thống. Ví dụ
# free
[root@server ~]# free total used free shared buffers cached Mem: 1020532 296852 723680 0 20444 144180 -/+ buffers/cache: 132228 888304 Swap: 4128760 0 4128760
7) top
Cũng là một trong số các lệnh cơ bản và được build sẵn trong hầu hết các hệ điều hành linux/unix. Lệnh top giúp chung ta có cái nhìn tổn quát về các tiến trình đang chạy trên hệ thống bao gồm nhiều thông tin như PID, PPID, %CPU, %MEM,…
# top
[root@server ~]# top top - 15:58:50 up 1:07, 1 user, load average: 0.00, 0.00, 0.00 Tasks: 88 total, 1 running, 87 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1020532k total, 297108k used, 723424k free, 20540k buffers Swap: 4128760k total, 0k used, 4128760k free, 144276k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 19236 1424 1148 S 0.0 0.1 0:01.46 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 4 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0 5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0 ....
# top –u apache
[root@server ~]# top -u apache top - 16:01:54 up 1:10, 1 user, load average: 0.00, 0.00, 0.00 Tasks: 88 total, 1 running, 87 sleeping, 0 stopped, 0 zombie Cpu(s): 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1020532k total, 297240k used, 723292k free, 20580k buffers Swap: 4128760k total, 0k used, 4128760k free, 144276k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1423 apache 20 0 358m 4400 912 S 0.0 0.4 0:00.00 php-fpm 1424 apache 20 0 358m 4400 912 S 0.0 0.4 0:00.00 php-fpm 1425 apache 20 0 358m 4400 912 S 0.0 0.4 0:00.00 php-fpm 1426 apache 20 0 358m 4400 912 S 0.0 0.4 0:00.00 php-fpm 1427 apache 20 0 358m 4400 912 S 0.0 0.4 0:00.00 php-fpm
8) pmap:
Lệnh pmap sẽ hiển thị bản đồ về bộ nhớ được cấp phát cho các tiến trình đang chạy trên hệ thống. Để sử dụng được lệnh pmap đầu tiên ta cần phải xác định trước pid của một tiến trình (chẳn hạn sử dụng lệnh ps –aux để biết). Ví dụ mình sử dụng lệnh pmap để xem bản đồ về bộ nhớ của tiến trình có pid là 1423
[root@server ~]# pmap 1423 1423: php-fpm: pool www 0000000000400000 2900K r-x-- /usr/sbin/php-fpm 00000000008d5000 336K rw--- /usr/sbin/php-fpm 0000000000929000 112K rw--- [ anon ] 0000000000b28000 44K rw--- /usr/sbin/php-fpm 00000000025c9000 2656K rw--- [ anon ] 0000003e47200000 120K r-x-- /lib64/ld-2.12.so 0000003e4741e000 4K r---- /lib64/ld-2.12.so 0000003e4741f000 4K rw--- /lib64/ld-2.12.so 0000003e47420000 4K rw--- [ anon ] 0000003e47600000 8K r-x-- /lib64/libdl-2.12.so (deleted) 0000003e47602000 2048K ----- /lib64/libdl-2.12.so (deleted) 0000003e47802000 4K r---- /lib64/libdl-2.12.so (deleted) 0000003e47803000 4K rw--- /lib64/libdl-2.12.so (deleted) 0000003e47a00000 1492K r-x-- /lib64/libc-2.12.so 0000003e47b75000 2048K ----- /lib64/libc-2.12.so 0000003e47d75000 16K r---- /lib64/libc-2.12.so 0000003e47d79000 4K rw--- /lib64/libc-2.12.so 0000003e47d7a000 20K rw--- [ anon ] …
9) Tcpdump
Có lẽ đây là một lệnh quen thuộc mà bất kỳ người quản trị hệ thống mạng Linux/Unix đều biết

# tcpdum –i eth1
[root@server ~]# tcpdump -i eth1 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes 15:18:46.719161 IP 192.168.1.111.ssh >; 192.168.1.13.valisys-lm: Flags [P.], seq 1756740101:1756740297, ack 3536611579, win 142, length 196 15:18:46.719474 IP 192.168.1.13.valisys-lm >; 192.168.1.111.ssh: Flags [.], ack 196, win 4305, length 0 15:18:46.719861 IP 192.168.1.111.43629 >; google-public-dns-a.google.com.domain: 49260+ PTR? 13.1.168.192.in-addr.arpa. (43)
Bắt gói tin từ eth1 và lưu vào tệp tin thongke.pcap
# tcpdump -w thongke.pcap -i eth1
[root@server ~]# tcpdump -w thongke.pcap -i eth1 tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes 9 packets captured 9 packets received by filter 0 packets dropped by kernel
10) netstat:
Đối với các quản trị mạng thì chắc hẳn không ai bỏ qua lệnh này

Để liệt kê tất cả các port đang được sử dụng
# netstat -a | more
[root@server ~]# netstat -a | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address Stat
e
tcp 0 0 localhost.locald:cslistener *:* LIST
EN
tcp 0 0 *:sunrpc *:* LIST
EN
tcp 0 0 *:http *:* LIST
EN
tcp 0 0 *:ssh *:* LIST
EN
tcp 0 0 localhost.localdomain:smtp *:* LIST
EN
tcp 0 0 *:51709 *:* LIST
EN
tcp 0 52 192.168.1.111:ssh 192.168.1.13:7104 ESTA
Để xác định tiến trình nào đang sử dụng port 80
# netstat -an | grep 80
[root@server ~]# netstat -an | grep 80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN unix 2 [ ACC ] STREAM LISTENING 9808 /var/run/abrt/abrt.socket unix 2 [ ] DGRAM 9803
Liệt kê các interfaces có trong hệ thống
# netstat -i
[root@server ~]# netstat -i Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth1 1500 0 13914 0 0 0 18406 0 0 0 BMRU lo 16436 0 0 0 0 0 0 0 0 0 LRU
Hiển thị bảng định tuyến
# netstat –r
[root@server ~]# netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 192.168.1.0 * 255.255.255.0 U 0 0 0 eth1 link-local * 255.255.0.0 U 0 0 0 eth1 default my.router 0.0.0.0 UG 0 0 0 eth1
11) lsof:
Lsof viết tắt của ls open files, với lệnh này chúng ta có thể liệt kê tất cả các file đang được mở trên hệ thống. Những file này bao gồm file về kết nối mạng, thiết bị, thư mục. Output của lệnh lsof có những cột như:
- COMMAND: Tên của process
- PID: PID của process
- USER: Tên của user thực hiện process đó
- FD: File decriptor
- TYPE: Loại file
- DEVICE: Device number
- SIZE: Kích thước
- NODE: Số hiệu node
- NAME: Đường dẫn đầy đủ của file
# lsof
[root@server ~]# lsof | more COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME init 1 root cwd DIR 144,98 4096 54759537 / init 1 root rtd DIR 144,98 4096 54759537 / init 1 root txt REG 144,98 40968 199737498 /sbin/init init 1 root mem REG 144,98 137344 81322956 /lib64/ld-2.5.so init 1 root mem REG 144,98 245232 81322958 /lib64/libsepol.so.1 init 1 root mem REG 144,98 92960 81322884 /lib64/libselinux.so.1 ...
# lsof -u apache
[root@server ~]# lsof -u apache COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME httpd 2017 apache cwd DIR 144,98 4096 54759537 / httpd 2017 apache rtd DIR 144,98 4096 54759537 / httpd 2017 apache txt REG 144,98 331048 81346804 /usr/sbin/httpd httpd 2017 apache mem REG 144,98 137344 81322956 /lib64/ld-2.5.so httpd 2017 apache mem REG 144,98 611880 81322899 /lib64/libm-2.5.s o httpd 2017 apache mem REG 144,98 127720 81322853 /lib64/libpcre.so .0.0.1 httpd 2017 apache mem REG 144,98 92960 81322884 /lib64/libselinux .so.1 httpd 2017 apache mem REG 144,98 108136 81351015 /usr/lib64/libapr util-1.so.0.2.7 ...
Để liệt kê danh sách các user đang sử dụng trình soạn thảo vi
# lsof /bin/vi
[root@server ~]# lsof /bin/vi COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME vi 7258 root txt REG 8,1 474608 475196 /bin/vi vi 7300 khanhnd txt REG 8,1 474608 475196 /bin/vi
12) w và uptime:
Với lệnh rất ngắn “w” sẽ cho chúng ta biết được những user nào đã đăng nhập vào hệ thống
# w
[root@server ~]# w 20:01:32 up 22 days, 23:18, 2 users, load average: 0.01, 0.07, 0.07 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 123.20.50.205 19:51 0.00s 0.09s 0.00s w khanhnd pts/1 123.20.50.205 20:01 3.00s 0.00s 0.00s -bash
- USER: Tên của user đăng nhập
- TTY: Đăng nhập trên tty nào?
- FROM: Địa chỉ IP của client đăng nhập.
- LOGIN@: Thời gian đăng nhập.
- …
# uptime
[root@server ~]# uptime 19:59:38 up 22 days, 23:16, 1 user, load average: 0.08, 0.11, 0.08
Chú ý: Cả 2 lệnh w và uptime đều lấy dữ liệu từ /var/run/utmp
13) /proc
/proc là thư mục chứa các tệp tin chứa thông tin về hệ thống như cpuinfo, devices, dma, filesystems, locks, meminfo,…
Ví dụ để đọc thông tin cpu
# cat /proc/cpuinfo
[root@server proc]# cat /proc/cpuinfo processor : 0 vendor_id : AuthenticAMD cpu family : 16 model : 8 model name : AMD Opteron(tm) Processor 4180 stepping : 1 cpu MHz : 2600.049 cache size : 512 KB physical id : 1 siblings : 6 core id : 0 cpu cores : 6 apicid : 8 fpu : yes fpu_exception : yes cpuid level : 5 wp : yes ...
14) vnStat
vnStat là một công cụ nhỏ gọn chạy ở chế độ console giúp chúng ta có thể monitor lưu lượng mạng trên từng interface của hệ thống Linux. Ở bài viết “Giám sát lưu lượng mạng trong Linux với tiện ích vnStat” mình cũng đã trình bày cách cài đặt cũng như sử dụng vnStat rồi

# vnstat
[root@server ~]# vnstat Database updated: Sun Jan 8 22:30:16 2012 eth1 since 01/08/12 rx: 273 KiB tx: 98 KiB total: 371 KiB monthly rx | tx | total | avg. rate ------------------------+-------------+-------------+--------------- Jan '12 273 KiB | 98 KiB | 371 KiB | 0.00 kbit/s ------------------------+-------------+-------------+--------------- estimated -- | -- | -- | daily rx | tx | total | avg. rate ------------------------+-------------+-------------+--------------- today 273 KiB | 98 KiB | 371 KiB | 0.04 kbit/s ------------------------+-------------+-------------+--------------- estimated -- | -- | -- |
15) ss
ss viết tắt của Socket Statistics. Lệnh này cũng tương tự như lệnh netstat vậy.
Để hiển thị tất cả các socket đang lắng nghe
# ss -l
[root@server ~]# ss -l
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 0 *:mysql *:*
0 0 *:pop3 *:*
0 0 *:imap *:*
0 0 *:http *:*
0 0 *:ndmp *:*
0 0 127.0.0.1:scp-config *:*
0 0 *:ftp *:*
0 0 *:imaps *:*
0 0 *:pop3s *:*
0 0 :::webcache :::*
0 0 :::ssh :::*
Để chỉ hiển thị các kết nối đã được thiết lập
# ss –o state established
[root@server ~]# ss -o state established
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 0 180.235.134.14:http 66.249.67.105:46744
0 0 127.0.0.1:44706 127.0.0.1:webcache
0 69 180.235.134.14:36226 65.110.21.43:http timer:(on,380ms,0)
0 0 ::ffff:127.0.0.1:webcache ::ffff:127.0.0.1:44706 timer:(keepalive,119min,0)
0 596 ::ffff:180.235.134.14:ssh ::ffff:123.20.50.205:35900 timer:(on,650ms,0)
Không có nhận xét nào:
Đăng nhận xét