ServerAdmin.ru
26.7K subscribers
204 photos
24 videos
8 files
2.49K links
Авторская информация о системном администрировании.

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

Второй канал: @srv_admin_live
Сайт: serveradmin.ru
Download Telegram
​​Постоянно приходится заниматься вопросами сбора и анализа логов веб серверов. Решил сделать подборку инструментов для этих целей от самых навороченных, типа ELK, до одиночных консольных утилит.

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

Про #elk я много писал как здесь, так и на сайте есть разные статьи.

🟢 Альтернатива ELK - Loki от Grafana. Сразу скажу, что опыта с ним у меня нет. Так и не собрался, нигде его не внедрил. Всё как-то лениво. Использую привычные и знакомые инструменты. Плюсы у Loki по сравнению с ELK существенные, а конкретно:
кушает меньше ресурсов;
проще настроить и разобраться.
Из минусов — меньше гибкости и возможностей по сравнению с ELK, но во многих случаях всего этого и не надо. Если бы сейчас мне нужно было собрать логи веб сервера и я бы выбирал из незнакомых инструментов, начал бы с Loki.

🟢 Ещё один вариант — облачный сервис axiom.co. У него есть бесплатный тарифный план, куда можно очень быстро настроить отправку и хранение логов общим объёмом до 500 ГБ!!! Зачастую этого хватает за глаза. В него можно отправить распарсенные grok фильтром логи, как в ELK и настроить простенькие дашборды, которых во многих случаях хватит для простого анализа. Мне понравился этот сервис, использую его как дубль некоторых других систем. Денег же не просит, почему бы не использовать.

Далее упомяну системы попроще, для одиночных серверов. Даже не системы, а утилиты, которых иногда может оказаться достаточно.

🟡 Классная бесплатная утилита goaccess, которая умеет показывать статистику логов веб сервера в режиме онлайн в консоли. Либо генерировать статические html страницы для просмотра статистики в браузере. Устанавливается и настраивается очень легко и быстро. Подробности есть в моей заметке. Интересная программа, рекомендую. Пример html страницы.

🟡 Ещё один вариант консольной программы — lnav. Он заточен не только под веб сервер, но понимает и его формат в виде базовых настроек access логов.

Перечислю ещё несколько решений по теме для полноты картины, с которыми я сам не работал, но знаю про них: Graylog, OpenSearch.

❗️Если забыл что-то известное, удобное, подходящее, дополните в комментариях.

#logs #webserver #подборка
​​Давно не просматривал вакансии по подходящим мне направлениям. У меня отпала в этом нужда, так как работаю либо по старым знакомствам, либо меня люди сами находят. Раньше регулярно мониторил рынок труда, чтобы не проседать по доходам и понимать, сколько мои навыки сейчас стоят. Рекомендую всем, кто работает по найму, регулярно просматривать вакансии и подтягивать себя по зарплате и навыкам к реальности.

Решил посидеть на hh и своими глазами посмотреть картину. Немного удивился, так как ожидал увидеть спад по предложениям и зарплатам. Но не наблюдаю такого.

Первое и самое большое удивление. Искал вакансии по слову Devops и возможностью работать удалённо. Увидел 1133 вакансии (❗️). Думаю, может каких-то мёртвых много. Ставлю фильтр "за месяц" и количество почти не уменьшается. Я так понимаю, что спрос на специалистов с современным стеком технологий очень велик. Он неудовлетворён. Наблюдал там как крупные компании, так и небольшие, локальные и международные с зарплатой как в рублях, так и в долларах. Есть вакансии из Белоруссии, из Казахстана.

Если убрать в фильтре "удалённая работа", то вакансий будет 3000+. Немного полистал список, и понял, что сюда загрузили практически всё ИТ (девопсы, сисадмины, системные инженеры, руководители и т.д.). В основном все вакансии на уровень middle и выше. Junior есть, но объективно мало. То есть лёгкого старта не будет.

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

За два года учёбы и плотной работы с базы в виде основ Linux можно дорасти до уровня, когда можно будет откликаться на вакансии 200+ т.р. Это вот прям вообще реально. Я вижу это по требованиям и понимаю, что и как нужно сделать, чтобы обучиться.

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

На картинке ниже пример вакансии на 2500$ на руки (~235 т.р.). Требования вполне лояльные, ничего запредельного. Обычный уверенный Linux админ. Смущает только groovy, даже не знаю, что это. Но, думаю, если bash и python на уровне, то groovy простят.

#разное
​​Очень простая и короткая заметка, которая наверняка будет полезна многим, кто пользуется AnyDesk. Для меня это было прям открытием и облегчением, когда узнал.

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

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

Когда увидите табличку, где будет написано, что вы достигли максимального количества исходящих подключений, выделите мышкой строку с ID клиента и нажмите Enter. И вы успешно подключитесь без каких-либо ограничений.

#remote
​​На днях поднимал вопрос сбора логов веб сервера и забыл упомянуть одну систему, которую я знаю уже очень давно. Пользуюсь лет 8. Речь пойдёт про New Relic. Это очень мощная SaaS платформа по мониторингу и аналитике веб приложений и всего, что с ними связано, в том числе серверов. Я не раз уже писал о нём, но можно и ещё раз напомнить.

