sysdig and strace

มี application อยู่ 2 ตัวที่ใช้สำหรับ trace ว่า โปรแกรมตัวนึงมันติดต่อผ่าน network ไปที่ไหนบ้าง

  • sysdig
  • strace

ทั้งสองตัวมีเป็น package ให้ติดตั้งแล้ใช้งานได้บน debian/ubuntu และเดาว่าน่าจะมีบน Linux distro ทั่วๆไปทั้งหมด

sysdig — ยังไม่เคยลองใช้งานจริงจังมาก่อน แต่ดูแล้ววน่าสนใจ เพราะเขียนโปรแกรมร่วมเข้าไปใช้งานในการวิเคราะห์ข้อมูลได้ (แต่ยังไม่ได้ลอง)

ตัวอย่าง จะใช้ sysdig สำหรับ trace event ที่เกิดขึ้น กับโปรแกรม ping
เราอยากจะรู้ว่า มี event อะไรเกิดขึ้นบ้างถ้าเราใช้คำสั่ง

ping -c 3 8.8.8.8

ทำได้ประมาณนี้
จาก terminal หนึ่ง ให้ run คำสั่ง

sudo sysdig proc.name='ping'

และ อีก terminal หนึ่งให้ไป run คำสั่ง

ping -c 3 8.8.8.8

ที่ terminal แรกก็จะเห็นผลลัพธ์ประมาณนี้

98006 10:06:55.851978155 3 ping (2145859.2145859) < execve res=0 exe=ping args=-c.3.8.8.8.8. tid=2145859(ping) pid=2145859(ping) ptid=2114748(bash) cwd= fdlimit=1024 pgft_maj=0 pgft_min=31 vm_size=460 vm_rss=4 vm_swap=0 comm=ping cgroups=cpuset=/user.slice.cpu=/user.slice/user-1000.slice/user@1000.service/app.slic... env=SHELL=/bin/bash.SESSION_MANAGER=local/trantor:@/tmp/.ICE-unix/16757,unix/tran... tty=34829 pgid=2145859(ping) loginuid=1000 flags=0 
98007 10:06:55.852042985 3 ping (2145859.2145859) > access mode=0(F_OK) 
98008 10:06:55.852070023 3 ping (2145859.2145859) < access res=-2(ENOENT) name=/etc/suid-debug 
98009 10:06:55.852087854 3 ping (2145859.2145859) > brk addr=0 
...

ถ้าจะดูผลเฉพาะการติดต่อกับ network (สำหรับ ping) ก็ใช้คำสั่งนี้

sudo sysdig proc.name='ping' |  grep -E 'sendto|recvmsg'

ลองดู blog ตัวนี้

https://sysdig.com/blog/sysdig-tracers/

Tag line ของ blog ก็คือ “open source transaction tracing meets htop and strace” ซึ่งจะชี้ไปที่ strace

strace — system trace เทียบกับ sysdig ที่เป็นการ trace event ที่เกิดขึ้นบนระบบทั้งหมด แล้วค่อยมา filter เลือกเอา event ที่สนใจ เช่น event ที่เกิดขึ้นจาก โปรแกรม ping ก็ใช้ proc.name=’ping’

สำหรับ strace จะใช้ในลักษณะของ wrapper ที่จะ wrap โปรแกรมนั้นและแสดง system trace ที่โปรแกรมนั้นเรียกใช้ทั้งหมด เช่น ต้องการดู trace ของ ping

ping -c 3 8.8.8.8

ก็ใช้คำสั่ง

sudo strace ping -c 3 8.8.8.8

ถ้าต้องการดูเฉพาะ network activity ก็ใช้คำสั่ง

sudo strace -e trace=network ping -c 3 8.8.8.8

ถ้าโปรแกรมที่ trace นั้นมีการ fork sub process แล้วเราต้องการ trace sub process นั้นด้วย ก็ต้องเพิ่ม option “-f” หรือ “–follow-forks”

Leave a Comment

Your email address will not be published. Required fields are marked *