ServerAdmin.ru
31.3K subscribers
664 photos
55 videos
22 files
2.86K links
Авторская информация о системном администрировании.

Информация о рекламе: @srv_admin_reklama_bot
Автор: @zeroxzed

Второй канал: @srv_admin_live
Сайт: serveradmin.ru

Регистрация в РКН: https://vk.cc/cG1Urj
Download Telegram
🎓 В закладках около года лежала ссылка на плейлист из 14 лекций по SRE на канале T-образование от известного теперь уже T-банка. Решил его “посмотреть”. Понятно, что весь его просмотреть надо много времени. Комментарии к видео по непонятной причине закрыты, что навеяло на мысли о том, что там какая-то ерунда. Чтобы составить своё представление о том, что это, пришлось на скорости x2 прослушать первые две лекции.

Сначала было разочарование, потому что показалось не очень интересным, так как одни слова, никакой конкретики по технологиям и инструментам. То, к чему я сам привык в обучающих видео. Полистал остальной канал и по теме системного администрирования или devops ничего не нашёл. Хотя там много обучающего материала, но в основном для школьников 10-11 классов.

Начал закрывать вкладки с канала и уже в конце заметил название плейлиста: Лекторий по SRE. Тут я понял свою ошибку. Никто и не обещал обучающий курс. Это просто лекции по теме. Потом уже ещё раз пробежался по списку лекций и понял, что зря я его решил убрать в сторону. По теме SRE не так много структурированной информации на русском языке. А лекции эти были записаны в рамках бесплатного курса для опытных DevOps-инженеров и начинающих SRE-специалистов, который уже закрыт.

Так что если вам интересна тема SRE, вы занимаетесь самообразованием, или просто хотите быть в курсе современных направлений в IT, можете послушать эти лекции. Их не обязательно смотреть, можно именно слушать в машине или во время прогулок. Читает лекции Дмитрий Масленников — руководитель центра SRE в Т‑Банке.

▶️ Лекторий по SRE

Не забываем забирать в закладки. Видите, как бывает. Год прошёл, а я не забросил. Все свои списки так или иначе перебираю, хотя новой информации тоже вал идёт.

#обучение
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍76👎4
Набираем ИТ специалистов (полная занятость)

У нас растущий стартап с задачами:

1️⃣ Создание и разработка приложения для автоматизации ведения отчетов предприятий РФ в пищевой промышленности, построение сетевой инфраструктуры и контроля в данных предприятиях с целью обеспечения безопасности.

2️⃣ Создание и разработка ИТ решения для системы поиска и контроля персонала пищевых (и не только) предприятий, включая работу системы видеонаблюдения, нейро аналитики, СКУД.

❗️Мы ищем как людей с опытом в своей области, так и новичков, стремящихся расти и развиваться работая в команде с профессионалами. На данный момент требуются:

🔹Специалист пусконаладки и настройки сложных систем видеонаблюдения и аналитики, СКУД, слаботочных систем, проектирования архитектуры безопасности предприятий и объектов.
- Опыт работы с компьютерами и серверами на уровне сборки и установки операционной системы
- Умение работать с сетевым оборудованием и понимание основ сетевой безопасности
- Навыки диагностики и устранения неисправностей аппаратного и программного обеспечения
- Приветствуется опыт работы с ПО DSSL Trasir, Xeoma и другими специализированными решениями в области сетевого видеонаблюдения
Желание учиться и развиваться, следить за новыми технологиями в области ИТ-инфраструктуры

Оба проекта новые и интересные. Мы гарантируем гибкий подход, прекрасный коллектив и достойную оплату по результатам собеседования. ЗП вилка 100 - 150 тыс рублей + премии. Официальное оформление. Мы рады приветствовать новых специалистов, профессионалов и начинающие таланты.
За подробностями пишите в телеграмм @Q_Standard

https://q-standard.com
👎73👍23
При обновлении кода сайта или веб сервиса легко сделать проверку изменений или выполнить откат в случае каких-то проблем. Задача сильно усложняется, когда обновление затрагивает изменение в структуре базы данных. Если вы накатили изменение, которое затрагивает базу данных, не получится просто откатить всё назад на уровне кода. Нужно откатывать и состояние базы. Для таких ситуация придумали миграции базы данных.

Сразу покажу на примере, как это работает. Существует популярная open source утилита для этих целей - migrate. Она поддерживает все наиболее распространённые СУБД. Миграции можно выполнять с помощью готовой библиотеки на Go, либо в консоли через CLI. Я буду использовать CLI, СУБД PostgreSQL и ОС Debian 12.

Для Migrate собран deb пакет, хотя по своей сути это одиночный бинарник. Можно скачать только его. Для порядка ставим из пакета, который берём в репозитории:

# wget https://github.com/golang-migrate/migrate/releases/download/v4.18.1/migrate.linux-amd64.deb
# dpkg -i migrate.linux-amd64.deb

Для удобства добавим строку на подключение к локальной базе данных в переменную:

# export POSTGRESQL_URL='postgres://postgres:pass123@localhost:5432/test_migrations?sslmode=disable'

Я подключаюсь без ssl к базе данных test_migrations под учёткой postgres с паролем pass123. С рабочей базой так делать не надо, чтобы пароль не улетел в history.

Принцип работы migrate в том, что создаются 2 файла с sql командами. Первый файл выполняется, когда мы применяем обновление, а второй - когда мы откатываем. В своём примере я добавлю таблицу test01 с простой структурой, а потом удалю её в случае отката.

# cd ~ && mkdir migrations
# migrate create -ext sql -dir migrations -seq create_test01_table
~/migrations/000001_create_test01_table.up.sql
~/migrations/000001_create_test01_table.down.sql

В директории были созданы 2 файла. В первый файл с up в имени добавим sql код создания таблицы test01:

CREATE TABLE IF NOT EXISTS test01(
  user_id serial PRIMARY KEY,
  username VARCHAR (50) UNIQUE NOT NULL,
  password VARCHAR (50) NOT NULL,
  email VARCHAR (300) UNIQUE NOT NULL
);


А во второй с down - удаление:

DROP TABLE IF EXISTS test01;


Проверим, как это работает:

# migrate -database ${POSTGRESQL_URL} -path migrations up
1/u create_test01_table (24.160815ms)

Смотрим, появилась ли таблица:

# psql ${POSTGRESQL_URL} -c "\d test01"

Вы должны увидеть структуру таблицы test01. Теперь откатим наше изменение:

# migrate -database ${POSTGRESQL_URL} -path migrations down
Are you sure you want to apply all down migrations? [y/N]
y
Applying all down migrations
1/d create_test01_table (15.851045ms)

Проверяем:

# psql ${POSTGRESQL_URL} -c "\d test01"
Did not find any relation named "test01".

Таблицы нет. Принцип тут простой - пишем SQL код, который исполняем. На деле, конечно, изменения бывают сложные, особенно когда не добавляются или удаляются таблицы, а меняется структура существующих таблиц с данными. Инструменты типа migrate позволяют описать все изменения и проработать процесс обновления/отката в тестовых средах. В простых случаях можно обойтись и своими bash скриптами, но migrate упрощает эту задачу, так как, во-первых поддерживает множество СУБД. Во-вторых, автоматически нумерует миграции и исполняет последовательно. В-третьих, может, к примеру, забирать миграции напрямую из git репозитория.

Для каждой СУБД в репозитории Migrate есть примеры настройки миграций.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

Исходники

#postgresql #mysql
2👍95👎4
Провозился вчера некоторое время над банальной задачей. Нужно было добавить нового пользователя в mysql базу через консольный клиент. Задача простая, но я реально запутался в версиях mysql и используемых плагинах аутентификации. У меня была версия Mariadb 10.11, нужна была аутентификация по сети по паролю, а не через сокет.

