Авторская информация о системном администрировании.
# curl -d "Test Message" ntfy.sh/Stkclnoid6pLCpqU
Получаете оповещение от веб приложения. То же самое можно сделать, установив на смартфон приложение. Сервис бесплатный. При этом серверная часть open source. Вы можете развернуть сервер у себя и отправлять уведомления через него. Есть репозитории под все популярные системы. Инструкция прилагается.
Таким образом любой сервис, умеющий выполнять вебхуки, может без проблем отправлять уведомления вам на смартфон или десктоп. Например, в Zabbix достаточно в способах оповещений добавить новый с типом Webhook, в качестве скрипта использовать примерно следующее:
var response,
payload,
params = JSON.parse(value),
wurl = params.URL,
msg = params.Message,
request = new CurlHttpRequest();
request.AddHeader('Content-Type: text/plain');
response = request.Post(wurl, msg);
В качестве URL укажите свою подписку в ntfy. Теперь это оповещение можно добавлять пользователям. Им будет приходить уведомление с текстом, который передаёт макрос {ALERT.MESSAGE}.
Либо совсем простой пример для какой-то операции в консоли:
# rsync -a /mnt/data [email protected]:/backups/srv01 \
&& curl -H prio:low -d "SRV01 backup succeeded" ntfy.sh/Stkclnoid \
|| curl -H tags:warning -H prio:high -d "SRV01 backup failed" ntfy.sh/Stkclnoid
Если бэкап успешен, отправляем одно уведомление, если нет, то другое.
Такой вот простой и удобный сервис.
⇨ Сайт / Исходники
#мониоринг #zabbix #devops# ffmpeg -i movie.mp4 -c:v libx264 -b:v 3000 -c:a copy -pass 1 /dev/null \
&& ffmpeg -i movie.mp4 -c:v libx264 -b:v 3000 -c:a copy -pass 2 output.mp4
Ffmpeg очень мощная программа, которая умеет всё, что только может пожелать перекодировщик видео. Но разобраться в её ключах и настройках могут не только лишь все. Проект ffmpeg-commander помогает решить эту проблему.
Вы можете запустить его у себя, либо воспользоваться публичной веб версией:
⇨ https://alfg.dev/ffmpeg-commander
Это отличное решение для автоматизации процесса через скрипты. Удобно перекодировать видео и удалить исходник. Только надо каким-то образом проверить, что всё прошло успешно. А вот как это сделать автоматически, я не очень представляю. Стандартного выхода процесса кодирования без ошибки, мне кажется, в данном случае недостаточно для того, чтобы удалить исходник. Надо как-то подстраховаться.
Кстати, если воспользоваться другим проектом этого автора — ffmpegd, можно через веб интерфейс ffmpeg-commander выполнять непосредственно кодирование.
⇨ Сайт / Исходники
#разное# apt install molly-guard
Он делает очень простую вещь. При попытке через консоль перезагрузить или выключить сервер, требует в качестве подтверждения ввести имя сервера. Я впервые услышал про эту утилиту. Надо её добавить в список софта, обязательного для установки. На мой взгляд это самый простой и эффективный способ себя подстраховать.
2️⃣ Разукрасить консоль серверов. К примеру, в гипервизорах раскрасить приветствие консоли в красный цвет. Для этого добавьте в .bashrc:
PS1='\e[31m\u@\h:\e[31m\W\e[0m\$ '
Получите стандартный терминал, только имя пользователя и сервера в нём будут написаны красным цветом.
3️⃣ Настройте разные цвета вкладок у вашего SSH клиента. Мой, кстати, это поддерживает. Для некоторых серверов я использовал разные цвета, но мне быстро надоело их назначать. У меня много SSH соединений (больше сотни), так что постоянно заниматься раскраской лениво, хотя и стоит это делать. Это не сложнее, чем ставить molly-guard или раскрашивать терминал. По идее, это наиболее простой способ, который не требует выполнять дополнительные действия на самом сервере.
#linux[sources.nginx_access_logs]
type = "file"
include = ["/var/log/nginx/access.log"]
[transforms.nginx_access_logs_parsed]
type = "remap"
inputs = ["nginx_access_logs"]
source = '''
. = parse_json!(.message)
'''
[sinks.axiom]
inputs = ["nginx_access_logs_parsed"]
type = "axiom"
token = "xaat-36c1ff8f-447f-454e-99fd-abe804aeebf3"
dataset = "webserver"
У Vector есть готовая интеграция с axiom, что я и указал в sinks. Теперь запускайте Vector и идите в axiom.co. На вкладке Streams увидите свои логи в режиме реального времени.
Теперь можно зайти в Dashboards и собрать любой дашборд на основе данных лога Nginx. Чем более насыщенный лог, что настраивается в конфиге Nginx, тем больше данных для визуализации. Я для тестового сервера собрал дашборд буквально за 10 минут. Смотрите во вложении к заметке.
Такая вот заметка-инструкция получилась. Vector я уже рекомендовал, теперь советую посмотреть на описанный сервис. Меня никто не просил его рекламировать. Он просто удобный и есть функциональный бесплатный тарифный план. В него включены также 3 оповещения. Например, можно настроить, что если у вас в минуту будет больше 10 500-х ошибок сервера, прилетит оповещение. Или что-то ещё. Там большие возможности для насыщения, аггегации и других манипуляций с данными. Разобраться проще, чем в ELK или OpenSearch.
Для любителей grok, как я, покажу пример transforms в Vector своего формата логов Nginx. Вот пример формата лога, который я обычно использую, где есть всё, что мне надо:
log_format full '$remote_addr - $host [$time_local] "$request" '
'request_length=$request_length '
'status=$status bytes_sent=$bytes_sent '
'body_bytes_sent=$body_bytes_sent '
'referer=$http_referer '
'user_agent="$http_user_agent" '
'upstream_status=$upstream_status '
'request_time=$request_time '
'upstream_response_time=$upstream_response_time '
'upstream_connect_time=$upstream_connect_time '
'upstream_header_time=$upstream_header_time';
Вот grok фильтр в Vector:
[transforms.nginx_access_logs_parsed]
type = "remap"
inputs = ["nginx_access_logs"]
source = '''
. = parse_grok!(.message, "%{IPORHOST:remote_ip} - %{DATA:virt_host} \\[%{HTTPDATE:access_time}\\] \"%{WORD:http_method} %{DATA:url} HTTP/%{NUMBER:http_version}\" request_length=%{INT:request_length} status=%{INT:status} bytes_sent=%{INT:bytes_sent} body_bytes_sent=%{NUMBER:body_bytes_sent} referer=%{DATA:referer} user_agent=\"%{DATA:user_agent}\" upstream_status=%{DATA:upstream_status} request_time=%{NUMBER:request_time} upstream_response_time=%{DATA:upstream_response_time} upstream_connect_time=%{DATA:upstream_connect_time} upstream_header_time=%{DATA:upstream_header_time}")
'''
#nginx #logs #devops# who -b
system boot 2023-07-14 02:17
# last -x | head
root pts/0 10.20.140.6 Mon Jul 17 11:24 still logged in
runlevel (to lvl 5) 5.15.39-3-pve Fri Jul 14 02:17 still running
reboot system boot 5.15.39-3-pve Fri Jul 14 02:17 still running
shutdown system down 5.15.39-3-pve Fri Jul 14 02:16 - 02:17 (00:00)
root pts/0 10.20.140.6 Fri Jul 14 00:58 - down (01:17)
Тут я начал понимать, что происходит. Проверил у себя в SSH клиенте лог подключений. Я одно время записывал содержимое всех сессий, но потом отключил, потому что хранится всё это в открытом виде. А в логе сессий много чувствительной информации. Решил, что лучше её не собирать. Да и нужно очень редко.
Глянул на сервере историю команд:
# history
380 apt update
381 apt upgrade
382 w
383 reboot
Тут уже всё понял. В общем, под конец работ, уже ночью, я перепутал сервера. И вместо очередной виртуальной машины обновил и перезагрузил гипервизор. Причём это была виртуалка дублёр без полезного функционала. Я просто зашёл и на автомате обновил. У неё было похожее имя с гипервизором.❗️Это, кстати, важный момент. Всегда следите за названиями серверов. Что самое интересное, когда я настроил этот сервер, по какой-то причине не смог нормально проименовать все виртуалки. Не придумал удобную схему и сделал в лоб. Получилось плохо. Я сразу это заметил, но стало лень переделывать, так как настроил мониторинг, сбор логов, документацию. В итоге это сыграло со мной злую шутку.
Ну и в целом ночью устаёшь уже. Это существенный минус работы в IT. Периодически приходится что-то делать ночью. Я очень это не люблю, но полностью обойтись без ночных работ не получается. Я на ночь специально не откладываю, стараюсь хотя бы вечером всё сделать. Но не всегда получается.
Ещё полезные команды по теме:
# journalctl --list-boots
# journalctl -b 0
# last reboot
#linux #ошибка# systemctl stop [email protected]
А удаление из автозапуска:
# systemctl disable [email protected]
Окончания в названиях службы разные. Я в одном месте ошибся и после перезагрузки получил две запущенные службы 1С сервера. Старая запустилась в качестве сервера, а новая версия валилась в ошибки постоянно. Самое удивительное, что заметили это только через 3 дня, так как платформа 1С у клиентов автоматически использовала старую версию и никто не обратил на это внимание.
#1С# echo 'deb http://download.opensuse.org/repositories/server:/eGroupWare/Debian_11/ /' \
| tee /etc/apt/sources.list.d/server:eGroupWare.list
# wget -nv https://download.opensuse.org/repositories/server:eGroupWare/Debian_11/Release.key -O - \
| apt-key add - | tee /etc/apt/trusted.gpg.d/server:eGroupWare.asc
# apt update && apt install egroupware-docker
Разворачивается Nginx в качестве прокси на самом хосте. А всё остальное живёт в Docker. Все данные вынесены в volumes для удобного бэкапа. Учётку для подключения смотреть в файле /var/lib/egroupware/egroupware-docker-install.log.
В целом, по возможностям, всё выглядит функционально и удобно. Плюс-минус как у всех - почтовый клиент, календарь, адресная книга, документы, проекты, интеграции и т.д. По умолчанию предлагает редактор документов Collabora Online в облачном сервисе, что стоит денег. Наверное можно как-то с бесплатной Collabora скрестить, но я не разбирался.
В публичной демке можно посмотреть, как Collabora Online работает, загрузить туда свои файлы. Кстати, хорошая возможность потестировать этот продукт. Он сильно отличается от Onlyoffice Docs как внешним видом, так и архитектурой. Если у Onlyoffice обработка выполняет на клиенте, что нагружает его, но снимает нагрузку с сервера, то Collabora Online всё обрабатывает на сервере. Мне кажется, это скорее плохо, чем хорошо. Ресурсов сервера потребляет в разы больше, чем Onlyoffice.
Мне не понравился внешний вид EGroupware. По нему сразу видно, что продукт из глубокого прошло (написан, кстати, на php). Интерфейс хоть и пытались освежить, но выглядит, как по мне, всё равно старовато. Ну не хочется им пользоваться. Хотя по настройкам и возможностям там всё очень хорошо. Добротный перевод на русский. Не возникло желания поскорее переключиться на английский язык. Более того, в настройках можно добавить свой перевод любой фразы и тут же применить изменения. Я попробовал, очень удобно. Перевёл один из пунктов меню по своему.
Из приятных особенностей EGroupware отмечу интеграцию с Rocket.Chat. По описанию все выглядит круто, но подозреваю, что будет куча нюансов. Надо будет ещё и Jitsi разворачивать, чтобы были видеозвонки. Я на практике знаю, что вся эта связка не так уж просто настраивается и обслуживается, особенно если работает за NAT и нужен доступ из интернета. Тем не менее, функционально всё это выглядит неплохо.
Если подыскиваете себе бесплатный groupware, то посмотрите EGroupware. Внешний вид — субъективный фактор. Возможно вам он будет некритичен.
⇨ Сайт / Исходники
#groupware #docs