Централизованное логирование играет важную роль в современном мониторинге и управлении серверами. Это позволяет оперативно анализировать и отслеживать работу приложений и серверов в реальном времени. В данной статье мы рассмотрим процесс настройки системы централизованного логирования с использованием таких мощных инструментов, как 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. Это обеспечивает глубокое понимание процесса и помогает пользователям настроить систему под свои уникальные требования. С учетом всех аспектов безопасности и производительности, такая система логирования становится надежным решением для сбора, анализа и визуализации данных логов.
Централизованное логирование не только упрощает процесс мониторинга, но и играет важную роль в обеспечении стабильности и безопасности серверной инфраструктуры. В современной среде, где скорость и точность реагирования на инциденты критически важны, такая система является необходимым инструментом в арсенале любого администратора серверов или разработчика.
ссылка на оригинал статьи https://habr.com/ru/articles/789954/
Добавить комментарий