Linux: логи (/var/log, dmesg, last, lastlog, lastb, history)

https://losst.ru/kak-posmotret-logi-v-linux  – хорошая статья с указанием стандартных путей лог файлов

/var/log/syslog – системные (включает почти все другие логи)

/var/log/kern – логи ядра

/var/log/auth.log – аутентификационные, включая SUDO и заходы по SSH (включая неуспешные)

Oct  5 11:09:39 govnoserver sshd[16040]: Accepted password for igor from 172.20.29.13 port 49520 ssh2

Oct  5 20:23:05 govnoserver sudo:   redkin : TTY=pts/3 ; PWD=/home/redkin ; USER=root ; COMMAND=/usr/bin/download-mibs

/var/log/boot.log – логи загрузки системы

/var/log/dmesg – kernel log (ring buffer) с момента загрузки ядра ОС в память компьютера. Сюда kernel пишет лог в случае разных системных сбоев (напр. невозможность драйвером аллоцировать память, работа oom-killer – кого убил и за что 🙂 ) с подробным traceback. Проще смотреть через утилиту с опцией -T – она добавляет дату и времени лога в привычном формате. Так же можно посмотреть через файл /proc/kmsg.

dmesg -T
dmesg | grep oom-killer
cat /proc/kmsg

/var/log/messages — содержит глобальные системные логи Linux, в том числе те, которые регистрируются при запуске системы. В этот лог записываются несколько типов сообщений: это почта, cron, различные сервисы, ядро, аутентификация и другие.

/var/log/btmp – лог файл Linux содержит информацию о неудачных попытках входа. Для просмотра файла удобно использовать команду last -f /var/log/btmp

/var/log/apache2/access.log   – логи по доступу на apache

/var/log/apache2/error.log – логи ошибок на apache

/var/www/cacti/log/cacti.log – логи кагти

/var/log/mysql/error.log – логи mysql ошибок

Log rotation (logrotate) – чтобы система не замусоривалась лог файлами, она использует log rotation. Хорошая статья. Он удаляет “старые” логи, архивирует и сжимает “не слишком старые” и держит в чистом виде “новые”. Так же для этой задачи может использоваться утилита tmpwatch. Утилита древняя – с начала 2000х и заточена именно под задачу ротации логов. Можно конечно делать костыли и для других вещей, но выглядеть это может страшно напр. нужно сохранять первые N строк одного файла, а остальное ротировать или нужно удалять все старые файлы, но актуальным не менять имя – эти задачи проще решить другими способами (напр. sh-скриптами).

logrotate 3.14.0 - Copyright (C) 1995-2001 Red Hat, Inc.

# тестирование logrotate
logrotate -d /etc/logrotate.d/test_temp_lg_rotate.conf

Логгирование операций на CLI сервере возможно используя связку tee и logger.

<login> 32115 0.0 0.0 103408 852 pts/98 S+ 12:23 0:00 tee -a /home/<login>/.bash_history 
<login> 32116 0.0 0.0 100904 780 pts/98 S+ 12:23 0:00 logger -p local6.info -t <login>[26465] <ip:port_from> <ip:port_to>

Lastlog – крутая утилита на Ubuntu. Позволяет узнать когда последний раз юзер заходил на сервер. Утилита для этого смотрит в файлы /var/log/lastlog, /var/log/wtmp (можно посмотреть в man lastlog).

~$ lastlog | grep pts
root pts/1 Tue Aug 9 12:20:04 +0300 2016
redkin_p pts/2 1.1.1.1 Thu Aug 11 23:48:44 +0300 2016
admin pts/1 1.1.1.1 Mon Aug 22 11:30:30 +0300 2016

last |reboot| – команда показывает успешные подключения/отключения пользователей, сколько пользователь был подключен, какой tty использовал, с какого IP был подключен. Так же команда показывает перезагрузки системы (если такие были с создания файла) при этом, вместо tty указывается “system boot”, а вместо IP указывается версия ядра, которая была загружена. Если указать опцию reboot, то события пользователей будут исключены из вывода.

