Настройка rsyslog для хранения логов на удаленном сервере

Выбор даты

Важные моменты:

  • Логи хранятся только за текущий и 4 предыдущих месяца, и только за те дни, когда к сайтам были запросы. Более старые логи не хранятся.
  • Текущая дата в списке доступна всегда, вне зависимости от того, есть записи в логе или нет.
  • Если в списке дат отсутствует вчерашнее число, значит логи за этот день ещё обрабатываются и станут доступны позже (как правило, ближе ко второй половине дня). Аналогичная ситуация может быть 1 числа месяца с логами и отчётами за предыдущий месяц.

Над выводится список всех дат, за которые доступны логи:

В списке можно:

  • Выбрать дату для просмотра .
  • лог за месяц. Примечание Только для .
  • Просмотреть за месяц. Примечание Только для .

Настройка rsyslogd

Объекты, приоритеты, и места назначения

Объект Приоритет Назначение 

Доступные объекты и приоритеты являются фиксированными и не могут быть добавлены. Таблица 2 показывает, какие объекты доступны, а таблица 3 показывает список всех приоритетов.имя_модуля

Объект Что логируется
 auth / authpriv Сообщения, связанные с аутентификацией.
 cron Сообщения, сгенерированные сервисом crond.
 daemon Универсальный объект, который можно использовать для неопределенных демонов.
 kern Сообщения ядра.
 lpr Сообщения, сгенерированные через систему печати.
 mail Сообщения, связанные с электронной почтой.
 mark Специальный объект, который можно использовать для периодической записи маркера.
 news Сообщения, генерируемые системой новостей NNTP.
 security То же, что и auth / authpriv. Не должен больше использоваться.
 syslog Сообщения, генерируемые системой syslog.
 user Сообщения генерируемые в пространстве пользователя.
 uucp Сообщения, сгенерированные устаревшей системой UUCP.
 local0-7 Резервные объекты, которые необходимы для использования тех объектов, которые отсутствуют в этой таблице.
Приоритет Используется для
 debug Отладочные сообщения, которые дадут как можно больше информации о работе сервиса.
 info Информационные сообщения о нормальной работе сервиса.
 notice Используется для информационных сообщений об элементах, которые позже могут стать проблемой.
 warning / warn Что-то не оптимальное, но ошибки пока нет.
 err /error Произошла некритическая ошибка.
 crit Произошла критическая ошибка.
 alert Используется, когда сервис перестал быть доступен.
 emerg / panic Сообщение генерируется, когда доступность сервиса прекращается.

Когда используется определенный приоритет, все сообщения с этим приоритетом и выше логируются в соответствии со спецификациями, используемыми в этом конкретном правиле. Если вам необходимо детально настроить логирование, когда сообщения с разными приоритетами отправляются в разные файлы, вы можете указать приоритет со знаком равенства (=) перед ним, как в следующем файле конфигурации, который будет отправлять все отладочные сообщения cron в файл с именем /var/log/cron.debug

Обратите внимание на использование дефиса (-) перед именем файла, который гарантирует, что сообщения буферизуются и не записываются немедленно на диск (что хорошо для производительности диска)

Нет необходимости учить наизусть названия rsyslogd  объектов и приоритетов. Все они перечислены в man 5 rsyslog.conf.
Упражнение 2. Изменение правил в rsyslog.confyum install -y httpd

ErrorLog    syslog:local1

systemctl restart httpd

systemctl restart httpdecho «*.debug /var/log/messages/messages-debug» > /etc/rsyslogd/debug.confsystemctl restart rsyslogdtail -f /var/log/messages-debuglogger -p daemon.debug «Daemon Debug Message»

Установка GoAccess в Unix/Linux для анализа/просмотра log в Apache и Nginx

