SYSDIG(8) راهنمای مدیر سیستم SYSDIG(8)

sysdig - ابزار جامع و نهایی عیب‌یابی سیستم و فرآیندها

sysdig [گزینه]... [فیلتر]

نکته: چنانچه به رابط کاربری ساده‌تری برای استفاده از امکانات sysdig علاقه‌مندید، از ابزار خط فرمان csysdig استفاده کنید.

ابزار sysdig برنامه‌ای برای عیب‌یابی، تحلیل و کاوش در سیستم است. از این ابزار می‌توان برای ضبط، فیلتر کردن و رمزگشایی فراخوان‌های سیستمی (system calls) و سایر رویدادهای سیستم‌عامل استفاده نمود. ابزار sysdig را هم می‌توان برای بازرسی سیستم‌های زنده به کار برد و هم برای تولید فایل‌های ردگیری (trace files) که می‌توانند در مراحل بعدی مورد تجزیه و تحلیل قرار گیرند.

ابزار sysdig شامل یک زبان فیلترسازی قدرتمند است، خروجی‌های قابل سفارشی‌سازی دارد، و می‌تواند از طریق اسکریپت‌های Lua که چیسل (chisel) نامیده می‌شوند توسعه یابد.

قالب خروجی (Output format)

به‌طور پیش‌فرض، sysdig اطلاعات هر رویداد ثبت‌شده را در یک خط منفرد و با قالب زیر چاپ می‌کند:

*%evt.num %evt.time %evt.cpu %proc.name (%thread.tid) %evt.dir %evt.type %evt.info

که در آن:

  • evt.num شماره افزایشی رویداد است
  • evt.time برچسب زمان (timestamp) رویداد است
  • evt.cpu شماره پردازنده‌ای (CPU) است که رویداد در آن ضبط شده است
  • proc.name نام فرآیندی است که رویداد را ایجاد کرده است
  • thread.tid شناسه رشته‌ای (TID) است که رویداد را ایجاد کرده، که برای فرآیندهای تک‌رشته‌ای معادل PID است
  • evt.dir جهت رویداد است؛ > برای رویدادهای ورود (enter) و < برای رویدادهای خروج (exit)
  • evt.type نام رویداد است، مانند 'open' یا 'read'
  • evt.args فهرست آرگومان‌های رویداد است.

قالب خروجی را می‌توان با سوییچ -p و با استفاده از هر یک از فیلدهای فهرست‌شده توسط دستور 'sysdig -l' شخصی‌سازی کرد.

با استفاده از -pc یا -pcontainer, قالب پیش‌فرض به قالبی سازگار با کانتینرها تغییر خواهد کرد:

*%evt.num %evt.time %evt.cpu %container.name (%container.id) %proc.name (%thread.tid:%thread.vtid) %evt.dir %evt.type %evt.info

فایل‌های ردگیری (Trace Files)

یک فایل ردگیری را می‌توان با استفاده از سوییچ -w ایجاد کرد:

$ sysdig -w trace.scap

سوییچ -s می‌تواند برای تعیین تعداد بایت‌هایی از هر بافر داده که باید روی دیسک ذخیره شود، استفاده شود. همچنین از فیلترها می‌توان برای ذخیره تنها رویدادهای خاصی روی دیسک بهره گرفت:

$ sysdig -s 2000 -w trace.scap proc.name=cat

فایل‌های ردگیری را می‌توان با استفاده از سوییچ -r خواند:

$ sysdig -r trace.scap

فیلتر کردن (Filtering)

فیلترهای sysdig در انتهای خط فرمان مشخص می‌شوند. ساده‌ترین فیلتر یک بررسی پایه‌ای مقدار و فیلد است:

$ sysdig proc.name=cat

فهرست فیلدهای موجود را می‌توان با دستور 'sysdig -l' به دست آورد. عبارات فیلتر می‌توانند از یکی از این عملگرهای مقایسه‌ای استفاده کنند: =، !=، <، <=، >، >=، contains، icontains، in و exists. برای مثال:

$ sysdig fd.name contains /etc

$ sysdig "evt.type in ( 'select', 'poll' )"

$ sysdig proc.name exists

می‌توان چند بررسی را با پرانتز و عملگرهای بولی زیر ترکیب کرد: and، or، not. برای مثال:

$ sysdig "not (fd.name contains /proc or fd.name contains /dev)"

چیسل‌ها (Chisels)

چیسل‌های (chisels) sysdig اسکریپت‌های کوچکی هستند که جریان رویدادهای sysdig را به منظور انجام عملیات‌های مفید تحلیل می‌کنند. برای دریافت فهرست چیسل‌های موجود، دستور زیر را وارد کنید:

$ sysdig -cl

برای دریافت جزئیات درباره یک چیسل خاص، دستور زیر را وارد کنید:

$ sysdig -i spy_ip

برای اجرای یکی از چیسل‌ها، از فلگ -c استفاده کنید، برای مثال:

$ sysdig -c topfiles_bytes

اگر یک چیسل به آرگومان نیاز داشته باشد، آن‌ها را پس از نام چیسل مشخص می‌کنید:

$ sysdig -c spy_ip 192.168.1.157

اگر چیسل بیش از یک آرگومان داشته باشد، آن‌ها را پس از نام چیسل درون علامت نقل‌قول قرار دهید:

$ sysdig -c chisel_name "arg1 arg2 arg3"

چیسل‌ها را می‌توان با فیلترها ترکیب نمود:

$ sysdig -c topfiles_bytes "not fd.name contains /dev"

-A, --print-ascii

فقط چاپ بخش متنی بافرهای داده، و چاپ نویسه‌های انتهای خط. این گزینه برای نمایش داده‌های خوانا برای انسان مفید است.

-b, --print-base64

چاپ بافرهای داده در قالب base64. این گزینه برای کدگذاری داده‌های دودویی (باینری) که باید در محیط‌های ویژه مدیریت داده‌های متنی (مانند ترمینال یا json) استفاده شوند، کاربرد دارد.

-c chiselname chiselargs, --chisel=chiselname chiselargs

اجرای چیسل مشخص‌شده. اگر چیسل به آرگومان نیاز داشته باشد، باید در خط فرمان پس از نام آن قید شوند.

-C filesize

تقسیم عملیات ضبط به فایل‌های جداگانه، و محدود کردن اندازه هر فایل بر اساس تعداد مگابایت مشخص‌شده. واحد filesize میلیون بایت (10^6، نه 2^20) است. جهت فعال‌سازی چرخش خودکار فایل‌ها، همراه با -W استفاده شود. در غیر این صورت، ایجاد فایل‌های جدید تا زمان توقف دستی عملیات ضبط ادامه خواهد یافت.

فایل‌ها نام مشخص‌شده توسط -w را همراه با یک شمارنده که از ۰ آغاز می‌شود خواهند داشت.

-cl, --list-chisels

فهرست کردن چیسل‌های موجود. ابزار sysdig چیسل‌ها را در دایرکتوری‌های زیر جستجو می‌کند: ./chisels، ~/.chisels و /usr/share/sysdig/chisels.

-d, --displayflt

تبدیل فیلتر ارائه‌شده به فیلتر نمایشی. تنظیم این گزینه باعث می‌شود رویدادها پس از تجزیه توسط سیستم وضعیت (state system) فیلتر شوند. رویدادها معمولاً پیش از تجزیه و تحلیل فیلتر می‌شوند که کارآمدتر است، اما می‌تواند منجر به از دست رفتن وضعیت (مانند نام توصیف‌کننده‌های فایل یا FD) شود.

-D, --debug

ضبط رویدادهای مربوط به خود sysdig، نمایش رویدادهای داخلی افزون بر رویدادهای سیستم، و چاپ لاگ‌های تکمیلی روی خطای استاندارد (stderr).

-E, --exclude-users