redkin.p@govnoserver:~$ last
redkin.p pts/0 192.168.1.2 Wed Jul 27 16:26 still logged in
redkin.p pts/1 192.168.1.2 Wed Jul 27 16:25 - 16:26 (00:00)
redkin.p pts/1 192.168.1.2 Wed Jul 27 16:21 - 16:25 (00:04)
redkin.p pts/0 192.168.1.2 Wed Jul 27 16:18 - 16:26 (00:07)
igor tty1 Wed Jul 13 11:37 still logged in
redkin tty1 Wed Jul 13 11:35 - 11:37 (00:01)
reboot system boot 3.13.0-65-generi Wed Jul 13 11:22 - 18:26 (14+07:03)
redkin.p pts/0 192.168.1.2 Fri Jul 1 12:47 - 16:25 (03:38)
wtmp begins Fri Jul 1 12:47:28 2016

[root@host1 ~]# last | head -n 10
user1 pts/0 :1 Mon Aug 1 12:10 still logged in
user1 :1 :1 Mon Aug 1 12:05 still logged in
(unknown :1 :1 Mon Aug 1 12:05 - 12:05 (00:00)
user1 pts/1 192.168.1.2 Mon Aug 1 11:04 still logged in
user1 pts/1 192.168.1.2 Mon Aug 1 11:04 - 11:04 (00:00)
user1 pts/0 :0 Mon Aug 1 10:48 - 12:05 (01:16)
user1 :0 :0 Mon Aug 1 10:48 - 12:05 (01:16)
(unknown :0 :0 Mon Aug 1 10:48 - 10:48 (00:00)
reboot system boot 3.10.0-327.22.2. Mon Aug 1 10:47 - 18:54 (08:07)
user1 pts/0 192.168.100.38 Sun Jul 31 14:46 - 00:00 (09:14)

redkin.p@govnoserver:~$ last reboot
reboot system boot 3.13.0-65-generi Wed Jul 13 11:22 - 18:27 (14+07:05)
wtmp begins Fri Jul 1 12:47:28 2016

[root@host1 ~]# last reboot | head -n 5
reboot system boot 3.10.0-327.22.2. Mon Aug 1 10:47 - 19:03 (08:15)
reboot system boot 3.10.0-327.22.2. Wed Jul 27 13:50 - 19:03 (5+05:12)
reboot system boot 3.10.0-327.22.2. Wed Jul 27 13:46 - 13:50 (00:03)
reboot system boot 3.10.0-327.22.2. Wed Jul 27 13:23 - 13:46 (00:22)
reboot system boot 3.10.0-327.22.2. Wed Jul 27 13:18 - 13:46 (00:27)

lastb – команда смотрит в файл /var/log/btmp, в котором храняться неуспешные подключения пользователей с логином/временем/tty/ip. Для использования нужны права root.

redkin.p@govnoserver:~$ sudo lastb
igor tty1 Wed Jul 13 11:35 - 11:35 (00:00)
redkin tty1 Wed Jul 13 11:35 - 11:35 (00:00)

[root@host1 ~]# sudo lastb | head -n 5
user1 ssh:notty 192.168.1.2 Mon Aug 1 19:01 - 19:01 (00:00)
user1 ssh:notty 192.168.1.2 Mon Aug 1 19:01 - 19:01 (00:00)
user1 ssh:notty 192.168.1.2 Mon Aug 1 19:00 - 19:00 (00:00)
user1 ssh:notty 192.168.1.2 Mon Aug 1 19:00 - 19:00 (00:00)
user1 :0 :0 Mon Aug 1 10:48 - 10:48 (00:00)

history – смотрим логи (историю) команд.

history 10 - последние 10
history -c - чистим историю

Добавляем в историю TIMESTAMP. Через export, чтобы было доступно во всех в дочерних процессах. Можно задать в bashrc/profile.

echo "HISTTIMEFORMAT='%d.%m.%Y %H:%M:%S: '" >> ~/.bashrc
source ~/.bashrc

Переменные для изменения размера количества записей в history – обе задают количество строк (грубо первая на сессию, вторая глобально). Можно задать в bashrc/profile.

# echo $HISTSIZE
500
# echo $HISTFILESIZE
500

echo "HISTSIZE=9999999999999999" >> ~/.bashrc
echo "HISTFILESIZE=9999999999999999" >> ~/.bashrc
source ~/.bashrc
# echo $HISTSIZE
9999999999999999
# echo $HISTFILESIZE
9999999999999999

Leave a Reply