GoAccess —  это очень крутой инструмент ( анализатор log-файлов) и интерактивный просмоторщик в режиме реального времени для Apache/Nginx и самое главно  — это что, он с открытым исходным кодом и который работает в командной строке. Он показывает ценные статистические HTTP данные для системных администраторов, которые требуют визуального отчета сервера на лету. GoAccess будет собирать данные с журнала и будет отображать их на консоле или Х терминале. Собранная информация или сгенерированный отчет будут отображаться для пользователя/сисадмином в визуальном/интерактивном окне.

Особенности

GoAccess анализирует указанный файл веб-журнала и выводит данные на Х терминал. Особенности включают в себя:

  • Общая информация, пропускная способность и т.д.
  • Время, необходимое для удовлетворения запроса (полезную для отслеживания страниц, которые замедляют работу Вашего сайта)
  • Топ посетители
  • Требуемые файлы
  • Подтвердили статические файлы, изображения, SWF, JS и т.д.
  • Источники URL-адреса
  • 404 или страница не найдена
  • Операционные системы
  • Браузеры и боты
  • Хосты, Обратный DNS, IP
  • Коды состояния HTTP
  • ……….

Почти все форматы log  

GoAccess позволяет использовать любой формат пользовательского лог-файла. Предопределенные варианты включают, но не ограничиваются ими:

  • Общий формат журнала (КТМ) Apache в сочетании с форматом журнала (XLF / ELF) Apache W3C формат (IIS).
  • Amazon CloudFront.
  • Apache/Nginx виртуальные хосты.

Требование к GoAccess  

  1. Ncurses
  2. Glib2 (> = 2.0.0)
  3. GeoIP (необязательно)

Установка необходимых пакетов для GoAccess

Для  rpm’s ОС (для таких как CentOS/RedHat/Fedora):

Для начала подключаем репозиторий EPEL:

После чего, выполняем команду:

# yum install ncurses-devel glib2-devel geoip

Для deb’s ОС (для таких как Debian/Ubuntu):

# apt-get install libncurses5-dev libglib2.0-dev *libgeoip-dev

Информация о пользователях

Теперь познакомимся с командами позволяющими получить основную информацию о системе и пользователях. Это намного удобнее если нужно получить какую-то конкретную информацию и лопатить логи нет необходимости или желания.

Команда who покажет нам кто из пользователей сейчас залогинен в системе и когда он зашел. Данная информация хранится в файле /var/run/utmp, но хранится она там временно, только пока пользователь в системе. Если пользователей выйдет, запись удалится. Т.е. эта команда показывает только актуальные данные.

Если нужно выяснить когда пользователь заходил в систему и сколько времени в ней находился то эта инфа хранится в логе /var/log/wtmp. Чтобы получить эти данные используется команда last и указывается имя пользователя, либо можно имя не указывать тогда увидим отчет по всем пользователям.

Следующая команда, которая может быть крайне полезной, это:

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

9 Syslog-ng

Инструмент Syslog-ng был разработан как способ обработки файлов  системного журнала (установленный протокол клиент-сервер для регистрации в системе) в режиме реального времени.

Однако со временем он стал поддерживать другие форматы данных: неструктурированные, SQL и NoSQL.

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

syslog-ng – это надежный инструмент для сбора и классификации журналов промышленного уровня, написанный на языке Си и давно известный в отрасли.

Лучшая часть – это расширяемость, позволяющая вам писать плагины на C, Python, Java, Lua или Perl.

3 Fluentd

Среди централизованных инструментов ведения журналов, которые выполняют роль промежуточного уровня для приема данных, Flutend является первым среди равных.

Обладая превосходной библиотекой плагинов, Fluentd может собирать данные практически из любой производственной системы, перемешивать их в нужной структуре, создавать собственный конвейер и передавать его на свою любимую аналитическую платформу, будь то MongoDB или Elasticsearch.

Fluentd построен на Ruby, является продуктом с полностью открытым исходным кодом и пользуется большой популярностью благодаря своей гибкости и модульности.