Сервис постоянно развивается и меняется. Когда я начинал им пользоваться для базового мониторинга серверов, там был бесплатный тарифный план на 10 хостов. В какой-то момент они бесплатный тарифный план совсем убрали, потом вернули в другом виде.

В итоге сейчас есть бесплатный тарифный план без необходимости привязки карты. Просто регистрируетесь на email. Вам даётся 100 ГБ для хранения всех данных с любых сервисов системы. А их там море, они все разные. Это очень удобно и просто для контроля. Хотите мониторить сервера - подключайте хосты, настраивайте метрики. Хотите логи - грузите их. Используется то же доступное пространство.

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

Работа с New Relic по мониторингу сервера и сбора логов выглядит следующим образом. Регистрируетесь в личном кабинете, получаете ключ. Во время установки агента используете этот ключ. Сервер автоматом привязывается к личному кабинету. Дальше за ним наблюдаете оттуда. В настройках агента можно включить сбор логов. Какие - выбираете сами. Можно systemd логи туда отправить, или какие-то отдельные файлы. К примеру, логи Nginx. Если предварительно перевести их в формат json, то потом очень легко настраивать визуализацию в личном кабинете.

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

Мониторинг сервера позволяет посмотреть статистику по CPU, I/O, Memory в разрезе отдельных процессов. Это очень удобно и нигде больше не видел такой возможности.

#мониторинг #logs
This media is not supported in your browser
VIEW IN TELEGRAM
Старая шутка вспомнилась про Кубернетис. Классно сделано, с душой.

В оригинале была семья. Кстати, этот вопрос, думаю, многих способен в тупик поставить. Как сами думаете? Но лично меня - нет. Я чётко знаю, зачем мне семья и почему я не хочу работать с Kubernetes.

#юмор
​​После публикации про мониторинг Newrelic, где можно наблюдать за каждым процессом в системе в отдельности, решил прикинуть, а как подобное реализовать в Zabbix. Итоговое решение по всем метрикам пока не созрело, но контроль использования памяти уже реализовал. Решил поделиться своими наработками. Может кто-то подскажет другие пути решения задачи.

Прикинул, как снимать метрики. Тут особо не пришлось ломать голову, так как сразу родилась идея с утилитами jc и jq, которые я давно знаю. Взял вывод ps, обернул его в json с помощью jc, отсортировал по метрике rss и вывел top 10:

# ps axu | jc --ps -p | jq 'sort_by(.rss)' | jq .[-10:]
..................................
]
 {
  "user": "servera+",
  "pid": 1584266,
  "vsz": 348632,
  "rss": 109488,
  "tty": null,
  "stat": "S",
  "start": "19:41",
  "time": "0:28",
  "command": "php-fpm: pool serveradmin.ru",
  "cpu_percent": 0.5,
  "mem_percent": 2.7
 },
 {
  "user": "mysql",
  "pid": 853,
  "vsz": 2400700,
  "rss": 782060,
  "tty": null,
  "stat": "Ssl",
  "start": "Aug28",
  "time": "365:40",
  "command": "/usr/sbin/mariadbd",
  "cpu_percent": 1.8,
  "mem_percent": 19.4
 }
]
..........................................

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

Напомню, что у Zabbix свой определённый формат, иерархия и логика работы правил автообнаружения. Чтобы автоматически создавать айтемы, нужно подать на вход json следующего содержания:

[{"{#COMMAND}":"php-fpm7.4"},{"{#COMMAND}":"mariadbd"}.........,{"{#COMMAND}":"smtpd"}]