عدم ایجاد جدول‌های کاربر/گروه از طریق استعلام از سیستم‌عامل در زمان راه‌اندازی sysdig. این همچنین بدان معناست که هیچ اطلاعات کاربری یا گروهی توسط فلگ -w در فایل ردگیری نوشته نخواهد شد. جدول‌های کاربر/گروه برای استفاده از فیلدهای فیلتر مانند user.name یا group.name ضروری هستند. با این حال، ایجاد آن‌ها می‌تواند زمان راه‌اندازی sysdig را افزایش دهد. علاوه بر این، آن‌ها حاوی اطلاعاتی هستند که ممکن است از نظر حریم خصوصی حساس باشند.

-e numevents

تقسیم عملیات ضبط به فایل‌های جداگانه، و محدود کردن اندازه هر فایل بر اساس تعداد مشخص رویدادها. همراه با -W برای فعال‌سازی چرخش خودکار فایل‌ها استفاده شود. در غیر این صورت، ایجاد فایل‌های جدید تا زمان توقف دستی عملیات ضبط ادامه می‌یابد.

فایل‌ها نام مشخص‌شده توسط -w را همراه با یک شمارنده که از ۰ آغاز می‌شود خواهند داشت.

-F, --fatfile

فعال کردن حالت fatfile. هنگام نوشتن در حالت fatfile، فایل خروجی حاوی رویدادهایی خواهد بود که هنگام خواندن فایل نامرئی هستند، اما برای بازسازی کامل وضعیت سیستم ضروری می‌باشند. حالت fatfile هنگام ذخیره رویدادها روی دیسک با فیلترهای تهاجمی و سخت‌گیرانه کاربرد دارد. چنین فیلتری ممکن است رویدادهایی را که سبب به‌روزرسانی وضعیت می‌شوند (مانند ()clone یا ()open) حذف کند. با حالت fatfile، این رویدادها همچنان در فایل ذخیره می‌شوند، اما «پنهان» خواهند بود تا در زمان خواندن فایل نمایش داده نشوند. توجه داشته باشید که استفاده از این فلگ ممکن است فایل‌های ردگیری به مراتب حجیم‌تری ایجاد کند.

--filter-proclist

اعمال فیلتر روی جدول فرآیندها. یک رونوشت کامل از دایرکتوری proc/ معمولاً در تمام فایل‌های ردگیری گنجانده می‌شود تا اطمینان حاصل شود که تمام وضعیت‌های لازم برای رمزگشایی رویدادها در فایل موجود است. این امر ممکن است باعث شود فایل شامل اطلاعات ناخواسته یا حساس باشد. استفاده از این فلگ موجب می‌شود که فیلتر خط فرمان بر روی رونوشت proc/ نیز اعمال گردد.

-G numseconds

تقسیم عملیات ضبط به فایل‌های جداگانه، و محدود کردن اندازه هر فایل بر اساس تعداد ثانیه‌های مشخص‌شده. همراه با -W برای فعال‌سازی چرخش خودکار فایل‌ها استفاده شود. در غیر این صورت، ایجاد فایل‌های جدید تا زمان توقف دستی عملیات ضبط ادامه خواهد داشت.

فایل‌ها نام مشخص‌شده توسط -w را خواهند داشت که باید شامل قالب زمانی تعریف‌شده در strftime(3) باشد. اگر قالب زمانی مشخص نشود، از یک شمارنده استفاده خواهد شد.

-h, --help

چاپ این صفحه راهنما.

-H pluginname[:initconfig], --plugin pluginname[:initconfig]

ثبت یک افزونه (پلاگین)، همراه با استفاده از پیکربندی اولیه‌سازی داده‌شده (در صورت وجود). می‌توان از یک مسیر نیز به عنوان pluginname استفاده کرد. قالب initconfig توسط افزونه تعیین می‌شود؛ برای اطلاع از آن به مستندات هر افزونه مراجعه نمایید.

-I pluginname[:openparams], --input pluginname[:openparams]

