The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Просмотр состояния и мониторинг системы

   Корень / Администратору / Система / Просмотр состояния и мониторинг системы

----* Полезные пакеты, которые можно установить на сервер для диагностики сбоев (доп. ссылка 1)   [комментарии]
  Минимальный набор пакетов для диагностики проблем, которые рекомендуется заранее установить на серверы, чтобы не тратить время на установку дополнительных пакетов или поиск специализированных live-дистрибутивов.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Трассировка обмена данными через Unix domain socket (доп. ссылка 1)   [комментарии]
  Для Unix domain socket до сих пор отсутствовал инструмент для захвата или ослеживания содержимого канала связи, наподобие tcpdump для IP. Для решения данной задачи [[http://laforge.gnumonks.org/blog/20180330-udtrace/ подготовлен]] новый инструмент [[https://github.com/laf0rge/udtrace udtrace]], который реализован в виде разделяемой библиотеки, подключаемой через LD_PRELOAD.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Снятие показаний электросчетчика средствами OpenWRT (доп. ссылка 1)   Автор: Аноним  [комментарии]
  Предупреждение: все что вы делаете на свой страх и риск, так как существует вероятность «окирпичивания» Вашего роутера.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Мониторинг MaxScale в Zabbix   Автор: Аноним  [комментарии]
 
Рабочая задача - обеспечить в Zabbix 2.2 мониторинг прокси MaxScale.

Пример скрипта "status":

   #!/usr/bin/php
   <?php
   $json_string = `/usr/bin/maxadmin -pmariadb show serversjson`;
   $obj=json_decode($json_string,true);
   echo $obj[$argv[1]]["nodeId"];

Добавляем в zabbix_agentd.conf

   UserParameter=ServerStatus1, /<yourLovePlace>/status 0
   UserParameter=ServerStatus2, /<yourLovePlace>/status 1
   UserParameter=ServerStatus3, /<yourLovePlace>/status 2

Если серверов больше чем у меня, добавляем новые строчки, параметр увеличиваем
на 1. В zabbix ловим -1 это значит сервер не в кластере и идем разбираться.
"show serversjson" еще много чего интересного выводит.
 
----* Утилиты для диагностики проблем с производительностью и анализа состояния подсистем Linux  (доп. ссылка 1)   [комментарии]
  Плакат с наглядным обзором утилит для диагностики проблем с производительностью и анализа состояния подсистем Linux:
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Мониторинг температуры в Zabbix с использованием Digitemp   Автор: Denis Romanov  [комментарии]
  Получаем параметр от 1-Wire датчика температуры DS18S20 и передаем на сервер Zabbix.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Мониторинг репликации MySQL при помощи Zabbix   Автор: globus  [комментарии]
  0. Кому как удобно ставим zabbix агента. Создаем директорию /zabix/
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Первые 5 минут устранения неполадок на Linux-сервере (доп. ссылка 1)   Автор: Ivan Pesin  [комментарии]
  Когда наша команда еще занималась вопросами эксплуатации, оптимизации и масштабирования в предыдущей компании, нам приходилось иметь дело с отладкой медленно работающих приложений и целых инфраструктур, часто большого размера (представьте CNN или the World Bank). Горящие сроки, экзотические стеки технологий и недостаток информации обычно гарантировали незабываемые впечатления.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Мониторинг загрузки многоядерного сервера по каждому ядру в отдельности в Linux   Автор: fantom  [комментарии]
  Исходная задача: по SNMP загрузить параметры загруженности CPU с сервера по каждому ядру в отдельности (ОС Linux).
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Раскраска лога для увеличения его наглядности   [комментарии]
  Для наблюдения за логом в наглядном виде с подсветкой наиболее важных элементов или для раскрашивания файлов конфигурации или файлов с кодом удобно использовать утилиту ccze, которая присутствует в стандартных репозиториях.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Скрипт для наглядного ping с ведением лога   Автор: Kins  [комментарии]
  Представленный скрипт может: * Отображать результат пинга * Отображать время пинга * Вести лог пингов * Визуализировать лог пингов
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Выявление нагружающих дисковую подсистему процессов в Linux   Автор: Yuriy Kulikov  [комментарии]
  В Centos 5.x нет нормальной поддержки iotop, без которого трудно понять, какой процесс больше всего грузит дисковую систему. Но можно использовать скрипт [[http://sourceware.org/systemtap/examples/io/disktop.stp disktop.stp]], написанный для подсистемы динамической трассировки [[http://sourceware.org/systemtap/ SystemTap]].
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Мониторинг активности USB-устройств   [комментарии]
  Начиная с Linux-ядра версии 2.6.11 в составе поставляется модуль usbmon, позволяющий осуществить полный мониторинг обмена данными с USB-устройствами.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Борьба с kernel panic в Linux-ядре 2.6.35 и выше   Автор: Аноним  [комментарии]
  Начиная с версии 2.6.35 в Linux-ядре появилась полезная функция "ramoops", позволяющая в случае краха сохранять информационный дамп состояния ядра в памяти для последующего анализа. Данные сохраняются только при мягкой перезагрузке, без очистки прошлого состояния памяти. Вкомпилировать данную функцию в ядро или загружать модулем "ramoops" - без разницы.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Мониторинг работы устройства digium TDM   Автор: bigbugkik  [комментарии]
  Пример решения задачи с отслеживанием отключения (зависания) карт серии digium TDM.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Наблюдение за трафиком на удаленном хосте через GUI-интерфейс Wireshark (доп. ссылка 1)   [комментарии]
 
Для наблюдения за трафиком, проходящим через сетевой интерфейс удаленной машины
192.168.1.2 в bash можно воспользоваться следующей конструкцией:

   wireshark -k -i <(ssh -l root 192.168.1.2 tshark -w - not tcp port 22)

Конструкция "not tcp port 22" необходима для запрещения перехвата трафика
передаваемого в wireshark по ssh.

В других shell:

   mkfifo /tmp/pipe
   ssh user@192.168.1.2 "tshark -w - not port 22" > /tmp/pipe
   wireshark -k -i /tmp/pipe

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

   tshark -w capture.cap 

а потом на локальном машине выполнить операцию анализа:

  wireshark -k -i capture.cap 
 
----* Организация приема SNMP trap’ов и их отправки на коммутаторах DLink (доп. ссылка 1) (доп. ссылка 2)   Автор: Andrey Sergienko  [комментарии]
  В рамках поставленной задачи (узнавать о появлении новых MAC-адресов на портах коммутаторов DLink) понадобилось организовать настройку SNMP-trap'ов на коммутационном оборудовании с последующим приемом их на сервере и дальнейшей обработкой в зависимости от пришедшего события.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Использование протокола CDP (Cisco Discovery Protocol) в Linux (доп. ссылка 1)   Автор: shadow_alone  [комментарии]
  Проект LLDP (http://trac.luffy.cx/lldpd/) позволяет задействовать на Linux-серверах протокол CDP (Cisco Discovery Protocol), позволяющий на Cisco посмотреть соседей с включенной CDP-командой "sh cdp nei". Команда выведет оборудование которое подключено, на каком порту и т.д., более подробно для заданного устройства параметры можно посмотреть командой "sh cdp ent Device_ID".
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Tshark для мониторинга запросов http (доп. ссылка 1)   Автор: CHAPPAY  [комментарии]
  Tshark из комплекта сниффера Wireshark (http://www.wireshark.org/) позволяет наглядно проследить запросы к http-серверу.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Установка OpenNMS в Debian Lenny (доп. ссылка 1)   Автор: Dennis Kucherskiy  [комментарии]
  Задача: найти и установить бесплатный аналог HP OpenView. Из всего, что удалось мне найти, максимально подошёл OpenNMS. Устанавливать буду на сервер с установленным Debian Lenny.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Пример конфигурирования IPMI на Linux сервере (доп. ссылка 1)   Автор: Roman Sozinov  [комментарии]
  IPMI - интеллектуальный интерфейс управления платформой, помогающий следить (и не только) за сенсорами состояния железа на сервере (температуры, напряжения, скоростью вращения вентиляторов, состоянием источников питания и т.п.). Задача - сконфигурировать IPMI-интерфейс на сервере, с возможностью получать данные о сенсорах по сети. Операционная система RHEL/CentOS 5, сервер Intel S5000PAL.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Мониторинг работы http-сервера Lighttpd при помощи mod_rrdtool (доп. ссылка 1)   [обсудить]
  Для оценки нагрузки и отладки работы http-сервера Lighttpd можно использовать входящий в комплект модуль mod_rrdtool.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Мониторинг аппаратных проблем в x86_64 сборке Linux (доп. ссылка 1)   [комментарии]
  Для мониторинга аппаратных проблем в 64-разрядных сборках Linux удобно использовать пакет mcelog, анализирующий MCE (Machine Check Exception) состояние в CPU AMD и Intel, которое может указать на проблемы с памятью и с кэшем CPU, ошибки обмена данными между CPU и чипсетом материнской платы.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Просмотр байтовых счетчиков трафика на интерфейсе во FreeBSD и Linux   [комментарии]
  По умолчанию "netstat -i" во FreeBSD показывает только число пакетов, чтобы посмотреть размер в байтах нужно использовать опцию "-b", упоминание которой удалось найти после трех прочтений man страницы.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Трассировка ввода/вывода в Linux (доп. ссылка 1)   [комментарии]
  Утилита blktrace (присутствует в репозиториях Ubuntu и Debian) позволяет проконтролировать какие именно данные передаются для заданного блочного устройства.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Временное ведение лога всех запросов к MySQL (доп. ссылка 1)   [комментарии]
 
Использование опций конфигурации log-slow-queries и general_log, позволяющих вести полный лог 
медленных или всех запросов, требует перезапуска mysql для включения или выключения ведения логов, 
что неудобно в ситуации, когда нужно проанализировать запросы только в текущий момент.
Для анализа запросов (не через локальный сокет) на лету можно воспользоваться сетевым сниффером.

Перехватываем и записываем срез трафика MySQL в файл:

   tcpdump -i eth0 port 3306 -s 1500 -w tcpdump.out

Выделяем из дампа SQL запросы, используя утилиту tshark из комплекта сниффера
Wireshark (http://www.wireshark.org/):

   tshark -r tcpdump.out -d tcp.port==3306,mysql -T fields -e mysql.query > query_log.out

Удаляем из полученного лога пустые и неинформативные строки:

   cat query_log.out | grep -vE "^(commit.*|autocommit.*|rollback.*|)$" | awk '{print $0 ";"}' > query_log_no_blank.out

Полученный лог удобно анализировать утилитой mysqlsla (http://hackmysql.com/mysqlsla)
 
----* Быстрый способ посмотреть статус работы memcached (доп. ссылка 1) (доп. ссылка 2)   [комментарии]
 
Просмотр статуса:

   echo stats | nc 127.0.0.1 11211
   echo stats items | nc 127.0.0.1 11211
   echo stats sizes | nc 127.0.0.1 11211
   echo stats slabs | nc 127.0.0.1 11211

   telnet 127.0.0.1 11211
      stats
      quit

Слежение за динамикой в стиле утилиты top:

   watch "echo stats | nc 127.0.0.1 11211"

Для тех у кого нет nc, но есть php:

   watch 'php -r '"'"'$m=new Memcache;$m->connect("127.0.0.1", 11211);print_r($m->getstats());'"'"
 
----* Настройка оповещения Nagios по ICQ (доп. ссылка 1)   Автор: Doktor  [комментарии]
  Простое решение для нотификации работы серверов при помощи ICQ:
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Просмотр в Linux списка совместно используемых библиотек, загруженных в память   [комментарии]
 
Утилита memstat сканирует содержимое /proc и генерирует список запущенных программ, используемых 
разделяемых библиотек и прочих объектов находящихся в памяти (например, шрифты,
области разделяемой памяти, файлы локали),
отображает занимаемую ими память, позволяет оценить степень
совместного использования библиотек.

Программа в Debian и Ubuntu находится в пакете memstat. 
При запуске, чтобы вывод не обрезался по границе экрана, нужно использовать опцию '-w'.

Вывод с группировкой по библиотекам:
   memstat -w|grep PID|sort -k 4|less

Вывод с сортировкой по размеру:
   memstat -w|sort -r -n -k 1|less

Вывод с сортировкой по числу использующих объект процессов:

   memstat -w|grep -v PID| perl -ne '$a=$_;s/\d+/|/g;s/[^|]//g; print length($_)-1 . " $a";' \
   |awk '{print $1 "\t" $2 "\t" $3}'|sort -n -r -k 1|less
 
----* Слежение за изменением файлов и директорий в Linux shell   [комментарии]
  Пакет inotify-tools содержит две полезные утилиты:
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Пример мониторинга свободного места на диске.   Автор: Hamelion  [комментарии]
  Наверное, все встречались, когда на том или ином разделе жесткого диска места уже нет. А
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Русские символы в rrdtool   Автор: Vladimir  [комментарии]
  При отображении строк в RRD используется кодировка UTF-16, в которой есть таблица русских символов, соответствующая таблице CP1251, только со смещением. Чтобы rrdgraph смог отображать русские символы на графиках необходимо внести изменения в файл src/rrd_afm.h. Находим в нем строчку
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Сетевая консоль для отладки зависаний Linux (доп. ссылка 1)   Автор: niol, debian-administration.org  [комментарии]
 
Модуль Linux ядра netconsole позволяет экспортировать консоль на другую машину по сети,
что полезно для отладки ситуации зависания Linux без вывода диагностики в лог и
на экран (например, X-ы зависли).

В /etc/modprobe.d/ создаем файл или добавляем в /etc/modules.conf:

   options netconsole netconsole=32769@192.168.1.1/eth1,32769@192.168.1.6/01:23:34:56:78:9A

где, 
   192.168.1.1:32769  сетевой адрес и порт на eth1 интерфейсе локальной машины, с которого будет производится отправка пакетов.
   192.168.1.6:32769 сетевой адрес, порт и MAC адрес удаленной машины куда будет экспортирована консоль.

На удаленной машине 192.168.1.6, для доступа к консоли используем netcat:

   nc -l -p 32769 -u

Подгружаем модуль netconsole:
   modprobe netconsole
 
----* Реализация команды top на Shell   Автор: rstone  [комментарии]
  Должно работать на любом терминале поддерживающем VT Escape последовательности, проверено в Linux, True64 , HP-UX и Соларисе .
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Привязка процесса к определенному CPU в SMP системе под Linux (доп. ссылка 1)   Автор: nixcraft  [комментарии]
 
Пример использования жесткой привязки процесса к определенному процессору  (CPU affinity).

Устанавливаем пакет schedutils
(Debian: apt-get install schedutils, Red Hat: up2date schedutils или rpm -ivh schedutils*)

Привязка процесса с pid 13545 к первому CPU (#0):
   taskset -c 1 -p 13545
к 3 и 4 CPU (#2 и #3):
   taskset -c 3,4 -p 13545

Загрузку процессоров в SMP системе удобно оценивать через утилиту mpstat из пакета sysstat.
    mpstat -P ALL

Утилизацию подсистемы ввода/вывода можно посмотреть через команду iostat
 
----* Как более детально посмотреть сколько программа потребляет памяти   [комментарии]
 
Linux:
   pmap <pid_процесса>
   cat /proc/<pid>/maps
   cat /proc/<pid>/status

FreeBSD:
   cat /proc/<pid>/map
   cat /proc/<pid>/status
 
----* Как получить данные с роутера по SNMP, зная его IP и communitystring   Автор: cyrex  [комментарии]
 
% snmpwalk -c communitystring -v 1 10.0.0.254
Ключ -c указывает строку community (обычно public)
-v задаёт версию протокола (1)

Если хотите просмотреть только часть дерева то можно задать вот так:
% snmpwalk -c community -v 1 -m iso.3.6.1.2.1.6.13.1.2 10.0.0.254
 
----* Построение графиков из rrdtool. Подсчёт суммарного трафика   Автор: cyrex  [комментарии]
  Пусть имеется созданная rrd база в файле /path/to/file.rrd (man rrdcreate), в которой содержатся 2 столбца данных ifinoctets и ifoutoctets (число входящих и исходящих пакетов на интерфейсе за минуту). Как обновлять man rrdupdate. Задача: требуется отобразить это графически с подписью данных, а так же суммарным трафиком и средней загрузкой канала.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Диагностика состояния сервера при помощи IPMI и пакета freeipmi (доп. ссылка 1)   [обсудить]
  Общая информация о BMC и поддержке IPMI:
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Как не разбирая корпус посмотреть модель материнской платы (доп. ссылка 1)   Автор: Anton V. Yuzhaninov  [комментарии]
 
1. Просмотреть содержимое BIOS (проверял под Linux и FreeBSD)
    dd if=/dev/mem bs=64k skip=15 count=1 | strings | less
в первых строчках обычно упоминается название материнской платы.

2. Воспользоваться утилитой dmidecode
 
----* Просмотр информации оборудовании через /proc в Linux (доп. ссылка 1)   [комментарии]
 
  cat /proc/cpuinfo
  cat /proc/meminfo
  cat /proc/ide/via
  cat /proc/ide/ide0/hda/geometry
  cat /proc/ide/drivers
  cat /proc/sys/dev/cdrom/info
  cat /proc/scsi/scsi
 
----* Как посмотреть параметры видеокарты (доп. ссылка 1)   [комментарии]
 
xdpyinfo
glxinfo
xvinfo 
 
----* Как оценить величину трафика и состояние системы в динамике для FreeBSD   [комментарии]
 
Динамика изменения параметров:

   netstat -w 1
   iostat -w 1
   vmstat -w 1
   gstat

Состояние буферов:

   vmstat -z
   netstat -m
   netstat -Lan
   netstat -s -p tcp
 
----* Какую расширенную информацию о процессе можно получить.   [комментарии]
 
Определяем родителя: 
    ps -lp <pid>  (в Linux есть утилита ptree)
Определяем какие файлы открыты:
    fstat -p <pid> (freebsd)
    lsof -p <pid>
Определяем какие сетевые сокеты сопоставлены с процессом:
    sockstat| grep <pid> (freebsd)
    netstat -pan| grep <pid> (linux)
    lsof -i -n|grep <pid>
     
 
----* Как отследить запущенные пользователями программы (доп. ссылка 1)   Автор: uldus  [обсудить]
  Включение контроля выполняемых процессов в FreeBSD:
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Как посмотреть список установленных локов в системе.   [обсудить]
 
Используйте утилиту lslk
 
----* Что обозначают буквы в поле STAT при запуске ps -aux или top ?   [комментарии]
 
R - Процесс выполняется в данный момент
S - Процесс ожидает выполнение (спит)
D - Процесс в полной (непрерываемой) спячке, например, ожидает ввода/вывода
Z - zombie или defunct процесс, т.е. процесс у которого нет родителя.
T - Процесс остановлен.
W - процесс в свопе
< - процесс в приоритетном режиме.
N - процесс в режиме низкого приоритета
L - real-time процесс, имеются страницы заблокированные в памяти.
 
----* Как в FreeBSD посмотреть состояние системных буферов   [обсудить]
 
sysctl vm.zone
 
----* Как в FreeBSD узнать значения LoadAverage, объем свободного ОЗУ и т.д.   [комментарии]
 
sysctl vm.stats.vm.v_active_count
sysctl vm.stats.vm.v_inactive_count
sysctl vm.stats.vm.v_wire_count
sysctl vm.stats.vm.v_cache_count
sysctl vm.stats.vm.v_free_count
sysctl vm.stats.vm.v_page_count
более подробно: 
	sysctl -a|grep vm
	sysctl| less
 
----* Как узнать аппаратную конфигурацию (ОЗУ, CPU и т.д.) машины под FreeBSD   [комментарии]
 
sysctl -a | grep hw
 
----* Как в FreeBSD более подробно ознакомится с поддержкой аппаратного устройства   [обсудить]
 
man 4 имя_устройства.
примеры: man 4 fxp; man 4 rl; man 4 ed; man 4 amr; man 4 pcm; man 4 cd; man 4 tty; man 4 sio;
 
----* Команды для аккаутинга   [обсудить]
 
Сколько CPU времени использовал каждый юзер в системе
	ac -p
Какие команды запускал каждый пользователь и сколько CPU и памяти 
было использовано при их выполнении:
	sa -u
 
----* Как получить список всех PCI и USB устройств на машине   [комментарии]
 
lspci
lspci -vvv
lsusb
lsusb -vvv
scanpci
lshw
lspcidrake
 
----* Замечание по утилите lsof   [обсудить]
 
Ключи:
-U - unix socket
-i inet формат:
	tcp_или_udp@host:port, например: tcp:25, @192.168.1.1
Примеры:
Список всех открытых файлов: lsof
Все процессы использующие файл: lsof file
Какие процессы используют internet и unix domain сокеты: lsof -i -U
Все открытые файлы для юзера: lsof -l user
...для процесса 12: lsof -p 12
 
----* Как посмотреть какие файлы открыты заданным процессом   [обсудить]
 
ls /proc/ID_процесса/fd
lsof -p ID_процесса
 
----* Как посмотреть какие процессы используют заданный файл   [обсудить]
 
fuser file
 
----* Как посмотреть какой сокет заняла какая программа   [комментарии]
 
для всех:  
	lsof -i -U
	fuser <port_num>/tcp
для linux: 
	netstat -pvlA inet
для FreeBSD:
        sockstat
 
----* Откуда берется steal внутри виртуальных машин и что с этим делать (доп. ссылка 1)   Автор: Mail.Ru Cloud Solutions  [комментарии]
  CPU steal time - это время, в течение которого виртуальная машина не получает ресурсы процессора для своего выполнения. Это время считается только в гостевых операционных системах в средах виртуализации.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 

 Версия для печати





Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру