Очень простая и быстрая в настройке утилита для бэкапа GIT репозиториев. Можно использовать как для бэкапа куда-то локально или в S3, так и для копирования из одного репозитория в другой. Речь пойдёт про open source проект gickup.
Сразу покажу на примере, как я забэкапил к себе локально несколько своих закрытых репозиториев на публичном gitlab.
Создаю конфигурационный файл
Для получения token сходил в Preferences ⇨ Access tokens и создал personal access token с доступом только на чтение. В своём примере я забэкапил только 3 репозитория: gatus, scripts, configs. Если их не указать, забэкапит все.
Запускаю бэкап:
Вот и всё. Gickup поддерживает все популярные платформы для хостинга git, как публичные, так и приватные:
- Github
- Gitlab
- Gitea
- Gogs
- Bitbucket
- Onedev
- Sourcehut
В качестве источников для сохранения или копирования поддерживает их же, плюс:
- локальная директория
- S3 хранилище
Настройка источников и приёмников отражена в документации. Там всё кратко и по делу. Список параметров невелик. У меня сразу всё получилось.
Очень простой и быстрый способ копировать репозитории в одно или несколько мест одновременно. Дополнительно gickup умеет отправлять уведомления о своей работе в ntfy, gotify и apprise. Также может локально логи писать и отправлять метрики в Prometheus. Правда не очень понял какие. Не проверял это.
⇨ 🌐 Сайт / Исходники
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#git #backup #devops
Сразу покажу на примере, как я забэкапил к себе локально несколько своих закрытых репозиториев на публичном gitlab.
# wget https://github.com/cooperspencer/gickup/releases/download/v0.10.38/gickup_0.10.38_linux_amd64.tar.gz# tar xzvf gickup_0.10.38_linux_amd64.tar.gzСоздаю конфигурационный файл
conf.yml:source:
gitlab:
- token: glpat-GtPuYrBvnxxkTFsq-Y
url: https://gitlab.com/
user: zeroxzed
include:
- gatus
- scripts
- configs
wiki: true
issues: true
destination:
local:
- path: /home/zerox/backup-gitlab
structured: true
keep: 5
Для получения token сходил в Preferences ⇨ Access tokens и создал personal access token с доступом только на чтение. В своём примере я забэкапил только 3 репозитория: gatus, scripts, configs. Если их не указать, забэкапит все.
Запускаю бэкап:
# ./gickup conf.ymlВот и всё. Gickup поддерживает все популярные платформы для хостинга git, как публичные, так и приватные:
- Github
- Gitlab
- Gitea
- Gogs
- Bitbucket
- Onedev
- Sourcehut
В качестве источников для сохранения или копирования поддерживает их же, плюс:
- локальная директория
- S3 хранилище
Настройка источников и приёмников отражена в документации. Там всё кратко и по делу. Список параметров невелик. У меня сразу всё получилось.
Очень простой и быстрый способ копировать репозитории в одно или несколько мест одновременно. Дополнительно gickup умеет отправлять уведомления о своей работе в ntfy, gotify и apprise. Также может локально логи писать и отправлять метрики в Prometheus. Правда не очень понял какие. Не проверял это.
⇨ 🌐 Сайт / Исходники
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#git #backup #devops
2👍92👎3
Для тех, кто ещё не слышал или не знает, расскажу новости про ограничения на загрузку образов из Docker Hub. Вышла какая-то непонятная история, поэтому решил разобраться. Компания Docker анонсировала внедрение новых лимитов на загрузку образов из их хранилища, причём довольно суровых. Обещали только 10 загрузок в час для неаутентифицированных пользователей. То есть сделали в час 10
Ограничение довольно суровое даже для каких-то личных историй с тестами локально, не говоря уже об использовании в пайплайнах. Прогнал несколько отладочных тестов и всё. Для аутентифицированных пользователей, даже бесплатных, обещали 100 запросов в час, что в целом уже приемлемо и можно пользоваться, как прежде.
Я собрался рассказать, как по-быстрому настроить аутентификацию как локально, так и в том же Gitlab. Последние уже запланировали изменение в веб интерфейсе, чтобы можно было легко указать учётные данные для Docker. Также хотел упомянуть про локальные хранилища образов, которые можно развернуть у себя.
Зашёл на днях на страничку с лимитами и удивился, так как никаких новых лимитов там нет, можно не суетиться. Хотя я своими глазами видел, что они были, и даже отдельно была выделена новость, что с 1-го апреля они изменились. По факту сейчас всё так же, как и было: 100 запросов за 6 часов без аутентификации и 200 с ней. Протёр глаза и понял, что мне не мерещится. Реально изменений нет.
Сходу как-то даже новости на нашёл на эту тему. Практически молча всё откатили обратно, как было. Немного поискав, нашёл обновлённую старую новость от 21 февраля:
April 8, 2025: No changes to Docker Hub rate limits at this time
Не знаю, по какой причине, но они передумали вводить новые лимиты. И пообещали, что если опять надумают, то предупредят минимум за 6 месяцев.
Для того, чтобы не зависеть от каких-либо ограничений со стороны Docker Hub, можно использовать свои registry. Настроить их очень просто и быстро. Вообще никаких проблем:
▪️Nexus
▪️Harbor
▪️Gitlab Registry
▪️Docker Registry + UI
Для того, чтобы туда автоматом закидывать образы с Docker Hub, можно воспользоваться, к примеру, Sinker. Или чем-то ещё. Таких утилит много. Можно настроить обращения к Docker Hub так, чтобы не выходить за лимиты, и держать свой локальный registry с актуальными образами.
#docker #devops
docker pull и получили временный бан, пока лимит не сбросится. Ограничение довольно суровое даже для каких-то личных историй с тестами локально, не говоря уже об использовании в пайплайнах. Прогнал несколько отладочных тестов и всё. Для аутентифицированных пользователей, даже бесплатных, обещали 100 запросов в час, что в целом уже приемлемо и можно пользоваться, как прежде.
Я собрался рассказать, как по-быстрому настроить аутентификацию как локально, так и в том же Gitlab. Последние уже запланировали изменение в веб интерфейсе, чтобы можно было легко указать учётные данные для Docker. Также хотел упомянуть про локальные хранилища образов, которые можно развернуть у себя.
Зашёл на днях на страничку с лимитами и удивился, так как никаких новых лимитов там нет, можно не суетиться. Хотя я своими глазами видел, что они были, и даже отдельно была выделена новость, что с 1-го апреля они изменились. По факту сейчас всё так же, как и было: 100 запросов за 6 часов без аутентификации и 200 с ней. Протёр глаза и понял, что мне не мерещится. Реально изменений нет.
Сходу как-то даже новости на нашёл на эту тему. Практически молча всё откатили обратно, как было. Немного поискав, нашёл обновлённую старую новость от 21 февраля:
April 8, 2025: No changes to Docker Hub rate limits at this time
Не знаю, по какой причине, но они передумали вводить новые лимиты. И пообещали, что если опять надумают, то предупредят минимум за 6 месяцев.
Для того, чтобы не зависеть от каких-либо ограничений со стороны Docker Hub, можно использовать свои registry. Настроить их очень просто и быстро. Вообще никаких проблем:
▪️Nexus
▪️Harbor
▪️Gitlab Registry
▪️Docker Registry + UI
Для того, чтобы туда автоматом закидывать образы с Docker Hub, можно воспользоваться, к примеру, Sinker. Или чем-то ещё. Таких утилит много. Можно настроить обращения к Docker Hub так, чтобы не выходить за лимиты, и держать свой локальный registry с актуальными образами.
#docker #devops
👍80👎2
Пару лет назад у VictoriaMetrics вышел продукт, который является частью именного стека, – VictoriaLogs. Руки не доходили раньше на него посмотреть и вот дошли. Сразу скажу, что всё очень понравилось за простоту, функциональность и удобство. Покажу сразу с примерами.
Отдельно перечислю особенности VictoriaLogs:
▪️По своей сути это одиночный бинарник, который можно сконфигурировать ключами запуска, не нужен даже конфигурационный файл.
▪️В бинарнике есть всё, что надо для сбора и просмотра логов: веб интерфейс, метрики для мониторинга за системой, все типы приёмников логов.
▪️Для бэкапа достаточно скопировать директорию с данными, например, с помощью rsync. То есть вообще никаких проблем и заморочек с бэкапом.
▪️Есть плагин для datasource в Grafana, чтобы делать оттуда запросы к логам, а также готовый дашборд для визуализации метрик хранилища.
▪️Простая, короткая документация, где есть всё необходимое для запуска и настройки.
Покажу примеры сбора логов в VictoriaLogs от Journald, Syslog и Vector. Для этого подготовил небольшой
Запускаем проект, переходим на порт 9428, чтобы убедиться в том, что всё запустилось. По умолчанию открывается страница с некоторыми ссылками на Web UI, Метрики и ключи запуска.
Отправим в VictoriaLogs логи от systemd от любого сервера, локального или внешнего. Для этого понадобится служба systemd-journal-remote. Ставим её:
Редактируем конфиг
URL, соответственно, измените, если у вас сбор логов не с локального сервера, а удалённого. Запускаем службу и проверяем, что она успешно начала отправку логов:
Идём в веб интерфейс VictoriaLogs - http://212.193.59.87:9428/select/vmui и смотрим там логи.
Переходим к Syslog. Я уже добавил параметр
Если у вас этот порт уже занят syslog сервером, то измените порт для VictoriaLogs. В общем-то настраивать больше ничего не надо. Теперь в любом софте, который умеет отправлять данные в формате syslog, укажите в качестве сервера IP вашего VictoriaLogs. Например, в том же Микротике: System ⇨ Logging ⇨ Actions ⇨ Add Type Remote.
Для сбора логов от всех популярных агентов, типа Filebeat, Fluentd, Vector и т.д. тоже ничего специально настраивать не надо. Делаете всё точно так же, как для отправки логов в Elasticsearch, только в качестве endpoint указываете URL от вашего сервера VictoriaLogs. Вот пример для Vector:
Решение очень понравилось своей простотой, универсальностью и скоростью настройки. Буквально за час со всем разобрался и настроил. Никаких затруднений. Отдельно нужно решать вопрос доступа к приёмнику логов и веб интерфейсу. С уровня приложения никаких решений нет. Нужно либо firewall, либо proxy использовать.
Отдельно отмечу, что те же логи syslog и journald сразу парсятся по основным полям, типа hostname, time, cmdline и т.д. Ничего для этого настраивать не надо. Сразу в веб интерфейсе можно поиск и группировку по ним делать. Получается очень функциональное решение по простоте и скорости настройки на уровне обычного syslog сервера, но с гораздо большими возможностями.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#logs #devops
Отдельно перечислю особенности VictoriaLogs:
▪️По своей сути это одиночный бинарник, который можно сконфигурировать ключами запуска, не нужен даже конфигурационный файл.
▪️В бинарнике есть всё, что надо для сбора и просмотра логов: веб интерфейс, метрики для мониторинга за системой, все типы приёмников логов.
▪️Для бэкапа достаточно скопировать директорию с данными, например, с помощью rsync. То есть вообще никаких проблем и заморочек с бэкапом.
▪️Есть плагин для datasource в Grafana, чтобы делать оттуда запросы к логам, а также готовый дашборд для визуализации метрик хранилища.
▪️Простая, короткая документация, где есть всё необходимое для запуска и настройки.
Покажу примеры сбора логов в VictoriaLogs от Journald, Syslog и Vector. Для этого подготовил небольшой
docker-compose.yml с некоторыми параметрами:services:
victoria-logs:
image: victoriametrics/victoria-logs:latest
volumes:
- ./victoria-logs-data:/victoria-logs-data
command:
- --storageDataPath=/victoria-logs-data
- --retentionPeriod=90d
- --syslog.listenAddr.tcp=:514
ports:
- 9428:9428
- 514:514
restart: always
Запускаем проект, переходим на порт 9428, чтобы убедиться в том, что всё запустилось. По умолчанию открывается страница с некоторыми ссылками на Web UI, Метрики и ключи запуска.
Отправим в VictoriaLogs логи от systemd от любого сервера, локального или внешнего. Для этого понадобится служба systemd-journal-remote. Ставим её:
# apt install systemd-journal-remoteРедактируем конфиг
/etc/systemd/journal-upload.conf, добавляя один параметр:[Upload]URL=http://localhost:9428/insert/journaldURL, соответственно, измените, если у вас сбор логов не с локального сервера, а удалённого. Запускаем службу и проверяем, что она успешно начала отправку логов:
# systemctl start systemd-journal-upload# systemctl status systemd-journal-uploadИдём в веб интерфейс VictoriaLogs - http://212.193.59.87:9428/select/vmui и смотрим там логи.
Переходим к Syslog. Я уже добавил параметр
syslog.listenAddr.tcp=:514. Убедитесь, что указанный порт прослушивается:# ss -tulnp | grep 514Если у вас этот порт уже занят syslog сервером, то измените порт для VictoriaLogs. В общем-то настраивать больше ничего не надо. Теперь в любом софте, который умеет отправлять данные в формате syslog, укажите в качестве сервера IP вашего VictoriaLogs. Например, в том же Микротике: System ⇨ Logging ⇨ Actions ⇨ Add Type Remote.
Для сбора логов от всех популярных агентов, типа Filebeat, Fluentd, Vector и т.д. тоже ничего специально настраивать не надо. Делаете всё точно так же, как для отправки логов в Elasticsearch, только в качестве endpoint указываете URL от вашего сервера VictoriaLogs. Вот пример для Vector:
sinks:
vlogs:
inputs:
- nginx_access_logs
type: elasticsearch
endpoints:
- http://212.193.59.87:9428/insert/elasticsearch/
api_version: v8
compression: gzip
Решение очень понравилось своей простотой, универсальностью и скоростью настройки. Буквально за час со всем разобрался и настроил. Никаких затруднений. Отдельно нужно решать вопрос доступа к приёмнику логов и веб интерфейсу. С уровня приложения никаких решений нет. Нужно либо firewall, либо proxy использовать.
Отдельно отмечу, что те же логи syslog и journald сразу парсятся по основным полям, типа hostname, time, cmdline и т.д. Ничего для этого настраивать не надо. Сразу в веб интерфейсе можно поиск и группировку по ним делать. Получается очень функциональное решение по простоте и скорости настройки на уровне обычного syslog сервера, но с гораздо большими возможностями.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#logs #devops
2👍185👎6
Искал на днях материалы на тему Playwright. Это фреймворк для веб тестирования и автоматизации, более современный аналог Selenium. Последний я немного учил, но он довольно замороченный, с полтычка не освоишь. Playwright показался немного попроще в каких-то базовых вещах.
Рассказать сегодня хотел не об этом. Я попал на сайт к какому-то девопсу, где были материалы по Playwright. Я немного походил по нему и набрёл на раздел DevTools. Он там собрал то ли свои, то ли просто open source инструменты для решения простых прикладных задач. Вроде ничего особенного, но некоторые вещи я просто не знал, что вообще существуют. Всегда их делал вручную.
Покажу сразу на примерах, что мне показалось полезным:
- Docker Run to Docker Compose Converter
Отправляем в форму однострочник с
- Docker Compose to Docker Run Converter
И соответственно в обратную сторону преобразование из docker compose в однострочник для
- Bash Command Formatter
Эта штука тоже очень понравилась. Она длинный однострочник разбивает на строки с переходами через \ То есть вот такую колбасу:
Нарезает на кусочки:
Я тоже всегда это вручную делал, особенно для публикации сюда. Можно упростить себе задачу.
- URL Extractor
Просто кидаешь сюда любой текст, а на выходе получаешь набор ссылок, если они в нём присутствуют.
Там много всяких конвертеров и анализаторов синтаксиса для json, yaml, toml, csv. Не стал обращать на них внимание, так как их существует десятки. Обычно просто в гугле ищут что-то подобное, когда надо преобразовать. Посмотрите список, может вам что-то ещё приглянётся. Меня впечатлили только эти четыре штуки.
#devops #docker #bash
Рассказать сегодня хотел не об этом. Я попал на сайт к какому-то девопсу, где были материалы по Playwright. Я немного походил по нему и набрёл на раздел DevTools. Он там собрал то ли свои, то ли просто open source инструменты для решения простых прикладных задач. Вроде ничего особенного, но некоторые вещи я просто не знал, что вообще существуют. Всегда их делал вручную.
Покажу сразу на примерах, что мне показалось полезным:
- Docker Run to Docker Compose Converter
Отправляем в форму однострочник с
docker run и получаем файл для docker compose. Вроде мелочь, но я всегда это делал вручную. Не думал, что кому-то придёт в голову написать конвертер.- Docker Compose to Docker Run Converter
И соответственно в обратную сторону преобразование из docker compose в однострочник для
docker run. Не припоминаю, чтобы мне приходилось такие преобразования делать, но в тему к первому упоминаю.- Bash Command Formatter
Эта штука тоже очень понравилась. Она длинный однострочник разбивает на строки с переходами через \ То есть вот такую колбасу:
curl -v --url "smtp://mail.server.ru:25" --mail-from "root@server.ru" --mail-rcpt "user@gmail.com" --user 'root@server.ru:password123' --upload-file ~/mail.txtНарезает на кусочки:
curl -v \ --url "smtp://mail.server.ru:25" \ --mail-from "root@server.ru" \ --mail-rcpt "user@gmail.com" \ --user 'root@server.ru:password123' \ --upload-file ~/mail.txtЯ тоже всегда это вручную делал, особенно для публикации сюда. Можно упростить себе задачу.
- URL Extractor
Просто кидаешь сюда любой текст, а на выходе получаешь набор ссылок, если они в нём присутствуют.
Там много всяких конвертеров и анализаторов синтаксиса для json, yaml, toml, csv. Не стал обращать на них внимание, так как их существует десятки. Обычно просто в гугле ищут что-то подобное, когда надо преобразовать. Посмотрите список, может вам что-то ещё приглянётся. Меня впечатлили только эти четыре штуки.
#devops #docker #bash
👍111👎2
Современная веб разработка и частично эксплуатация плотно завязаны на Docker контейнеры. Они используются повсеместно. Недавние истории с временной блокировкой docker hub и внедрением новых лимитов одним днём усложнили жизнь тем, кто завязан на публичное хранилище образов в виде Docker Hub. При этом нет никаких проблем использовать своё Docker Registry, причём как для хранения своих образов, так и кэширования запросов с Docker Hub.
Использовать своё хранилище образов имеет смысл уже при наличии хотя бы пары разработчиков, которые с ними работают. Я уже кратенько упоминал, что существуют различные бесплатные self-hosted решения:
🔹Gitlab Registry или Gitea Registry. Их имеет смысл использовать, если у вас используется одноимённая инфраструктура для хранения кода. С Gitlab Registry проблем особых нет, кроме некоторых заморочек с проксированием, а у Gitea Registry после релиза были некоторые баги. Сейчас не знаю как, наверное уже поправили.
🔹Nexus - известное хранилище для репозиториев и Docker образов. Это комбайн, где можно хранить всё, что угодно: deb и rpm репы, репозиторий контейнеров, npm репозиторий, pypi и многие другие. Если у вас задача только для Docker, то наверное такой комбайн большого смысла использовать нет. Хотя каких-то особых проблем с установкой и настройкой не будет. Я не раз его настраивал. Установить и запустить в работу относительно просто. Всё управление через веб интерфейс.
🔹Docker Registry - продукт от самого Docker. Это был маленький легковесный проект без GUI. Сейчас глянул, а он уже deprecated, его кому-то отдали и переименовали в Distribution. Не знаю даже, что про него сказать. Описание куцее. Посмотрел документацию. На вид это продолжение того же небольшого проекта без GUI, что не очень удобно. Есть веб интерфейс от стороннего разработчика - docker-registry-ui.
🔹Harbor. На нём я хочу остановиться подробно. Это самостоятельное open source хранилище для образов Docker с встроенным веб интерфейсом и хорошим набором возможностей в open source версии. Вот основные:
◽️управление доступом на основе ролей (RBAC)
◽️поддержка LDAP для аутентификации
◽️автоматическая проверка образов с помощью Trivy
◽️режим работы как proxy/кэш-сервер для Docker Hub или других Registry
Имеем универсальное, бесплатное и функциональное решение для собственного хранилища образов. Для небольшой установки подойдёт обычная VPS с 2CPU и 4GB оперативной памяти. Показываю пошаговую установку:
В конфигурации надо указать:
Для использования HTTPS надо предварительно получить сертификаты и указать их:
Можно получить как бесплатные от Let's Encrypt, так и использовать самоподписанные. Я получил бесплатные так:
Укажите пароль для admin и место для хранилища образов. Остальные настройки можно не трогать.
Устанавливаем Harbor:
Дожидаемся загрузки и запуска всех контейнеров. После этого идём в веб интерфейс по настроенному ранее домену. Логинимся под учётной записью admin и паролем из конфигурации.
В разделе Registries добавляем Endpoint и указываем Provider - Docker Hub. Cоздаём новый проект, ставим галочку Proxy Cache, указываем созданный Endpoint.
На рабочей машине логинимся:
Сache - имя созданного проекта. Образ nginx будет скачан через Harbor и останется там в кэше.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#devops #docker
Использовать своё хранилище образов имеет смысл уже при наличии хотя бы пары разработчиков, которые с ними работают. Я уже кратенько упоминал, что существуют различные бесплатные self-hosted решения:
🔹Gitlab Registry или Gitea Registry. Их имеет смысл использовать, если у вас используется одноимённая инфраструктура для хранения кода. С Gitlab Registry проблем особых нет, кроме некоторых заморочек с проксированием, а у Gitea Registry после релиза были некоторые баги. Сейчас не знаю как, наверное уже поправили.
🔹Nexus - известное хранилище для репозиториев и Docker образов. Это комбайн, где можно хранить всё, что угодно: deb и rpm репы, репозиторий контейнеров, npm репозиторий, pypi и многие другие. Если у вас задача только для Docker, то наверное такой комбайн большого смысла использовать нет. Хотя каких-то особых проблем с установкой и настройкой не будет. Я не раз его настраивал. Установить и запустить в работу относительно просто. Всё управление через веб интерфейс.
🔹Docker Registry - продукт от самого Docker. Это был маленький легковесный проект без GUI. Сейчас глянул, а он уже deprecated, его кому-то отдали и переименовали в Distribution. Не знаю даже, что про него сказать. Описание куцее. Посмотрел документацию. На вид это продолжение того же небольшого проекта без GUI, что не очень удобно. Есть веб интерфейс от стороннего разработчика - docker-registry-ui.
🔹Harbor. На нём я хочу остановиться подробно. Это самостоятельное open source хранилище для образов Docker с встроенным веб интерфейсом и хорошим набором возможностей в open source версии. Вот основные:
◽️управление доступом на основе ролей (RBAC)
◽️поддержка LDAP для аутентификации
◽️автоматическая проверка образов с помощью Trivy
◽️режим работы как proxy/кэш-сервер для Docker Hub или других Registry
Имеем универсальное, бесплатное и функциональное решение для собственного хранилища образов. Для небольшой установки подойдёт обычная VPS с 2CPU и 4GB оперативной памяти. Показываю пошаговую установку:
# curl https://get.docker.com | bash -# wget https://github.com/goharbor/harbor/releases/download/v2.12.3/harbor-online-installer-v2.12.3.tgz# tar xzvf harbor-online-installer-v2.12.3.tgz# cd harbor/# cp harbor.yml.tmpl harbor.ymlВ конфигурации надо указать:
hostname: domain.example.com # или IP-адресДля использования HTTPS надо предварительно получить сертификаты и указать их:
https: port: 443 certificate: /etc/letsencrypt/live/338365.simplecloud.ru/fullchain.pem private_key: /etc/letsencrypt/live/338365.simplecloud.ru/privkey.pemМожно получить как бесплатные от Let's Encrypt, так и использовать самоподписанные. Я получил бесплатные так:
# apt install certbot# certbot certonly -d 338365.simplecloud.ruУкажите пароль для admin и место для хранилища образов. Остальные настройки можно не трогать.
harbor_admin_password: Harbor12345data_volume: /dataУстанавливаем Harbor:
# ./prepare# ./install.sh --with-trivyДожидаемся загрузки и запуска всех контейнеров. После этого идём в веб интерфейс по настроенному ранее домену. Логинимся под учётной записью admin и паролем из конфигурации.
В разделе Registries добавляем Endpoint и указываем Provider - Docker Hub. Cоздаём новый проект, ставим галочку Proxy Cache, указываем созданный Endpoint.
На рабочей машине логинимся:
# docker login <harbor-host># docker pull <harbor-host>/cache/nginxСache - имя созданного проекта. Образ nginx будет скачан через Harbor и останется там в кэше.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#devops #docker
👍103👎2
У меня в прошлом была серия заметок про проверку Docker образов на уязвимости с помощью Trivy и их исправление с помощью Copacetic. Я всё это оформил в статью на сайте:
⇨ Проверка безопасности Docker образов с помощью Trivy
Данную связку хорошо дополняет Dockle. Предлагаю к ним компанию добавить ещё один популярный, удобный и бесплатный инструмент – TruffleHog. С его помощью можно проверять код, логи и конфигурации на наличие в них забытых секретов в виде паролей, токенов и приватных ключей. Причём TruffleHog может как найти секреты, так и проверить их. Для каждого сервиса написаны детекторы. Полный их список можно посмотреть в репозитории.
TruffleHog поддерживает следующие источники информации:
◽️Git репозитории, в том числе с отдельной интеграцией с github и gitlab
◽️Обычная файловая система
◽️Elasticsearch
◽️Логи в формате Syslog
◽️Docker образы и контейнеры
И некоторые другие источники. Не стал их все перечислять.
Программа представляет из себя одиночный бинарник, написанный на Go. Имеет как интерактивный режим работы для ручной проверки, так и передачу параметров через ключи. Соответственно, всё это легко интегрируется в ваши пайплайны для проверки кода и образов. Результаты работы можно получить сразу в формате json для последующего анализа.
Работает примерно так:
Это пример проверки тестового репозитория самих разработчиков. Установить trufflehog можно любым удобным способом. Самому скачать бинарник, либо использовать скрипт, который скачает сам нужную версию из репозитория:
Можно просто в Docker запустить:
Если запустить trufflehog без параметров, то откроется интерактивный режим настроек, где можно по шагам задать параметры проверки.
Программа универсальная и поддерживает свои проверки. Вот пример конфигурации, где заданы некоторые из них. Проверил, добавив в один из логов попадающую под шаблон из примера строку:
Trufflehog успешно её обнаружил. В данный момент разрабатывается в том числе и универсальный механизм проверок для своих внутренних сервисов, а не только публичных, которые уже реализованы в самой программе. Данная функциональность пока в режиме альфа. Посмотреть, как будет работать, можно на примерах. Там вариант конфигурации с так называемым Custom Detector.
Описанный софт, в том числе то, что я перечислил в начале заметки, обычно присутствует в списке продуктов, которые рекомендуют к изучению и использованию, если вы хотите работать в качестве DevOps инженера. Так что если двигаетесь в этом направлении, изучайте его. TruffleHog одно из самых популярных решений в области проверки секретов.
⇨ 🌐 Сайт / Исходники
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#docker #devops #cicd #security
⇨ Проверка безопасности Docker образов с помощью Trivy
Данную связку хорошо дополняет Dockle. Предлагаю к ним компанию добавить ещё один популярный, удобный и бесплатный инструмент – TruffleHog. С его помощью можно проверять код, логи и конфигурации на наличие в них забытых секретов в виде паролей, токенов и приватных ключей. Причём TruffleHog может как найти секреты, так и проверить их. Для каждого сервиса написаны детекторы. Полный их список можно посмотреть в репозитории.
TruffleHog поддерживает следующие источники информации:
◽️Git репозитории, в том числе с отдельной интеграцией с github и gitlab
◽️Обычная файловая система
◽️Elasticsearch
◽️Логи в формате Syslog
◽️Docker образы и контейнеры
И некоторые другие источники. Не стал их все перечислять.
Программа представляет из себя одиночный бинарник, написанный на Go. Имеет как интерактивный режим работы для ручной проверки, так и передачу параметров через ключи. Соответственно, всё это легко интегрируется в ваши пайплайны для проверки кода и образов. Результаты работы можно получить сразу в формате json для последующего анализа.
Работает примерно так:
# trufflehog git https://github.com/trufflesecurity/test_keysЭто пример проверки тестового репозитория самих разработчиков. Установить trufflehog можно любым удобным способом. Самому скачать бинарник, либо использовать скрипт, который скачает сам нужную версию из репозитория:
# curl -sSfL https://raw.githubusercontent.com/trufflesecurity/trufflehog/main/scripts/install.sh | sh -s -- -b /usr/local/binМожно просто в Docker запустить:
# docker run --rm -it -v "$PWD:/pwd" trufflesecurity/trufflehog:latest github --repo https://github.com/trufflesecurity/test_keysЕсли запустить trufflehog без параметров, то откроется интерактивный режим настроек, где можно по шагам задать параметры проверки.
Программа универсальная и поддерживает свои проверки. Вот пример конфигурации, где заданы некоторые из них. Проверил, добавив в один из логов попадающую под шаблон из примера строку:
# trufflehog filesystem --config=$PWD/generic.yml /var/logTrufflehog успешно её обнаружил. В данный момент разрабатывается в том числе и универсальный механизм проверок для своих внутренних сервисов, а не только публичных, которые уже реализованы в самой программе. Данная функциональность пока в режиме альфа. Посмотреть, как будет работать, можно на примерах. Там вариант конфигурации с так называемым Custom Detector.
Описанный софт, в том числе то, что я перечислил в начале заметки, обычно присутствует в списке продуктов, которые рекомендуют к изучению и использованию, если вы хотите работать в качестве DevOps инженера. Так что если двигаетесь в этом направлении, изучайте его. TruffleHog одно из самых популярных решений в области проверки секретов.
⇨ 🌐 Сайт / Исходники
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#docker #devops #cicd #security
1👍80👎3
Расскажу про одну интересную утилиту, которая поможет в строительстве своих велосипедов и костылей как на одиночных серверах, так и в пайплайнах. Речь пойдёт про сервер для вебхуков, который так и называется - webhook. С его помощью можно инициировать запуск локальных команд или скриптов через HTTP запросы.
Рассказываю, как это работает. Пишите какой-нибудь скрипт. Запускаете вебхук сервер, который слушает определённый TCP порт на сервере. При обращении к настроенному урлу на этом веб сервере, выполняется заданный скрипт. Покажу сразу на конкретном примере, чтобы было понятно.
Сервер живёт в базовом репозитории, поэтому просто ставим:
Пишем простенький скрипт
Пишем конфиг в формате yaml для webhook в файл
Запускаем сервер с этим вебхуком:
По умолчанию сервер запускается на порту 9000. Его можно переопределить в конфигурации. Теперь при переходе на урл http://192.168.137.42:9000/hooks/proclog-webhook будет выполняться с крипт
Подобный вебхук можно использовать в какой-то системе мониторинга на триггер по нагрузке на CPU. Это максимально простой способ получить аналитику по процессам, которые выполнялись в момент срабатывания триггеров. Я нечто подобное реализовывал полностью в Zabbix. Для него такие костыли не нужны, потому что у него есть свой агент для выполнения скриптов на хосте. Но с webhook настройка намного проще.
На базе этого сервера удобно настроить выполнение каких-то команд после коммита в репозитории или сообщений в мессенджерах. Можно исходники обновлять и контейнеры перезапускать. У автора есть примеры настроек для популярных сервисов.
У хуков есть множество настроек и ограничивающих правил. Например, можно разрешить только один тип запросов - GET или POST. Можно настроить возвращаемый ответ, добавить в него заголовки, ограничить список запросов только с конкретных IP. Всё это описано отдельным списком. Отдельно есть список правил, с помощью которых можно ограничить доступ к хукам. Как я уже сказал, это можно сделать с помощью списков IP или секретов в заголовках.
Подобного рода программ существует немало. Из тех, что обозревал я это:
▪️Updater
▪️Labean
Последний изначально был придуман, чтобы добавлять разрешающие правила на файрволе при посещении определённых урлов. Но в целом принцип работы тот же. Можно выполнять любые хуки по такому же принципу.
Из всех подобных программ webhook наиболее целостная и функциональная. Много настроек, возможностей, готовых примеров. В репозитории в самом конце есть список статей от пользователей, которые использовали этот сервер. Я свой тестовый хук настроил буквально за 15 минут. Всё очень просто и интуитивно понятно.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:📱 Telegram | 🌐 Сайт | 📲 MAX
#cicd #devops
Рассказываю, как это работает. Пишите какой-нибудь скрипт. Запускаете вебхук сервер, который слушает определённый TCP порт на сервере. При обращении к настроенному урлу на этом веб сервере, выполняется заданный скрипт. Покажу сразу на конкретном примере, чтобы было понятно.
Сервер живёт в базовом репозитории, поэтому просто ставим:
# apt install webhookПишем простенький скрипт
top-proc.sh, который будет записывать в текстовый файл отсортированный по нагрузке список процессов в системе:#!/usr/bin/env bash/usr/bin/mkdir -p /var/log/proclog/usr/bin/ps aux --sort=-pcpu,+pmem > /var/log/proclog/ps-$(date +%F_%H%M%S)Пишем конфиг в формате yaml для webhook в файл
hooks.json:- id: proclog-webhook execute-command: "/var/webhooks/top-proc.sh" command-working-directory: "/var/webhooks/"Запускаем сервер с этим вебхуком:
# /usr/bin/webhook -hooks /var/webhooks/hooks.json -verboseПо умолчанию сервер запускается на порту 9000. Его можно переопределить в конфигурации. Теперь при переходе на урл http://192.168.137.42:9000/hooks/proclog-webhook будет выполняться с крипт
/var/webhooks/top-proc.sh, который создаёт логи в директории /var/log/proclog. Подобный вебхук можно использовать в какой-то системе мониторинга на триггер по нагрузке на CPU. Это максимально простой способ получить аналитику по процессам, которые выполнялись в момент срабатывания триггеров. Я нечто подобное реализовывал полностью в Zabbix. Для него такие костыли не нужны, потому что у него есть свой агент для выполнения скриптов на хосте. Но с webhook настройка намного проще.
На базе этого сервера удобно настроить выполнение каких-то команд после коммита в репозитории или сообщений в мессенджерах. Можно исходники обновлять и контейнеры перезапускать. У автора есть примеры настроек для популярных сервисов.
У хуков есть множество настроек и ограничивающих правил. Например, можно разрешить только один тип запросов - GET или POST. Можно настроить возвращаемый ответ, добавить в него заголовки, ограничить список запросов только с конкретных IP. Всё это описано отдельным списком. Отдельно есть список правил, с помощью которых можно ограничить доступ к хукам. Как я уже сказал, это можно сделать с помощью списков IP или секретов в заголовках.
Подобного рода программ существует немало. Из тех, что обозревал я это:
▪️Updater
▪️Labean
Последний изначально был придуман, чтобы добавлять разрешающие правила на файрволе при посещении определённых урлов. Но в целом принцип работы тот же. Можно выполнять любые хуки по такому же принципу.
Из всех подобных программ webhook наиболее целостная и функциональная. Много настроек, возможностей, готовых примеров. В репозитории в самом конце есть список статей от пользователей, которые использовали этот сервер. Я свой тестовый хук настроил буквально за 15 минут. Всё очень просто и интуитивно понятно.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:
#cicd #devops
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍126👎3
Для тех, кто работает с Docker контейнерами, рассказываю про современный, удобный и простой инструмент, который позволяет выполнять некоторые операции с контейнерами и репозиториями вообще без установки Docker на хост. Плюс, он есть в стандартных репозиториях популярных систем, что упрощает установку и использование в целом.
Речь пойдёт про skopeo. Ставится так:
Для установки работы не нужен root, как и не нужна установка службы самого Docker. То есть это облегчённый консольный клиент для работы с контейнерами и репозиториями.
Смотрим информацию о контейнере и о конфигурации, по аналогии с докеровской командой inspect. Сам образ при этом не скачивается:
Увидели всю основную информацию о контейнере: версии, когда последний релиз был, слои, порты, Entrypoint и т.д. На самом деле удобно даже для нечастой работы с контейнерами. Я обычно в hub иду руками смотреть последний релиз, если надо уточнить для какого-то нового контейнера. Можно skopeo себе на рабочую машину поставить и пользоваться. Правда если контейнер с большой историей, там огромная портянка тэгов тянется.
Можно образ к себе скачать в виде архива:
Из архива можно забрать какие-то файлы образа, если они нужны, что-то изменить. Не требуется запуск контейнера. Можно образ залить обратно в свой локальный репозиторий.
🛡 Подобный трюк с выгрузкой в директорию можно использовать для передачи образов в какой-то закрытый контур без доступа к интернету, да и вообще без лишнего доступа откуда бы то ни было. Можно использовать какую-то сетевую директорию как обменник для образов между внешней средой и закрытой.
Skopeo удобно использовать в CI/CD для некоторых задач. Можно скопировать образ из одного репозитория в другой, например, с публичного в локальный перед запуском других задач:
Можно проверить наличие какой-то тэга перед дальнейшими задачами:
Так же можно подписать образ, выполнить синхронизацию двух репозиториев с набором различных версий контейнеров, пометить образы в репозитории на удаление. Skopeo поддерживает аутентификацию в registry.
Все доступные команды описаны в man:
◽️inspect, list-tags
◽️copy, delete, sync
◽️login, logout
◽️standalone-sign, standalone-verify
◽️generate-sigstore-key, manifest-digest
Там же и некоторые пояснения к формату команд. Этого будет достаточно, чтобы начать пользоваться.
Некоторые полезные ссылки по теме на другие инструменты для Docker:
▪️Sinker для синхронизации образов
▪️Nexus - локальный репозиторий docker образов
▪️Harbor - ещё один локальный registry только для образов
▪️Диагностика работы контейнеров с помощью cdebug
▪️Линтер для Dockerfile - Hadolint
📊Сtop - top для контейнеров
🛡 Проверка образов на уязвимости с помощью Trivy
🛡 Автоматическое закрытие уязвимостей с помощью Copacetic
🛡 Проверка образов с помощью Dockle
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:📱 Telegram | 🌐 Сайт | 📲 MAX
#docker #devops
Речь пойдёт про skopeo. Ставится так:
# apt install skopeo# dnf install skopeo# brew install skopeoДля установки работы не нужен root, как и не нужна установка службы самого Docker. То есть это облегчённый консольный клиент для работы с контейнерами и репозиториями.
Смотрим информацию о контейнере и о конфигурации, по аналогии с докеровской командой inspect. Сам образ при этом не скачивается:
# skopeo inspect docker://docker.io/twinproduction/gatus# skopeo inspect --config docker://docker.io/twinproduction/gatus# skopeo inspect docker://registry.rocket.chat/rocketchat/rocket.chat# skopeo inspect --config docker://registry.rocket.chat/rocketchat/rocket.chatУвидели всю основную информацию о контейнере: версии, когда последний релиз был, слои, порты, Entrypoint и т.д. На самом деле удобно даже для нечастой работы с контейнерами. Я обычно в hub иду руками смотреть последний релиз, если надо уточнить для какого-то нового контейнера. Можно skopeo себе на рабочую машину поставить и пользоваться. Правда если контейнер с большой историей, там огромная портянка тэгов тянется.
Можно образ к себе скачать в виде архива:
# skopeo copy docker://docker.io/nginx:latest --override-os linux docker-archive:/tmp/nginx/nginx-latest.tarИз архива можно забрать какие-то файлы образа, если они нужны, что-то изменить. Не требуется запуск контейнера. Можно образ залить обратно в свой локальный репозиторий.
# skopeo copy docker-archive:/tmp/nginx/nginx-latest.tar docker://registry.local/nginx:latest🛡 Подобный трюк с выгрузкой в директорию можно использовать для передачи образов в какой-то закрытый контур без доступа к интернету, да и вообще без лишнего доступа откуда бы то ни было. Можно использовать какую-то сетевую директорию как обменник для образов между внешней средой и закрытой.
Skopeo удобно использовать в CI/CD для некоторых задач. Можно скопировать образ из одного репозитория в другой, например, с публичного в локальный перед запуском других задач:
# skopeo copy docker://docker.io/nginx:latest docker://registry.local/nginx:latestМожно проверить наличие какой-то тэга перед дальнейшими задачами:
# skopeo list-tags docker://docker.io/twinproduction/gatusТак же можно подписать образ, выполнить синхронизацию двух репозиториев с набором различных версий контейнеров, пометить образы в репозитории на удаление. Skopeo поддерживает аутентификацию в registry.
Все доступные команды описаны в man:
◽️inspect, list-tags
◽️copy, delete, sync
◽️login, logout
◽️standalone-sign, standalone-verify
◽️generate-sigstore-key, manifest-digest
Там же и некоторые пояснения к формату команд. Этого будет достаточно, чтобы начать пользоваться.
Некоторые полезные ссылки по теме на другие инструменты для Docker:
▪️Sinker для синхронизации образов
▪️Nexus - локальный репозиторий docker образов
▪️Harbor - ещё один локальный registry только для образов
▪️Диагностика работы контейнеров с помощью cdebug
▪️Линтер для Dockerfile - Hadolint
📊Сtop - top для контейнеров
🛡 Проверка образов на уязвимости с помощью Trivy
🛡 Автоматическое закрытие уязвимостей с помощью Copacetic
🛡 Проверка образов с помощью Dockle
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:
#docker #devops
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍92
Я часто упоминал в различных заметках систему по сбору логов Loki. Например, вот в этой подборке подобных систем (там сразу можете посмотреть аналоги). При этом у меня нет ни одной заметки на тему того, как её быстро развернуть. Решил написать краткое руководство по этой теме.
Проект относительно новый, стартовал в 2018 году в противовес стеку ELK. Grafana решила сделать более простой и легковесный вариант хранения логов немного с другой моделью анализа, без полной индексации текстов логов, используя вместо этого метки для потоков. На деле получился хороший продукт, интегрированный в стек Grafana + Prometheus с похожей идеологией хранения и поиска (язык запросов LogQL по аналогии с PromQL).
Для начала выполню базовые действия для запуска Loki и Grafana и настрою отправку логов в Loki от различных Docker контейнеров. Большее в одну заметку не уместить. Думаю, что далее я эту тему разовью.
Я не буду запускать Loki и Grafana в одном Docker Compose файле, так как им не обязательно быть установленными вместе. Grafana поддерживает весь стек своих продуктов, так что нет особого смысла поднимать её рядом со сборщиком логов.
Сначала запустим Loki. Готовим для него
В файле
Проверим, что сервис стартовал:
Это нормальный ответ. 404 нам ответил Loki. Запустим теперь Grafana:
Указываем нужную версию в compose.yaml и запускаем:
Идём браузером по IP сервера, где запущена Grafana на порт 3000. Учётка по умолчанию - admin / admin. Заходим в Grafana, идём в раздел Connections ⇨ Data sources ⇨ Add data source. Выбираем Loki. В качестве настроек достаточно указать только url. В моём случае это http://192.168.137.30:3100/. Мотаем страничку в самый низ и нажимаем Save & Test. Ошибок быть не должно.
Стек поднят и готов к приёму логов. Отправим туда логи контейнеров Docker. Для этого у Docker существует драйвер. Его необходимо установить на хосте:
Проверяем, что он установился:
Всё в порядке. Теперь мы можем в самом демоне Docker настроить отправку всех логов в Loki через правку его конфигурации в
Это не очень удобно, если у нас нет желания собирать логи абсолютно всех контейнеров. Удобнее управлять этим для каждого контейнера отдельно. Для этого в compose файл достаточно добавить ещё одну секцию logging. Покажу сразу итоговый пример для запуска Grafana из этой публикации:
Перезапускаем проект:
Идём в Grafana, раздел Drilldown ⇨ Logs. Выбираем в выпадающем списке service имя контейнера и смотрим его логи.
Настройка простая и быстрая, легко автоматизируется. Далее я разовью эту тему и добавлю логи из других систем.
———
ServerAdmin:📱 Telegram | 🌐 Сайт | 📲 MAX
#loki #logs #devops
Проект относительно новый, стартовал в 2018 году в противовес стеку ELK. Grafana решила сделать более простой и легковесный вариант хранения логов немного с другой моделью анализа, без полной индексации текстов логов, используя вместо этого метки для потоков. На деле получился хороший продукт, интегрированный в стек Grafana + Prometheus с похожей идеологией хранения и поиска (язык запросов LogQL по аналогии с PromQL).
Для начала выполню базовые действия для запуска Loki и Grafana и настрою отправку логов в Loki от различных Docker контейнеров. Большее в одну заметку не уместить. Думаю, что далее я эту тему разовью.
Я не буду запускать Loki и Grafana в одном Docker Compose файле, так как им не обязательно быть установленными вместе. Grafana поддерживает весь стек своих продуктов, так что нет особого смысла поднимать её рядом со сборщиком логов.
Сначала запустим Loki. Готовим для него
compose.yaml и конфигурацию в config.yaml. Не буду приводить здесь содержимое. Оно будет отправлено следующим сообщением в архиве со всеми остальными конфигурациями. Для удобства скопировал её же в gitflic.# curl https://get.docker.com | bash -# git clone https://gitflic.ru/project/serveradmin/grafana-loki.git# cd grafana-loki/loki/В файле
compose.yaml укажите актуальную версию image на момент установки. Запускаем проект:# docker compose up -dПроверим, что сервис стартовал:
# curl http://192.168.137.29:3100404 page not foundЭто нормальный ответ. 404 нам ответил Loki. Запустим теперь Grafana:
# cd ../grafanaУказываем нужную версию в compose.yaml и запускаем:
# docker compose up -dИдём браузером по IP сервера, где запущена Grafana на порт 3000. Учётка по умолчанию - admin / admin. Заходим в Grafana, идём в раздел Connections ⇨ Data sources ⇨ Add data source. Выбираем Loki. В качестве настроек достаточно указать только url. В моём случае это http://192.168.137.30:3100/. Мотаем страничку в самый низ и нажимаем Save & Test. Ошибок быть не должно.
Стек поднят и готов к приёму логов. Отправим туда логи контейнеров Docker. Для этого у Docker существует драйвер. Его необходимо установить на хосте:
# docker plugin install grafana/loki-docker-driver:3.6.0-amd64 --alias loki --grant-all-permissionsПроверяем, что он установился:
# docker plugin ls018395707e37 loki:latest Loki Logging Driver trueВсё в порядке. Теперь мы можем в самом демоне Docker настроить отправку всех логов в Loki через правку его конфигурации в
/etc/docker/daemon.json. Для этого туда надо добавить:{
"debug": true,
"log-driver": "loki",
"log-opts": {
"loki-url": "http://192.168.137.30:3100//loki/api/v1/push",
"loki-batch-size": "400"
}
}Это не очень удобно, если у нас нет желания собирать логи абсолютно всех контейнеров. Удобнее управлять этим для каждого контейнера отдельно. Для этого в compose файл достаточно добавить ещё одну секцию logging. Покажу сразу итоговый пример для запуска Grafana из этой публикации:
services:
grafana:
image: docker.io/grafana/grafana-oss:12.3.1
container_name: grafana
logging:
driver: loki
options:
loki-url: "http://192.168.137.30:3100/loki/api/v1/push"
loki-retries: 2
loki-max-backoff: 800ms
loki-timeout: 1s
keep-file: "true"
mode: "non-blocking"
ports:
- "3000:3000"
volumes:
- grafana-data:/var/lib/grafana
restart: unless-stopped
volumes:
grafana-data:
driver: local
Перезапускаем проект:
# docker compose stop# docker compose up -dИдём в Grafana, раздел Drilldown ⇨ Logs. Выбираем в выпадающем списке service имя контейнера и смотрим его логи.
Настройка простая и быстрая, легко автоматизируется. Далее я разовью эту тему и добавлю логи из других систем.
———
ServerAdmin:
#loki #logs #devops
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍95👎5
Продолжу тему со сбором логов в Loki. Хочу написать законченный цикл заметок, в которых будет показан сбор логов популярных сервисов. В прошлой заметке я установил Loki + Grafana и отправил в Loki логи контейнеров Docker. Сегодня передам туда системные логи формата journald или текстовых файлов от syslog. Я покажу пример с обоими типами логов, а вы уже по месту сможете выбрать, какие использовать.
Изначально у Grafana для сбора логов с хостов была небольшая программа Promtail. Её и сейчас можно использовать, но больше её не развивают и не обновляют. На замену предложен Alloy - огромный комбайн, который включает в себя и сбор логов, их обработку и насыщение дополнительными данными, и преобразование, сбор трейсов, а также отправку системных метрик в Prometheus вместо Node Exporter. То есть Alloy объединяет логи и метрики.
В итоге вместо легковесного и простого в настройке продукта мы получаем комбайн всё в одном. Если используется полный стек Grafana в виде мониторинга, логов и трассировки, то наверное это удобно. Если собираются только логи, то не очень. Вместо Alloy можно взять Fluent Bit, Fluentd или Vector. Последние два легковесны, популярны, с простой настройкой. Можно взять и их. Но я в своём примере ограничусь стеком Grafana и буду использовать Alloy.
Репозиторий Grafana для IP адресов из России заблокирован. В общем случае он добавляется вот так:
Мы же подключим копию репозитория из зеркала Яндекса. Для краткости я подключу его без ключа. Если вам это не подходит, то скачайте ключ и как-то передайте его на целевые машины:
Как я уже упомянул, конфигурация Alloy немного замороченная. Не сказать, что прям сильно сложная, но лично мной воспринимается тяжело. Нужно вникать, когда читаешь и постоянно мотать туда-сюда конфиг, чтобы удостовериться в том, что не запутался в сущностях и названиях.
Я уже подготовил простой конфиг для логов, так что достаточно будет просто скачать и применить у себя. В базовом сценарии каких-то особых сложностей нет. Они начнутся, когда будете разбираться с различными метками, автоназначением и т.д.
Забирайте config.alloy из моего репозитория, копируйте в
Больше ничего делать не надо. На все хосты Alloy устанавливается и настраивается аналогично. В Loki логи будут прилетать с метками в виде %hostname%-logs и %hostname%-journal. Соответственно, по именам серверов вы и сможете их там выбирать. Метки, если что, можно изменить. Они настраиваются в параметрах labels и job соответственно. В конфигурации это всё наглядно видно.
По аналогии можно добавить любые текстовые логи. Тут никакой привязки к syslog нет. Просто забираем текстовые логи, определённые параметром:
Теперь можно идти в Grafana, раздел Drilldown ⇨ Logs. Выбираем в выпадающем списке service с нужным именем и типом логов и смотрим.
Единственное, что мне не нравится тут, так это то, что в тексте лога есть метки времени, и в самом хранилище есть метки времени, когда запись была добавлена. Иногда они не совпадают и это неудобно. В Logstash есть модуль date для того, чтобы выделять дату из текста поступающих логов и использовать ее в качестве даты документа в Elasticsearch.
❓Кто-нибудь настраивал подобное в Loki, чтобы время документа совпадало со временем в логе?
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:📱 Telegram | 🌐 Сайт | 📲 MAX
#loki #logs #devops
Изначально у Grafana для сбора логов с хостов была небольшая программа Promtail. Её и сейчас можно использовать, но больше её не развивают и не обновляют. На замену предложен Alloy - огромный комбайн, который включает в себя и сбор логов, их обработку и насыщение дополнительными данными, и преобразование, сбор трейсов, а также отправку системных метрик в Prometheus вместо Node Exporter. То есть Alloy объединяет логи и метрики.
В итоге вместо легковесного и простого в настройке продукта мы получаем комбайн всё в одном. Если используется полный стек Grafana в виде мониторинга, логов и трассировки, то наверное это удобно. Если собираются только логи, то не очень. Вместо Alloy можно взять Fluent Bit, Fluentd или Vector. Последние два легковесны, популярны, с простой настройкой. Можно взять и их. Но я в своём примере ограничусь стеком Grafana и буду использовать Alloy.
Репозиторий Grafana для IP адресов из России заблокирован. В общем случае он добавляется вот так:
# mkdir -p /etc/apt/keyrings# wget -O /etc/apt/keyrings/grafana.asc https://apt.grafana.com/gpg-full.key# chmod 644 /etc/apt/keyrings/grafana.asc# echo "deb [signed-by=/etc/apt/keyrings/grafana.asc] https://apt.grafana.com stable main" > /etc/apt/sources.list.d/grafana.listМы же подключим копию репозитория из зеркала Яндекса. Для краткости я подключу его без ключа. Если вам это не подходит, то скачайте ключ и как-то передайте его на целевые машины:
# echo "deb [trusted=yes] https://mirror.yandex.ru/mirrors/packages.grafana.com/oss/deb/ stable main" > /etc/apt/sources.list.d/grafana.list# apt update# apt install alloyКак я уже упомянул, конфигурация Alloy немного замороченная. Не сказать, что прям сильно сложная, но лично мной воспринимается тяжело. Нужно вникать, когда читаешь и постоянно мотать туда-сюда конфиг, чтобы удостовериться в том, что не запутался в сущностях и названиях.
Я уже подготовил простой конфиг для логов, так что достаточно будет просто скачать и применить у себя. В базовом сценарии каких-то особых сложностей нет. Они начнутся, когда будете разбираться с различными метками, автоназначением и т.д.
Забирайте config.alloy из моего репозитория, копируйте в
/etc/alloy и перезапускайте службу. Заодно добавьте в автозагрузку. По умолчанию она вроде не делает этого:# systemctl restart alloy# systemctl enable alloyБольше ничего делать не надо. На все хосты Alloy устанавливается и настраивается аналогично. В Loki логи будут прилетать с метками в виде %hostname%-logs и %hostname%-journal. Соответственно, по именам серверов вы и сможете их там выбирать. Метки, если что, можно изменить. Они настраиваются в параметрах labels и job соответственно. В конфигурации это всё наглядно видно.
По аналогии можно добавить любые текстовые логи. Тут никакой привязки к syslog нет. Просто забираем текстовые логи, определённые параметром:
__path__ = "/var/log/{syslog,messages,*.log}",Теперь можно идти в Grafana, раздел Drilldown ⇨ Logs. Выбираем в выпадающем списке service с нужным именем и типом логов и смотрим.
Единственное, что мне не нравится тут, так это то, что в тексте лога есть метки времени, и в самом хранилище есть метки времени, когда запись была добавлена. Иногда они не совпадают и это неудобно. В Logstash есть модуль date для того, чтобы выделять дату из текста поступающих логов и использовать ее в качестве даты документа в Elasticsearch.
❓Кто-нибудь настраивал подобное в Loki, чтобы время документа совпадало со временем в логе?
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:
#loki #logs #devops
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71👎2