ضبط رویدادها با استفاده از افزونه با نام pluginname، و ارسال رشته openparams به عنوان پارامترها به افزونه. قالب پارامترها توسط افزونه کنترل می‌شود؛ برای آشنایی با آن به مستندات هر افزونه رجوع کنید. منابع رویداد موجود برای ضبط بسته به افزونه‌های نصب‌شده متفاوت است. می‌توانید فهرست افزونه‌های بارگذاری‌شده را با استفاده از فلگ -Il مشاهده کنید.

-Il, --list-inputs

فهرست کردن افزونه‌های بارگذاری‌شده. ابزار sysdig افزونه‌ها را در دایرکتوری‌های زیر جستجو می‌کند: ./plugins، ~/.plugins و /usr/share/sysdig/plugins.

--plugin-config-file

بارگذاری پیکربندی افزونه از یک فایل پیکربندی yaml سازگار با Falco. ترکیب این گزینه با '-H' یا '-I' پشتیبانی نمی‌شود. برای اطلاعات بیشتر بخش پلاگین را در https://falco.org/docs/configuration ببینید.

-i chiselname, --chisel-info=chiselname

دریافت توضیحات کامل‌تر و آرگومان‌های مرتبط با یک چیسل موجود در فهرست گزینه -cl.

-j, --json

تولید خروجی در قالب json؛ روش کدگذاری بافر داده به قالب چاپ انتخاب‌شده بستگی خواهد داشت.

-k, --k8s-api

فعال‌سازی پشتیبانی از کوبرنتیز (Kubernetes) از طریق اتصال به سرور API تعیین‌شده به عنوان آرگومان. مانند "http://admin:password@127.0.0.1:8080". سرور API را می‌توان از طریق متغیر محیطی SYSDIG_K8S_API نیز مشخص نمود.