Такую строку он сможет взять, на основе переданных значений {#COMMAND} создать айтемы. Как мою json от ps приспособить под эти задачи, я не знал. Для этого можно было бы сделать обработку на javascript прямо в айтеме, но мне показалось это слишком сложным для меня путём. Решил всё сделать по старинке на bash.

Взял вот такую конструкцию, которая анализирует вывод ps, формирует удобный список, который можно отсортировать с помощью sort и взять top 10 самых нагруженных по памяти процессов и в итоге вывести только их имена:

# ps axo rss,comm | awk '{ proc_list[$2] += $1; } END { for (proc in proc_list) { printf("%d\t%s\n", proc_list[proc],proc); }}' | sort -n | tail -n 10 | sort -rn | awk '{print $2}'

Далее обернул её в скрипт для формирования json для автообнаружения в Zabbix.

top_mem.discovery.sh:

#!/bin/bash

TOPPROC=`ps axo rss,comm | awk '{ proc_list[$2] += $1; } END { for (proc in proc_list) { printf("%d\t%s\n", proc_list[proc],proc); }}' | sort -n | tail -n 10 | sort -rn | awk '{print $2}'`

JSON=$(for i in ${TOPPROC[@]}; do printf "{\"{#COMMAND}\":\"$i\"},"; done | sed 's/^\(.*\).$/\1/')
printf "["
printf "$JSON"
printf "]"

На выходе получаем то, что нам надо:

[{"{#COMMAND}":"php-fpm7.4"},........{"{#COMMAND}":"smtpd"}]

Сразу же готовим второй скрипт, который будет принимать в качестве параметра имя процесса и отдавать его память (rss).

top_mem.sh:

#!/bin/bash

ps axo rss,comm | awk '{ proc_list[$2] += $1; } END { for (proc in proc_list) { printf("%d\t%s\n", proc_list[proc],proc); }}' | sort -n | tail -n 10 | sort -rn | grep $1 | awk '{print $1}'

Проверяем:
# ./top_mem.sh mariadbd
780840

Добавляем в конфиг zabbix-agent:
UserParameter=top.mem.discovery, /bin/bash /etc/zabbix/scripts/top_mem.discovery.sh
UserParameter=top.mem[*], /bin/bash /etc/zabbix/scripts/top_mem.sh $1

Теперь идём на сервер, создаём шаблон, правило автообнаружения, прототип айтема, графика и сразу делаем панель.

Получилось удобно и функционально. Все нюансы не смог описать, так как лимит на длину поста. Нерешённый момент - особенности реализации LLD не позволяют автоматом закидывать все процессы на один график. Без API не знаю, как это сделать. Текущее решение придумал и опробовал за пару часов.

#zabbix
​​Увидел недавно в комментариях в ВК упоминание сборки XAMPP. Для тех, кто не в курсе, поясню, что это сборка локального веб-сервера, содержащая Apache, MariaDB, интерпретатор скриптов PHP, язык программирования Perl и большое количество дополнительных библиотек, позволяющих запустить полноценный веб-сервер. Подобные сборки были очень популярны лет 15-20 назад.

Среди подобных сборок наиболее популярны были Denver, позже появилась OSPanel, параллельно существовал и XAMPP. Я думал, что все эти панели уже отжили своё и исчезли. Оказывается, нет. Полностью устарел и давно не обновляется Denver. У OSPanel последнее обновление год назад, так что весь софт довольно свежий (PHP 8.1, MariaDB 10.8, MongoDB 6.0, Redis 7 и т.д.)

А живее всех живых оказался XAMPP. Он регулярно обновляется. Свежая версия на базе PHP 8.2.4. Удобство всех этих панелей в том, что не нужно разбираться с настройками серверной части. Запустил установщик и он всё сделал за тебя. То есть они ориентированы на разработчиков и служат только для локальной работы. Хотя некоторые не очень разумные люди использовали их и для прода.

Не знаю, кому сейчас это будет актуально. Все разработчики, кого я знаю последние 5-7 лет, худо бедно умеют настраивать локально или удалённо базовый стек веб сервера, с которым работают. Кто руками, кто скриптами, кто докером. Но раз уж справки навёл, поделился с вами. Может кому-то пригодится.

⇨ XAMPP: https://www.apachefriends.org (Windows, Linux, OSX)
⇨ OSPanel: https://ospanel.io (только Windows)

#webserver
​​Забавная история случилась с моим репозиторием для ELK Stack. Специально расположил его на VPS, арендованном в USA, чтобы было удобнее скачивать новые пакеты и обновлять репозитории. И вот на днях решил в очередной раз его обновить и очень удивился, когда не смог ничего скачать по свежим ссылкам. Получал ERROR 403: Forbidden. Проверил на другом иностранном сервере, скачал без проблем. То есть мой VPS забанили. Не понятно, в рамках чего это было сделано. Кто-то стуканул или какая-то другая причина. Обновлял я в ручном режиме и запросами не спамил. IP (188.227.57.126) по всем базам сшашный.

Пришлось через другой сервер качать и обновлять репозиторий. Теперь его можно и в Россию вернуть. Один фиг качать через прокладки придётся. Я там всю структуру переделал, добавив сразу Debian 11 и 12, чтобы удобнее было. Настроил всё с помощью aptly, так что сразу кратко все команды приведу, а то постоянно забываю и приходится каждый раз в документацию лезть, когда с ним работаешь.

Ставим:
# apt install aptly

Конфиг /etc/aptly.conf:
{
 "rootDir": "/mnt/aptly",
 "downloadConcurrency": 4,
 "downloadSpeedLimit": 0,
 "architectures": [],
 "dependencyFollowSuggests": false,
 "dependencyFollowRecommends": false,
 "dependencyFollowAllVariants": false,
 "dependencyFollowSource": false,
 "dependencyVerboseResolve": false,
 "gpgDisableSign": false,
 "gpgDisableVerify": false,
 "gpgProvider": "gpg",
 "downloadSourcePackages": false,
 "skipLegacyPool": true,
 "ppaDistributorID": "elastic",
 "ppaCodename": "",
 "FileSystemPublishEndpoints": {
 "elastic": {
  "rootDir": "/mnt/aptly",
  "linkMethod": "symlink",
  "verifyMethod": "md5"
 }
 },
 "enableMetricsEndpoint": false
}

Под репы выделил каталог /mnt/aptly. Создаём 2 репозитория:
# aptly repo create -comment="Elastic repo" -component="main" \
-distribution="bullseye" -architectures="amd64" elastic-bullseye
# aptly repo create -comment="Elastic repo" -component="main" \
-distribution="bookworm" -architectures="amd64" elastic-bookworm

Добавляем туда пакеты:
# aptly repo add elastic-bullseye elasticsearch-8.9.2-amd64.deb
.......

# aptly repo add elastic-bookworm elasticsearch-8.9.2-amd64.deb
.......

Создаю gpg ключ для репозиториев:
# gpg --default-new-key-algo rsa4096 --gen-key --keyring pubring

Публикую репозитории:
# aptly publish repo elastic-bullseye
# aptly publish repo elastic-bookworm

В директории /mnt/aptly появляются две директории: db, public. Ту, что public, надо опубликовать через web сервер. Вот мой конфиг nginx:

server {
  listen 80 default_server;
  server_name elasticrepo.serveradmin.ru;
  root /mnt/aptly/public/;
  access_log /var/log/nginx/aptly-access.log main;
  error_log /var/log/nginx/aptly-error.log;

  location / {
   autoindex on;
  }
}

Осталось положить ключ в публичную директорию:
# gpg --export --armor > /mnt/repo/public/elastic.asc

На этом всё. Запускаем веб сервер и подключаем репозитории к системам:
# echo "deb http://elasticrepo.serveradmin.ru bullseye main" \
| tee /etc/apt/sources.list.d/elasticrepo.list

# echo "deb http://elasticrepo.serveradmin.ru bookworm main" \
| tee /etc/apt/sources.list.d/elasticrepo.list

Устанавливаем ключ:
# wget -qO - http://elasticrepo.serveradmin.ru/elastic.asc | apt-key add -

На Debian 12 увидите предупреждение, что apt-key is deprecated, но это не критично. Теперь можно обновлять репозитории и устанавливать из них пакеты.

Если нужно добавить пакеты, то делаем так:
# aptly repo add elastic-bullseye elasticsearch-9.0.0-amd64.deb
# aptly publish update bullseye

Если надо удалить пакет:
# aptly repo remove elastic-bullseye elasticsearch_8.5.2_amd64
# aptly publish update bullseye

Ещё полезные команды aptly:
# aptly repo list
# aptly package search logstash
# aptly repo show -with-packages elastic-bullseye

#debian #elk #aptly
​​Если у вас есть желание максимально быстро и без лишних телодвижений проанализировать логи веб сервера, то можно воспользоваться типичной windows way программой http Logs Viewer. Скачиваете, устанавливаете, открываете в ней свой лог.

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

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

Программа удобная и простая. Кто привык тыкать мышкой, а не грепать в консоли, будет прям кайфово. Нашёл, отсортировал, скопировал, выгрузил и т.д. Всё наглядно с привычным скролом для больших списков. И никаких вам ELK.

Сайт

#webserver #logs
​​Перенос VM с Hyper-V на Proxmox

На днях стояла задача перенести виртуальные машины Linux (Debian 11) с Hyper-V на KVM (Proxmox). Помучался изрядно, но в итоге всё получилось. Если VM первого поколения без EFI раздела, то проблем вообще никаких. Просто переносим диск виртуальной машины, конвертируем и подключаем к VM. Вообще ничего перенастраивать не надо, все имена дисков и сетевых адаптеров будут те же, что и на Hyper-V. А вот если машины второго поколения с загрузкой по EFI, то начинаются танцы с бубном. Причём у каждого свои, судя по информации из интернета.

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

1️⃣ Завершаю работу VM на Hyper-V.

2️⃣ Копирую файл диска vhdx на хост Proxmox.

3️⃣ Создаю в Proxmox новую виртуальную машину и обязательно указываю Bios: OVMF (UEFI), SCSI Controller: VirtIO SCSI. Остальное не принципиально. Диски можно никакие не добавлять. Но при этом у вас будет автоматически подключен EFI Disk, с какими-то своими параметрами, из которых я выбрал только формат - qcow2.

4️⃣ В консоли Proxmox конвертируем vhdx диск в диск виртуальной машины:
# qm importdisk 102 /mnt/500G/Debian11.vhdx local-500G
Формат команды следующий:
# qm importdisk <vmid> <source> <storage>

5️⃣ После импорта диск цепляется к VM в отключенном виде. Подключаем его как SCSI и настраиваем с него загрузку.

6️⃣ Загружаем VM с этого диска. Тут по многим руководствам из инета виртуалка уже запускается и нормально работает. Но не у меня. Я проваливался в uefi interactive shell v2.2 proxmox.

7️⃣ Заходим в bios этой виртуалки и отключаем там Secure Boot. Делается это в разделе Device Manager ⇨ Secure Boot Configuration. После этого у некоторых VM начинает загружаться, но опять не у меня.

8️⃣ Опять иду в bios, в раздел Boot Maintenance Manager ⇨ Boot Options ⇨ Add Boot Option. Выбираю импортированный диск VM. Там кроме него будет только CD-ROM, так что легко понять, что надо выбрать. Открывается обзор файловой системы EFI раздела от нашей системы. Перемещаемся там по директориям /EFI/debian, выбираем файл grubx64.efi. То есть мы создаём новый вариант загрузки системы, выбрав этот файл. Там же пишем какое-то название для этой загрузки, чтобы отличить от остальных вариантов. Далее идём в раздел Boot Maintenance Manager ⇨ Boot Options ⇨ Change Boot Order и назначаем первым номером только что созданный вариант для загрузки. Сохраняем изменения и загружаемся. Теперь всё ОК, система загрузилась.

А я сначала пробовал разные настройки VM, загружался с LiveCD и проверял разделы диска, загрузчик. Там всё ОК, данные нормально переезжают. Проблема именно в настройке загрузки через EFI раздел. Почему-то автоматом он не подхватывался. Может это была особенность Debian 11. Я переносил именно их.

❗️Сразу добавлю полезную информацию по поводу Centos 7. Может это будет актуально и для каких-то других система. Когда я переносил виртуалки с этой системой между гипервизорами, они не загружались, пока не пересоберёшь initramfs под конкретным гипервизором. Если просто перенести, то загрузка не ехала дальше из-за проблем с определением дисков на этапе загрузки. Пересборка initramfs решала эту проблему.

❗️И ещё один нюанс с переездами между гипервизорами, с которым сталкивался. Иногда система не грузится, потому что в fstab были прописаны имена дисков, которые на новом гипервизоре получили другие названия. Тогда грузимся с LiveCD и меняем диски в fstab и возможно в grub.

Тема переезда между разными типами гипервизоров непростая. Иногда проще воспользоваться какой-то системой, типа Veeam Agent For Linux или Rescuezilla. Так как я более ли менее теорию понимаю по этой теме, то переношу обычно вручную.

#linux #hyperv #виртуализация
​​Мой первый настроенный мониторинг в роли системного администратора Linux был на базе rrd графиков, которые рисовались с помощью rrdtool и скриптов, которые забирали информацию с сенсоров и записывали в rrd базу. Было это ещё на Freebsd примерно в 2007-2008 году. Потом переехал на Zabbix версии 1.6 или 1.8, не помню точно.

Сейчас rrd графики выглядят старомодно, хотя лично мне их стилистика нравится. Я к чему обо всём этом. Есть неплохой и вполне современный мониторинг LPAR2RRD, у которого все графики rrd. Это старый open source продукт, который монетизируется платной поддержкой этого и ещё одного своего продукта - STOR2RRD.

Отличает lpar2rrd простота установки и настройки. У него есть как свой агент, так и интеграция с популярными программными продуктами. Например, он умеет через API мониторить Proxmox. Просто делаете для lpar2rrd учётку с доступом на чтение к API и он автоматом забирает все необходимые метрики с определённой периодичностью. Другой пример интеграции - PostgreSQL. Тут то же самое. Делаете учётку с доступом на чтение, lpar2rrd забирает всю информацию вплоть до отдельной базы и рисует мониторинг.

Причём поддерживает lpar2rrd всех крупных современных вендоров, коммерческие и open source продукты, облачных провайдеров:
IBM Power Systems, VMware, Oracle Solaris, RHV, oVirt, XenServer, Citrix, Hyper-V
PostgreSQL, MSSQL, Oracle Database
Docker, Kubernetes, OpenShift
AWS, Google Cloud, Azure

Ну и обычные агенты под ОС Linux. Выше список не полный. Поддержка Windows тоже есть, но специфичная. Ставится агент на какую-то одну ОС, и он по WMI опрашивает все необходимые машины.

Посмотреть, как всё это выглядит, можно в публичном Demo, где очень удобно представлены все наиболее популярные системы. Можно увидеть в каком виде все метрики будут организованы в мониторинге. Если кто не знает, то временные интервалы задаются мышкой прям на самом графике. Сразу добавлю, что rrd ещё удобен тем, что из него легко картинки графиков автоматом забирать.

Мониторинг, конечно, выглядит простовато по сегодняшним меркам. Пригодится он может в основном тем, кому нужно что-то простое и обзорное, чтобы поставил и не морочился с настройкой и внедрением. И на этот вопрос он реально отвечает. Дал доступ к кластеру Proxmox и получил автоматом мониторинг вплоть до загрузки сетевого интерфейса отдельного lxc контейнера. А так как всё хранится в локальной rrd базе, ему даже полноценная СУБД не нужна.

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

Сайт / Demo / Установка

#мониторинг
Обратил внимание, что большинство прокомментировавших вчерашнюю заметку про перенос VM не уловили суть проблем, с которыми можно столкнуться при любом переносе системы на другое "железо". А смена типа гипервизора это по сути смена железа.

Причём система Windows, на удивление, гораздо лучше переживает переезд, чем Linux. Многие вещи она умеет делать автоматически при проблемах с загрузкой. Вообще не припоминаю с ней проблем, кроме установки драйверов virtio при переезде на KVM. А вот с Linux проблемы как раз бывают.

Всем спасибо за содержательные комментарии. В них упоминали несколько инструментов по конвертации дисков:
Starwind V2V
qemu-img convert
virt-p2v

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

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

Приведу самый простой пример подготовки. Я в своё время переносил много систем с гипервизора Xen, и там диски имели имена /dev/vdX, а при переезде на KVM - /dev/sdX. Если просто скопировать систему, то на новом гипервизоре она не запускалась. Надо было поправить grub и fstab. Можно было это делать предварительно, перед снятием образа системы, либо потом с помощью LiveCD на перенесённой системе.

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

Есть бесплатный Veeam Agent For Linux Free. Вот он как раз не просто делает образ диска для переноса, но и готовит загрузочный диск со списком оборудования вашей системы, чтобы в процессе восстановления на основании этого списка попытаться гарантированно запустить вашу систему. И чаще всего у него это получается.

То же самое делает Rear, я о ней писал и тестировал.

Сходу не могу припомнить ещё какие-то программы такого же класса, как Veeam Agent For Linux или Rear, которые не просто переносят данные, но и подготавливают системы. Если вы такие знаете, то поделитесь информацией.

Отдельным пунктом идут проблемы, связанные с EFI. Там тоже много своих нюансов. В итоге переезд виртуальных машин может выглядеть очень непростой задачей, но всегда решаемой. По крайней мере я ни разу не сталкивался с тем, что нельзя было перенести какую-то виртуалку. Если понимаешь теорию, то починить загрузку почти всегда получается. Надо идти последовательно по пути:

EFI (в том числе настройки VM в гипервизоре) ⇨ GRUB INITRAMFSНастройки системы.

Ещё момент. Лично я до конца не понимаю, зачем виртулакам EFI. Он усложняет эксплуатацию, а какую проблему решает - не знаю, если только вы не используете для загрузки диск более 2ТБ, что для виртуалок нетипично. Если у вас повышенные требования к безопасности и используется Secure Boot, тогда понятно. Хотя опять же, при работе в виртуальной машине не факт, что эта защита эффективна. Во всех остальных случаях не вижу смысла его (EFI) использовать. Возможно, я ошибаюсь.

#виртуализация
​​Я периодически пользуюсь сайтом virustotal.com, чтобы проверить незнакомые файлы. Никогда не обращал внимания, что он умеет проверять ещё и сайты, хотя на главной есть возможность выбрать url, а не файл.

Оказывается, этот сервис не только на вирусы по базам пробивает сайт, но и выводит всю историю IP адресов сайта, плюс все засветившиеся поддомены и IP адреса к ним. Проверил свой домен. Он показывает даже краткосрочные изменения IP адреса в А записи. Летом менял на 12 часов адрес, он там тоже засветился. Не знаю, как технически отслеживают такие вещи. Кто-то эти базы ведёт?

Сделано удобно и информативно. Я знал и раньше, что подобные базы есть, но особо не пользовался. Только на поддомены проверял. Они светятся в том числе выпуском TLS сертификатов на них. А как A записи поддоменов отслеживают, хз. Они разве где-то в базе чьей-то хранятся?

❗️Проверьте свои поддомены на предмет того, не забыли ли вы что-то закрыть, что не должно быть в общем доступе.

В целом, полезная штука на базе известного сервиса. Можно пользоваться. Кстати, быстро проверять файлы можно с помощью бота. Я когда-то давно уже упоминал его, но отключил, потому что он периодически шлёт рекламу. Но если вы часто проверяете файлы, то может быть удобно: @VirusTotalAV_bot Он ещё просит подписываться на какие-то каналы. Можно этого не делать. Работает и так.

#сервис
​​Столкнулся с тем, что один IP адрес засветился в некоторых списках различных блокировок. Проверить удобно тут:

http://mail-blacklist-checker.online-domain-tools.com

Более полный список нигде не видел (советую в закладки забрать).

Суть в чём. Сам адрес неповинен. Его заблокировали кучей вместе с проштрафившейся подсеткой. Какой-то один адрес нагадил. Причём некоторые сервисы тупо просят заплатить, чтобы гарантированно не попасть в свой список на 24 месяца.

Я к чему это. Не используйте эти списки никогда в своих сервисах. Это полное днище. А говённый spamhaus до сих пор некоторые админы почтовых серверов используют. Да и не только они. Антивирусы тоже накидывают лишних баллов по этим спискам.

Как по мне, так все статические списки в наши дни должны быть ликвидированы. И тем более нельзя делать блокировки сразу подсетям.

У меня как-то раз адрес сайта залетел в один из таких списков и его некоторые антивирусы начали блокировать. Причём тоже не я был виноват, а заблокировали всю подсеть. В другой раз попал в список за то, что на сайте был выложен RDP Wrapper, который вирусом не является. Пришлось убрать. Это я уже сильно потом узнал и исправил. А до этого просто не мог понять, за что сижу в списках. Перепроверил всё по 10 раз. Ни взломов, ни спама с сайта не было.

#сервис
Я тут словил реальное удивление, разочарование и радость одновременно. Как обычно просматривал сабреддит Sysadminhumor и увидел вот эту картинку.

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

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

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

#мем
​​🎓 У компании RedHat есть большое количество бесплатного обучающего материала в том числе в виде интерактивных уроков, где они воспроизводят полностью рабочую среду разработчика или devops инженера. Живёт всё это тут:

https://developers.redhat.com/learn

Интерактивные уроки в самом низу страницы (All interactive lessons). Для прохождения достаточно обычной учётной записи. Я, вроде бы, как developer зарегистрирован. Уже не помню точно, давно дело было. Никаких санкций и ограничений RedHat не вводил. У меня и учётка жива, хотя там указано, что я живу в Москве, и все бесплатные лицензии, что они дают, активны.

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

Я прошёл один из уроков под названием DevOps and CI/CD with automation controller. Сделано прикольно. Для вас готовят отдельный стенд в браузере, где в виде отдельных вкладок реализован интерфейс VSCode, Jenkins, Gitea, Ansible Automation controller. И вам по шагам предлагают выполнить деплой условного приложения, работая в этих системах.

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

Уроков там много, разбиты на категории (Devops, Linux, GitOps и т.д.) Вот пример некоторых уроков по Devops:
DevOps and CI/CD with automation controller
Build applications into container images
Installing Software using Package Managers
Linux commands for beginners
Run your first Ansible Playbook
Deploy containers with Podman
и т.д.

#обучение #бесплатно
Хочу ещё раз вернуться к теме здоровья и удобного рабочего места. Наткнулся на очень интересный и качественный канал одного разработчика. Обратил внимание, что давно не было свежих выпусков. Потом понял причину, когда посмотрел один из последних его роликов:

Чего не стоит делать ПРОГРАММИСТУ?! Как надо ПРАВИЛЬНО!

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

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

Чем раньше вы это поймёте, даже если у вас пока нет видимых проблем, тем лучше будет качество вашей жизни в будущем. Здоровье у всех после 30-ти лет идёт в минус. В зависимости от генетики и заботы о нём, проблемы каждый заметит в разное время, но то, что заметит, это 100%.

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

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

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

Сейчас в целом в стабильном состоянии, потому что знаю, что надо делать, чтобы было всё ОК. Мне необходимо 2-3 раза в неделю заниматься специально подобранным комплексом упражнений. Если не ленишься, то в целом нормально живёшь и не особо обращаешь внимание на проблемы.

В конце автор даёт хороший посыл, обращая внимание на то, что человек чувствует себя счастливым, когда у него всё хорошо в трёх сферах жизни: здоровье, семья, деньги. Если где-то просадка, то качество жизни падает. Я согласен с ним на 100%. Причём здоровье на первом месте, а деньги на последнем.

#разное #здоровье
​​Я много раз видел упоминание сервиса Netmaker, который служит для организации overlay сетей с помощью Wireguard. Это open source продукт, который можно развернуть у себя, либо воспользоваться облачным сервисом по подписке. Сразу скажу на кого он похож, чтобы было понятно о чём пойдёт речь: Nebula, Tailscale, ZeroTier.

Netmaker среди этих продуктов едва ли не самый популярный. Я последнее время много о нём слышал упоминаний. Его можно использовать и как для построения Site-to-Site соединений, так и для Mesh сетей.

Попробовать его можно в рамках бесплатного тарифного плана в SaaS сервисе. Там дают возможность добавить одну сеть и соединить с её помощью до 30-ти устройств. А если понравится, можно и у себя развернуть. Ставится автоматически с помощью готового bash скрипта.

Netmaker представляет из себя веб интерфейс, где вы добавляете хосты, формируете для них ключи, с помощью которых они объединяются в VPN сети. Настройками хостов и сетями управляете там же, в веб интерфейсе. Сервис полностью управляется через него. В консоль нужно будет лазить только на хостах, когда их будете подключать.

Перечислю несколько задач, которые можно будет решить с помощью Netmaker:

🔹У вас есть закрытая сеть с ограниченным доступом из интернета. На один из хостов ставится клиент Netmaker. С помощью настроек вы открываете доступ к закрытой сети через этот хост для какого-то набора остальных клиентов.

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

🔹С помощью Netmaker организуется Mesh VPN, где клиенты взаимодействуют друг с другом напрямую, а не через управляющий сервер, как, к примеру, в классическом openvpn.

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

Помимо этих примеров, в Netmaker есть следующая функциональность:
Мониторинг состояния сетей и хостов
Списки доступа к хостам и сетям
Управление пользователями и их правами на основе модели RBAC

Продукт известный, функциональный. В сети много руководств и роликов с описанием возможностей и настройки.

Сайт / Исходники

#vpn
​​У меня давно в рекомендациях записан сервис для заметок yonote.ru. Я откладывал знакомство с ним, как и с другими подобными сервисами, потому что надоело пытаться найти что-то новое. Это занимает много времени, а когда для тебя это инструмент не так уж критичен, тратить это время не хочется.

На текущий момент я для заметок использую локальный Joplin, для календаря связку Trello+Planyway, для дел сервис Todoist. Мне не нравится, что во-первых, всё это разные инструменты, во-вторых, последние два могут заблокировать. В идеале, хотелось бы получить одну программу, где всё это будет в одном месте. Но пока такую не нашёл.

В этом плане Yonote мне понравился. Это российский сервис. Разработчики прямо заявляют, что позиционируют свой продукт как замену Notion. Собственно, он на него сильно похож. Есть бесплатный тарифный план, которого для одиночного использования будет достаточно, если не хранить медиафайлы в сервисе.

Я вчера потратил вечер, чтобы попробовать его. Внешне вопросов никаких нет. Выглядит всё аккуратно, плюс-минус, как у всех подобных сервисов. Мне понравилось, как в Yonote можно организовать информацию с помощью таблиц и календарей. Думаю, что календарь Planyway смогу им заменить. К тому же Trello давно обещает заблокировать пользователей из РФ. Так что лучше до блокировки подобрать какую-то замену.

А в Yonote календарь неплохо реализован: есть разноцветные метки, чекбоксы, общий вид сразу на месяц, настраиваемые статусы для событий. Удобные и наглядные календари мало где есть. Я пробовал сервис календарей от Яндекса и очень сильно пытался переехать на локальный календарь Thunderbird. В итоге не понравилось ни то, ни другое.

Сервис позволяет делать экспорт всех своих заметок в формате Markdown. Так что можно не бояться, что начав пользоваться облачной версией, будешь привязан к ней навеки. У всех подобных сервисов используется Markdown, так что можно без проблем переезжать туда-сюда в случае чего.

В целом от Yonote у меня хорошие впечатления. Вполне состоявшийся и зрелый продукт. Есть API, импорт данных, интеграция с кучей сервисов (в том числе telegram и вебхуки), хорошая функциональность, командная работа. Если подбираете себе с нуля что-то или планируете переезд с иностранных сервисов, то посмотрите. В базовых возможностях ничем не хуже остальных, а более продвинутые я не проверял.

#заметки #отечественное
​​Предлагаю вашему вниманию любопытную утилиту, которую мне давно посоветовали посмотреть в контексте обсуждения темы Port knocking. На практике она может пригодиться в очень широком диапазоне костылей.

Речь пойдёт про программу updater. Она слушает запросы на специальный url и выполняет заданные действия, если запрос легитимный. То есть курлом можно дёрнуть какой-то урл и на сервере выполнится определённое действие. Например, iptables создаст разрешающее правила для подключения по ssh. Урлы можно выбирать любые, в том числе те, что не поддаются подбору. А также наличие аутентификации через токен, делают этот инструмент замаскированным и относительно безопасным. Можно посадить его за прокси, чтобы совсем спрятать.

У автора в репозитории примеры сразу в составе с docker-compose с использованием reproxy в качестве reversed proxy. Если хотите просто погонять утилиту и посмотреть, как работает, может приспособить для своих простых задач, то можете просто запустить в одиночном контейнере:

# docker run -p 8080:8080 -e LISTEN=0.0.0.0:8080 \
-e KEY=super-secret-password \
-e CONF=/srv/etc/updater.yml \
--name=updater -v ./etc:/srv/etc \
ghcr.io/umputun/updater:master

Создаёте директорию etc там, откуда будете запускать команду. В неё положите конфиг updater.yml для простейшего задания с echo:

tasks:

 - name: echo-test
  command: |
   echo "Test updater work"

Формат yaml, так что будьте аккуратны с пробелами. Теперь проверяем, как работает:

# curl 172.17.196.25:8080/update/echo-test/super-secret-password
{"task":"echo-test","updated":"ok"}

Думаю, принцип понятен. Автор пишет, что написал этот софт для использования в CI/CD без необходимости работы по SSH, а следовательно передачи паролей или ключей. По его задумке с помощью updater можно выполнять обновление и перезапуск docker контейнеров. Для этого в составе его контейнера есть docker client и туда пробрасывается docker.sock.

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

Для работы на хосте updater нужно вытащить из контейнера и запустить напрямую. Это не трудно сделать, так как updater обычное приложение на GO, состоящее из одного бинарника. Ключи описаны автором в репозитории.

# docker cp f41a990d84c0:/srv/updater updater

Теперь можно запускать локально. Полезная небольшая утилита. Рекомендую запомнить её. Напомню, что есть похожая программа, про которую я пару раз писал и использую сам - labean.

Исходники

#security #cicd #devops
​​Сегодня вышло крупное обновление веб сервера Angie 1.3.0. Кто не читал, посмотрите две мои предыдущие заметки про него (1, 2). Изменения затронули open source версию, так что попробовать и оценить их сможет каждый.

Перечислю наиболее заметные нововведения.

1️⃣ В конфигурации location теперь можно использовать одновременно несколько шаблонов uri. Это упрощает конфигурацию location с одинаковыми настройками. То есть можно сделать примерно вот так:

location =~/.git
~*^/(\.ht|xmlrpc\.php)$
{
return 404;
}

Сейчас у меня то же самое записано вот так:

location ~ /.git {
return 404;
}

location ~* ^/(\.ht|xmlrpc\.php)$ {
return 404;
}

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

2️⃣ Angie научился самостоятельно экспортировать свою статистику в формате Prometheus, что явно упростит настройку мониторинга. Не нужен отдельный exporter для этих целей. Было бы неплохо сразу и шаблон для Zabbix сделать, не дожидаясь, пока кто-то из энтузиастов это реализует. Достаточно распарсить вывод для Prometheus.

3️⃣ Отдельной настройкой можно включить возможность экспорта содержимого конфигурационных файлов запущенной версии веб сервера через API.

Остальные изменения:
детальная информация и метрики по группам проксируемых stream-серверов в интерфейсе статистики, предоставляемом директивой "api"
опция "resolve" директивы "server" в блоке "upstream" модуля "stream", позволяющая отслеживать изменения списка IP-адресов, соответствующего доменному имени, и автоматически обновлять его без перезагрузки конфигурации
опция "service" директивы "server" в блоке "upstream" модуля "stream", позволяющая получать списки адресов из DNS-записей SRV, с базовой поддержкой приоритета
отображение номера поколения конфигурации в именах процессов, что позволяет с помощью утилиты "ps" отслеживать успех перезагрузок конфигурации и количество поколений рабочих процессов с предыдущими версиями конфигурации.

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

#webserver #angie