Прощай громоздкий лось! Это легкое решение для сбора журналов в огне!

Java задняя часть Elasticsearch
Прощай громоздкий лось! Это легкое решение для сбора журналов в огне!

Адрес фактического проекта электронной коммерции SpringBoot (50k+star):GitHub.com/macro-positive/…

Резюме

Используемая ранее схема сбора логов — ELK, который часто занимает несколько гигабайт памяти, а некоторые плохо настроенные серверы этого не выдерживают! Недавно наткнулся на облегченное решение для сбора логов: Loki+Promtail+Grafana (сокращенно LPG), достаточно нескольких сотен М памяти, да и интерфейс неплохой, всем рекомендую!

Введение

Сценарии сбора журнала LPG сохраняются очень мало, экономичные и эффективные! Он не устанавливает индекс в качестве системы LOG LOG, но устанавливает набор меток для каждого потока журнала. Следующее вводится в его основные компоненты:

  • ProPtail: Коллекция журнала, немного похожее на файл файла, файл журнала может быть собран в журнале, а данные, собранные, которые будут нажаты, чтобы пойти на Loki.
  • Loki: собирает и хранит данные журналов, которые можно использовать в качестве источника данных для Grafana, чтобы предоставить Grafana визуальные данные.
  • Grafana: получение информации журнала от Loki для визуального отображения.

日志收集流程图

Установить

Чтобы реализовать это решение для сбора журналов, вам необходимо установить такие службы, как Loki, Promtail и Grafana, и использовать их напрямую.docker-composeЭто очень удобно для установки.

  • в использованииdocker-compose.ymlСценарий следует напрямуюdocker-composeКоманду можно запустить;
version: "3"

services:
  # 日志存储和解析
  loki:
    image: grafana/loki
    container_name: lpg-loki
    volumes:
      - /mydata/loki/:/etc/loki/
    # 修改loki默认配置文件路径
    command: -config.file=/etc/loki/loki.yml
    ports:
      - 3100:3100

  # 日志收集器
  promtail:
    image: grafana/promtail
    container_name: lpg-promtail
    volumes:
      # 将需要收集的日志所在目录挂载到promtail容器中
      - /mydata/app/mall-tiny-loki/logs/:/var/log/
      - /mydata/promtail:/etc/promtail/
    # 修改promtail默认配置文件路径
    command: -config.file=/etc/promtail/promtail.yml

  # 日志可视化
  grafana:
    image: grafana/grafana
    container_name: lpg-grafana
    ports:
      - 3000:3000
  • Поскольку мы смонтировали файлы конфигурации Loki и Promtail на хост, нам нужно подготовить эти два файла конфигурации перед запуском;

  • Конфигурационный файл Локи/mydata/loki/loki.ymlСодержимое выглядит следующим образом, используя конфигурацию по умолчанию (вы можете запустить контейнер Loki Docker без монтирования файла конфигурации, а затем скопировать его из контейнера);

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       # Any chunk not receiving new logs in this time will be flushed
  max_chunk_age: 1h           # All chunks will be flushed when they hit this age, default is 1h
  chunk_target_size: 1048576  # Loki will attempt to build chunks up to 1.5MB, flushing first if chunk_idle_period or max_chunk_age is reached first
  chunk_retain_period: 30s    # Must be greater than index read cache TTL if using an index cache (Default index read cache TTL is 5m)
  max_transfer_retries: 0     # Chunk transfers disabled

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: /loki/boltdb-shipper-active
    cache_location: /loki/boltdb-shipper-cache
    cache_ttl: 24h         # Can be increased for faster performance over longer query periods, uses more disk space
    shared_store: filesystem
  filesystem:
    directory: /loki/chunks

compactor:
  working_directory: /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: /loki/rules
  rule_path: /loki/rules-temp
  alertmanager_url: http://localhost:9093
  ring:
    kvstore:
      store: inmemory
  enable_api: true
  • Конфигурационный файл Промтейл/mydata/loki/promtail.ymlСодержание следующее, также используется конфигурация по умолчанию, здесьclients.urlОбратите внимание, что поскольку мы используемdocker-composeразвертывание, поэтому вы можете указать имя службыlokiв качестве доменного имени для доступа к сервисам Loki;
server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://loki:3100/loki/api/v1/push

scrape_configs:
- job_name: system
  static_configs:
  - targets:
      - localhost
    labels:
      job: varlogs
      __path__: /var/log/*log
  • бегатьdocker-compose.ymlСценарий устанавливает все службы, используйте следующую команду;
docker-compose up -d
  • После успешного запуска вы можете использоватьdocker ps |grep lpgКоманда для просмотра состояния службы.
[root@local-linux lpg]# docker ps |grep lpg
64761b407423        grafana/loki                            "/usr/bin/loki -conf…"   3 minutes ago       Up 3 minutes        0.0.0.0:3100->3100/tcp                           lpg-loki
67f0f0912971        grafana/grafana                         "/run.sh"                3 minutes ago       Up 3 minutes        0.0.0.0:3000->3000/tcp                           lpg-grafana
f2d78eb188d1        grafana/promtail                        "/usr/bin/promtail -…"   3 minutes ago       Up 3 minutes                                                         lpg-promtail

использовать

Далее мы будем использовать систему сбора журналов LPG для сбора журналов приложения SpringBoot, Приложение SpringBoot в основном не требует специальной настройки.

  • Сначала создайте приложение SpringBoot и измените файл конфигурации.application.yml, вывод журнала в/var/logsПод содержанием;
spring:
  application:
    name: mall-tiny-loki

logging:
  path: /var/logs
  level:
    com.macro.mall.tiny: debug
  • Используйте следующую команду, чтобы запустить приложение SpringBoot и смонтировать каталог журналов на хост, чтобы Promtail мог собирать журналы;
docker run -p 8088:8088 --name mall-tiny-loki \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/mall-tiny-loki/logs:/var/logs \
-e TZ="Asia/Shanghai" \
-d mall-tiny/mall-tiny-loki:1.0-SNAPSHOT
  • После успешной операции войдите в Grafana, пароль учетной записиadmin:adminПосле успешного входа в систему, чтобы добавить Loki в качестве источника данных, адрес доступа:http://192.168.7.149:3000/

  • Прямой выбор Loki в интерфейсе выбора источника данных, мы видим, что Grafana также поддерживает использование Elasticsearch в качестве источника данных;

  • Затем установите адрес доступа к Loki, нажмитеSave&testСохраните и протестируйте, появится зеленое сообщение, указывающее на то, что настройка прошла успешно, и адрес доступа к Loki:http://192.168.7.149:3100

  • следующий вExploreВыберите Loki и введите выражение запроса (запрос Loki) как{filename="/var/log/spring.log"}, вы можете просмотреть журналы, выводимые нашим приложением SpringBoot.

Суммировать

В этой статье в основном представлена ​​конструкция системы журналов LPG и ее использование для сбора журналов приложений SpringBoot.Схема сбора журналов LPG действительно очень легкая и имеет хорошую производительность! Однако, если вам нужен полнотекстовый поиск по журналам, вам все равно придется использовать систему ELK. Если вы не знакомы с Grafana, вы можете обратиться к этой статье.«Так называемая система визуального мониторинга следующего поколения в сочетании с SpringBoot — это круто! 》.

использованная литература

Адрес исходного кода проекта

GitHub.com/macro-positive/…

Эта статьяGitHubGitHub.com/macro-positive/…Он был записан, приветствую всех на Star!