Лучшие инструменты системного администратора

18936

Программы сисадмина

В данной статье я не буду рассказывать о Webmin, Nagios, Puppet и других анализаторах логов Apache, как вы догадались, вы должны их уже знать. А поговорим о небольших утилитах, которые упрощают жизнь системного администратора.

Tmux

Начнем c основы основ. Как мы все знаем, главный инструмент администрирования Linux — это SSH-клиент, либо из комплекта OpenSSH, либо обособленный, вроде PuTTY или даже приложения для Android. SSH-клиент позволяет открыть удаленную сессию командной строки и спокойно работать с машиной, которая находится за тысячи километров от вас. Проблема только в том, что это одна сессия и она не запоминает состояние.

Tmux решает проблему. Это терминальный мультиплексор, который позволяет открыть множество терминалов в рамках одной SSH-сессии с возможностью закрыть соединение, сохранив состояние.

Работает это так. Вы подключаетесь к удаленной машине с помощью SSH, затем устанавливаете на нее tmux и запускаете его. На экране появляется консоль tmux со строкой состояния внизу и одним запущенным в данный момент терминалом. Вы можете работать с ним так же, как обычно, плюс у вас есть возможность открывать новые терминалы с помощью Ctrl+b c и переключаться между ними с помощью Ctrl+b 0..9 или Ctrl+b p (предыдущий), Ctrl+b n (следующий).

Когда работа будет окончена, нажимаете Ctrl+b d, чтобы отключиться от tmux, и разрываете соединение с сервером. При следующем подключении вы выполняете команду

$ tmux attach

и видите все открытые ранее терминалы, запущенные в них приложения, историю команд и так далее. Все ровно так, как во время отключения от tmux. Более того, абсолютно неважно, с какой машины вы зашли во второй раз, сессия tmux будет полностью восстановлена.

Tmuxinator

Tmux позволяет не только открывать терминальные окна в полный экран. Он умеет делить экран по вертикали (Ctrl+b %) и горизонтали (Ctrl+b «). Это можно использовать в том числе для создания чего-то наподобие «экрана мониторинга»: например, вы можете запустить на удаленной машине tmux с тремя открытыми окнами, в одном из которых будет монитор htop, в другом — утилита tail, выводящая последние сообщения из нужного лога, а еще в одном — утилита df, показывающая заполненность файловых систем.

На первый взгляд такой монитор кажется очень удобным, но что, если вам необходимо закрыть его и запустить tmux с обычными полноэкранными окнами, а затем снова открыть монитор? Это можно реализовать с помощью нескольких различных tmux-сессий. Но это тоже не идеальный вариант, потому что на другом сервере вам придется настраивать ту же конфигурацию окон заново.

Tmuxinator решает задачу проще. Он позволяет описать нужную раскладку окон и запускаемые в них приложения в конфигурационном файле. Этот конфиг затем можно использовать для быстрого запуска сессии tmux в любом месте в любое время.

Для начала создаем новый конфиг:

$ tmuxinator new ИМЯ

Tmuxinator откроет дефолтовый текстовый редактор, определенный в переменной EDITOR. В конце конфига будут строки, описывающие раскладку окон. Чтобы получить раскладку из примера выше, удалите их и добавьте следующие строки:

windows:
- editor:
layout: tiled
panes:
- sudo tail -f /var/log/vsftpd.log
- watch df -h
- htop

Этот конфиг описывает раскладку tmux с одним окном, поделенным на три панели: последние сообщения лога vsftpd, заполненность ФС и htop. Остается только запустить сессию:

$ tmuxinator start ИМЯ
Инструменты системного администратора. Tmuxinator
Инструменты системного администратора. Tmuxinator

Все конфиги хранятся в каталоге ~/.tmuxinator, поэтому их легко перемещать между машинами.

Watch

Вы могли заметить, что в конфиге tmuxinator я использовал команду watch df -h вместо df -h. Это важно, так как сразу после вывода таблицы разделов на экран df завершает свою работу, а нам необходимо мониторить состояние диска постоянно. Именно это и позволяет сделать утилита watch. Каждые две секунды она перезапускает команду df -h, поэтому информация на экране всегда актуальна.

Watch можно использовать для мониторинга практически чего угодно: состояния машины (watch uptime), содержимого файлов (watch cat файл) и каталогов (watch ls -l каталог), можно запускать под управлением watch собственные скрипты. С помощью опции -n ЧИСЛО вы можете изменить интервал перезапуска команды, а с помощью флага -d заставить watch подсвечивать изменения в выводе.

Multitail

Еще одна команда из конфига tmuxinator, о которой стоит упомянуть, — это sudo tail -f /var/log/vsftpd.log. Эта команда выводит последние десять строк лога vsftpd и ждет появления новых. Любой админ должен быть знаком с tail, а также ее аналогом в дистрибутивах, основанных на systemd:

$ journalctl -f -u vsftpd

Это такое же базовое знание, как умение переходить по каталогам. Но есть у tail более интересная альтернатива под названием MultiTail. Фактически это тот же tail, но в многооконном варианте. Он позволяет выводить сразу несколько логов, разделяя экран по горизонтали:

$ sudo multitail /var/log/vsftpd.log /var/log/nginx/access.log

С systemd и его journald все опять же сложнее:

$ multitail -l "journalctl -f -u vsftpd" -l "journalctl -f -u nginx"

Даже еще сложнее:

$ multitail -l "journalctl -f -u vsftpd | tr -cd '[:space:][:print:]'" -l "journalctl -f -u nginx | tr -cd '[:space:][:print:]' "

Такой изврат нужен, чтобы удалить из логов специальные символы, которые systemd использует для подсветки строк.

Инструменты системного администратора. Multitail
Инструменты системного администратора. Multitail

MultiSSH

Вернемся к SSH. Порой одну и ту же команду приходится выполнять на нескольких машинах. Это можно сделать в том числе с помощью стандартных возможностей шелла:

for host in 192.168.0.1 192.168.0.2; do
ssh $host "uname -a"
done

Либо воспользоваться специальным инструментом, например mssh:

$ gem install mssh
$ mssh --hostlist 127.0.0.1,127.0.0.2 "uname -a

Lsof

Еще один очень важный инструмент любого сисадмина — lsof (LiSt Open Files). Эта утилита позволяет выяснить, какой процесс/приложение открыл те или иные файлы. Запущенная без аргументов, она выводит список всех открытых файлов и процессов. С помощью флагов этот список можно сделать более конкретным. Например, узнать, какие процессы используют файлы указанного каталога:

$ sudo lsof +D /var/log/

Такая возможность может очень пригодиться, когда пытаешься размонтировать файловую систему, но получаешь ошибку Device or Resource Busy. В этом случае достаточно убить процессы, открывшие файлы в указанной ФС, и вы сможете размонтировать ее без всяких проблем. Применив флаг -t, сделать это можно в один проход:

# kill -9
lsof -t +D /home

# umount /home

Вывод также можно профильтровать, используя имя нужного приложения или юзера. Например, следующая команда покажет все файлы, открытые процессами, чьи имена начинаются на ssh:

$ lsof -c ssh

А такая покажет все файлы, открытые юзером vasya:

$ lsof -u vasya

Lsof также можно использовать для листинга всех сетевых подключений:

$ lsof -i4

Листинг можно ограничить определенным портом:

$ lsof -i4 :80

Или получить список всех открытых портов:

$ lsof -iTCP -sTCP:LISTEN
Инструменты сисадмина. Lsof
Инструменты сисадмина. Lsof

Tcpdump

Любому админу приходится решать проблемы работы сетевых служб. И порой в этом деле не обойтись без сниффера, который наглядно покажет, как протекает обмен данными и что в этом процессе может идти не так. Эталоном среди снифферов для Linux считается Wireshark, но на этом выбор не заканчивается. Практически любой дистрибутив Linux по умолчанию включает в себя консольный сниффер tcpdump, с помощью которого можно быстро разобраться в ситуации. Запущенный без аргументов tcpdump без лишних слов начинает выводить в консоль список всех пакетов, отправленных и принятых на всех интерфейсах машины. С помощью опции -i можно выбрать нужный интерфейс:

$ sudo tcpdump -i wlp3s0

Чтобы ограничить область действия tcpdump только конкретной машиной и портом, можно использовать такую конструкцию:

$ sudo tcpdump -i wlp3s0 host 192.168.31.1 and port 53

Также можно заставить tcpdump выводить не только информацию о пакетах, но и их содержимое:

$ sudo tcpdump -i wlp3s0 -X host 192.168.0.1 and port 80

Если применяется шифрование, в этом нет никакого смысла, но с помощью tcpdump можно анализировать данные, передаваемые с использованием протоколов HTTP и SMTP.

Еще одно интересное умение tcpdump — фильтрация пакетов по содержанию конкретных битов или байтов в заголовках протоколов. Для этого используется такой формат: proto[expr:size], где proto — протокол, expr — смещение в байтах от начала заголовка пакета, а size — необязательное поле, указывающее на длину рассматриваемых данных (по умолчанию 1 байт). Например, чтобы отфильтровать только пакеты с установленным флагом SYN (инициация TCP-рукопожатия), следует использовать такую запись:

$ sudo tcpdump 'tcp[13]==2'

Формат отчетов tcpdump — это стандарт, его понимают практически все современные снифферы. Поэтому tcpdump можно использовать для генерации дампа на удаленной машине, а затем отправить его на локальную и провести анализ с помощью того же Wireshark:

$ ssh [email protected] tcpdump -w - 'port !22' | wireshark -k -i -
Инструменты сисадмина. Tcpdump
Инструменты сисадмина. Tcpdump

Ngrep

Tcpdump хорош своей универсальностью и разнообразием возможностей, однако для поиска конкретных данных внутри передаваемых пакетов его использовать не так просто и удобно. С этой задачей гораздо лучше справляется ngrep, предназначенный для отображения сетевых пакетов, удовлетворяющих заданной маске.

Например, чтобы найти параметры, передаваемые методами GET и POST в рамках HTTP-сессии, можно использовать следующую команду:

$ sudo ngrep -l -q -d eth0 "^GET |^POST " tcp and port 80

А так можно проанализировать SMTP-трафик на всех сетевых интерфейсах:

$ sudo ngrep -i 'rcpt to|mail from' tcp port smtp

VnStat

Систем учета трафика и накопления статистики существует огромное множество. Нередко они встроены прямо в систему удаленного управления сервером и позволяют проанализировать расходы с помощью наглядных графиков. Но если вы используете консоль и все, что вам нужно, — это быстро узнать статистику по интерфейсам, то лучший инструмент — это vnStat.

VnStat умеет накапливать статистику в непрерывном режиме, сохраняя данные между перезагрузками, а использовать его проще простого. Для начала установи пакет и запусти сервис vnstat:

$ sudo systemctl start vnstat
$ sudo vnstat -u

С этого момента он начнет сбор статистики. Для ее просмотра достаточно выполнить такую команду (wlp3s0 замени именем нужного сетевого интерфейса):

$ vnstat -i wlp3s0

Статистику можно конкретизировать, например вывести почасовую статистику с графиком:

$ vnstat -h wlp3s0

Статистику по дням или месяцам:

$ vnstat -d wlp3s0
$ vnstat -m wlp3s0

Используя флаг -t, можно получить информацию о десяти днях с самым большим расходом трафика:

$ vnstat -t wlp3s0

Чтобы проследить за текущей активностью на сетевом интерфейсе, vnStat можно запустить в live-режиме:

$ vnstat -l -i wlp3s0

В этом случае он будет показывать скорость передачи данных в текущий момент, а после завершения работы выведет статистику за все время live-мониторинга.

Утилиты системного администратора. VnStat
Утилиты системного администратора. VnStat

Iptraf-ng

Iptraf-ng — еще один удобный инструмент мониторинга сетевых интерфейсов. Как и vnStat, он позволяет получить детальную статистику по использованию канала, но наиболее полезная функция — реалтайм-мониторинг трафика.

Утилиты системного администратора. Iptraf-ng
Утилиты системного администратора. Iptraf-ng

Iptraf в наглядной форме показывает, с какими хостами идет обмен данными в текущий момент, количество переданных пакетов и их объем, а также флаги и ICMP-сообщения. Для получения доступа к этой информации следует выбрать пункт меню IP traffic monitor на главном экране.

NetHogs

VnStat и iptraf удобны, когда дело касается получения данных для всего интерфейса в целом. Но что, если вам необходимо узнать, какие конкретно приложения в текущий момент обмениваются данными с удаленными хостами?

В этом поможет утилита NetHogs. Это своего рода аналог утилиты top/htop для мониторинга сети. Вы устанавливаете утилиту, а потом запускаете ее, указав нужный сетевой интерфейс:

$ sudo nethogs wlp3s0

На экране появляется список приложений, наиболее часто обменивающихся данными с удаленными машинами.

Iotop

Раз уж мы заговорили об аналогах top, то нельзя не упомянуть iotop. Эта утилита позволяет увидеть, какие процессы выполняют операции записи/чтения диска. Запускать ее лучше с флагом —only, иначе, кроме тех процессов, что выполняют ввод/вывод в данный момент, она также покажет часть других процессов, которые могут спать:

$ sudo iotop --only
Утилиты системного администратора. Iotop
Утилиты системного администратора. Iotop

Nmon

Пришло время собрать все вместе. Nmon объединяет возможности многих рассмотренных утилит и позволяет в реальном времени получать статистику использования процессора, памяти, ввода/вывода, работы ядра и другие данные.

Утилиты системного администратора. Nmon
Утилиты системного администратора. Nmon

Nmon — консольное приложение с псевдографическим интерфейсом. Работает оно так: вы запускаете nmon с правами root, а затем добавляете на экран нужную вам информацию. Например, чтобы добавить на экран сведения о загруженности процессора, следует нажать c, заполненность оперативной памяти — m, ввод/вывод — d, сеть — n, процессы — t, файловые системы — j. Так можно создать собственную конфигурацию монитора, который будет отображать только то, что нужно вам.

Одной строкой
В этой статье я постарался обойти стороной инструменты, которые уже должны быть вам известны. Но если вы все-таки о них не знаете — вот краткий список того, что может пригодиться:

  • top/htop — монитор процессов, показывает тех, кто больше всего грузит процессор;
  • scp — утилита копирования файлов с удаленной машины и на нее по SSH;
  • Nmap — сканер портов, позволяет провести быстрый поверхностный пентест (о нем у нас уже была подробная статья);
  • netcat — сетевой швейцарский нож, позволяет в том числе вручную подключаться к серверам, работающим с plain text протоколами: HTTP, SMTP;
  • dd — утилита для блочного копирования данных, с нее можно снять дамп ФС;
  • mc — консольный двухпанельный файловый менеджер.

Вместо заключения
Здесь следовало бы в очередной раз сказать о том, что это только верхушка айсберга, что у каждого админа свои инструменты, обязательно приплести гибкость Linux и так далее и тому подобное. Но эта статья всего лишь описывает набор хороших инструментов, которые сделают вашу жизнь проще.

источник