Настройка централизованного логирования с использованием Dokku, Loki и Grafana
Централизованное логирование играет важную роль в современном мониторинге и управлении серверами. Это позволяет оперативно анализировать и отслеживать работу приложений и серверов в реальном времени. В данной статье мы рассмотрим процесс настройки системы централизованного логирования с использованием таких мощных инструментов, как 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. Замените
и
на вашу выбранную комбинацию имени пользователя и пароля:
dokku http-auth:on loki
Теперь у вас настроен 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. Это обеспечивает глубокое понимание процесса и помогает пользователям настроить систему под свои уникальные требования. С учетом всех аспектов безопасности и производительности, такая система логирования становится надежным решением для сбора, анализа и визуализации данных логов.
Централизованное логирование не только упрощает процесс мониторинга, но и играет важную роль в обеспечении стабильности и безопасности серверной инфраструктуры. В современной среде, где скорость и точность реагирования на инциденты критически важны, такая система является необходимым инструментом в арсенале любого администратора серверов или разработчика.