Давно не было заметок на тему систем мониторинга, потому что всё более-менее известное и удобное я обозревал ранее. В этот раз попался интересный проект, про который я даже не слышал, не то, что не видел. Упоминание было в пятничной подборке видео, где был обзор на Beszel. Это очень простой и легковесный мониторинг для одного или группы хостов. Поддерживает Linux, FreeBSD, MacOS. Он отлично дополнит подборку легковесных мониторингов для одиночного сервера, хотя поддерживает через агенты сбор метрик и с других серверов.
Сразу перечислю основные особенности:
▪️Простой и легковесный мониторинг, написанный на Go.
▪️После установки сразу готов к работе, не требует особой настройки.
▪️Собирает только базовые метрики: доступность хоста, загрузка процессора, памяти, дисков, сетевой трафик, доступные метрики с сенсоров платформы. Плюс всё то же самое, только для Docker контейнеров.
▪️Собирает информацию через агентов на удалённых серверах. Агенты в виде бинарника или Docker контейнера. Подключается к агентам, сам ходит на хосты за информацией.
▪️Поддерживает различные провайдеры для аутентификации.
▪️Умеет сам себя бэкапить локально или на S3.
▪️Имеет REST API.
▪️Приложение построено на базе фреймворка pocketbase.io. Состояние хранится в SQLite.
Как и было сказано, Beszel очень прост в установке. Состоит из одного бинарника. Запустить можно как напрямую, так и через Docker. Если использовать бинарник, надо будет юнит для systemd писать, поэтому проще в Docker запустить:
Можно идти по IP адресу на порт 8090 и создавать учётную запись. Есть русский язык, причём перевод нормальный. У меня он включился по умолчанию, переключить на английский желания не возникло.
На главной странице можно сразу же добавить сервер для мониторинга. Нажимаете соответствующую кнопку, указываете имя и IP адрес сервера и получаете команду для установки либо через бинарник, либо через Docker. После установки агента, сразу начинается сбор метрик.
Для каждого сервера можно включить свои уведомления или использовать глобальные. Настраиваются в пару кликов, очень наглядно. Отправляться могут как по SMTP, так и через популярные мессенджеры. Под капотом там вебхуки через проект Shoutrrr со своим синтаксисом мессенджеров. Например, для Telegram строка с настройкой уведомлений выглядит так:
Пример уведомлений в Telegram есть внизу на картинке.
Мониторинг реально легковесный. Я запустил на чистой системе, добавил 3 хоста. Нагрузка болталась в районе 0-1% CPU и 56372K памяти. Посмотрел так:
Настройка очень простая. Вообще никуда не заглядывал. Сходу всё настроил, оповещения работают, протестировал. И на недоступность хоста, и на потребление ресурсов. В целом, всё понравилось. Очень простой и лёгкий в настройке мониторинг. Выглядит симпатично. Можно пользоваться как для одиночного сервера, так и для нескольких.
⇨ 🌐 Сайт / Исходники
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#мониторинг
Сразу перечислю основные особенности:
▪️Простой и легковесный мониторинг, написанный на Go.
▪️После установки сразу готов к работе, не требует особой настройки.
▪️Собирает только базовые метрики: доступность хоста, загрузка процессора, памяти, дисков, сетевой трафик, доступные метрики с сенсоров платформы. Плюс всё то же самое, только для Docker контейнеров.
▪️Собирает информацию через агентов на удалённых серверах. Агенты в виде бинарника или Docker контейнера. Подключается к агентам, сам ходит на хосты за информацией.
▪️Поддерживает различные провайдеры для аутентификации.
▪️Умеет сам себя бэкапить локально или на S3.
▪️Имеет REST API.
▪️Приложение построено на базе фреймворка pocketbase.io. Состояние хранится в SQLite.
Как и было сказано, Beszel очень прост в установке. Состоит из одного бинарника. Запустить можно как напрямую, так и через Docker. Если использовать бинарник, надо будет юнит для systemd писать, поэтому проще в Docker запустить:
# mkdir -p ./beszel_data && \
# docker run -d --name beszel --restart=unless-stopped \
-v ./beszel_data:/beszel_data -p 8090:8090 henrygd/beszel
Можно идти по IP адресу на порт 8090 и создавать учётную запись. Есть русский язык, причём перевод нормальный. У меня он включился по умолчанию, переключить на английский желания не возникло.
На главной странице можно сразу же добавить сервер для мониторинга. Нажимаете соответствующую кнопку, указываете имя и IP адрес сервера и получаете команду для установки либо через бинарник, либо через Docker. После установки агента, сразу начинается сбор метрик.
Для каждого сервера можно включить свои уведомления или использовать глобальные. Настраиваются в пару кликов, очень наглядно. Отправляться могут как по SMTP, так и через популярные мессенджеры. Под капотом там вебхуки через проект Shoutrrr со своим синтаксисом мессенджеров. Например, для Telegram строка с настройкой уведомлений выглядит так:
telegram://token@telegram?chats=@channel-1[,chat-id-1,...]
Пример уведомлений в Telegram есть внизу на картинке.
Мониторинг реально легковесный. Я запустил на чистой системе, добавил 3 хоста. Нагрузка болталась в районе 0-1% CPU и 56372K памяти. Посмотрел так:
# pmap 25017 -d
Настройка очень простая. Вообще никуда не заглядывал. Сходу всё настроил, оповещения работают, протестировал. И на недоступность хоста, и на потребление ресурсов. В целом, всё понравилось. Очень простой и лёгкий в настройке мониторинг. Выглядит симпатично. Можно пользоваться как для одиночного сервера, так и для нескольких.
⇨ 🌐 Сайт / Исходники
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#мониторинг
👍109👎5
Совет-предостережение насчёт systemd, монтирования дисков и некоторых облачных провайдеров. Ситуация, с которой сталкивался сам, а потом встречал ещё не раз. Если не ошибаюсь, последний раз такой механизм видел у хостера Linode.
В Linux есть служба systemd-mount, о которой я уже ранее писал. Хостер может её использовать для автоматического подключения сетевых дисков с разными параметрами. В целом это удобно и для него, и для пользователя. У меня был подключен в точку монтирования один такой диск. Я решил увеличить его в объёме и выбрать более производительный.
Подключил новый диск к серверу, стал копировать информацию. Находясь в консоли Linux сам размонтировал старый диск, который надо отключить и в его точку монтирования подключил новый диск с уже скопированными данными.
Иду в панель управления хостера и отключаю старый диск от сервера. Напоминаю, что в системе я его предварительно уже отмонтировал. Диск как-то подозрительно долго не отключался. Сходил в системный лог сервера посмотреть, отключился ли диск. И увидел там неожиданную информацию.
Идут постоянные попытки от systemd отмонтировать раздел, к которому подмонтирован уже НОВЫЙ диск. То есть у него записано где-то (я нашел в /run/systemd/generator), что к этой точке монтирования подключен старый диск. Софт хостера по управлению ресурсами просит systemd отключить старый диск от его точки монтирования, хотя по факту она уже занята другим диском.
Я в итоге не пострадал, так как приложение активно писало на диск и не дало его отмонтировать. Диск удалился без размонтирования. В таких случаях лучше новые диски монтировать в другие точки монтирования, а у приложений менять путь к рабочей директории. Это хоть и более хлопотно, но надёжнее, чем разбираться с тем, как хостинг монтирует и отключает диски.
Не смотрел, как в российских облаках хостеры монтируют сетевые диски в виртуалки. Если кто-то сталкивался, подскажите, эта тема актуальна для них, или там такого в принципе нет. Используется что-то другое, или диски только подключаются, но не монтируются автоматически.
В Linux есть служба systemd-mount, о которой я уже ранее писал. Хостер может её использовать для автоматического подключения сетевых дисков с разными параметрами. В целом это удобно и для него, и для пользователя. У меня был подключен в точку монтирования один такой диск. Я решил увеличить его в объёме и выбрать более производительный.
Подключил новый диск к серверу, стал копировать информацию. Находясь в консоли Linux сам размонтировал старый диск, который надо отключить и в его точку монтирования подключил новый диск с уже скопированными данными.
Иду в панель управления хостера и отключаю старый диск от сервера. Напоминаю, что в системе я его предварительно уже отмонтировал. Диск как-то подозрительно долго не отключался. Сходил в системный лог сервера посмотреть, отключился ли диск. И увидел там неожиданную информацию.
Идут постоянные попытки от systemd отмонтировать раздел, к которому подмонтирован уже НОВЫЙ диск. То есть у него записано где-то (я нашел в /run/systemd/generator), что к этой точке монтирования подключен старый диск. Софт хостера по управлению ресурсами просит systemd отключить старый диск от его точки монтирования, хотя по факту она уже занята другим диском.
Я в итоге не пострадал, так как приложение активно писало на диск и не дало его отмонтировать. Диск удалился без размонтирования. В таких случаях лучше новые диски монтировать в другие точки монтирования, а у приложений менять путь к рабочей директории. Это хоть и более хлопотно, но надёжнее, чем разбираться с тем, как хостинг монтирует и отключает диски.
Не смотрел, как в российских облаках хостеры монтируют сетевые диски в виртуалки. Если кто-то сталкивался, подскажите, эта тема актуальна для них, или там такого в принципе нет. Используется что-то другое, или диски только подключаются, но не монтируются автоматически.
2👍76👎2
Вчера была рассылка от Mikrotik. Я последнее время их игнорирую, так как продукция явно потеряла былую популярность в России в первую очередь из-за цен. Хотя близких аналогов нет, всё равно Микротики уже не так популярны. Но мимо вчерашней новости не смог пройти мимо, потому что она меня удивила.
Компания выпустила свой сервер - RouterOS enterprise Data Server со следующими характеристиками:
◽️20 слотов под U.2 NVMe диски, с поддежкой M.2
◽️сетевые порты: 2×100G QSFP28, 4×25G SFP28, 4×10G SFP+, 2×10G Ethernet
◽️16-core 2 GHz ARM CPU + 32GB DDR4 RAM
Внутри, как и ожидается – RouterOS в редакции Special ROSE edition с поддержкой в том числе технологии NVMe-TCP для экспорта дисков другим серверам. Это помимо традиционных SMB, NFS, iSCSI.
Компания позиционирует свой сервер как очень быстрое локальное хранилище под нагрузку, запущенную в контейнерах, которые RouterOS 7 поддерживает уже сейчас. В описании явно указаны примеры применения: MinIO, Nextcloud, Shinobi, Frigate и другие.
Неожиданная новинка. Цена всего $1950, что намекает на сегмент малого и среднего бизнеса. И при этом такие скорости, которые там особо не нужны.
Что думаете по поводу этих серверов? Мне кажется, зря они в сервера подались. Лучше бы на сетевых устройствах сконцентрировались, починили баги RouterOS 7, запустили бы наконец Long Term ветку. Представляю, сколько вылезет багов в системе на этом сервере, особенно в работе контейнеров под нагрузкой. Там инструментов для диагностики почти нет, работать с ними неудобно. Я бы не стал.
#mikrotik
Компания выпустила свой сервер - RouterOS enterprise Data Server со следующими характеристиками:
◽️20 слотов под U.2 NVMe диски, с поддежкой M.2
◽️сетевые порты: 2×100G QSFP28, 4×25G SFP28, 4×10G SFP+, 2×10G Ethernet
◽️16-core 2 GHz ARM CPU + 32GB DDR4 RAM
Внутри, как и ожидается – RouterOS в редакции Special ROSE edition с поддержкой в том числе технологии NVMe-TCP для экспорта дисков другим серверам. Это помимо традиционных SMB, NFS, iSCSI.
Компания позиционирует свой сервер как очень быстрое локальное хранилище под нагрузку, запущенную в контейнерах, которые RouterOS 7 поддерживает уже сейчас. В описании явно указаны примеры применения: MinIO, Nextcloud, Shinobi, Frigate и другие.
Неожиданная новинка. Цена всего $1950, что намекает на сегмент малого и среднего бизнеса. И при этом такие скорости, которые там особо не нужны.
Что думаете по поводу этих серверов? Мне кажется, зря они в сервера подались. Лучше бы на сетевых устройствах сконцентрировались, починили баги RouterOS 7, запустили бы наконец Long Term ветку. Представляю, сколько вылезет багов в системе на этом сервере, особенно в работе контейнеров под нагрузкой. Там инструментов для диагностики почти нет, работать с ними неудобно. Я бы не стал.
#mikrotik
👍117👎10
This media is not supported in your browser
VIEW IN TELEGRAM
Типичная ситуация, которую я видел много раз. По какой-то причине некоторые руководители считают, что можно уволить сисадмина, не взять сразу на его место кого-нибудь, и оно само как-то будет работать. А потом что-то начинает ломаться.
Звонят сисадмину, но он почему-то не хочет помогать. Нанимают нового, но он ничего не знает, потому что никто не передал дела. Я так пришёл в одну компанию, где сисадмин уволился пару месяцев назад и там его помощник выживал, как мог. Но у него ни доступов, ни понимания, как тут всё работает, не было. Ни желания что-то делать за свою зарплату и должность помощника. Благо хоть учётки у директора были. Админа не стал дёргать, во всём без него разобрался.
Иногда мне пишут люди и просят помочь с какой-то проблемой, потому что сисадмин уволился и никто не знает, что делать. Я не берусь за такие задачи, обычно сразу отказываю. Не хочу связываться с такими делами. Это гарантированно бесконечные поиски информации и подводные камни в решении проблем.
Видео отсюда: https://www.youtube.com/shorts/8ooaojqQ70w
Прикольный, кстати, канал. Вроде ничего особенного, но некоторые вещи забавные.
#юмор (чёрный)
Звонят сисадмину, но он почему-то не хочет помогать. Нанимают нового, но он ничего не знает, потому что никто не передал дела. Я так пришёл в одну компанию, где сисадмин уволился пару месяцев назад и там его помощник выживал, как мог. Но у него ни доступов, ни понимания, как тут всё работает, не было. Ни желания что-то делать за свою зарплату и должность помощника. Благо хоть учётки у директора были. Админа не стал дёргать, во всём без него разобрался.
Иногда мне пишут люди и просят помочь с какой-то проблемой, потому что сисадмин уволился и никто не знает, что делать. Я не берусь за такие задачи, обычно сразу отказываю. Не хочу связываться с такими делами. Это гарантированно бесконечные поиски информации и подводные камни в решении проблем.
Видео отсюда: https://www.youtube.com/shorts/8ooaojqQ70w
Прикольный, кстати, канал. Вроде ничего особенного, но некоторые вещи забавные.
#юмор (чёрный)
3👍200👎3
🔝 ТОП постов за прошедший месяц. Все самые популярные публикации по месяцам можно почитать со соответствующему хэштэгу #топ. Отдельно можно посмотреть ТОП за прошлые года: 2023 и 2024.
Пользуясь случаем, хочу попросить проголосовать за мой канал, так как это открывает некоторые дополнительные возможности по настройке: https://www.tg-me.com/boost/srv_admin.
📌 Больше всего пересылок:
◽️Работа с командой ip в консоли Linux (530)
◽️Полезные возможности rsync (487)
◽️Веб-интерфейс для пользователей OpenVPN (368)
📌 Больше всего комментариев:
◽️Новый сервер от Mikrotik (255)
◽️Мои инструменты для дачи (174)
◽️Китайский ИИ DeepSeek (114)
📌 Больше всего реакций:
◽️Мои инструменты для дачи (360)
◽️Работа с командой ip в консоли Linux (313)
◽️Правильное написание сокращений с данными (239)
📌 Больше всего просмотров:
◽️История о замене диска в ЦОД (12593)
◽️Совет по проверке железа на арендном сервере (12559)
◽️Правильное написание сокращений с данными (11476)
#топ
Пользуясь случаем, хочу попросить проголосовать за мой канал, так как это открывает некоторые дополнительные возможности по настройке: https://www.tg-me.com/boost/srv_admin.
📌 Больше всего пересылок:
◽️Работа с командой ip в консоли Linux (530)
◽️Полезные возможности rsync (487)
◽️Веб-интерфейс для пользователей OpenVPN (368)
📌 Больше всего комментариев:
◽️Новый сервер от Mikrotik (255)
◽️Мои инструменты для дачи (174)
◽️Китайский ИИ DeepSeek (114)
📌 Больше всего реакций:
◽️Мои инструменты для дачи (360)
◽️Работа с командой ip в консоли Linux (313)
◽️Правильное написание сокращений с данными (239)
📌 Больше всего просмотров:
◽️История о замене диска в ЦОД (12593)
◽️Совет по проверке железа на арендном сервере (12559)
◽️Правильное написание сокращений с данными (11476)
#топ
Telegram
ServerAdmin.ru
Проголосуйте за канал, чтобы он получил больше возможностей.
1👍39👎3
Протокол НТТРv3, или как ещё называют эту версию QUIC, появился довольно давно. Практические реализации появились ещё в 2020-м году. Я всё как-то мимо него проходил, не погружался и не настраивал. На прошлой неделе вышло видео:
▶️ Ускоряем HTTP/3: DNS-записи HTTPS
В настройке HTTPv3 ничего сложного нет, так что решил разобраться, попробовать и дальше уже включать по умолчанию. Никаких технических преград сейчас к этому нет.
Для работы HTTP версии 3 нужно выполнить несколько шагов.
1️⃣ В настройке веб сервера включить его поддержку. В Nginx/Angie это делается следующим образом. Добавляем уже к существующим параметрам виртуального хоста с HTTPS следующие настройки:
Обращаю внимание на важный момент. В пакетах Angie из репозиториев разработчиков модуль http_v3_module включён по умолчанию. Не проверял его наличие в пакетах с Nginx. DeepSeek посоветовал вручную собрать Nginx с параметром
И второй момент. Я изначально add_header добавил не в корневой location, а в параметры сервера, где добавляются другие заголовки. HTTPv3 не заработал. Долго выяснял, в чём дело. Думал, это формальность. Я обычно всегда заголовки ко всему серверу применяю, а не location. Но тут, судя по всему, это имеет принципиальное значение.
2️⃣ Открываем на файрволе порт 443 UDP, так как QUIC работает по UDP. Я сначала тоже забыл это сделать. У меня по умолчанию всё, что не надо, закрыто, поэтому ничего не заработало. Быстро сообразил, что надо открыть UDP порт.
Этих настроек уже достаточно, чтобы HTTPv3 заработал, но не с первого запроса. По умолчанию браузер обращается по v2 и только после того, как придёт настроенный заголовок, переходит на v3. А первые несколько запросов улетают по v2.
Чтобы это исправить, придумана новая DNS запись типа HTTPS. Браузер, при обращении к сайту, ищет A запись и параллельно запрашивает HTTPS. Если она есть и там указано, что сайт поддерживает работу HTTPv3, он сразу обращается по v3.
Не все DNS хостинги поддерживают этот тип записи. Например, DNS от Яндекса не позволяет создать эту запись. Я в итоге от него отказался. Бесплатный DNS хостинг есть у Selectel. Причём недавно они выпустили новую версию этого хостинга и всем предлагают туда перейти. Мне как-то лень переносить было, и так всё работает. Но старая версия DNS хостинга не поддерживает эти записи. Пришлось перейти на новую. Там без проблем создал HTTPS запись. Выглядит она примерно так:
1 - приоритет
. - основное доменное имя, аналог serveradmin.ru
alpn="h3,h2" - указание на поддержку версии HTTPv3 и HTTPv2
3️⃣ Таким образом, третий пункт – добавление DNS записи типа HTTPS.
После этого сайт с первого запроса стал работать по протоколу третьей версии.
В настройке нет никаких проблем, можно прямо сейчас использовать новую версию протокола. К тому же это максимально безопасно, так как современные браузеры всегда делают попытку открыть сайт и по v2. Если вы где-то ошибётесь в настройке, то v3 просто не заработает. Я в этом убедился на практике. Когда что-то было не так, сайт работал как и прежде. И только после того, как всё сделал правильно, заработал HTTPv3.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#webserver #angie
▶️ Ускоряем HTTP/3: DNS-записи HTTPS
В настройке HTTPv3 ничего сложного нет, так что решил разобраться, попробовать и дальше уже включать по умолчанию. Никаких технических преград сейчас к этому нет.
Для работы HTTP версии 3 нужно выполнить несколько шагов.
1️⃣ В настройке веб сервера включить его поддержку. В Nginx/Angie это делается следующим образом. Добавляем уже к существующим параметрам виртуального хоста с HTTPS следующие настройки:
listen 443 quic reuseport;
http3 on;
location / {
add_header Alt-Svc 'h3=":443"; ma=86400';
}
Обращаю внимание на важный момент. В пакетах Angie из репозиториев разработчиков модуль http_v3_module включён по умолчанию. Не проверял его наличие в пакетах с Nginx. DeepSeek посоветовал вручную собрать Nginx с параметром
--with-http_v3_module
. И второй момент. Я изначально add_header добавил не в корневой location, а в параметры сервера, где добавляются другие заголовки. HTTPv3 не заработал. Долго выяснял, в чём дело. Думал, это формальность. Я обычно всегда заголовки ко всему серверу применяю, а не location. Но тут, судя по всему, это имеет принципиальное значение.
2️⃣ Открываем на файрволе порт 443 UDP, так как QUIC работает по UDP. Я сначала тоже забыл это сделать. У меня по умолчанию всё, что не надо, закрыто, поэтому ничего не заработало. Быстро сообразил, что надо открыть UDP порт.
Этих настроек уже достаточно, чтобы HTTPv3 заработал, но не с первого запроса. По умолчанию браузер обращается по v2 и только после того, как придёт настроенный заголовок, переходит на v3. А первые несколько запросов улетают по v2.
Чтобы это исправить, придумана новая DNS запись типа HTTPS. Браузер, при обращении к сайту, ищет A запись и параллельно запрашивает HTTPS. Если она есть и там указано, что сайт поддерживает работу HTTPv3, он сразу обращается по v3.
Не все DNS хостинги поддерживают этот тип записи. Например, DNS от Яндекса не позволяет создать эту запись. Я в итоге от него отказался. Бесплатный DNS хостинг есть у Selectel. Причём недавно они выпустили новую версию этого хостинга и всем предлагают туда перейти. Мне как-то лень переносить было, и так всё работает. Но старая версия DNS хостинга не поддерживает эти записи. Пришлось перейти на новую. Там без проблем создал HTTPS запись. Выглядит она примерно так:
# dig serveradmin.ru HTTPS
serveradmin.ru. 3600 IN HTTPS 1 . alpn="h3,h2"
1 - приоритет
. - основное доменное имя, аналог serveradmin.ru
alpn="h3,h2" - указание на поддержку версии HTTPv3 и HTTPv2
3️⃣ Таким образом, третий пункт – добавление DNS записи типа HTTPS.
После этого сайт с первого запроса стал работать по протоколу третьей версии.
В настройке нет никаких проблем, можно прямо сейчас использовать новую версию протокола. К тому же это максимально безопасно, так как современные браузеры всегда делают попытку открыть сайт и по v2. Если вы где-то ошибётесь в настройке, то v3 просто не заработает. Я в этом убедился на практике. Когда что-то было не так, сайт работал как и прежде. И только после того, как всё сделал правильно, заработал HTTPv3.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#webserver #angie
3👍172👎3
В своей деятельности нередко приходится вносить изменения в стандартные юниты systemd. Я не буду писать длинное руководство со всеми командами и параметрами. Их всё равно не запомнишь все. А 1-2 момента можно выхватить и сразу начать применять. Вот такими моментами и поделюсь, которые когда-то не знал, увидел, запомнил и применяю.
Покажу на примере службы Nginx, установленной из пакета в стандартном репозитории. По умолчанию служба автоматически не поднимется, если по какой-то причине завершится. Вот это и исправим, добавив принудительный автозапуск.
1️⃣ Раньше я шёл в
Содержимое юнита прилетит в консоль. Удобно, и никуда ходить не надо. Простая вещь, но узнал я о ней относительно недавно. Там сразу и путь видно, где лежит файл с настройками, если захочется его посмотреть напрямую.
2️⃣ Теперь добавляем изменение. Можно создать директорию
Открывается текстовый редактор по умолчанию. Вносим изменение:
Сохраняем. Конфигурация автоматически применяется. Теперь если набрать:
То мы увидим и исходную конфигурацию и файл
Не зная про команду
3️⃣ Расскажу про ещё один нюанс, который иногда забываю, потом разбираюсь, почему не работает, и вспоминаю, в чём проблема. Если добавляется новый параметр, то никаких нюансов нет, просто указываете его и всё. Если же параметры в
Переписали параметры запуска, которые в основном юните выглядят так:
Обнулять надо не все параметры. Не помню точно, какие нужно, а какие нет. Точно знаю, что всё, что относится к Exec надо обнулять, переменные окружения, если хотите полностью все переопределить, пользователей, наверняка что-то ещё. Если какие-то добавленные изменения не работают, просто обнулите их перед переопределением.
Рекомендую не добавлять эту статью в закладки, а сразу попробовать то, что тут описано, если не знакомы с этими командами. Это реально удобно. Вряд ли кто-то специально проходит курсы по systemd или изучает все её команды. Зачастую всё знать не нужно, лишнее быстро забывается, в итоге только время тратишь. А такую мелочь где-то выхватишь, запомнишь и потом используешь. Я поэтому любою смотреть, как другие в терминале работают. Постоянно что-то новое узнаешь и обогащаешь свой опыт.
#systemd
Покажу на примере службы Nginx, установленной из пакета в стандартном репозитории. По умолчанию служба автоматически не поднимется, если по какой-то причине завершится. Вот это и исправим, добавив принудительный автозапуск.
/etc/systemd/system/multi-user.target.wants
, искал юнит nginx и смотрел, какие там установлены параметры. А можно сделать вот так:# systemctl cat nginx.service
Содержимое юнита прилетит в консоль. Удобно, и никуда ходить не надо. Простая вещь, но узнал я о ней относительно недавно. Там сразу и путь видно, где лежит файл с настройками, если захочется его посмотреть напрямую.
/etc/systemd/system/nginx.service.d
и туда положить конфигурацию override.conf
с перекрывающими или дополнительными параметрами. Так давно не делаю, потому что помню команду:# systemctl edit nginx.service
Открывается текстовый редактор по умолчанию. Вносим изменение:
[Service]
Restart=always
RestartSec=5s
Сохраняем. Конфигурация автоматически применяется. Теперь если набрать:
# systemctl cat nginx.service
То мы увидим и исходную конфигурацию и файл
/etc/systemd/system/nginx.service.d/override.conf
, который был создан автоматически после команды edit
. Не зная про команду
cat
, я каждый раз вручную проверял override.conf
и исходный юнит. Просто не довелось о ней услышать или где-то увидеть.override.conf
перекрывают такие же в основном юните, например ExecStart и некоторые другие, то значение нужно сначала обнулить, а потом записать новое значение. Например:ExecStart=
ExecStart=/usr/sbin/nginx -g 'daemon off; master_process off;'
Переписали параметры запуска, которые в основном юните выглядят так:
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
Обнулять надо не все параметры. Не помню точно, какие нужно, а какие нет. Точно знаю, что всё, что относится к Exec надо обнулять, переменные окружения, если хотите полностью все переопределить, пользователей, наверняка что-то ещё. Если какие-то добавленные изменения не работают, просто обнулите их перед переопределением.
Рекомендую не добавлять эту статью в закладки, а сразу попробовать то, что тут описано, если не знакомы с этими командами. Это реально удобно. Вряд ли кто-то специально проходит курсы по systemd или изучает все её команды. Зачастую всё знать не нужно, лишнее быстро забывается, в итоге только время тратишь. А такую мелочь где-то выхватишь, запомнишь и потом используешь. Я поэтому любою смотреть, как другие в терминале работают. Постоянно что-то новое узнаешь и обогащаешь свой опыт.
#systemd
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍224👎3
С момента первого моего упоминания сервиса axiom.co, продолжаю его использовать. Вновь пишу о нём, чтобы рассказать тем, кто не видел эту информацию. Очень простой в настройке и удобный в использовании для хранения и анализа логов веб сервера. Я пользуюсь полностью бесплатным тарифом, который не требует никаких подтверждений и персональных данных. Аутентификация через учётку на github. При этом позволяет хранить 500GB логов в месяц. Мне этого за глаза.
Про настройку и использование я уже писал ранее. По настройке с тех пор ничего не поменялось. Для отправки используется Vector (иногда падает, надо мониторить и переподнимать), у него встроенная интеграция с axiom.
Axiom условно можно назвать аналогом ELK, только сильно урезанным в плане функциональности. Из-за этого его особо не надо изучать. Отправляешь туда логи, заходишь и мышкой создаёшь нужные дашборды, запросы, отчёты. С ELK так не получится. В новых версиях даже заходить не хочется в виджеты и дашборды. Каждый раз, как первый раз, приходится вспоминать, как тут что-то сделать и построить нужную визуализацию.
Например, я позавчера включил на сайте протокол HTTPv3. Решил сходить посмотреть, сколько запросов по этому протоколу выполняется. Сбор логов настроен по указанной выше ссылке. В веб интерфейсе axiom иду в раздел Query и мышкой в конструкторе строю запрос: Dataset = serveradmin.ru, Where != http_version, Summarize count(), group by http_version.
И получил график растущего использования HTTPv3. Протокол используется.
Или вот ещё пример. Посмотрим, по каким url на запросы выходят 404 коды ответов. Dataset = serveradmin.ru, Where status =~ "404", Summarize count(), group by url.
Думаю, идея понятна. В сервисе ничего такого особенного нет, чего нельзя было бы сделать где-то в другом месте. То же самое можно сделать в ELK, Graylog, Loki, Goaccess. Но тут всё бесплатно, ничего настраивать не надо. Просто оправляем логи и пользуемся. Разумеется, если у вас там ничего секретного нет. А то уже предвижу комментарии на тему того, что я свои секретные логи веб сервера никому показывать не могу. Если не можете, то не используйте облачные сервисы. Тут всё очевидно. Наверняка они эти данные как-то используют, иначе откуда такая щедрость.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#logs #webserver
Про настройку и использование я уже писал ранее. По настройке с тех пор ничего не поменялось. Для отправки используется Vector (иногда падает, надо мониторить и переподнимать), у него встроенная интеграция с axiom.
Axiom условно можно назвать аналогом ELK, только сильно урезанным в плане функциональности. Из-за этого его особо не надо изучать. Отправляешь туда логи, заходишь и мышкой создаёшь нужные дашборды, запросы, отчёты. С ELK так не получится. В новых версиях даже заходить не хочется в виджеты и дашборды. Каждый раз, как первый раз, приходится вспоминать, как тут что-то сделать и построить нужную визуализацию.
Например, я позавчера включил на сайте протокол HTTPv3. Решил сходить посмотреть, сколько запросов по этому протоколу выполняется. Сбор логов настроен по указанной выше ссылке. В веб интерфейсе axiom иду в раздел Query и мышкой в конструкторе строю запрос: Dataset = serveradmin.ru, Where != http_version, Summarize count(), group by http_version.
['serveradmin.ru']
| where isnotempty(http_version)
| summarize count() by bin_auto(_time), http_version
И получил график растущего использования HTTPv3. Протокол используется.
Или вот ещё пример. Посмотрим, по каким url на запросы выходят 404 коды ответов. Dataset = serveradmin.ru, Where status =~ "404", Summarize count(), group by url.
['serveradmin.ru']
| where status =~ "404"
| summarize count() by bin_auto(_time), url
Думаю, идея понятна. В сервисе ничего такого особенного нет, чего нельзя было бы сделать где-то в другом месте. То же самое можно сделать в ELK, Graylog, Loki, Goaccess. Но тут всё бесплатно, ничего настраивать не надо. Просто оправляем логи и пользуемся. Разумеется, если у вас там ничего секретного нет. А то уже предвижу комментарии на тему того, что я свои секретные логи веб сервера никому показывать не могу. Если не можете, то не используйте облачные сервисы. Тут всё очевидно. Наверняка они эти данные как-то используют, иначе откуда такая щедрость.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#logs #webserver
3👍80👎4
Основной вопрос, который возникает при включении прокола HTTPv3 для сайта: "А какая разница с прошлым протоколом? Зачем включать?". Я решил провести некоторые тесты на своём реальном сайте, включая и отключая h3. Для тестов взял хорошо известный мне инструмент WebPageTest и запустил у себя.
Как обычно, он не собрался без ошибок, пришлось поковыряться. Если кому-то интересен этот локальный сервис для теста производительности сайтов, дайте знать. Сделаю по нему свежую заметку, как собрать и запустить самую свежую версию сервера и агента. Его удобно использовать, так как можно запускать локально и исключать влияние сторонних факторов, которые обязательно будут в публичных сервисах.
Запустил я локальную версию WebPageTest на своём сервере и прогнал серию тестов с отключенным h3 и включенным. Для каждого прогона делал по 9 тестов с двумя запусками, когда второй использует кэш после первого запуска. И сравнил результаты, как между одинаковыми тестами в рамках h2 и h3, так и между ними. Различия между однотипными тестами были минимальны. И между h2 и h3 разница была стабильная.
Результаты получились неоднозначными. Поленился поднять локальную копию сайта. Тестировал на рабочем, который опубликован в интернет. Интересно увидеть практические результаты, а не лабораторные. В итоге разница получилась незначительная в пользу h2. Можно сказать в пределах погрешности, кроме одного значения - Time To first Byte и как его следствие - время начала отрисовки Time to Start Render. В режиме h3 она неизменно была выше, чем в h2. То есть дольше приходил ответ на первый запрос, и позже начиналась отрисовка. Параметр TTFB важный с точки зрения СЕО, так что даже не знаю, как реагировать на эти измерения. По идее надо отключать h3.
Внимательно смотрел на результаты и сравнивал. H3 даёт по всем параметрам результаты не хуже h2, а где-то даже лучше. DNS Lookup одинаковый, то есть проседания на DNS запросы нет, Total Connection Time у h3 неизменно ниже, загрузка всех элементов чуть быстрее, но Time to First Byte, за который по идее отвечает непосредственно сервер, всегда у h3 выше и из-за этого едут все остальные метрики, так как и отрисовка, и полная загрузка начинают отставать. Такое ощущение, что причина в реализации h3 в самом веб сервере. Надо тестировать с другими, но это довольно хлопотно, если разворачивать реальный сайт, а не синтетические странички.
Внизу показал результат сравнения, где получилась наиболее усреднённая картинка. Думаю, что разверну сайт отдельно локально и потестирую. Надо понять, в каком режиме всё же лучше оставлять сайты. В целом, с обоими версиями HTTP у меня результат получился хорошим, ниже рекомендованного порога, который считается хорошим результатом. Но всё равно, чем меньше, тем лучше. HTTPv3 пока отключил.
Было бы интересно узнать, если кто-то делал подобные тесты или видел где-то результаты. Нет возможности посвятить много времени этому вопросу, чтобы окончательно разобраться. Один сайт и веб сервер - не показатель. Надо массовые тесты делать.
#webserver #webpagetest
Как обычно, он не собрался без ошибок, пришлось поковыряться. Если кому-то интересен этот локальный сервис для теста производительности сайтов, дайте знать. Сделаю по нему свежую заметку, как собрать и запустить самую свежую версию сервера и агента. Его удобно использовать, так как можно запускать локально и исключать влияние сторонних факторов, которые обязательно будут в публичных сервисах.
Запустил я локальную версию WebPageTest на своём сервере и прогнал серию тестов с отключенным h3 и включенным. Для каждого прогона делал по 9 тестов с двумя запусками, когда второй использует кэш после первого запуска. И сравнил результаты, как между одинаковыми тестами в рамках h2 и h3, так и между ними. Различия между однотипными тестами были минимальны. И между h2 и h3 разница была стабильная.
Результаты получились неоднозначными. Поленился поднять локальную копию сайта. Тестировал на рабочем, который опубликован в интернет. Интересно увидеть практические результаты, а не лабораторные. В итоге разница получилась незначительная в пользу h2. Можно сказать в пределах погрешности, кроме одного значения - Time To first Byte и как его следствие - время начала отрисовки Time to Start Render. В режиме h3 она неизменно была выше, чем в h2. То есть дольше приходил ответ на первый запрос, и позже начиналась отрисовка. Параметр TTFB важный с точки зрения СЕО, так что даже не знаю, как реагировать на эти измерения. По идее надо отключать h3.
Внимательно смотрел на результаты и сравнивал. H3 даёт по всем параметрам результаты не хуже h2, а где-то даже лучше. DNS Lookup одинаковый, то есть проседания на DNS запросы нет, Total Connection Time у h3 неизменно ниже, загрузка всех элементов чуть быстрее, но Time to First Byte, за который по идее отвечает непосредственно сервер, всегда у h3 выше и из-за этого едут все остальные метрики, так как и отрисовка, и полная загрузка начинают отставать. Такое ощущение, что причина в реализации h3 в самом веб сервере. Надо тестировать с другими, но это довольно хлопотно, если разворачивать реальный сайт, а не синтетические странички.
Внизу показал результат сравнения, где получилась наиболее усреднённая картинка. Думаю, что разверну сайт отдельно локально и потестирую. Надо понять, в каком режиме всё же лучше оставлять сайты. В целом, с обоими версиями HTTP у меня результат получился хорошим, ниже рекомендованного порога, который считается хорошим результатом. Но всё равно, чем меньше, тем лучше. HTTPv3 пока отключил.
Было бы интересно узнать, если кто-то делал подобные тесты или видел где-то результаты. Нет возможности посвятить много времени этому вопросу, чтобы окончательно разобраться. Один сайт и веб сервер - не показатель. Надо массовые тесты делать.
#webserver #webpagetest
2👍76👎2
Коротенькая заметка про небольшой полностью бесплатный полезный сервис, который я стал использовать - newreleases.io. Добавляешь туда ссылку на какой-то проект, и он начинает следить за выходом обновлений. Поддерживаются различные источники информации - репозитории GitHub, GitLab, хранилище контейнеров Docker Hub и многие другие. Я по факту использовал только ссылки на guthub и docker hub, так как всё, что меня интересует, живёт там.
Сервис отображает все добавленные проекты в своём интерфейсе с номерами свежих версий, где можно быстро посмотреть историю версий и изменения, если они описаны.
Плюс, newreleases отправляет с настроенной периодичностью письма на почту со всеми обновлениями. Сделано просто и удобно.
Например, мне регулярно приходится обновлять Rocket.Chat. Каждый раз я иду в репозиторий, смотрю, какая там вышла свежая стабильная версия, меняю версию в инвентаре и обновляю контейнеры, перезапускаю. С newreleases задача упрощается.
Я наполнил список интересующими меня проектами. Теперь в едином интерфейсе с уведомлениями на почту могу следить за обновлениями. Да и просто список смотрится наглядно. Удобно быстро найти номер свежей версии интересующего тебя продукта.
У меня получился такой список:
- Rocket.Chat
- Joplin
- Gatus
- Docker-volume-backup
- Prometheus
- Php-src
- Zabbix
- Localsend
- Grafana
- Angie
- NXS-backup
- Roundcube
- Postfixadmin
- Lynis
- PeerTube
- ExplorerPatcher
- Scrcpy
- WebPageTest
- WG-easy
- Teamgram-server
- Cdebug
- Labean
- Pupirka
- Zabbix-in-Telegram
Скорее всего будет дополняться. Это только что, что вспомнил, когда принял решение пользоваться.
#сервис
Сервис отображает все добавленные проекты в своём интерфейсе с номерами свежих версий, где можно быстро посмотреть историю версий и изменения, если они описаны.
Плюс, newreleases отправляет с настроенной периодичностью письма на почту со всеми обновлениями. Сделано просто и удобно.
Например, мне регулярно приходится обновлять Rocket.Chat. Каждый раз я иду в репозиторий, смотрю, какая там вышла свежая стабильная версия, меняю версию в инвентаре и обновляю контейнеры, перезапускаю. С newreleases задача упрощается.
Я наполнил список интересующими меня проектами. Теперь в едином интерфейсе с уведомлениями на почту могу следить за обновлениями. Да и просто список смотрится наглядно. Удобно быстро найти номер свежей версии интересующего тебя продукта.
У меня получился такой список:
- Rocket.Chat
- Joplin
- Gatus
- Docker-volume-backup
- Prometheus
- Php-src
- Zabbix
- Localsend
- Grafana
- Angie
- NXS-backup
- Roundcube
- Postfixadmin
- Lynis
- PeerTube
- ExplorerPatcher
- Scrcpy
- WebPageTest
- WG-easy
- Teamgram-server
- Cdebug
- Labean
- Pupirka
- Zabbix-in-Telegram
Скорее всего будет дополняться. Это только что, что вспомнил, когда принял решение пользоваться.
#сервис
2👍149👎2
Не знаю, зачем может пригодиться сервис, о котором пойдёт дальше речь. Просто мне он показался необычным и прикольным – seashells.io. С его помощью можно через pipe отправить вывод любой консольной команды в браузер в режиме реального времени.
Идём по ссылке и смотрим на свой htop в режиме реального времени. Соответственно, можно придумать различные трюки с ним. Например, отправлять все новые команды консоли в браузер:
Можно логи туда направить:
Можно какой-то цикл запустить и смотреть на его выполнение:
Сервис бесплатный, опенсорсный. Если сильно хочется, можно собрать и запустить у себя серверную часть:
По умолчанию запустится на порту 8888. Можно идти по IP адресу в веб интерфейс: http://10.20.1.36:8888/
Отправляем команду на свой сервер:
В ссылке меняете seashells.io на 10.20.1.36, либо в локальном DNS назначаете seashells.io адрес своего сервера. А можно просто в исходниках поправить имя домена. В корне репозитория открываете файл main.go и меняете там baseUrl на свой. Тут же и ограничения на 5 одновременных подключений указано, можете тоже поменять. Я попробовал, пересобрал, всё получилось.
Если работать с этой штукой постоянно, то можно установить специальный клиент:
Такая необычная и простенькая программа уровня курсовой работы студента-программиста. Можете код посмотреть, что-то поменять там. Он простой и легко читается.
⇨ 🌐 Сайт / Исходники
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#remote
# htop | nc seashells.io 1337
serving at https://seashells.io/v/f45rYSeF
Идём по ссылке и смотрим на свой htop в режиме реального времени. Соответственно, можно придумать различные трюки с ним. Например, отправлять все новые команды консоли в браузер:
# exec > >(nc seashells.io 1337) 2>&1
Можно логи туда направить:
# tail -f /var/log/syslog | nc seashells.io 1337
Можно какой-то цикл запустить и смотреть на его выполнение:
# while true; do date +'%d-%b-%Y-%H:%M:%S'; sleep 1; done | nc seashells.io 1337
Сервис бесплатный, опенсорсный. Если сильно хочется, можно собрать и запустить у себя серверную часть:
# apt install golang git
# git clone https://github.com/anishathalye/seashells-server
# cd seashells-server
# go build
# cp env.sample env
# ./run.bash
По умолчанию запустится на порту 8888. Можно идти по IP адресу в веб интерфейс: http://10.20.1.36:8888/
Отправляем команду на свой сервер:
# htop | nc 10.20.1.36 1337
serving at https://seashells.io/v/Nuns8eRT
В ссылке меняете seashells.io на 10.20.1.36, либо в локальном DNS назначаете seashells.io адрес своего сервера. А можно просто в исходниках поправить имя домена. В корне репозитория открываете файл main.go и меняете там baseUrl на свой. Тут же и ограничения на 5 одновременных подключений указано, можете тоже поменять. Я попробовал, пересобрал, всё получилось.
Если работать с этой штукой постоянно, то можно установить специальный клиент:
# apt install python3-pip python3.11-venv
# python3 -m venv ~/seashells
# cd ~/seashells/bin/pip
# ./pip3 install seashells
# htop | ./seashells -i 10.20.1.36 -p 1337 --delay 5
serving at http://10.20.1.36:8888/v/uJe2XRUQ
Такая необычная и простенькая программа уровня курсовой работы студента-программиста. Можете код посмотреть, что-то поменять там. Он простой и легко читается.
⇨ 🌐 Сайт / Исходники
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#remote
5👍123👎2