С такими крупными компаниями, как Microsoft, Atlassian и Twilio, использующим эту платформу, Fluentd нечего доказывать. ?

Особенность

Собственно для чего я написал эту статью.

По неподтверждённой информации при описании access_log и error_log в файлах, которые подключаются через include, они действуют только внутри подключаемого файла.

Например, «file1.conf»:

file1.conf

error_log /mydirectory/myerror.log error;
access_log /mydirectory/myerror.log;

location …. и другие настройки в файле

1
2
3
4
5

error_log /mydirectory/myerror.log error;
access_log /mydirectory/myerror.log;
 
 
location …. и другие настройки в файле

Основной «nginx.conf»:

http {

include file1.conf;
include file2.conf;
include file3.conf;
….

}

1
2
3
4
5
6
7
8
9

http {

 
include file1.conf;
include file2.conf;
include file3.conf;
….
 
}

В такой конфигурации access_log и error_log, описанные в «file1.conf», действуют только внутри «file1.conf», а в файлах «file2.conf», «file3.conf» можно описать другие access_log и error_log для location-ов, которые описаны в них («file2.conf», «file3.conf»).

Важные логи сайта

Access.log — логи посещений пользователей и ботов. Позволяет составить более точную и подробную статистику, нежели сторонние ресурсы, выполняющие внешнее сканирование сайта и отправляющие ряд ненужных запросов серверу. Благодаря данному логу можно получить информацию об используемом браузере и IP-адрес посетителя, данные о местонахождении клиента (страна и город) и многое другое

Стоит обратить внимание, если сайт имеет высокую посещаемость, то анализ логов сервера потребует больше времени. Поэтому для составления статистики стоит использовать специализированные программы (анализаторы).

Error.log — программные ошибки сервера

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

Slow.log (название зависит от используемой оболочки сервера) — в данный журнал записываются медленные запросы сервера. Так принято обозначать запросы с повышенным порогом задержки, выданные пользователю. Этот журнал позволяет выявить слабые места сервера и исправить проблему. Ниже будет рассмотрен способ включить ведение данного лога на разных типах серверов, а также настройка задержки, с которой записи будут заноситься в файл.

Настройка лога доступа access_log

Nginx пишет информацию о клиентских запросах в лог сразу после их обработки. По умолчанию лог доступа пишется в файл «logs/access.log». Эта строка может быть описана в http, stream, server или location секциях, так же как и error_log. Вы можете определить другой файл для записи логов доступа:

access_log /myfolder/myaccess.log

1 access_log /myfolder/myaccess.log

Можно также использовать log_format для определения формата записи в лог доступа. Пример:

http {
log_format compression ‘$remote_addr — $remote_user ‘
‘»$request» $status $body_bytes_sent ‘
‘»$http_referer» «$http_user_agent» «$gzip_ratio»‘;

server {
gzip on;
access_log /spool/logs/nginx-access.log compression;

}
}

1
2
3
4
5
6
7
8
9
10
11

http {
    log_format compression ‘$remote_addr — $remote_user ‘
                           ‘»$request» $status $body_bytes_sent ‘
                           ‘»$http_referer» «$http_user_agent» «$gzip_ratio»‘;
 
    server {
        gzip on;
        access_log /spool/logs/nginx-access.log compression;
        …
    }
}

Здесь compression включает сжатие gzip со степенью сжатия
$gzip_ratio. Остальные переменные обозначают соответствующую информацию о запросе клиента, который логируется.

Настройка журнала доступа

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

Директива log_format позволяет определить формат сообщений журнала. Директива access_log позволяет и задает расположение файла журнала и используемый формат.

Самый основной синтаксис директивы access_log следующий:

access_log log_file log_format;

Где log_file – полный путь к файлу журнала и формат log_format, используемый файлом журнала.

Журнал доступа может быть включен либо в http, server или location директива блока.

По умолчанию журнал доступа включен глобально в директиве http внутри основного файла конфигурации Nginx.
/etc/nginx/nginx.conf

http {
  ...
  access_log  /var/log/nginx/access.log;
  ...
}

Для удобства обслуживания рекомендуется установить отдельный файл журнала доступа для каждого блока сервера. Директива access_log установлена в директиве server перекрывает одну установленные в директиве http (более высокого уровня).
/etc/nginx/conf.d/domain.ru.conf

http {
  ...
  access_log  /var/log/nginx/access.log;
  ...

  server {
    server_name domain.ru
    access_log  /var/log/nginx/domain.access.log;
    ...
  }
}

Если формат журнала не указан, Nginx использует предопределенный комбинированный формат, который выглядит следующим образом:

log_format combined '$remote_addr - $remote_user  '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';

Чтобы изменить формат ведения журнала, либо переопределите настройку по умолчанию, либо определите новый. Например, чтобы определить новый формат ведения журнала с именем main, который расширит объединенный формат значением, показывающим заголовок X-Forwarded-For, добавьте следующее определение в директиву http или server:

log_format  custom  '$remote_addr - $remote_user  "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

Чтобы использовать новый формат, укажите его имя после файла журнала, как показано ниже:

access_log  /var/log/nginx/access.log custom;

Пока журнал доступа предоставляет очень полезную информацию. занимает место на диске и может повлиять на производительность сервера. Если на вашем сервере недостаточно ресурсов и у вас загруженный веб-сайт, вы можете отключить журнал доступа. Для этого установите значение директивы access_log в off:

access_log  off;

Установка GoAccess в Unix/Linux

Приведу примеры установок для различных Unix и Linux ОС.

Устанавливаем на deb’s ОС:

# aptitude install goaccess

ИЛИ

$ echo "deb http://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/goaccess.list
$ wget -O - http://deb.goaccess.io/gnugpg.key | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install goaccess

Устанавливаем на rpm’s ОС:

# yum install goaccess

Устанавливаем на Arch Linux:

# pacman -S goaccess

Устанавливаем на Gentoo:

# emerge net-analyzer/goaccess

Устанавливаем на OS X / Homebrew:

# brew install goaccess

Устанавливаем на FreeBSD:

# cd /usr/ports/sysutils/goaccess/ && make install clean
# pkg install sysutils/goaccess

Компилируем с исходного кода:

Во-первых нужно скачать последнюю стабильную версию GoAccess.

# cd /usr/local/src/
# wget http://tar.goaccess.io/goaccess-1.0.2.tar.gz
# tar -xzvf goaccess-*

После чего переходим в распакованный каталог и выполняем сборку программы, если вы хотите можно разрешить сборку с geoip (но лучше прочитать README или INSTALL):

# ./configure --enable-geoip
# make && make install && make clean

Так же, можно использовать git:

$ cd /usr/local/src/ && git clone https://github.com/allinurl/goaccess.git && cd goaccess
$ autoreconf -fiv
$ ./configure --enable-geoip --enable-utf8
$ make && sudo make install

PS: Установите git если не установлен!

С установкой я закончил, перехожу к использованию данной утилиты.

Ведение логов в Logrotate

На больших ресурсах журналы могут достигать огромных размеров, поэтому нужно своевременно архивировать или очищать логи. С помощью утилиты Logrotate можно управлять ведением журналов: настроить период ротации (архивирование старого журнала и создание нового), период и количество хранения журналов и многое другое.

Изначально программа отсутствует в системе. Ниже приведены команды для инсталляции Logrotate из официальных репозиториев.

Ubuntu, Debian:

sudo apt install logrotate

CentOS:

sudo yum install logrotate

После установки необходимо проверить путь для будущих конфигурационных файлов. Для правильной работы они должны находится в папке «logrotate.d». Проверить данный параметр можно открыв конфигурационный файл  командой:

nano /etc/logrotate.conf

