Централизованное логирование играет важную роль в современном мониторинге и управлении серверами. Это позволяет оперативно анализировать и отслеживать работу приложений и серверов в реальном времени. В данной статье мы рассмотрим процесс настройки системы централизованного логирования с использованием таких мощных инструментов, как Dokku, Loki и Grafana. Совместное использование этих инструментов обеспечивает гибкую и масштабируемую систему для мониторинга и анализа данных ваших серверов.
Содержание статьи:
Шаг 1. Настройка Dokku
Шаг 2. Настройка Loki
Шаг 3. Настройка Promtai
Шаг 4. Настройка Grafana
Шаг 5. Настройка Promtail для мониторинга JSON-логов на удаленном сервере с Loki
Шаг 6. Визуализация данных с помощью Grafana
Шаг 1. Настройка Dokku
Dokku - это легковесный инструмент управления контейнерами Docker, который упрощает развертывание и управление приложениями. Для начала работы с Dokku выполните следующие шаги:
Инструкция по установке Dokku:
Загрузка скрипта установки:
wget -NP . https://dokku.com/bootstrap.sh
Запуск установщика:
sudo DOKKU_TAG=v0.32.3 bash bootstrap.sh
Настройка домена:
dokku domains:set-global dokku.me
Добавление SSH-ключа: Замените
"your-public-key-contents-here"на ваш публичный SSH-ключ.
echo "your-public-key-contents-here" | dokku ssh-keys:add admin
Эти шаги создадут основу для работы с Dokku на вашем сервере.
Требования
Для выполнения данной настройки вам потребуется сервер с установленным Dokku, работающий под управлением Ubuntu 22.04. Эти инструкции были протестированы на версии Dokku v0.32.3, но они, вероятно, будут работать и на других версиях.
Публичные точки доступа защищены http-auth и tls, поэтому убедитесь, что у вас установлены соответствующие плагины:
dokku plugin:install https://github.com/dokku/dokku-http-auth.git dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git
Добавление полноценного решения для мониторинга увеличивает требования к ресурсам вашего сервера, но после настройки у вас будут метрики, которые помогут определить, нужны ли дополнительные ресурсы.
Сетевая настройка
Мы будем использовать частную сеть Docker для обеспечения связи приложений друг с другом в частной сети.
Создайте мостовую сеть с именем "grafana-bridge":
dokku network:create grafana-bridge
Шаг 2. Настройка Loki
Для настройки Loki выполните следующие шаги:
Создайте приложение Loki:
dokku apps:create loki
Настройте порты для Loki, чтобы он слушал HTTP-запросы на порту 80 и пересылал их на порт 3100, где будет работать Loki:
dokku ports:add loki http:80:3100
Установите переменную окружения для Loki, указав путь к конфигурационному файлу. Это позволит Loki использовать вашу настройку конфигурации:
dokku config:set --no-restart loki DOKKU_DOCKERFILE_START_CMD="-config.file=/etc/loki/loki-config.yaml"
Создайте директорию для монтажа хранилища конфигурации Loki и создайте файл конфигурации:
mkdir -p /var/lib/dokku/data/storage/loki/config touch /var/lib/dokku/data/storage/loki/config/loki-config.yaml
Установите правильные права доступа к созданным директориям и файлам:
chown -R nobody:nogroup /var/lib/dokku/data/storage/loki
Монтируйте директорию конфигурации Loki в контейнер Loki с помощью следующей команды:
dokku storage:mount loki /var/lib/dokku/data/storage/loki/config:/etc/loki
Конфигурация Loki
Сохраните файл конфигурации Loki по следующему пути:
/var/lib/dokku/data/storage/loki/config/loki‑config.yaml
и добавьте в него следующее содержимое:
Показать содержимое
auth_enabled: false server: http_listen_port: 3100 ingester: lifecycler: address: 127.0.0.1 ring: kvstore: store: inmemory replication_factor: 1 final_sleep: 0s chunk_idle_period: 1h max_chunk_age: 1h chunk_target_size: 1048576 chunk_retain_period: 30s max_transfer_retries: 0 schema_config: configs: - from: 2020-10-24 store: boltdb-shipper object_store: filesystem schema: v11 index: prefix: index_ period: 24h storage_config: boltdb_shipper: active_index_directory: /tmp/loki/boltdb-shipper-active cache_location: /tmp/loki/boltdb-shipper-cache cache_ttl: 24h shared_store: filesystem filesystem: directory: /tmp/loki/chunks compactor: working_directory: /tmp/loki/boltdb-shipper-compactor shared_store: filesystem limits_config: reject_old_samples: true reject_old_samples_max_age: 168h chunk_store_config: max_look_back_period: 0s table_manager: retention_deletes_enabled: false retention_period: 0s ruler: storage: type: local local: directory: /tmp/loki/rules rule_path: /tmp/loki/rules-temp alertmanager_url: http://localhost:9093 ring: kvstore: store: inmemory enable_api: true
Сохраните файл конфигурации Loki.
Установка Пользовательского Домена:
Назначьте пользовательский домен для Grafana:
dokku domains:set loki loki.dokku.meУбедитесь, что DNS-записи для
loki.dokku.meправильно указывают на ваш сервер Dokku.
Включение HTTPS:
После установки домена включите HTTPS:
dokku letsencrypt:enable loki
10. Включите HTTP-авторизацию для приложения Loki. Замените <username> и <password> на вашу выбранную комбинацию имени пользователя и пароля:
dokku http-auth:on loki <username> <password>
Теперь у вас настроен Loki для централизованного сбора и агрегации логов на вашем сервере Dokku.
Шаг 3. Настройка Promtail
Для настройки Promtail выполните следующие шаги:
Создайте приложение Promtail:
dokku apps:create promtail
Установите переменную окружения для Promtail, указав путь к конфигурационному файлу. Это позволит Promtail использовать вашу настройку конфигурации:
dokku config:set --no-restart promtail DOKKU_DOCKERFILE_START_CMD="-config.file=/etc/promtail/promtail-config.yaml"
Создайте директорию для монтажа хранилища конфигурации Promtail и создайте файл конфигурации:
mkdir -p /var/lib/dokku/data/storage/promtail/config touch /var/lib/dokku/data/storage/promtail/config/promtail-config.yaml
Установите правильные права доступа к созданным директориям и файлам:
chown -R nobody:nogroup /var/lib/dokku/data/storage/promtail
Монтируйте директорию конфигурации Promtail в контейнер Promtail:
dokku storage:mount promtail /var/lib/dokku/data/storage/promtail/config:/etc/promtail
Монтируйте директорию журналов
/var/logв контейнер Promtail:
dokku storage:mount promtail /var/log:/var/log
Присоедините приложение Promtail к сети
grafana-bridgeпосле развёртывания:
dokku network:set promtail attach-post-deploy grafana-bridge
Конфигурация Promtail
Создайте файл конфигурации Promtail по следующему пути:
/var/lib/dokku/data/storage/promtail/config/promtail-config.yaml
и добавьте в него следующее содержимое:
Раскрыть конфигурацию
server: http_listen_port: 9080 grpc_listen_port: 0 positions: filename: /tmp/positions.yaml clients: - url: http://loki.web:3100/loki/api/v1/push scrape_configs: - job_name: system static_configs: - targets: - localhost labels: job: varlogs __path__: /var/log/*log - targets: - localhost labels: job: nginx __path__: /var/log/nginx/*log
Сохраните файл конфигурации Promtail.
Развёртывание Promtail
Разверните приложение Promtail с помощью одной команды:
dokku git:from-image promtail grafana/promtail
Отключите доменное имя для приложения Promtail, так как это не требуется для сбора журналов:
dokku domains:disable promtail
Теперь у вас настроен Promtail для сбора и отправки журналов в систему Loki на вашем сервере Dokku.
Шаг 4. Настройка Grafana
Для настройки Grafana выполните следующие шаги:
Создайте приложение Grafana:
dokku apps:create grafana
Настройте порты для Grafana, чтобы он слушал HTTP-запросы на порту 80 и пересылал их на порт 3000, где будет работать Grafana:
dokku ports:add grafana http:80:3000
Создайте директории для монтажа хранилища данных и конфигурации Grafana, а также директорию для плагинов:
mkdir -p /var/lib/dokku/data/storage/grafana/{config,data,plugins}
Создайте директорию для хранения файлов конфигурации источников данных:
mkdir -p /var/lib/dokku/data/storage/grafana/config/provisioning/datasources
Установите правильные права доступа к созданным директориям и файлам:
chown -R 472:472 /var/lib/dokku/data/storage/grafana
6.Монтируйте директории данных и конфигурации Grafana, а также директорию для плагинов:
dokku storage:mount grafana /var/lib/dokku/data/storage/grafana/config/provisioning/datasources:/etc/grafana/provisioning/datasources dokku storage:mount grafana /var/lib/dokku/data/storage/grafana/data:/var/lib/grafana dokku storage:mount grafana /var/lib/dokku/data/storage/grafana/plugins:/var/lib/grafana/plugins
7.Создайте файл конфигурации для источника данных Loki:
nano /var/lib/dokku/data/storage/grafana/config/provisioning/datasources/loki.yml
И добавьте в него следующее содержимое:
datasources: - name: Loki type: loki access: proxy orgId: 1 url: http://loki.web:3100 basicAuth: false isDefault: false version: 1 editable: true
Сохраните файлы конфигурации для источников данных.
Присоедините приложение Grafana к сети
grafana-bridgeпосле развёртывания:
dokku network:set grafana attach-post-deploy grafana-bridge
Установка Пользовательского Домена:
Назначьте пользовательский домен для Grafana:
dokku domains:set grafana grafana.dokku.me
Убедитесь, что DNS-записи для grafana.dokku.me правильно указывают на ваш сервер Dokku.
Включение HTTPS:
После установки домена включите HTTPS:
dokku letsencrypt:enable grafana
Теперь у вас настроен Grafana с доменным именем grafana.kaido.team и включенным HTTPS для обеспечения безопасного доступа к данным.
Шаг 5. Настройка Promtail для мониторинга JSON-логов на удаленном сервере с Loki
Для настройки Promtail для мониторинга JSON-логов на удаленном сервере и отправки их в Loki, учтите следующие шаги:
Настройка удаленного сервера
Установите и настройте Promtail на удаленном сервере. Пример файла конфигурации Promtail на удаленном сервере может выглядеть следующим образом:
server: http_listen_port: 9080 grpc_listen_port: 0 positions: filename: /tmp/positions.yaml clients: - url: http://loki.dokku.me:3100/loki/api/v1/push basic_auth_user: ваш_пользователь basic_auth_password: ваш_пароль scrape_configs: - job_name: json_logs static_configs: - targets: - /путь/к/файлу.json # Укажите путь к JSON-лог файлу на удаленном сервере labels: job: json_logs
В этом файле конфигурации:
http_listen_portиgrpc_listen_port- это порты, на которых Promtail будет прослушивать HTTP и gRPC запросы.clients- указывает на адрес Loki, куда Promtail будет отправлять собранные логи. Укажитеbasic_auth_userиbasic_auth_passwordдля HTTP-авторизации на сервере Loki.scrape_configs- это список конфигураций для мониторинга логов. В данном случае, мы создали конфигурацию с именемjson_logsдля мониторинга JSON-лог файла на удаленном сервере.targets- замените/путь/к/файлу.jsonна путь к JSON-лог файлу на удаленном сервере.
Сохраните файл конфигурации на удаленном сервере, например, в
/etc/promtail/promtail-config.yaml
Теперь Promtail будет мониторить JSON-лог файл на удаленном сервере и отправлять его в Loki с использованием HTTP-авторизации на сервере Loki, доступном на вашем локальном сервере, для дальнейшей визуализации в Grafana.
Шаг 6. Визуализация данных с помощью Grafana
Визуализация логов

