Pull to refresh
70.79
Слёрм
Учебный центр для тех, кто работает в IT

«Инструментарий системного администратора» или «Как мы работаем»

Reading time7 min
Views74K
Как работают системные администраторы, что используют в своем повседневном труде, какие утилиты облегчают нам жизнь?
Мы постараемся вкратце ответить на эти вопросы и описать, как устроена наша работа.

Итак, что в принципе, должен делать (уметь делать) системный администратор:
Устанавливать/обновлять/удалять ПО
Настройку ПО
Планировать работы
Документировать
Мониторить состояние ИТ-систем
Диагностировать и поддерживать ИТ-системы
Резервное копирование/архивацию ПО и данных

Для всего этого есть немало различного ПО, постараемся описать все самое необходимое.

Окружение (среда)

С чего начинается работа системного администратора — с выбора удобного окружения. Это не просторный светлый офис и удобный стул, хотя это немаловажно, а выбор операционной системы. Мои коллеги работают на Mac OS X, Windows и Ubuntu. После многих проб и экспериментов с дистрибутивами и разными оболочками рабочего стола (Debian, Kubuntu, Fedora Gnome/Cinnamon) я остановился на Ubuntu 12.04 (Unity).
Я просто освоился и привык к Unity, сейчас она мне кажется логичной и достаточно удобной оболочкой РС. Основное требование для админа это стабильность и простота. Не хочу ни с кем спорить, но именно так себя зарекомендовал Ubuntu.

Подробно описывать средства для планирования документирования я, пожалуй, не буду. Отмечу, что для документирования мне хватает блокнота (Gedit) и Libre Office ну и Google Docs для совместного использования доков. Все самые полезные заметки и документы мы храним в wiki. Для учета рабочего времени и контроля выполнения задач мы используем Redmine.
Конечно же, необходимы средства для коммуникации с коллегами и клиентами. Обычно это e-mail и Skype ну и телефон.
Для планирования я использую Google Calendar, любое другое средство будет одинаково хорошим, если Вы будете на самом деле им пользоваться, например ежедневник.

Так или иначе очень много приходится работать в консоли, локально или на удаленных серверах. Поэтому, наиболее важные вещи в повседневной работе администратора *nix это утилиты командной строки.

Утилиты командной строки

Чаще всего приходится работать с текстом (конфиги, логи, руководства и т.п.), поэтому начнем с текстовых редакторов и прочих средств для манипуляций с текстом и строками:
vi/vim — этот редактор незаменимый инструмент любого администратора, поскольку его можно найти практически на любом сервере (на любом юниксе) и если вы до сих пор первым делом когда он открывается тут же выходите из него по ctrl+z, то я настоятельно рекомендую вам хотя бы прочитать в man vim как правильно нужно это делать.
nano — самый простенький редактор, поставляется по-умолчанию в Debian/Ubuntu.
mcedit — для любителей mc и синих экранов, не самых плохой вариант, достаточно прост и удобен.
cat — concatinate — изначально инструмент для объединения файлов, но чаще используется для вывода содержимого файла, а также для вставки строк в файл.
tail — по-умолчанию выводит последние 10 строк файла, можно использовать для слежения за логом (с ключом -f)
wc — считает строки слова и количество байт в файле
head — как и tail выводит 10 строк файла, но как наверное понятно из названия, с начала файла.
grep — самый незаменимый инструмент для фильтрации текстового вывода или просто для поиска нужной строки в файлах.
sed — stream editor — очень полезен для автоматизации рутинных задач, замена строк в файлах (правка конфигов), удаление строк, вывод содержимого по маске и т.д.
awk/gawk — очень мощная утилита (на самом деле AWK — целый язык программирования), которая помогает парсить файлы и манипулировать выводом строк и еще много чего.
Информацию о всех перечисленный утилитах можно почерпнуть в man. Кстати, о man:
man — доступ к справочным страницам — это то, без чего наверное не обходится ни один рабочий день юникс-администратора. Если вы начинающий специалист, то обязательно начните с ввода man man в командной строке.
Список можно продолжать, долго продолжать, утилит на самом деле очень много. Но пока остановимся на этом и посмотрим, что можно сделать полезного с помощью awk, wc, cat и grep, почитав немного man.

Немного практики

Чем же все таки полезны на практике перечисленные утилиты, попробую показать на примере парсинга логов.

Есть лог-файл apache (access.log) в следующем формате:
1.2.3.4 - - [12/May/2014:03:08:55 +0400] "GET /shop/goods-list HTTP/1.1" 200 1691 "http://example.ru/shop/goods-list" "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0"

Напишем простой скрипт для подсчета процента успешно обработанных запросов.
#!/bin/bash

SUM=`wc -l access.log` # Подсчитаем количество строк в файле
OK=`cat access.log | awk '{print $9}' | grep 200 | wc -l` # Подсчитаем сколько строк с кодом "200"

awk -v SUM="$SUM" -v OK="$OK" '
BEGIN {
 printf "Passed: %3.2f%%\n", OK / SUM * 100
 exit
}'
Получим примерно такой вывод: Passed: 93.62%

И еще несколько полезных примеров:

Подсчитаем объем переданных данных за час, предшествующий текущему
cat access.log  | grep `date +%H:%M -d "-1 hour"` | awk '{ total += $10 } END { print total/1024/1024 FS"MB" }'

Вычислим общий объем переданных данных
awk '{ total += $10 } END { print total/1024/1024 FS"MB" }'  access.log

Вычислим среднее время обработки запроса
#!/bin/bash

COUNT=`wc -l access.log`
SUM=`cat access.log | awk '{ total += $16 } END { print total }' `