В директории «RPM packages drop log rotation information into this directory» должна присутствовать строка:

include /etc/logrotate.d

Теперь создаётся конфигурационный файл «rsyslog.conf». В нём будет находиться конфигурацию по работе с логами. Для создания файла в терминале вводится команда:

sudo nano /etc/logrotate.d/rsyslog.conf

В окне терминала откроется текстовой редактор. Теперь нужно внести конфигурацию, как указано в образце. В качестве примера будет использоваться журнал посещений «Access.log» (Nginx).

/var/log/nginx/access.log {
daily
rotate 3
size 500M
compress
delaycompress
}

Теперь остаётся только запустить Logrotate. Для этого вводится команда:

sudo logrotate -d /etc/logrotate.d/rsyslog.conf

Для проверки правильности работы программы в терминале можно ввести команду:

ls /var/cron.daily/

Ведения логов медленных запросов сервера

Анализ данного лога позволяет определить на какие типы запросов сервер отвечает долго. В идеале задержка должна составлять не более 1 секунды.

На некоторых типах оболочек (MySQL, PHP-FPM) ведение данного лога по умолчанию отключено. Процесс запуска и ведения зависит от сервера.

MySQL

Если сервер управляется с помощью MySQL, то необходимо создать каталог и сам файл для ведения журнала с помощью команд:

mkdir /var/log/mysql
touch /var/log/mysql/mysql-slow.log

Стоит изменить владельца файла, чтобы избежать дальнейших проблем с записью логов. Делается это командой:

chown mysql:mysql /var/log/mysql/mysql-slow.log

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

mysql -uroot -p

Для запуска и настройки ведения логов нужно последовательно ввести в терминале следующие команды:

> SET GLOBAL slow_query_log = 'ON';

> SET GLOBAL slow_launch_time = 2;

> SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';

> FLUSH LOGS;

В примере:

  • slow_query_log — запускает ведение журналов медленных запросов.
  • slow_launch_time — указывает максимальную задержку отклика, после которой статистика запроса попадёт в журнал. В данном случае запись в логи происходит при преодолении откликом порога 2 секунды.
  • slow_query_log_file — задаёт путь до используемого журнала.

Проверить статус и параметры ведения лога медленных запросов можно командой:

> SHOW VARIABLES LIKE '%slow%';

Выход из консоли MySQL выполняется командой:

> exit

После выполнения всех предыдущих действий, можно просмотреть логи сервера. Для этого в терминале вводится:

tail -f /var/log/mysql/mysql-slow.log

PHP-FPM

Для ведения журнала на данной оболочке, необходимо отредактировать параметры в конфигурационном файле. Для этого в терминале вводится команда:

vi /etc/php-fpm.d/www.conf

Далее нужно найти строки:

  • request_slowlog_timeout = 10s — параметр, позволяющий указать задержку, с которой запись о длительном запросе попадёт в журнал.
  • slowlog = /var/log/php-fpm/www-slow.log — параметр, указывающий путь до актуального файла логирования (.log).

После применения изменений, необходимо перезагрузить сервер PHP-FPM. Для этого в консоль вводится команда:

systemctl restart php-fpm

Просмотр логов запускается командой:

tail -f /var/log/php-fpm/www-slow.log

Анализ логов медленных запросов

Логи медленных запросов могут за незначительное время вырасти до огромных размеров. Для сортировки и отображения повторяющихся запросов рекомендуется использовать программу MySQLDumpSlow.

Для запуска просмотра логов с помощью этой утилиты, нужно составить команду по приведенному ниже алгоритму:

mysqldumpslow местонахождение/файла

GoAccess

GoAccess — это мощнейший анализатор логов Apache, программа создаёт интерактивные отчёты, которые можно просматривать в любом браузере. Работает как на Linux, так и на Windows. Подходит для общего анализа логов веб сервера, для мониторинга активности в реальном времени или для анализа определённых аспектов активности или проблем.