Открыл свою шпаргалку, нашёл команду:

> ALTER USER 'zbx_monitor'@'10.30.52.9' IDENTIFIED WITH mysql_native_password BY 'XkRy1bRRgLIB';
ERROR 1064 (42000): You have an error in your SQL syntax;

Не работает. Сначала пробовал разные варианты, потом вспомнил, что ALTER меняет пароль у существующего пользователя, а мне нужно создать нового. Немного погуглил, нашёл, как создать пользователя, использующего пароль:

> CREATE USER 'zbx_monitor'@'10.30.52.9' IDENTIFIED VIA mysql_native_password;
Query OK, 0 rows affected (0.075 sec)

Нормально, пользователя создал. Пробую ещё раз первую команду, чтобы задать пароль:

> ALTER USER 'zbx_monitor'@'10.30.52.9' IDENTIFIED WITH mysql_native_password BY 'XkRy1bRRgLIB';
ERROR 1064 (42000): You have an error in your SQL syntax;

Опять не работает. Перебираю разные варианты и нахожу рабочий:

> ALTER USER 'zbx_monitor'@'10.30.52.9' IDENTIFIED BY 'XkRy1bRRgLIB';
Query OK, 0 rows affected (0.114 sec)

Честно говоря не понял, почему мой исходный вариант не сработал. Раньше точно работал, сейчас перестал. С MySQL в этом плане сейчас геморно стало. Проще сразу поставить adminer или phpmyadmin. Из-за того, что у mysql появилось несколько форков, плюс разные плагины аутентификации: unix_socket и mysql_native_password, комбинации команд по управлению пользователями стали отличаться в разных версиях. Это создаёт неудобства и только тратит время на поиск работающего варианта.

Я в основном с MariaDB работаю. Вот небольшая шпаргалка для консольного клиента этой СУБД.

📌 Первичная настройка сразу после установки, где можно выбрать тип плагин для аутентификации и задать пароль root:

# mysql_secure_installation

📌 Создание базы данных:

> CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

📌 Создание пользователя с паролем:

> CREATE USER 'zabbix'@'10.30.52.9' IDENTIFIED VIA mysql_native_password;
> ALTER USER 'zabbix'@'10.30.52.9' IDENTIFIED BY 'PassWORD123';

📌 Назначаем пользователю права на базу данных (полные и выборочные):

> GRANT ALL PRIVILEGES on zabbix.* to 'zabbix'@'10.30.52.9';
> GRANT USAGE,REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zbx_monitor'@'10.30.52.9';

📌 Список пользователей и их прав:

> SELECT user,authentication_string,plugin,host FROM mysql.user;

📌 Загрузить дамп в базу zabbix:

> USE zabbix;
> SOURCE my_dump.sql;
или
> \. my_dump.sql;

📌 Удалить базу:

> DROP DATABASE zabbix;

📌 Список активных соединений:

> SHOW FULL PROCESSLIST;

📌 Посмотреть значение конкретного параметра (innodb_buffer_pool_size):

> SHOW GLOBAL VARIABLES LIKE 'innodb_buffer_pool_size';

📌 Изменение параметра (max_connections):

> SET GLOBAL max_connections = 200;

Эти команды покрывают 95% моих задач, которые приходится выполнять в консольном клиенте mysql. Есть ещё несколько, касающихся репликации, но это отдельная тема.

Напоминаю, что у меня есть публикация с подборкой заметок по теме MySQL сервера. Там затрагиваются вопросы настройки, мониторинга, бэкапа и эксплуатации сервера MySQL.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#mysql
👍126👎3
Если у вас есть большой MySQL сервер, то лишний раз трогать его не хочется, особенно если у него большой аптайм, настраивали его не вы, а у вас вообще разовая задача к нему. Нужно временно посмотреть или залогировать запросы и желательно с IP адресом тех, кто эти запросы делает. Могу предложить неочевидный способ.

Напомню, что включение штатного механизма query_log через файл конфигурации потребует перезапуска службы субд, что может занимать в некоторых случаях непрогнозируемое время. Если у вас есть рутовый дост к консоли севера, то можно сделать и без остановки:

> SET GLOBAL general_log_file = '/var/log/mysql/mysql.log';
> SET GLOBAL general_log = 'ON';

В файле mysql.log будет фиксироваться время запроса и сам запрос. Адрес клиента не увидим. Для того, чтобы фиксировать адрес клиента, хранить лог запросов нужно будет в в отдельной таблице mysql.general_log. Это уже будет немного другая настройка, для которой понадобится перезапуск. Но заметку я хотел написать не об этом.

Мы можем посмотреть содержимое запросов в сетевых пакетах через tcpdump. Сразу важное дополнение. Сработает это только для нешифрованных соединений с СУБД. Внутри локальной инфраструктуры это чаще всего так. Догадался я до этого не сам, а подсмотрел в очень старой заметке на opennet.

Запускаем на любой машине, через которую проходит трафик к MySQL серверу. Можно прямо на нём:

#  tcpdump -i ens18 port 3306 -s 1500 -w tcpdump.out

Ждём, когда посыпятся запросы. Можно с соседней машины подключиться и позадавать их:

# mysql -h 10.20.1.36 -u user01 -p
> use database;
> select * from users;

В файле tcpdump.out будет собран raw трафик в формате pcap. Распарсить его можно тут же в консоли с помощью tshark:

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

Получится файл, где всё содержимое будет удалено, кроме mysql запросов. Но при этом останутся пустые строки. Чистим их:

# sed -i '/^$/d' query_log.out

Можно поступить немного проще, преобразовав трафик сразу в обычные строки с помощью stdbuf и strings, а потом уже грепнуть по нужным запросам:

# tcpdump -i ens18 -s 0 -U -w - dst port 3306 | stdbuf -i0 -o0 -e0 strings | grep -iE --line-buffered "(SELECT|UPDATE|INSERT|DELETE|SET|SHOW|COMMIT|ROLLBACK|CREATE|DROP|ALTER)"

Если нужны метки времени, то добавляем с помощью awk:

# tcpdump -i ens18 -s 0 -U -w - dst port 3306 | stdbuf -i0 -o0 -e0 strings | grep -iE --line-buffered "(SELECT|UPDATE|INSERT|DELETE|SET|SHOW|COMMIT|ROLLBACK|CREATE|DROP|ALTER)" | awk -W interactive '{print strftime("%F %T")" "$0}'

Если хочется привязать запросы к IP адресам клиентов, то задача усложняется. Можно вывести содержимое пакетов вместе с остальной информацией, в том числе и об адресате пакета:

# tcpdump -i ens18 -s 0 -A -Q in port 3306

Но дальше уже нетривиальная задача по при вязке адресата к самому запросу, так как между ними постоянно возникает разное количество строк с информацией в бинарном виде. Проще будет вернуться к pcap и оттуда пытаться это вытаскивать и сопоставлять. А если нет задачи сохранять в лог файле, можно просто забрать к себе на машину и посмотреть дамп через Wireshark. Там отлично видно и адресатов, и запросы.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#mysql #tcpdump
3👍118👎4
Посмотрел очень интересное видео про снижение задержек в SSD дисках. Там и по теории прошлись, но в основном по практике. По шагам рассказали, что пробовали сделать, какие параметры ОС и софта меняли и к чему это приводило.

Как в Айри.рф сократили SSD-задержки в 61 раз

Мне такой формат выступления нравится, потому что его можно оформить в мини-инструкцию, зафиксировать основные моменты и потом использовать в своей работе. Так что я законспектировал выступление и выделил ключевые моменты, которые могут пригодиться.

У автора стал тормозить классический веб стек под Nginx. Увеличились как задержки на отдачу обычной статики пользователю из кэша, доходили до 1-2 секунд, так и динамические запросы мимо кэша. Было не понятно, с чем это связано. Использовались одиночные SSD диски Samsung Evo без рейда, файловая система ext4 поверх LVM разделов.

Начали разбор ситуации с выделения метрик и утилит для отслеживания отклика дисков:

◽️системный i/o wait
◽️метрики disk timings (статистика от Prometheus)
◽️утилиты ioping / iostat / iotop
◽️HTTP response time

Эти данные ничего не прояснили и не подсказали, куда в итоге надо смотреть и что делать. Далее начали анализировать очередь на запись операционной системы. На практике это никак не помогло понять, где возникают дисковые задержки.

Между приложением и диском есть несколько звеньев: буфер nginx, буфер ОС, очередь на запись. Каждый из этих этапов может добавлять задержку. Проанализировать всё это - нетривиальная задача.

Пробовали следующие изменения:

● асинхронные потоки в nginx через параметр aio threads = default; результат: снижение задержек на 5-10%;
● уменьшение очереди на запись ОС:
vm_dirty_expire_centisecs=1
vm_dirty_writeback_centisecs=1
не дало заметных улучшений
● изменение планировщика с cfq на deadline не принесло значимых изменений
● отключение журналирования через монтирование в fstab с параметром noatime снизило на 10% задержки.
● перенос логов nginx на внешние хранилища и отключение или перенос других системных логов еще уменьшили задержки на 10%.

Для дальнейшего анализа производительности сервиса решили привязаться к метрикам nginx для запросов, которые проходят мима кэша: nginx_time_request и nginx_upstream_header_time. Анализ этих метрик позволил оценить производительность сервиса в целом: лучше он стал работать или нет. Я, кстати, тоже включаю метрику request_time для веб серверов, где требуется оценка производительности. Можно почитать об этом в моей статье Мониторинг производительности бэкенда с помощью ELK Stack.

Что в итоге помогло больше всего?

🔹Отключение полностью журналирования на серверах с кэшем, который можно без последствий потерять
🔹Включение Trim по расписанию примерно тогда, когда объём диска предположительно полностью перезаписан. В данном случае это происходило примерно через неделю работы. Этот интервал и использовали. Я раз в сутки обычно ставлю на своих виртуалках.
🔹Использование tmpfs там, где это возможно. Уменьшает нагрузку на запись, увеличивает срок жизни SSD, работает только на небольших объёмах данных, которые можно потерять.

Каждый из этих шагов дал примерно в 2-3 раза снижение задержек. И в сумме получился заметный прирост для всего сервиса. Плюс, оптимизировали немного само приложение. И в итоге всё заработало в десятки раз быстрее.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#perfomance #disk
2👍162👎2
На неделе возникла небольшая задача по публикации баз 1С через веб сервер. Сделал всё быстро, так как выполнял эту задачу не раз и не два. Там всё относительно просто, если понимаешь, что к чему и как работает. Да и статей ни одну написал по этой теме. Но всё это было давно ещё на базе Centos. А сейчас у меня всё на Debian, так что решил сразу написать статью по этой теме.

Публикация баз 1С на веб севере Apache в Debian

Хотел по-быстрому всё сделать, чтобы потом, если придётся настраивать, просто копипастом всё сделать. Но как обычно разошёлся, написал и про лицензии, и про сеансы, и про обратное проксирование через второй веб сервер, и про распределение функциональности по виртуалкам. В общем, написал всё, что вспомнил по ходу дела. Хотел ещё и про логи, мониторинг, файрвол написать, но не стал. Времени не осталось, да и не захотелось всё в кучу мешать. Надо разделять на темы и объединять ссылками.

Давно не писал новые статьи. А мне это нравится. Прям натуральное удовольствие получаю от их написания. Есть какое-то призвание и способности к этому. Мечтаю, когда дети подрастут и снизится финансовая нагрузка, потратить часть времени на создание какой-то связанной информационной библиотеки или обучающих курсов на отдельные изолированные темы, типа мониторинга или сбора логов. Жаль, что современные технологии напрочь убили монетизацию обычных статейных сайтов. Уже по-всякому прикидывал и тестировал монетизацию, но увы, дохода там почти нет. На это не прожить и даже как дополнительный заработок не тянет, поэтому остаётся только как хобби.

Это я на всякий случай предупреждаю тех, кто может строить планы по созданию сайта и получению какого-то прямого дохода с него. Я по всем своим делам строго веду бухгалтерию и точно знаю, где и как я получаю доход. В лучшие годы баннеры от рекламных сетей приносили по 20-30 т.р. ещё в то время, когда их покупательская способность была выше. Это примерно 2019-2020 год. Потом в 22-м заблокировали Adsense и доход упал где-то до 5 т.р. Я сетевые баннеры вообще снял. Оставил ровно один от Яндекса в середине статей, чтобы он ранжирование не понижал. Яндекс отдаёт больше предпочтения тем сайтам, где есть его реклама.

С тех пор поддерживаю сайт в минимально живом виде, чтобы совсем не забрасывать. Хочется ещё когда-нибудь поработать над ним и сделать что-то интересное и полезное.

#1С #webserver
2👍185👎2
Для анализа сетевого трафика в первую очередь вспоминаешь про tcpdump. В принципе, он покрывает все основные потребности. Там можно посмотреть и отфильтровать всё, что угодно. Но не сказать, что он удобен и интуитивен, поэтому существуют более специализированные программы.

Я на днях увидел упоминание утилиты ngrep. Название показалось очень знакомым, как-будто я её знаю и уже писал о ней. Поискал по каналу и сайту и ничего не нашёл. Потом вспомнил, что спутал её с sngrep, которую я постоянно использовал, когда плотно работал с VOIP серверами. Очень её рекомендую, если приходится анализировать SIP протокол. Хотя скорее всего вы про неё знаете, если с ним работаете. Это очень удобная и функциональная утилита, известная в узких кругах.

Возвращаясь к ngrep. Это старая программа, которая есть в базовых репозиториях дистрибутивов. В некоторых случаях она будет удобнее tcpdump. Сразу покажу на конкретном примере. В качестве параметра ngrep принимает regex по содержимому пакетов. То есть можно сделать вот так:

# ngrep -q 'HTTP'

И посмотреть информацию о пакетах, где есть строка HTTP. Собственно, это будут все пакеты данного протокола. В примере выше ключ -q означает отображать только сетевые пакеты. Непонятно зачем ngrep без этого ключа рисует полоску из псевдографики в консоли, когда ожидает пакеты.

Ngrep умеет отображать содержимое пакетов с переходом на новую строку. Это особенно удобно для анализа HTTP или SMTP протокола. Как это выглядит, можно посмотреть на картинках снизу:

# ngrep -q 'HTTP' -W byline

Подобным образом можно тут же в консоли отфильтровать все запросы с определённым User-Agent:

# ngrep -q 'YaBrowser' -W byline

Чтобы не анализировать вообще весь трафик, его можно конкретизировать примерно таким же синтаксисом, как у tcpdump:

# ngrep -q 'YaBrowser' -W byline -d ens18 port 80

Указали интерфейс и порт. Если слушаете трафик на шлюзе, то можно конкретизировать сервер назначения, куда идёт трафик:

# ngrep -q 'YaBrowser' -W byline 'host 10.20.1.36 and port 80 or 443'

Host может принимать значения не только IP адреса, но и домена. Если смотрите на веб сервере запросы к конкретному домену, то указать адрес этого домена можно в фильтре для содержимого пакетов:

# ngrep -q 'example.com' -W byline 'port 80 or 443'

Подобные выборки по содержимому актуальны для всех протоколов, где иногда приходится заглядывать в сетевой трафик для дебага. Это упомянутый HTTP, а так же SMTP, SIP. Это из того, что я сам делал.

Например, смотрим обмен с конкретным почтовым сервером, добавляя метки времени:

# ngrep -q '' -t -W byline 'port smtp and host 94.142.141.246'

Можно конкретизировать, если нужно посмотреть только EHLO:

# ngrep -q -i 'EHLO' -t -W byline 'port smtp and host 94.142.141.246'

Сохраните себе информацию о ngrep. Прямо здесь и сейчас вряд ли он нужен будет, но в будущем может пригодиться.

#network #terminal
2👍123👎3
В одном интервью человека, который занимается наймом системных администраторов, услышал мельком вопрос, который он иногда задаёт на собеседованиях.

У вас непрогнозируемо и очень быстро растёт размер базы данных. Что вы будете экстренно предпринимать в связи с этим?

Ответа там не было, как и конкретики, какая СУБД имеется ввиду. Решил немного порассуждать на эту тему на примере MySQL, как наиболее простой и популярной СУБД. Сразу скажу, что я так вот сходу не знаю, как быстро решать такие проблемы. Просто немного подумал и прикинул, что бы я стал делать.

1️⃣ Первым делом я бы зашёл на сервере в консоль, открыл mysql клиент и запустил там:

> SHOW FULL PROCESSLIST;
или так, чтобы было удобнее смотреть:
# mysql -e "SHOW FULL PROCESSLIST;" > ~/processlist.txt

Это первое, что приходит в голову. В нагруженном сервере список будет очень большой и по нему понять, что происходит, не всегда возможно. Если это какой-нибудь Битрикс, то там будут длиннющие запросы от одного и того же клиента в виде веб сервера. Тем не менее, получить какое-то представление о том, что происходит на сервере можно. Тем более, если там много баз данных, то можно заметить, что есть аномально большое количество запросов к одной из них.

Так как у нас стоит вопрос о росте базы данных, имеет смысл отфильтровать запросы по типу, оставив только UPDATE и INSERT. По идее именно они загружают данные в таблицы:

> SELECT * FROM information_schema.processlist WHERE `INFO` LIKE 'UPDATE %';
> SELECT * FROM information_schema.processlist WHERE `INFO` LIKE 'INSERT %';

2️⃣ Для более детального просмотра активности в режиме реального времени можно запустить Mytop и посмотреть информацию там. Можно быстро фильтрануть по клиентам и базам данных, чтобы быстрее определить аномалии.

3️⃣ Параллельно я бы посмотрел размер таблиц. Можно просто отсортировать файлы по размеру в директории /var/lib/mysql/database_name. В MySQL чаще всего каждая таблица в отдельном файле. Либо можно зайти клиентом и посмотреть там:

> SELECT table_schema as `Database`, table_name AS `Table`, round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB` FROM information_schema.TABLES WHERE table_schema = "database_name" ORDER BY (data_length + index_length) DESC;

У меня есть отдельная заметка по таким прикладным запросам.

Таким образом у нас есть информация о клиентах, которые подключаются к базе данных и информация о том, какие таблицы или таблица растут. Подключения клиентов можно посчитать, если на глазок не видно, от кого их больше всего.

Если тут уже получилось догадаться, кто заливает информацию в базу, то можно либо какую-то функциональность починить, если она сломалась, либо можно изменить пароль пользователя, чтобы отключить его, или забанить его по IP на файрволе и дальше разбираться.

Если причина роста базы в том, что кто-то просто заливает туда много данных, то по идее нам полученной информации достаточно, чтобы это прекратить. На этом моя фантазия по расследованию кончилась.

В памяти всплыло ещё то, что размер базы раздувают индексы. Возможно кто-то их лепит на автомате, что приводит к росту базы. По идее это всё тоже будет видно в списке процессов как запросы с CREATE INDEX. Проблемного клиента можно отключить, индексы удалить, базу оптимизировать. Но тут я уже темой не владею. Не знаю, сколько и как этих индексов можно насоздавать и реально ли это может привести к лавинообразному росту объема занимаемого пространства на диске.

Если вам есть, чем дополнить заметку и ответить на поставленный вопрос, с удовольствием почитаю. Кстати, этот вопрос в разных интерпретациях позадавал ChatGPT. Ничего содержательного не ответил. Я потихоньку стал им пользоваться, а то столько восторженных отзывов слышал. Если честно, лично я не впечатлён. Точные ответы он знает на то, что и так быстро ищется через поисковики. А если где-то надо подумать, то там в основном вода.

#mysql
👍104👎6
▶️ Очередная подборка авторских IT роликов, которые я лично посмотрел и посчитал интересными/полезными. Как обычно, ниже те видео из моих подписок за последнее время (обычно беру период в 2 недели), что мне показались интересными и полезными.

GitLab CI/CD - Полный DevOps Pipeline с НУЛЯ, Создание Docker Image и деплой в AWS Lambda
GitLab - Как работать используя TOKEN
Продолжение начатой ранее автором темы про Gitlab и CI/CD на его основе. Если самостоятельно изучаете эту тему, то видео будут отличным подспорьем. Автор хорошо объясняет, показывает на примерах.

KEYNOTE by Alexei Vladishev / Zabbix Summit 2024
У Zabbix недавно прошёл масштабный саммит. Они выложили на своём канале кучу видео оттуда. Посмотрите, может вас заинтересуют какие-то темы. Мне очень хочется некоторые видео посмотреть и разобрать, но не знаю, найду ли для этого время. Хотя бы посмотреть надо для начала. Там и мониторинг MariaDB, и новый веб мониторинг, и самописные проверки по tcp, и мониторинг DNS, и тюнинг производительности, и т.д. В общем, интересно.

Proxmox Network. Обзор и настройка. Bridge, Bond, VLAN.
Очень подробное наглядное видео с картинками и схемами по организации виртуальной сети в Proxmox. Рассмотрены не только тривиальные случаи. Например, автор рассказал, как настроить две изолированные подсети виртуалок, в которой каждая подсеть выходит в инет через свой роутер. Там же он создаёт и тестирует Bond - объединение сетевых адаптеров для отказоустойчивости.

Настройка мониторинга c помощью Grafana InfluxDB Prometheus Telegraf
Большое видео на тему установки и настройки указанного стэка. Я похожий стэк тестировал и писал об этом: TICK Stack. Из своих изысканий не особо понял, зачем нужно использовать Telegraf и InfluxDB. Из плюсов только то, что это и метрики, и логи в одном месте. Но сейчас есть Loki для этого, и я бы отдал предпочтение ему.

Какой софт у меня в моей homelab в 2024
Интересно было посмотреть, как всё организовано у автора. У него один общий сервер под Proxmox и там виртуалки с контейнерами: opnsense, truenas, pbs, pi-hole, nut, homapage, plex, sonarr, nextcloud и т.д. Он рассказал не только про софт, но и про организацию сети. Почти по всему софту у него есть отдельные ролики.

Best Docker Update Image Tools for Automating Container Updates
Обзор софта, который умеет автоматически обновлять образы контейнеров: Watchtower, Shepherd, Portainer, CI/CD pipelines.

Как быстро определить версию дистрибутива Linux и эффективно управлять пакетами?
Небольшое справочное видео по теме. Заголовок немного некорректно подобран, так как в видео в основном про пакеты речь идёт, а про версию ОС в самом начале. Автор предлагает смотреть так: cat /etc/*release. Я лично привык использовать hostnamectl. Так не только ОС видно, но тип виртуализации и некоторую другую информацию.

Reacting to your CURSED Homelab Setups
Длинное развлекательное видео, где автор показывает и обсуждает домашние лаборатории своих пользователей. Ранее он просил прислать картинки и описание своих домашних лабораторий, а теперь обработал всё это и оформил в видео.

How To Rebrand Zabbix 7.0 ( Replace Logos )
Небольшое обзорное видео на тему брендирования своего сервера Zabbix с заменой логотипа.

MiniTool ShadowMaker - простая и бесплатная программа для бекапа и восстановления системы
Рекламный обзор небольшой бесплатной версии программы для бэкапа ОС Windows. У программы, соответственно, есть и коммерческая версия. На вид вроде ничего особенного по сравнению с другими подобными программами. Посмотрите, может вам приглянется.

В подписках было много видео с рекламой различных продуктов, типа того, что выше. Понимал об этом по UTM меткам в ссылках с описанием. При этом сами блогеры явно не говорят, что публикуют оплаченный рекламный обзор. Это как-то некрасиво. Привык уже к нашему закону о рекламе, где блогеров обязали маркировать и явно указывать, что они публикуют рекламу. Для конечного пользователя это большой плюс.

#видео
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍79👎4
Media is too big
VIEW IN TELEGRAM
Рекламное видео стола для работы стоя с кликбейтным заголовком и откровенным враньём (я про заголовок и описание):

▶️ https://www.youtube.com/watch?v=WwnzntwEKig

Тем не менее, решил вынести его в отдельную публикацию и немного прокомментировать, так как мне есть что сказать об этом. И это сможет вам помочь, если у вас проблемы со спиной. Кто меня давно читает, знает, что у меня, как и у многих с сидячим образом жизни, есть проблемы со спиной. Я писал об этом в разное время. В том числе и про стол для работы стоя. Я им пользовался несколько лет, сейчас перестал. Отдал сыну под рабочий стол. Удобно, так как он растёт и можно под рост регулировать высоту. В стоячем столе нет ничего плохого или особенно полезного. Если вам нравится, можете за ним работать. Я сейчас спокойно работаю сидя.

У меня есть цикл статей с тэгом #спина, где я очень подробно рассказал, как избавил себя от болей. Уже прошло некоторое время, можно прокомментировать все мои описанные ранее действия. Если не читали, то начинайте с самой старой публикации и до этой. Если не читать старые, то пользы от этой не будет.

Основная причина болей в спине и не только - перегрузка мышц либо из-за большой разовой нагрузки, типа подъёма тяжести, либо из-за постоянной статической нагрузки, типа сидения с напряжённой спиной. Если понять этот принцип, то дальше уже будет проще. Вы сами отбросите варианты в виде коленных стульев или фитболов вместо стула. Это верный способ усугубить свою ситуацию кратно, так как вы будете сидеть с вечной статической нагрузкой в мышцах. Это я всё тоже проходил, когда пытался сидеть с прямой спиной. Сидеть надо так, чтобы все мышцы были максимально расслаблены. Как это будет организовано - вторично. У каждого свои особенности тела, привычки, проблемы. Главное понять принцип.

В моих прошлых публикациях я уже писал о том, что мне реально помогло - миопрессура. Я побывал у специалистов, понял принцип. Сейчас лично мне помогает жена ежедневной прессурой проблемных мест. Занимает 20-30 минут. Так как у меня проблем много (шея, вся спина, частично ноги до колен), ситуация сильно запущена и уже осложнена миофиброзом, мне приходится заниматься этим постоянно, чтобы ничего не болело. Плюс, я целый день работаю сидя. В простых случаях нужно только время от времени делать профилактику.

Метод простой и рабочий на 100%. Убедился уже неоднократно на родственниках. Избавил от болей в колене супругу, помог отцу с поясницей, объяснив принцип лечения. Он сам занимается с теннисным мячиком. С тех пор больше не было обострений в пояснице. А иногда даже вставать не мог, ползал на карачках. На днях узнал, что сестра мучается с болями в спине уже 3 недели!!! Прошла по стандартной программе от неврологов, была у остеопата и гомеопата. Понятное дело, что это не помогло. Они реально не лечат, так как даже не вникают в суть проблемы. Я приехал, просто руками потрогал её мышцы. Нашёл те, что жёстче остальных. Хорошенько размял все проблемные зоны. Скинул пару видео о том, как выполнять профилактику с мячиками, показал, какие лучше купить, так как сам пользовался.

Через пару дней она мне написала:

Привет. У меня спина уже получше. Сегодня уже делала массаж шариками. Жаль, что раньше про них не знала. Делаю душ и растяжку. За два дня полегчало.

Многим рассказывал про это лечение, но большинство людей не воспринимают информацию, пока не допечёт так, что боль делает жизнь невыносимой. Тогда включается голова и человек начинает пробовать всё, что теоретически может помочь. Так что кого-то убеждать и спорить не буду. Напомню, что я хроник с большим стажем и пробовал всё более-менее популярное и доступное из лечения. Миопрессура относительно проста и эффективна. И главное, практически сразу помогает. Попробуйте. И не нужны будут чудо стулья, столы, матрасы, подушки, подкладки на сиденье в машине и т.д. Я ничем этим не пользуюсь и нормально живу. Одно время был в такой депрессии от нахлынувших болей, что не понимал, как буду жить.

Если у кого-то есть вопросы по теме, то можете задавать тут или в личку. Я всем отвечу, если это сможет вам помочь.

#спина
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍141👎8
У меня есть старый сервер, в котором используется рейд контроллер Adaptec RAID 6805E. Ему лет 10-12. Раньше эти контроллеры были распространены, но со временем их почти полностью заменили контроллеры от LSI. Тестировал программу для мониторинга за SMART жёстких дисков и озадачился. А можно ли посмотреть информацию о дисках за этим рейд контроллером?

В общем случае операционная система не видит информацию о дисках, которые подключены через рейд контроллер, особенно если из них собраны массивы. В брендовых серверах такую информацию проще всего брать по SNMP или IPMI от BMC (Baseboard Management Controller) сервера. Второй вариант - поставить управляющий софт контроллера в операционную систему. Это немного сложнее, потому что скорее всего понадобится дополнительно установить модуль ядра. Для контроллеров LSI есть программа MegaCli, которая развивается и поддерживается. Я много раз её ставил и мониторил диски.

Для Adaptec оказывается всё не намного сложнее. До сих пор жив сайт и доступны драйвера для указанного контроллера:

https://storage.microsemi.com/en-us/support/raid/sas_raid/sas-6805e/

Основная проблема - они давно не обновляются. Самая свежая версия от 2016 года и под Debian 8. У нас уже Debian 12 под капотом Proxmox. Скачал представленный архив, там пакет. Установил его:

# dpkg -i aacraid-1.2.1-52011-Debian8.1-x86_64.deb

Никаких ошибок не было. Перезагрузил сервер, проверяю:

# lsmod | grep aacraid
aacraid        143360 31

Модуль ядра загружен. Проверяю контроллер:

# arcconf getconfig 1 AD
Controllers found: 1
----------------------------------------------------------------------
Controller information
----------------------------------------------------------------------
  Controller Status            : Optimal
  Channel description           : SAS/SATA
  Controller Model             : Adaptec 6805E
.........

Всё работает. Смотрю состояние собранных массивов:

# arcconf getconfig 1 LD

Смотрю информацию о дисках:

# arcconf getconfig 1 PD

Всё нормально отображает. Теперь можно и SMART посмотреть. Если стоит софт от контроллера, то smartctl может работать с дисками за контроллером примерно так же, как и с обычными:

# smartctl -a -d "aacraid,0,0,0" /dev/sda

Увидим информацию о самом первом диске на первом контроллере. Если не ошибаюсь, то первый 0 - контроллер, вторые два нуля это Reported Channel,Device(T:L) : 0,0(0:0) в описании дисков через arcconf getconfig 1 PD. Проверил у себя, у меня совпадает.

Таким образом можно использовать информацию от smartctl в любом мониторинге, который построен на его базе. Либо можно взять шаблон Zabbix, который работает через парсинг вывода arcconf.

❗️Если у вас где-то в проде всё ещё работают такие контроллеры, то не рекомендую без веских оснований ставить этот софт. Всё же он очень старый и могут возникнуть какие-то проблемы на современных системах. Нет смысла рисковать без особой надобности.

#железо
👍74👎2
Для мониторинга за S.M.A.R.T одиночного сервера есть простой open source проект - Scrutiny. Он состоит из сборщика метрик с помощью smartmontools, веб интерфейса для отображения данных и оповещений через различные каналы связи.

Scrutiny можно установить вручную из отдельных компонентов, но проще, конечно, запустить в Docker контейнере. Инструкция из репозитория предлагает сделать это так:

# docker run -it --rm -p 8080:8080 -p 8086:8086 \
 -v `pwd`/scrutiny:/opt/scrutiny/config \
 -v `pwd`/influxdb2:/opt/scrutiny/influxdb \
 -v /run/udev:/run/udev:ro \
 --cap-add SYS_RAWIO \
 --device=/dev/sda \
 --device=/dev/sdb \
 --name scrutiny \
 ghcr.io/analogj/scrutiny:master-omnibus

То есть мы пробрасываем диски внутрь контейнера и добавляем необходимые права, чтобы можно было увидеть SMART. Если у вас контейнеры крутятся прямо на железе, то это самый простой и быстрый вариант.

Мне захотелось настроить то же самое на гипервизоре Proxmox, где Docker ставить на хост - плохая идея. Каких-то реальных проблем может и не будет, но я обычно ничего не устанавливаю на гипервизоры. Сделал по-другому. Взял LXC контейнер, установил туда Docker (так можно). Дальше очень долго возился с тем, чтобы пробросить информацию о дисках в LXC контейнер. Это оказалась непростая задача. Сами диски вроде бы прокинул, он были видны в LXC контейнере, но smartctl так и не смог с них забрать информацию.

Хотел уже забросить эту идею, пока внимательнее не изучил репозиторий Scrutiny. У него есть API и есть сборщик метрик, который можно запустить где угодно и просто отправить метрики в веб интерфейс. Сборщик работает и в Windows.

В итоге сделал так. В указанном LXC контейнере запустил веб интерфейс:

# docker run -it --rm -p 8080:8080 -p 8086:8086 \
-v `pwd`/scrutiny:/opt/scrutiny/config \
-v `pwd`/influxdb2:/opt/scrutiny/influxdb \
--name scrutiny \
ghcr.io/analogj/scrutiny:master-omnibus

Можно идти по IP адресу сервера на порт 8080. По умолчанию нет аутентификации. Сразу всё доступно. Служба запустится с конфигурацией по умолчанию. Для того, чтобы её настроить, нужно положить файл scrutiny.yaml в директорию /scrutiny. Пример конфигурации. В ней же настраиваются уведомления. Поддерживается telegram, discord, smtp, gotify и много других каналов.

На сам гипервизор скачал бинарник - сборщик данных. Он лежит в репозитории:

# wget https://github.com/AnalogJ/scrutiny/releases/download/v0.8.1/scrutiny-collector-metrics-linux-amd64
# mv scrutiny-collector-metrics-linux-amd64 scrutiny-collector-metrics

Отправляю метрики в веб интерфейс:

# ./scrutiny-collector-metrics run --api-endpoint "https://10.20.1.64:8080"

Они сразу же отображаются там. Команду выше нужно будет поставить в планировщик (cron или systemd.timer). Часто собирать данные не обязательно, если вам не нужен подробный график температуры. Достаточно отправлять их раз в час. У сборщика есть свой конфигурационный файл, в котором можно настроить некоторые дополнительные параметры, исключить ненужные диски и т.д. Пример collector.yaml.

Мне понравилась программа. Простая, удобная, для выполнения одной задачи. Ждал от неё возможность объединить в едином интерфейсе информацию с разных серверов, но не увидел там такого. Единственный вариант - для каждого сервера запускать веб интерфейс на отдельном порту и менять этот порт в сборщике в зависимости от сервера. Но это уже так себе решение по удобству.

4️⃣ Исходники Scrutiny

Я лично использую Zabbix для мониторинга за SMART. Настраиваю примерно так, как в статье:

Настройка мониторинга SMART жесткого диска в zabbix

Она устарела, поменялись и скрипты, и шаблоны, так как с новыми версиями Zabbix уже не работают некоторые вещи из статьи. Недавно настраивал с нуля и повозился немного. Надо бы статью обновить, но пока руки не доходят. Сам принцип остался тот же - smartmontools на хостах, скрипты для автоопределения дисков и шаблон Zabbix для парсинга вывода smartctl.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#железо #мониторинг
Please open Telegram to view this post
VIEW IN TELEGRAM
👍117👎6
Пробую в ежедневной рутине использовать в качестве помощника ИИ. В данном случае я имею ввиду Openchat-3.5-0106, которым пользуюсь. Как я уже отмечал ранее, там, где нужно выдать какую-то справочную информацию или скомбинировать известную информацию, он способен помочь. А где надо немного подумать и что-то написать новое, то уже не очень.

У меня возникла простая задача. В запросах к API на выборку данных нужно указывать год, номер месяца, дни месяца. Это нетрудно сделать с помощью bash. Решил сразу задать вопрос боту и посмотреть результат. Сформулировал запрос так:

Напиши bash скрипт, который будет показывать текущую дату, номер текущего месяца, текущий год, первый и последний день текущего месяца, прошлого месяца и будущего месяца.

Получил на выходе частично работающий скрипт. Текущий год, месяц и дату показывает, первые дни нет. Вот скрипт, который предложил ИИ.

Гугл первой же ссылкой дал правильный ответ на stackexchange. Идею я понял, немного переделал скрипт под свои потребности. То есть сделал сразу себе мини-шпаргалку, заготовку. Получилось вот так:

#!/bin/bash

CUR_DATE=$(date "+%F")
CUR_YEAR=$(date "+%Y")
CUR_MONTH=$(date "+%m")
DAY_CUR_START_FULL=$(date +%Y-%m-01)
DAY_CUR_START=$(date "+%d" -d $(date +'%Y-%m-01'))
DAY_CUR_END_FULL=$(date -d "`date +%Y%m01` +1 month -1 day" +%Y-%m-%d)
DAY_CUR_END=$(date "+%d" -d "$DAY_CUR_START_FULL +1 month -1 day")

LAST_MONTH_DATE=$(date "+%F" -d "$(date +'%Y-%m-01') -1 month")
LAST_MONTH_YEAR=$(date "+%Y" -d "$(date +'%Y-%m-01') -1 month")
LAST_MONTH=$(date "+%m" -d "$(date +'%Y-%m-01') -1 month")
DAY_LAST_START=$(date "+%d" -d "$(date +'%Y-%m-01') -1 month")
DAY_LAST_START_FULL=$(date "+%Y-%m-01" -d "$(date +'%Y-%m-01') -1 month")
DAY_LAST_END=$(date "+%d" -d "$LAST_MONTH_DATE +1 month -1 day")
DAY_LAST_END_FULL=$(date -d "$LAST_MONTH_DATE +1 month -1 day" +%Y-%m-%d)

echo -e "\n"
echo "Полная текущая дата: $CUR_DATE"
echo "Текущий год: $CUR_YEAR"
echo "Номер текущего месяца: $CUR_MONTH"
echo "Первый день этого месяца: $DAY_CUR_START_FULL, $DAY_CUR_START"
echo "Последний день этого месяца: $DAY_CUR_END_FULL, $DAY_CUR_END"
echo -e "\n"
echo "Начало прошлого месяца: $LAST_MONTH_DATE"
echo "Год прошлого месяца: $LAST_MONTH_YEAR"
echo "Номер прошлого месяца: $LAST_MONTH"
echo "Первый день прошлого месяца: $DAY_LAST_START_FULL, $DAY_LAST_START"
echo "Последний день прошлого месяца: $DAY_LAST_END_FULL, $DAY_LAST_END"
echo -e "\n"


Можете себе забрать, если есть нужда работать с датами. Иногда это нужно для работы с бэкапами, которые по маске с датой создаются. Директории удобно по месяцам и годам делать. Потом оттуда удобно забирать данные или чистить старое. То же самое с API. К ним часто нужно указывать интервал запроса. Года, месяцы, даты чаще всего отдельными переменными идут.

Проверять подобные скрипты удобно с помощью faketime:

# apt install faketime
# faketime '2024-01-05' bash date.sh

Я в своей деятельности пока не вижу какой-то значимой пользы от использования ИИ. Не было так, что вот задал ему вопрос и получил готовый ответ.

#bash #script
4👍85👎8
Решил провести небольшой эксперимент и поддержать авторов, которые ведут блоги по IT тематике. Думаю, среди читателей моего канала такие найдутся. В конечном счёте цель написания статей в публичном доступе - их прочтение другими людьми. Я хочу попробовать помочь в достижении этой цели.

Моя идея в следующем.

1️⃣ Я делаю каталог авторских IT сайтов. Закрепляю его в отдельном сообщении в этом канале. По мере накопления желающих в нём находиться, обновляю.

2️⃣ Создаю отдельный чат только для авторов блогов, куда они будут присылать ссылки и небольшие анонсы своих новых материалов, где я смогу с ними знакомиться.

3️⃣ По мере накопления новых статей я буду делать публикацию на канале с ними и краткими своими комментариями после моего знакомства с материалом по примеру того, как я это делаю с видеороликами.

4️⃣ Авторы сайтов размещают на своих ресурсах простые формы для донатов, чтобы каждый читающий смог закинуть туда денег.

5️⃣ Читатели моего канала знакомятся со статьями и донатят авторам, если считают, что их материалы достойны этого. Если идея реализуется, каталог с сайтами соберётся, а статьи будут регулярно выходить, то я выделю от себя лично небольшой бюджет и буду регулярно донатить.

Мне неоднократно говорили в комментариях, что надо пробовать монетизировать контент через донаты. Давайте проверим на базе моего канала, насколько это реально и могут ли авторы с этого что-то зарабатывать. Если не на жизнь, то хотя бы для мотивации.

Мне лично от этого мероприятия ничего не нужно. Я сам готов поддерживать тех, кто пишет текстовые материалы по IT теме. Основная моя поддержка - аудитория, которой это интересно.

Если у кого-то есть идеи по развитию данной темы, предлагайте. Если тут есть авторы сайтов, оставляйте на них ссылки в комментариях. Я потом всё посмотрю и приглашу всех авторов в отдельный канал. Думаю, что и чат организую только для авторов, чтобы там можно было общаться и обсуждать какие-то чисто авторские темы, связанные с сайтами.

#статьи
Please open Telegram to view this post
VIEW IN TELEGRAM
45👍186👎10
Писал уже не раз про контрольные точки на виртуальных машинах, но возвращаюсь снова, так как лично столкнулся с небольшой проблемой на днях. Есть гипервизоры Hyper-V и есть Veeam Backup & Replication. Иногда, прямо совсем редко, случается так, что он почему-то не удаляет за собой контрольные точки после создания бэкапа.

Я лет за 10 пару раз такое у себя видел. В этот раз они остались у нескольких виртуалок. Заметил случайно. Но в целом это не уникальная ситуация. К прошлой подобной заметке люди написали много комментариев с описанием проблем, которые они словили из-за оставшихся снепшотов. Вот комментарий от одного человека к подобной заметке в прошлом:

Работал в ТП Veeam, на обучении, запомнил фразу: снапшоты - зло, особенно в руках, которые не понимают, зачем они нужны; но при этом совсем отключать их нельзя, бэкапы работать не будут. А потом на кейсах чего я только не видел - сотни снапшотов на каждой виртуалке на всем парке виртуальных машин, снапшоты с дельтой в терабайт, снапшоты, которым буквально по 10 лет (самое забавное, что дельта в этом случае была не особо большой, особенно относительно вышеописанной терабайтной, и мерджинг прошел буквально за час). Снапшот "здорового" человека - это описываемый в посте способ быстро откатить изменения при обновлении неповоротливого софта, зачем их вручную использовать в других случаях - не понимаю.

Подобные ошибки бывают у разного софта. Видел лично на разных гипервизорах. Из недавнего заметил во время теста Vinchin, что он тоже с определёнными настройками оставлял после работы неудалённые снепшоты. В определённых ситуациях это может привести к сбою в работе виртуалки или всего гипервизора. Особенно если виртуалка очень большая по диску и накопилась большая дельта изменений. Может тупо не хватить места или производительности дисков для слияния. И всё встанет колом.

По хорошему тут надо настраивать мониторинг. Я не делал никогда, потому что у меня нет таких виртуалок, где прям реально будут проблемы, если снепшоты останутся. Плюс, лично сталкивался очень редко. Большой нужды так то и нет. Но если у вас другая ситуация, то настраивайте. Готовых решений по этой теме я не видел, так что скорее всего придётся костылись на скриптах под свою систему мониторинга и виртуализации.

И дам ещё одну подсказку по теме Hyper-V, если с ними работаете. Все работы с гипервизором лучше выполнять через его Windows Admin Center или консоль. И сам не раз сталкивался, и в комментариях к своим статьям видел, что люди жалуются на странные ошибки при работе в оснастке. А те же самые действия в WAC выполняются нормально. Если что-то не работает в оснастке, сразу пробуйте в WAC. Скорее всего там всё нормально получится. Например, я не мог удалить снепшоты через оснастку. А через WAC без проблем зашёл и удалил. Не знаю, с чем это связано.

#виртуализация
👍75👎3
Уже довольно давно существует веб сервер Caddy. Он особо не на слуху в плане использования в качестве одиночного веб сервера. Но лично я его часто вижу в составе каких-то программных комплексов, собранных из различных open source проектов.

В простых случаях Caddy может очень серьёзно упростить задачу по веб доступу к чему-либо или проксированию запросов на внутренний веб ресурс. Покажу сразу на примерах, чтобы вы оценили, взяли на вооружение и использовали по мере необходимости.

Устанавливаем Caddy на сервер с Debian:

# apt install debian-keyring debian-archive-keyring apt-transport-https curl
# curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
# curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.list
apt update && apt install caddy

Это если вы хотите, чтобы у вас всё было как обычно - обновление из репозитория, конфигурационный файл, systemd служба и т.д. Сам по себе Caddy - это одиночный бинарный файл. Его можно просто скачать и установить на любой Linux сервер:

# curl -sS https://webi.sh/caddy | sh

Windows, он, кстати, тоже поддерживает. Это может быть хорошим решением для проксирования веб публикации баз 1С в Windows с помощью Apache. Принимаем все запросы в Caddy, передаём в Apache.

По умолчанию Caddy работает сразу по протоколу HTTPS. Если для доменного имени настроена DNS запись, то он автоматом при запуске получает сертификат от let's encrypt и использует. Достаточно нарисовать вот такой простой конфиг /etc/caddy/Caddyfile:

example.com {
  root * /var/www
  file_server
}

# systemctl restart caddy

После перезапуска Caddy автоматически получит сертификаты для домена example.com и запустит статический сайт на HTTPS.

Пример конфигурации для проксирования:

example.com {
reverse_proxy 10.20.1.50:5000
}

Тут всё то же самое. Caddy автоматом получит сертификат, запустится с использованием HTTPS и будет работать в качестве reverse proxy для указанного адреса.

Всё то же самое можно запустить сразу в консоли, если вам это нужно для каких-то разовых задач:

# caddy file-server --domain example.com --root /var/www
# caddy reverse-proxy --from example.com --to 10.20.1.50:5000

В консольном режиме Caddy удобно использовать даже для разового получения сертификатов. Запустил по примеру выше и получил на выходе сертификаты в директории ~/.local/share/caddy/certificates/. Если используется служба, то она по умолчанию хранит сертификаты в /var/lib/caddy/.local/share/caddy/certificates/.

Пример для php сайта, типа Worpdress:

example.com {
  root * /var/www
  file_server {
    index index.php
  }
  php_fastcgi unix//run/php/php8.2-fpm.sock
}

Простой и функциональный веб сервер. У него нормальная документация, где все возможности описаны. Я показал примеры для консольного режима и обычного конфигурационного файла. Дополнительно он поддерживает конфигурацию в формате JSON, которую помимо текстового файла, можно передавать напрямую через API. В документации есть примеры.

Если вы не хотите или вам не нужно разбираться в конфигурация Nginx или Apache, а надо, чтобы просто работало, то Caddy - отличный вариант типового веб сервера для общих прикладных задач. При этом он обладает дополнительными возможностями, актуальными для современной эксплуатации:

◽️логи в формате json;
◽️экспорт метрик в формате prometheus;
◽️обновление и перезагрузка конфигурации на лету через API;
◽️снятие профилей для профилировщика pprof.

Он в настройках по умолчанию простой, но при желании можно много всего добавить.

🌐 Сайт / Исходники (58.5k⭐️ 😱)

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#webserver
3👍163👎5
Где вы оставляете следы, когда подключаетесь по SSH к серверу на базе Linux? Собрал краткую подборку основных ваших артефактов в Debian. Будет актуальна во всех дистрибутивах на её основе. Для других могут отличаться только частности в виде имён и путей к логам, но общий смысл будет тот же.

На всякий случай сразу предупреждаю, что если логи отправляются во внешнее хранилище, то вы там наследили сразу в момент подключения. Поэтому важно иметь своё внешнее по отношению ко всем серверам хранилище системных логов.

1️⃣ Подключение по SSH фиксируется в /var/log/auth.log. С ним всё просто - это текстовый лог. Сразу посмотреть удачные подключения можно так:
# grep 'Accepted' /var/log/auth.log
Лога может не быть, либо логи могут параллельно храниться в journald. Смотреть так:
# journalctl -u ssh -r

2️⃣ Информация о подключении будет записана в бинарный лог /var/log/wtmp. Смотреть в консоли командой last. Увидите информацию о дате логина, пользователе, его IP адресе. Там же дополнительно хранится информация о загрузках и выключениях сервера, в том числе кем они были инициированы. Могу сразу для расширенной информации посоветовать ключи: last -Faiwx.

3️⃣ Информация о последнем логине пользователя хранится в бинарном файле /var/log/lastlog. Смотреть одноимённой консольной командой lastlog. Увидите список всех системных пользователей и дату их последнего подключения вместе с IP адресом.

4️⃣ Пока вы не отключились, информация о вашей активной сессии вместе с остальными сессиями хранится в бинарном файле /var/run/utmp. Смотреть информацию оттуда можно командой who.

5️⃣ Если во время подключения были неудачные попытки с неправильным логином и паролем, то эта информация будет сохранена в бинарном файле /var/log/btmp. Смотреть командой lastb.

6️⃣ Если что-то делали в консоли, то информация об этом сохранится в текстовом файле ~/.bash_history. Если не хотите, чтобы это происходило, после логина измените место хранения истории через переопределение переменной. Выполните в консоли:
# export HISTFILE=/dev/null
В рамках сессии история будет сохраняться и отображаться по команде history, но в файл записана не будет.

Для скрытия информации о подключении можно банально обнулить указанные выше логи и бинарные файлы. О вас не останется информации, но станет понятно, что кто-то подключался. Я, кстати, с подобным сталкивался. Когда только устроился в одну компанию. Через несколько дней после начала работы, когда стал проверять все серваки и разбираться в инфраструктуре, заметил на одном из серверов очищенную историю и прочие следы. Остаётся только гадать, что там делал бывший админ.

Просто взять и удалить информацию о себе из бинарных файлов не очень просто. Как один из вариантов - взять готовый скрипт, который на основе IP адреса вычистит информацию в том числе из бинарных логов. У меня на Debian 12 он не завёлся. Всё время ругался на UTMP block size. Мучал уже родной ChatGPT с chatgpt.com на эту тему, не смог помочь. Много всего предложил, но ничего не помогло. В конце предложил по-другому очистить файл: удалить и заново создать. Забил.

Для того, чтобы от подобных очисток защититься, достаточно на любом Linux сервере запустить syslog сервер или systemd-journal-remote. И вы всегда будете знать, кто и когда к вам подключается. Для логов службы sshd не нужно ни много ресурсов, ни места на диске. Нет нужды разворачивать какое-то специальное хранилище для логов, если у вас в нём нет нужды. Я отдельно для syslog сервера поднимал виртуалку 1CPU/512M/10G.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#terminal #security
526👍290👎2
This media is not supported in your browser
VIEW IN TELEGRAM
Забавная и очень знакомая ситуация. Я часто работал из дома. Иногда жаба душит платить за аренду места в коворкинге. Начинаешь мыкаться по разным местам. Если работы немного и успеешь всё сделать, пока дети из школы не пришли, можно остаться дома. Иногда на дачу уезжал, иногда к родителям, если они у себя на даче и квартира свободна, иногда в кафе, в офисе, либо где-то ещё. Одно время регулярно ходил в центр "Мои документы", где были удобные индивидуальные кабинки с розеткой. Можно было спокойно сидеть и работать весь день.

Последнее время утомила эта суета, особенно с рождением 4-го ребёнка. Стал постоянно арендовать место в коворкинге и ездить туда по стандартному расписанию среднестатистического офиса: с 10 до 19. На самом деле так проще работать. Лично мне рваный график для работы не нравится с точки зрения продуктивности. Иногда работаю по нему вынужденно из-за множества личных дел. На долгосрочном периоде привыкаешь к режиму дня и нарушать его не хочется. Падает продуктивность.

А у вас как с этим? Где удобнее всего работать удалённо? Думаю, что большинство напишет дома в отдельной комнате. Но я лично всегда предпочту рабочее помещение вне дома. Летом у меня отдельная комната на втором этаже, но это всё равно не то. Дома нерабочая атмосфера. Вообще никто не работает, только я. Все на расслабоне отдыхают и наслаждаются летом.

Видео отсюда:
▶️ https://www.youtube.com/watch?v=oYrx0V1jNq0
Понравились на канале некоторые ролики.

#юмор #разное
Please open Telegram to view this post
VIEW IN TELEGRAM
👍117👎8