SpringCloud+loki+promtail+grafana 集成日志监控收集搜索

SpringCloud+loki+promtail+grafana 集成日志监控收集搜索 1.先确认是否安装docker 和docker composecurl -fsSL https://get.docker.com | bash -s docker systemctl start docker systemctl enable docker # 下载并安装 Docker Compose 插件 sudo apt-get update sudo apt-get install docker-compose-plugin -y2.创建项目目录与配置文件mkdir -p /home/retail/monitoring cd /home/retail/monitoring2.1 创建docker-compose.ymlversion: 3.8 services: # Loki: 日志存储引擎 loki: image: grafana/loki:2.9.2 container_name: retail-loki ports: - 3100:3100 # 配置只保留最近 30 天的日志超出部分自动清理确保磁盘占用在可控范围 command: -config.file/etc/loki/local-config.yaml -limits_config.retention_period720h volumes: - ./loki-data:/tmp/loki networks: - retail-net # Promtail: 日志采集器负责读取服务器本地日志并发送给 Loki promtail: image: grafana/promtail:2.9.2 container_name: retail-promtail volumes: # 关键将宿主机的 /home/retail 目录挂载到容器内相同路径 - /home/retail:/home/retail:ro - ./promtail-config.yaml:/etc/promtail/config.yaml command: -config.file/etc/promtail/config.yaml networks: - retail-net depends_on: - loki # Grafana: 可视化展示平台 grafana: image: grafana/grafana:10.2.0 container_name: retail-grafana ports: - 3000:3000 environment: - GF_SECURITY_ADMIN_PASSWORDadmin # 配置根 URL让 Grafana 知道外部访问地址路径访问模式 - GF_SERVER_ROOT_URLhttp://fengchaogjx.top/grafana/ - GF_SERVER_SERVE_FROM_SUB_PATHtrue volumes: - ./grafana-data:/var/lib/grafana networks: - retail-net depends_on: - loki networks: retail-net: driver: bridge2.2 创建promtail-config.yamlserver: http_listen_port: 9080 grpc_listen_port: 0 positions: filename: /tmp/positions.yaml # 关键配置忽略旧文件的位置记录允许重新读取历史文件 ignore_invalid_yaml: true clients: - url: http://loki:3100/loki/api/v1/push scrape_configs: - job_name: retail-jar-logs static_configs: - targets: - localhost labels: job: retail-system # 修改通配符匹配 application.log 以及 application.2026-05-27.1.log 等 __path__: /home/retail/*/logs/application*.log pipeline_stages: # 尝试从日志中提取 traceId - regex: expression: .*\[(?PtraceId[a-f0-9\-])\].* - labels: traceId:3.pom文件引入依赖dependency groupIdio.micrometer/groupId artifactIdmicrometer-tracing-bridge-brave/artifactId /dependency4.修改logback配置修改 Logback 配置logback-spring.xml 确保 pattern 里有 %X{traceId}且日志输出路径统一为 /home/retail/${spring.application.name}/logs/application.log。 ?xml version1.0 encodingUTF-8? configuration scantrue scanPeriod60 seconds springProperty scopecontext nameAPP_NAME sourcespring.application.name defaultValueretail/ property nameLOG_HOME value${LOG_PATH:-logs}/ property nameCONSOLE_PATTERN value%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%X{traceId:-}] %logger{36} - %msg%n/ property nameFILE_PATTERN value%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%X{traceId:-}] %logger{64} - %msg%n/ appender nameCONSOLE classch.qos.logback.core.ConsoleAppender encoder pattern${CONSOLE_PATTERN}/pattern charsetUTF-8/charset /encoder /appender appender nameAPP_FILE classch.qos.logback.core.rolling.RollingFileAppender file${LOG_HOME}/application.log/file encoder pattern${FILE_PATTERN}/pattern charsetUTF-8/charset /encoder rollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy fileNamePattern${LOG_HOME}/application.%d{yyyy-MM-dd}.%i.log.gz/fileNamePattern maxFileSize100MB/maxFileSize maxHistory7/maxHistory totalSizeCap1GB/totalSizeCap /rollingPolicy /appender appender nameERROR_FILE classch.qos.logback.core.rolling.RollingFileAppender file${LOG_HOME}/error.log/file filter classch.qos.logback.classic.filter.ThresholdFilter levelERROR/level /filter encoder pattern${FILE_PATTERN}/pattern charsetUTF-8/charset /encoder rollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy fileNamePattern${LOG_HOME}/error.%d{yyyy-MM-dd}.%i.log.gz/fileNamePattern maxFileSize100MB/maxFileSize maxHistory7/maxHistory totalSizeCap1GB/totalSizeCap /rollingPolicy /appender logger nameorg.springframework levelINFO/ logger namecom.alibaba.nacos levelWARN/ logger namecom.zaxxer.hikari levelWARN/ root level${LOG_LEVEL:-INFO} appender-ref refCONSOLE/ appender-ref refAPP_FILE/ appender-ref refERROR_FILE/ /root /configuration5.启动监控平台# 1. 解决权限问题非常重要 mkdir -p grafana-data loki-data chmod -R 777 grafana-data loki-data # 2. 启动容器 docker compose up -d6.配置nginx反向代理location /grafana/ { proxy_pass http://127.0.0.1:3000/; # 注意末尾斜杠 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; }执行sudo nginx -s reload7.访问http://域名/grafana/7.1 进入Connections - Data Sources - Add LokiURL 填http://loki:31007.2进入Explore输入{jobretail-system}点击运行。即可查到日志