awk -v COUNT="$COUNT" -v SUM="$SUM" '
BEGIN {
 printf "Average req-time %3.2fs\n", SUM / COUNT
 exit
}'


Диагностика загрузки системы

Чтобы понять насколько загружен сервер есть несколько утилит, прежде всего можно оценить загрузку по показателю load average, на Хабре уже писали что это показатель средней загруженности системы выражающийся в числе блокирующих процессов ожидающих получения ресурсов, за 1 минуту, 5 минут и 15 минут соответственно.
Первое, что поможет оценить текущую загруженность сервера и увидеть какие же процессы в данный больше нагружают сервер — top или htop:
top — отображение процессов linux — кроме этого отображает uptime, load average, число выполняющихся задач и тредов.
Показатели процессора (в процентном соотношении):
us — время потраченное на выполнение пользовательских без изменения приоритета обработки (un-nice),
sy — время потраченное на выполнение системных (kernel) процессов,
ni — время потраченное на выполнение пользовательских c изменением приоритета обработки (nice),
wa — время ожидания ввода/вывода (дисковой подсистемы),
hi — время на обработку аппаратных прерываний,
si — время на обработку софтварных прерываний,
st — время «украденное» гипервизором для обработки задач на другой виртуальной машине — актуально для виртуальных машин (VPS/VDS) и полезно для оценки честности хостера, если этот показатель велик, то ваш провайдер нагло оверселлит.
Также top покажет вам сколько в целом потребляется памяти и для чего (процессы, кеши, буфферы), а также покажет сколько потребляет каждый процесс:
VIRT — отображает сколько в целом памяти использует процесс включая код, данные, общие библиотеки, а также страницы памяти сброшенные в своп и страницы памяти которые были зарезервированы но не использованы,
RES — размер резидентной памяти — текущее количество оперативной памяти (без свопа) используемой процессом,
SHR — размер разделяемой памяти — текущее количество оперативной памяти доступной для процесса, как правило, не вся эта память резидентная. Это число просто отображает, сколько памяти может быть разделено с другими процессами.
Кроме отображения показателей использования ресурсов системы top также используется для манипуляций над процессами, можно послать сигнал завершения процессу либо изменить его приоритет (nice).
htop — более цветастая версия top — обладает всеми теми же возможностями, что и top, но имеет более дружественный интерфейс (позволяет прокручивать список процессов как вертикально так и горизонтально), а также умеет вызывать lsof, strace и ltrace для выбранного процесса (о них позже расскажем подробней).
Чтобы оценить нагрузку на дисковую подсистему ввода/вывода можно воспользоваться утилитой iotop:
iotop — top-подобная утилита для мониторинга нагрузки на диск, выводит таблицу процессов с текущими показателями использования дискового ввода/вывода, такими как:
— PRIO — приоритет процесса,
— DISK READ — чтение с диска Байт/сек,
— DISK WRITE — запись на диск Байт/сек,
— SWAPIN — время (в процентном соотношении) потраченное процессом на свопинг,
— IO — время (в процентном соотношении) потраченное процессом на ожидание ввода/вывода.
Дополнительно выводится информация о суммарном битрейте чтения/записи дисковой подсистемы.
vmstat — выводит суммарную информацию о процессах, памяти, вводе/выводе, активности процессора и дисков. В отличии от iotop не требует привилегий суперпользователя.

Диагностика сбоев программ, troubleshooting
Бывают ситуации когда программа или демон работают не так как вы ожидаете, либо по непонятным причинам сбоят. Когда все логи просмотрены (или когда нет логов), все конфиги проверены и документация перечитана (если есть конечно), на помощь придут утилиты трассировки системных вызовов stace, ltrace, а также lsof покажет список открытых файлов:
strace — утилита позволяет перехватывать системные вызовы и сигналы запускаемого процесса либо уже запущенного процесса по его PID.
Вывод можно фильтровать, например выводить только вызовы open() или select(). Если вызов возвращает не отрицательное значение, то все хорошо, если выдается например:
open("/foo/bar", O_RDONLY) = -1 ENOENT (No such file or directory), то из этого можно понять что приложение пытается открыть несуществующий файл. Также иногда случается, что некорректно выставлены права на файл. Еще например не запускается виртуальная машина, потому, что гипервизор не может выделить ей нужное количество оперативной памяти. Strace в таких ситуациях здорово помогает.
Если вам просто интересно посмотреть, как работает тот или иной сервис, какие он использует системный вызовы, то stace — ваш друг. Например хотите узнать чем принципиально отличается Apache от Nginx, просто возьмите и посмотрите.
ltrace — утилита для трассировки библиотечных вызовов — очень похожа на strace, но перехватывает только вызовы к динамическим библиотекам.
ldd — если натравить ее на программку покажет какие программа использует библиотеки. Полезно если нужно перенести программу в chroot.
lsof — выводит список открытых файлов с указанием, по умолчанию выводит все подряд. Может выводить список для конкретного процесса по PID (достаточно удобный вывод в htop), для пользователя по UID, или например какие процессы используют тот или иной файл.
Может оказаться полезной в некоторых случаях. Имеется очень подробный man с описанием и примерами.

Что еще осталось рассказать

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

To be continued...

UPD: Более правильный вариант для подсчета процента успешно обработанных запросов от sledopit
awk '{sum+=1; if ($9==200) ok+=1} END {printf "Passed: %3.2f%%\n", ok / sum  * 100}'  access.log

И еще более простой вариант со встроенной переменной NR вместо SUM от RumataEstora
awk '$9 == 200 { s++ } END { print s / NR * 100; }' access.log
Tags:
Hubs:
+12
Comments37

Articles

Information

Website
slurm.io
Registered
Founded
Employees
51–100 employees
Location
Россия
Representative
Антон Скобин