Loess.ru

having fun

Базовые инструменты для трассировки приложений в Linux

$ strace -e trace=open,access -o strace.log uname

$ strace -e trace=read,write -p <PID>

классы вызовов: file, process, network, signal, ipc, <etc, etc>:

-e trace=network (Trace all the network related system calls.)
-e trace=signal (Trace all signal related system calls.)
-e trace=ipc (Trace all IPC related system calls.)
-e trace=desc (Trace all file descriptor related system calls.)
-e trace=memory (Trace all memory mapping related system calls.)
(https://stackoverflow.com/questions/7482076/how-does-strace-connect-to-an-already-running-process)

Опции strace:
-i — выводить указатель на инструкцию во время выполнения системного вызова;
-k — выводить стек вызовов для отслеживаемого процесса после каждого системного вызова;
-o — выводить всю информацию о системных вызовах не в стандартный поток ошибок, а в файл;
-q — не выводить сообщения о подключении о отключении от процесса;
-qq — не выводить сообщения о завершении работы процесса;
-r — выводить временную метку для каждого системного вызова;
-s — указать максимальный размер выводимой строки, по умолчанию 32;
-t — выводить время суток для каждого вызова;
-tt — добавить микросекунды;
-ttt — добавить микросекунды и количество секунд после начала эпохи Unix;
-T — выводить длительность выполнения системного вызова;
-x — выводить все не ASCI-строки в шестнадцатеричном виде;
-xx — выводить все строки в шестнадцатеричном виде;
-y — выводить пути для файловых дескрипторов;
-yy — выводить информацию о протоколе для файловых дескрипторов;
-c — подсчитывать количество ошибок, вызовов и время выполнения для каждого системного вызова;
-O — добавить определённое количество микросекунд к счетчику времени для каждого вызова;
-S — сортировать информацию выводимую при опции -c. Доступны поля time, calls, name и nothing. По умолчанию используется time;
-w — суммировать время между началом и завершением системного вызова;
-e — позволяет отфильтровать только нужные системные вызовы или события;
-P — отслеживать только системные вызовы, которые касаются указанного пути;
-v — позволяет выводить дополнительную информацию, такую как версии окружения, статистику и так далее;
-b — если указанный системный вызов обнаружен, трассировка прекращается;
-f — отслеживать также дочерние процессы, если они будут созданы;
-ff — если задана опция -o, то для каждого дочернего процесса будет создан отдельный файл с именем имя_файла.pid.
-I — позволяет блокировать реакцию на нажатия Ctrl+C и Ctrl+Z;
-E — добавляет переменную окружения для запускаемой программы;
-p — указывает pid процесса, к которому следует подключиться;
-u — запустить программу, от имени указанного пользователя.

ldd — показывает список совместно используемых библиотек ELFфайла

$ cat ~/script.sh
while inotifywait -e modify \
/var/log/apache2/error.log;
do
tail -1 /var/log/apache2/error.log | \
notify-send "Apache needs love!"
done

incrontab:
Формат заданий:
<путь> <событие> <команда> (с разделением через пробел)

Самые интересные события:
IN_ACCESS — файл был прочитан
IN_ATTRIB — изменились метаданные файла/каталога
IN_MODIFY — файл был изменен
IN_CREATE — файл или каталог был создан в отслеживаемой директории
IN_DELETE — файл или каталог был удален в отслеживаемой директории
IN_DELETE_SELF — отслеживаемый файл или каталог был удален
IN_MOVE — файл был перемещен из отслеживаемого каталога или в него
IN_ALL_EVENTS — все события
В описании команды можно использовать внутренние переменные. Самые полезные:

$@ — полное имя отслеживаемого файла/каталога
$# — относительное имя файла, вызвавшего событие (только при мониторинге каталога)
$% — название события

https://xakep.ru/2011/01/13/54477/ (pdf)

более современные инструменты:
https://github.com/iovisor/bcc/blob/master/docs/tutorial.md
BCC is a toolkit for creating efficient kernel tracing and manipulation programs, and includes several useful tools and examples. It makes use of extended BPF (Berkeley Packet Filters), formally known as eBPF, a new feature that was first added to Linux 3.15. Much of what BCC uses requires Linux 4.1 and above.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Test your skill: *