本次使用docker-compose部署三件套:Promtail(日志采集)、Loki(日志存储查询)、Grafana(可视化展示),无需复杂依赖配置,支持Linux、Mac、Windows(需提前装WSL2+Docker Desktop)。
docker -v,返回版本号(如Docker version 24.0.7)即为已装;未装访问https://www.docker.com/get-started/ 下载对应系统版本安装docker-compose -v,返回版本号(如Docker Compose version v2.21.0)即为已装;Docker Desktop默认带v2,无需单独安装找个空文件夹,新建两个文件:docker-compose.yml、promtail-config.yml,所有内容可直接复制。
mkdir -p ./loki-data ./promtail-data ./logs-demo新建文件,粘贴以下完整内容,注意缩进严格为2个空格:
```yaml version: '3.8' services: loki: image: grafana/loki:2.9.2 ports: - "3100:3100" command: -config.file=/etc/loki/local-config.yaml volumes: - ./loki-data:/loki networks: - loki-net promtail: image: grafana/promtail:2.9.2 volumes: - ./promtail-config.yml:/etc/promtail/config.yml - ./logs-demo:/var/log/demo - ./promtail-data:/tmp/promtail command: -config.file=/etc/promtail/config.yml networks: - loki-net depends_on: - loki grafana: image: grafana/grafana:10.2.3 ports: - "3000:3000" volumes: - grafana-storage:/var/lib/grafana networks: - loki-net depends_on: - loki volumes: grafana-storage: networks: loki-net: ```新建文件,粘贴以下完整内容,调整demo日志路径与筛选规则:
```yaml server: log_level: info http_listen_port: 9080 clients: - url: http://loki:3100/loki/api/v1/push scrape_configs: - job_name: demo-logs static_configs: - targets: - localhost labels: job: demo-app __path__: /var/log/demo/.log ```docker-compose up -ddocker-compose ps,三个容器状态均为Up即为成功
打开新的终端窗口,进入刚才新建的logs-demo目录,用命令持续生成带不同级别的日志:
cd ./logs-demo粘贴以下脚本,按Ctrl+C可停止:
```bash !/bin/bash for i in {1..1000} do level=$((RANDOM % 3)) msg="" case $level in 0) level="INFO" msg="用户${i}登录成功" ;; 1) level="WARN" msg="用户${i}输入密码错误1次" ;; 2) level="ERROR" msg="用户${i}下单超时5秒" ;; esac echo "$(date '+%Y-%m-%d %H:%M:%S') [${level}] ${msg}" >> app.log sleep 0.5 done ```Windows无WSL2的话,手动创建app.log,粘贴5-10条类似格式的日志即可:
``` 2024-01-01 12:00:00 [INFO] 用户1登录成功 2024-01-01 12:00:01 [WARN] 用户2输入密码错误1次 2024-01-01 12:00:02 [ERROR] 用户3下单超时5秒 ```浏览器打开http://localhost:3000,默认账号密码都是admin,首次登录强制修改密码(随便改一个,记不住后面删除grafana-storage卷重置)。
|~ `ERROR`,再次点击Run query{job="demo-app"},也可组合多个标签,如{job="demo-app",env="prod"}(需提前在promtail-config.yml添加env标签)| regexp `\[(?P[A-Z]+)\]` ,可直接提取方括号里的大写单词为level字段,方便后续统计|~ `ERROR`,不包含用!~ `INFO`,注意引号用反引号(键盘Esc下方),避免与日志里的双引号冲突docker-compose down(数据会保存在loki-data、grafana-storage卷里)docker-compose up -ddocker-compose down -v,再手动删除创建的文件夹上一篇: 人工智能选品,这波风口猪都能飞起来
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图