-K btfile | certfile:keyfile[#password][:cacertfile], --k8s-api-cert=btfile | certfile:keyfile[#password][:cacertfile]

استفاده از نام فایل‌های ارائه‌شده برای احراز هویت کاربر و (در صورت تمایل) اعتبارسنجی هویت سرور K8S API. هر ورودی باید مسیر کامل (مطلق، یا نسبی به دایرکتوری جاری) را به فایل مربوطه مشخص کند. گذرواژه کلید خصوصی اختیاری است (تنها در صورتی که کلید با گذرواژه محافظت شده باشد لازم است). گواهی CA اختیاری است. برای تمام فایل‌ها، تنها قالب فایل PEM پشتیبانی می‌شود. مشخص کردن گواهی CA به تنهایی منسوخ شده است - اگر یک ورودی منفرد برای این گزینه داده شود، به عنوان نام فایل حاوی توکن حامل (bearer token) تفسیر خواهد شد. توجه داشته باشید که قالب این گزینه خط فرمان، استفاده از نام فایل‌هایی را که شامل نویسه‌های ':' یا '#' باشند ممنوع می‌سازد. این گزینه را می‌توان از طریق متغیر محیطی SYSDIG_K8S_API_CERT نیز مشخص نمود.

-L, --list-events

فهرست کردن رویدادهایی که موتور برنامه از آن‌ها پشتیبانی می‌کند.

-l, --list

فهرست کردن فیلدهایی که می‌توان از آن‌ها برای فیلترسازی و قالب‌بندی خروجی استفاده نمود. از -lv برای دریافت اطلاعات بیشتر در مورد هر فیلد استفاده کنید.

--list-markdown

مشابه -l، اما خروجی را در قالب مارک‌داون (Markdown) تولید می‌کند.

-m url[,marathon-url], --mesos-api=url[,marathon-url]

فعال‌سازی پشتیبانی از Mesos از طریق اتصال به سرور API ارائه‌شده به عنوان آرگومان (مانند http://admin:password@127.0.0.1:5050). آدرس URL مربوط به Mesos الزامی است. آدرس Marathon اختیاری است و به طور پیش‌فرض روی دنبال کردن خودکار (auto-follow) تنظیم است - اگر سرور API مربوط به Marathon مشخص نشود، sysdig سعی می‌کند نشانی سرور API ماراتن را از سرور مستر Mesos استعلام کند (و در صورت جابه‌جایی، متعاقباً آن را دنبال کند). توجه داشته باشید که با فعال بودن auto-follow، ابزار sysdig به احتمال زیاد آدرس IP داخلی کلاستر را برای سرور API ماراتن دریافت می‌کند، بنابراین اجرای sysdig با قابلیت auto-follow ماراتن از گرهی که عضوی از کلاستر Mesos نیست ممکن است به درستی کار نکند. علاوه بر این، اجرای sysdig با پشتیبانی Mesos روی گرهی که فاقد هرگونه کانتینر مدیریت‌شده با Mesos است فایده چندانی ندارد، زیرا اگرچه متادیتای کلاستر گردآوری می‌شود، اما امکان فیلترسازی بر اساس Mesos/Marathon در دسترس نخواهد بود. سرورهای API را می‌توان از طریق متغیر محیطی SYSDIG_MESOS_API نیز تعیین کرد.

-M num_seconds

توقف گردآوری پس از رسیدن به num_seconds ثانیه.

-n num, --numevents=num

توقف ضبط رویدادها پس از ثبت num رویداد.

--page-faults

ضبط خطاهای صفحه (page faults) عمده و جزئی در فضای کاربری و هسته.

-P, --progress

چاپ میزان پیشرفت روی خطای استاندارد (stderr) هنگام پردازش فایل‌های ردگیری.

-p outputformat, --print=outputformat

تعیین قالب مورد استفاده هنگام چاپ رویدادها. استفاده از -pc یا -pcontainer از قالبی سازگار با کانتینر استفاده خواهد کرد. استفاده از -pk یا -pkubernetes از قالبی سازگار با کوبرنتیز استفاده خواهد کرد. استفاده از -pm یا -pmesos از قالبی سازگار با Mesos استفاده خواهد کرد. تعیین گزینه -pp در خط فرمان موجب چاپ قالب پیش‌فرض خط فرمان توسط sysdig و سپس خروج از برنامه می‌شود.

-q, --quiet

عدم چاپ رویدادها روی صفحه نمایش. هنگام ذخیره‌سازی داده‌ها روی دیسک کاربرد دارد.

-r readfile, --read=readfile

خواندن رویدادها از فایل readfile.

-R, --resolve-ports

تبدیل شماره درگاه‌ها (پورت‌ها) به نام خدمات متناظر.

-S, --summary

چاپ چکیده رویدادها (یعنی فهرست رویدادهای برتر) هنگام پایان عملیات ضبط.

-s len, --snaplen=len

ضبط اولین len بایت از هر بافر ورودی/خروجی (I/O). به طور پیش‌فرض، ۸۰ بایت نخست ضبط می‌شود. از این گزینه با احتیاط استفاده کنید، زیرا می‌تواند فایل‌های ردگیری بسیار حجیمی تولید کند.

-t timetype, --timetype=timetype

تغییر نحوه نمایش زمان رویدادها. مقادیر پذیرفته‌شده عبارتند از: h برای رشته زمان خوانا توسط انسان، a برای برچسب زمان مطلق از مبدا زمان (epoch)، r برای زمان نسبی نسبت به اولین رویداد نمایش‌داده‌شده، d برای اختلاف زمان (دلتا) میان ورود و خروج رویداد، و D برای اختلاف زمان نسبت به رویداد پیشین.

-T, --force-tracers-capture

دستور به درایور جهت اطمینان از ضبط بافرهای کامل از مسیر dev/null/، به منظور اطمینان از ثبت کامل ردیاب‌ها (tracers). توجه داشته باشید که sysdig پس از تشخیص اینکه ردیاب‌ها در آن مسیر نوشته می‌شوند، قابلیت ضبط گسترش‌یافته dev/null/ را خودبه‌خود فعال می‌کند، اما این امر ممکن است سبب ناقص ماندن برخی ردیاب‌ها در ابتدای عملیات ضبط شود. این گزینه مانع از بروز این مشکل می‌شود.

--unbuffered

غیرفعال کردن بافرینگ خروجی. این امر موجب تخلیه (flush) بی‌درنگ تک‌تک خطوط تولیدشده توسط sysdig می‌شود که اگرچه مصرف پردازنده (CPU) بیشتری به همراه دارد، اما هنگام انتقال خروجی sysdig از طریق لوله (pipe) به فرآیندی دیگر یا به یک اسکریپت بسیار مفید است.

-v, --verbose

خروجی با جزئیات کامل (Verbose). این فلگ موجب می‌شود محتوای کامل بافرهای متنی و دودویی روی صفحه چاپ شود، به جای آنکه به ۴۰ نویسه کوتاه شود. توجه داشته باشید که طول بافرهای داده همچنان توسط snaplen محدود است (به مستندات فلگ -s مراجعه کنید). گزینه -v همچنین باعث می‌شود sysdig اطلاعات خلاصه‌ای را در پایان عملیات ضبط چاپ کند.

--version

چاپ شماره نسخه برنامه.

-w writefile, --write=writefile

نوشتن رویدادهای ضبط‌شده در فایل writefile.

-W num

فعال کردن چرخش فایل‌ها برای ضبط پیوسته، و محدود کردن تعداد فایل‌های ایجادشده به عدد مشخص‌شده. به محض رسیدن به این سقف، فایل‌های قدیمی‌تر بازنویسی می‌شوند (بافر حلقوی). همراه با گزینه‌های -C / -G / -e استفاده شود تا اندازه هر فایل بر اساس تعداد مگابایت، ثانیه، و/یا رویداد (به ترتیب) محدود گردد.

-x, --print-hex

چاپ بافرهای داده در قالب هگزادسیمال (hex).

-X, --print-hex-ascii

چاپ بافرهای داده در هر دو قالب هگزادسیمال و ASCII.

-z, --compress

در صورت استفاده به همراه -w، فشرده‌سازی فایل‌های ردگیری را فعال می‌کند.

ضبط تمامی رویدادها از سیستم زنده و چاپ آن‌ها روی صفحه نمایش:

$ sysdig

ضبط تمامی رویدادها از سیستم زنده و ذخیره آن‌ها روی دیسک:

$ sysdig -w dumpfile.scap

ضبط تمامی رویدادها در ۲۴ ساعت گذشته و ذخیره آن‌ها روی دیسک در قالب فایل‌هایی که هر کدام شامل ۱ ساعت فعالیت سیستم هستند:

$ sysdig -G 3600 -W 24 -w dumpfile.scap

خواندن رویدادها از یک فایل و چاپ آن‌ها روی صفحه نمایش:

$ sysdig -r dumpfile.scap

آماده‌سازی نسخه‌ای پالایش‌شده و امن از ضبط سیستم:

$ sysdig -r dumpfile.scap 'not evt.buffer contains foo' -w cleandump.scap

چاپ تمامی فراخوان‌های سیستمی open اجراشده توسط cat:

$ sysdig proc.name=cat and evt.type=open

چاپ نام فایل‌های بازشده توسط cat:

$ sysdig -p"%evt.arg.name" proc.name=cat and evt.type=open

فهرست کردن چیسل‌های موجود:

$ sysdig -cl

استفاده از چیسل spy_ip برای بررسی داده‌های تبادل‌شده با 192.168.1.157:

$ sysdig -c spy_ip 192.168.1.157

/usr/share/sysdig/chisels

دایرکتوری سراسری چیسل‌ها در سیستم.

~/.chisels

دایرکتوری شخصی کاربر برای چیسل‌ها.

•
ابزار sysdig و چیسل‌های آن برای استفاده به همراه LuaJIT در حالت Lua 5.1 طراحی شده‌اند. اگرچه امکان استفاده از sysdig با LuaJIT در حالت Lua 5.2 یا Lua معمولی وجود دارد، اما ممکن است برخی از چیسل‌ها طبق انتظار عمل نکنند.

Draios Inc. (معروف به sysdig) info@sysdigcloud.com

csysdig(8), strace(8), tcpdump(8), lsof(8)

sysdig