Зайдите в веб-интерфейс Grafana
https://grafana.dokku.me.Войдите в Grafana с учетными данными login: admin password: admin (дефолтные значения, которые вы измените во время первого входа).
Перейдите в раздел "Explore" в верхней панели навигации Grafana.
В разделе "Explore" вы можете выбрать источник данных Loki и начать поиск и визуализацию ваших JSON-логов.
В поле "Log labels" вы можете выбрать
jobв выпадающем списке, чтобы отфильтровать логи поjob_name.Затем вы можете вводить запросы и использовать функции Loki для поиска, фильтрации и визуализации логов.
Создайте и сохраните панели для визуализации интересующих вас данных из логов.
Теперь у вас есть инструменты для визуализации и анализа JSON-логов с помощью Grafana и Loki. Вы можете создавать графики, панели и дашборды, чтобы мониторить вашу инфраструктуру и приложения на основе логов.
В заключение, настройка централизованного логирования с использованием Dokku, Loki и Grafana представляет собой мощное решение для современного мониторинга и управления серверами. Эта система не только обеспечивает гибкость и масштабируемость, но также позволяет оперативно анализировать и отслеживать работу приложений и серверов в реальном времени. Через интеграцию Dokku для управления контейнерами, Loki для агрегации и централизации логов и Grafana для визуализации и анализа данных, пользователи получают комплексный набор инструментов для эффективного мониторинга и реагирования на события в их инфраструктуре.
Руководство, представленное в этой статье, подробно описывает каждый шаг настройки, начиная от установки Dokku и заканчивая конфигурацией Grafana и Promtail. Это обеспечивает глубокое понимание процесса и помогает пользователям настроить систему под свои уникальные требования. С учетом всех аспектов безопасности и производительности, такая система логирования становится надежным решением для сбора, анализа и визуализации данных логов.
Централизованное логирование не только упрощает процесс мониторинга, но и играет важную роль в обеспечении стабильности и безопасности серверной инфраструктуры. В современной среде, где скорость и точность реагирования на инциденты критически важны, такая система является необходимым инструментом в арсенале любого администратора серверов или разработчика.