Способы установки и ещё больше примеров вы найдёте в подробном описании данной программы на странице «GoAccess: программа для анализа логов веб-серверов (полная документация, примеры)».

Самый типичный запуск программы goaccess для анализа файлов журналов и генерации отчёта, который можно открыть в веб-браузере:

cat ФАЙЛ_ЛОГА | goaccess - --log-format=ФОРМАТ --output=ФАЙЛ.html

Поддерживаются следующие форматы логов и значений для опции —log-format:

  • COMBINED — комбинированный формат журнала,
  • VCOMBINED — комбинированный формат журнала с виртуальным хостом,
  • COMMON — обычный формат журнала,
  • VCOMMON — обычный формат журнала с виртуальным хостом,
  • W3C — расширенный формат журнала W3C,
  • SQUID — родной формат журнала Squid,
  • CLOUDFRONT — Amazon CloudFront Web Distribution,
  • CLOUDSTORAGE — Google Cloud Storage,
  • AWSELB — Amazon Elastic Load Balancing,
  • AWSS3 — Amazon Simple Storage Service (S3)

Если у вас особый формат, не подходящий ни под один из указанных выше, то вы можете настроить обработку любого формата в конфигурационном файле, для этого смотрите раздел «».

Для того, чтобы собрать статистику по странам, которые обращались к сайту (геолокация), нужно указать с опцией —geoip-database путь до базы данных GeoIP, например GeoLiteCity.dat или GeoLite2-City.mmdb.

Если используется GeoIP2, то нужно скачать базу данных GeoLite2-City.mmdb или GeoLite2-Country.mmdb. Эти базы данных можно скачать с сайта MaxMind.com — скачивание бесплатно, но требует получение API, поэтому нужно зарегистрироваться на сайте — всё это бесплатно.

Итак, мой большой объединённый лог Apache размещён в файле biglog.txt, он в формате COMBINED, я хочу сохранить созданный отчёт в файл файл logs_report.html и при анализе использовать геолокацию с помощью БД GeoLite2-City.mmdb, тогда команда следующая:

cat biglog.txt | goaccess - --log-format=COMBINED --output=logs_report.html --geoip-database=GeoLite2-City.mmdb

Открыть сгенерированный отчёт можно в любом браузере:

firefox logs_report.html

Пример отчёта:

Если вас интересует подробное описание каждого пункта, то смотрите статью «Зачем и как анализировать логи веб-сервера».

Можно указать различные форматы вывода: -o —output=<path/file.>:

  • /path/file.csv — Разделённые запятой значения (CSV)
  • /path/file.json — JSON (JavaScript Object Notation)
  • /path/file.html — HTML

То есть формат определяется расширением файла, поэтому имя можно указать любое, а расширение файла выбрать одно из трёх представленных.

Для анализа рефереров (ссылающиеся сайты) можно исключить сам анализируемый сайт, а также разные некорректные значения, это делается опцией —hide-referer, которую можно использовать много раз:

cat biglog.txt | goaccess - --log-format=COMBINED --output=logs_report.html --hide-referer="hackware.ru" --hide-referer="-" --geoip-database=GeoLite2-City.mmdb

Если среди ссылающихся сайтов не интересуют поисковые системы, то их также можно добавить в исключения:

cat biglog.txt | goaccess - --log-format=COMBINED --output=logs_report.html --hide-referer="hackware.ru" --hide-referer="-" --hide-referer="*google*" --hide-referer="*yandex*" --geoip-database=GeoLite2-City.mmdb

Ещё одна опция, которая улучшает наглядность результатов, это -d или длинный вариант —with-output-resolver, эта опция включает преобразование IP адресов в имена хостов, работает только для форматов HTML и JSON.

Обратите внимание, что для при использовании опции -d выполняется большое количество DNS запросов и создание файла отчёта может проходить медленнее.

Кстати, вы можете воспользоваться онлайн сервисом GoAccess для анализа логов веб-сервера: https://suip.biz/ru/?act=goaccess

Данный сервис принимает файлы журналов в виде распакованных текстовых файлов или в архивах .gz.

Там написано, что это анализатор логов Apache, но на самом деле принимается любой формат логов, который поддерживает GoAccess.

Классификация логов

Для каждой разновидности софта предусмотрены соответствующие файлы. Все логи сервера могут храниться на одном диске или даже на отдельном сервере. Существует довольно много разновидностей логов, вот наиболее распространенные:

доступа (access_log) — записывают IP-адрес, время запроса, другую информацию о пользователях;
ошибок (error_log) — показывают файлы, в которых выявлены ошибки и классифицируют сбои;
FTP-авторизаций — отображают данные о попытках входа по FTP-соединению;
загрузки системы — с его помощью выполняется отладка при появлении проблем, в файл записываются основные системные события, включая сбои;
основной — содержит информацию о действиях с файерволом, DNS-сервером, ядром системы, FTP-сервисом;
планировщика задач — в нем выполняется протоколирование задач, отображаются ошибки при запуске cron;
баз данных — хранит подробности о запросах, сбоях, ошибки в логах сервера отображаются наравне с другой важной информацией;
хостинговой панели — включает статистику использования ресурсов сервера, время и количество входов в панель, обновление лицензии;
веб-сервера — содержит информацию о возникавших ошибках, обращениях;
почтового сервера — в нем ведутся записи о входящих и исходящих сообщениях, отклонениях писем.

Записи в системные журналы выполняет установленный софт.

Чтение записей в логах

Записи в логах имеют структуру: одно событие – одна строка.

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

Примеры записей

Error.log

    PHP Notice: Undefined variable: moduleclass_sfx in /var/data/www/site.ru/modules/contacts/default.php on line 14

В приведенном примере:

  • — дата и время события.
  • — ошибка и её тип.
  • — IP-адрес подключившегося клиента.
  • PHP Notice: Undefined variable: moduleclass_sfx in — событие PHP Notice. В данной ситуации — обнаружена неизвестная переменная.
  • /var/data/www/site.ru/modules/contacts/default.php on line 14 — путь и номер строки в проблемном файле.

Access.log

194.61.0.6 – alex [10/Oct/2019:15:32:22 -0700] "GET /apache_pb.gif HTTP/1.0" 200 5396 "http://www.mysite/myserver.html" "Mozilla/4.08  (Win98; I ;Nav)"

В приведенном примере:

  • 194.61.0.6 — IP-адрес пользователя.
  • alex — если пользователь зарегистрирован в системе, то в логах будет указан идентификатор.
  • [10/Oct/2019:15:32:22 -0700]— дата и время записи.
  • «GET /apache_pb.gif HTTP/1.0» — «GET» означает, что определённый документ со страницы сайта был отправлен пользователю. Существует команда «POST», наоборот отправляет конкретные данные (комментарий или любое другое сообщение) на сервер . Далее указан извлечённый документ «Apache_pb.gif», а также использованный протокол «HTTP/1.0».
  • 200 5396 — код и количество байтов документа, которые были возвращены сервером.
  • «http://www. www.mysite/myserver.html»— страница, с которой был произведён запрос на извлечение документа «Apache_pb.gif».
  • «Mozilla/4.08 (Win98; I ;Nav)» — данные о пользователе, которой произвёл запрос (используемый браузер и операционная система).

Понимание логирования

  • Прямая запись: некоторые сервисы записывают информацию напрямую в лог-файлы, даже некоторые важные сервисы, такие как веб-сервер Apache и файловый сервер Samba.
  • rsyslogd: rsyslogd — это усовершенствование сервиса syslogd, который занимается централизованным управлением лог-файлов. Syslogd существует уже давно.
  • journald: с введением systemd также был представлен сервис логирования journald. Этот сервис тесно интегрирован с systemd, что позволяет администраторам читать подробную информацию из journald, одновременно отслеживая состояние сервиса с помощью команды systemctl status.

LORG

LORG — анализатор безопасности лог файлов Apache, это инструмент для расширенного анализа безопасности журналов HTTPD. Он нацелен на реализацию различных современных подходов к обнаружению атак на веб-приложения в журналах HTTP-трафика (например, в журналах доступа Apache (файлы access_log)), включая методы на основе сигнатур, статистики и машинного обучения. Обнаруженные инциденты впоследствии группируются в сеансы, которые классифицируются как «ручные» или автоматизированные, чтобы определить, является ли злоумышленник человеком или машиной. Кроме того, могут быть выполнены геотаргетинг и поиск DNSBL, чтобы увидеть, происходят ли атаки с определённой геолокации или ботнета. Кроме того, атаки могут быть определены количественно с точки зрения успеха или неудачи на основе аномалий в пределах размера ответов HTTP, кодов ответов HTTP или активного воспроизведения подозрительных запросов.

Подробное описание LORG, полный список опций и инструкции по установке вы найдёте на этой странице: https://kali.tools/?p=4852

Команда запуска:

./lorg ОПЦИИ файл_ввода 

Я буду использовать следующие опции в команде:

  • -i формат ввода. Варианты: common combined vhost logio cookie
  • -o формат вывода. Варианты: html json xml csv
  • -u выполнять URL-декодирование для кодированных запросов (влияет только на отчёты)
  • -g включить геотэгин

Файл с журналом Apache находится в файле ~/access_log, отчёт я хочу сохранить в текущую папку в файл с именем report.htm, тогда команда следующая:

./lorg -u -i combined -g -o html ~/access_log report.htm

Отчёт можно открыть в веб-браузере:

firefox report.htm

Как отредактировать форматы логов в LORG

На самом деле, формат моего журнала веб-сервера не подходит ни под один из предлагаемых форматов LORG (common combined vhost logio cookie). Формат моего файла очень похож на combined с тем отличием, что в конце строки идёт имя хоста (домен сайта). Можно отредактировать имеющиеся поддерживаемые форматы логов или добавить свои. Для этого открываем исполнимый файл программы:

gedit ./lorg

Находим там строки:

static $allowed_input_types = array(
  'common'     => '%h %l %u %t \"%r\" %>s %b',
  'combined'   => '%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"',
  'vhost'      => '%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"',
  'logio'      => '%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\ %I %O"',
  'cookie'     => '%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\"'
);

К этим строкам я добавлю новый формат моего хостера Hostland:

  'combined_hostland'   => '%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %v',

Получилось так:

Сохраняем и закрываем файл.

Вновь запускаю команду для анализа логов, но в этом случае указываю в качестве типа формата combined_hostland:

./lorg -u -i combined_hostland -g -o html ~/biglog.txt report2.htm

Хотя в файле biglog.txt почти 6 миллионов записей, анализ прошёл довольно быстро.

Когда программа завершает работу, она выводит обобщённую статистику — сколько найдено инцидентов и какое количество пользователей в них задействовано:

Открываем созданный отчёт:

firefox report2.htm

Вверху диаграмма с обобщённой информацией:

Для каждого инцидента можно просмотреть детальную информацию:

Просмотр логов с помощью ISPManager

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

  1. На главной странице, в панели инструментов «WWW» нужно нажать на вкладку «Журналы».
  2. ISPManager выдаст журналы посещений и серверных ошибок в виде:
    • ru.access.log;
    • ru.error.log.*

    * Вместо «newdomen.ru» из примера в выдаче будет название актуального домена.

    Открыть файл лога можно, нажав на «Посмотреть» в верхнем меню.

  3. Для просмотра всех записей журнала, необходимо нажать на «Скачать» и сохранить файл на локальный носитель.
  4. Более старые версии логов можно найти во вкладке «Архив».
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: