Grafana Loki自动监控日志

Grafana Loki 日志监控配置指南

前言

在微服务架构中,日志收集和分析是运维的重要环节。本文介绍如何使用 Grafana Loki 搭建轻量级日志监控系统,并与传统的 ELK 技术栈进行对比。

Loki vs ELK 技术栈对比

架构对比

组件ELKLoki
日志采集Logstash / FilebeatPromtail
日志存储ElasticsearchLoki
可视化KibanaGrafana

核心差异

对比项ELKLoki
索引方式全文索引仅索引标签(Label)
存储占用高(原始日志 + 索引)低(压缩存储,索引小)
资源消耗高(ES 需要大量内存)低(单机 256MB 可运行)
查询方式Lucene 语法LogQL(类 PromQL)
查询速度全文搜索快标签过滤快,全文搜索慢
部署复杂度复杂(多组件协调)简单(3 个容器即可)
学习成本较高较低(熟悉 Prometheus 更容易)
与 Prometheus 集成需额外配置原生集成

选型建议

选择 ELK 的场景:

  • 需要复杂的全文搜索
  • 日志分析是核心业务需求
  • 有专门的运维团队
  • 服务器资源充足

选择 Loki 的场景:

  • 中小型项目,资源有限
  • 已使用 Prometheus + Grafana 监控体系
  • 主要需求是日志查看和简单过滤
  • 追求快速部署和低维护成本

系统架构

┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 微服务应用 │ ──▶ │ 日志文件 │ ──▶ │ Promtail │ ──▶ │ Loki │ │ (Java/Go等) │ │ (.log files)│ │ (采集器) │ │ (存储) │ └─────────────┘ └─────────────┘ └─────────────┘ └──────┬──────┘ │ ▼ ┌─────────────┐ │ Grafana │ │ (可视化) │ └─────────────┘

环境准备

  • Docker 20.10+
  • Docker Compose 2.0+
  • 服务器内存 >= 2GB

目录结构

/docker/ ├── docker-compose.yaml ├── loki/ │ └── loki-config.yaml └── promtail/ └── promtail-config.yaml

配置文件

1. Loki 配置 (loki-config.yaml)

/* by 01130.hk - online tools website : 01130.hk/zh/formatcsql.html */ auth_enabled: false server: http_listen_port: 3100 grpc_listen_port: 9096 common: instance_addr: 127.0.0.1 path_prefix: /loki storage: filesystem: chunks_directory: /loki/chunks rules_directory: /loki/rules replication_factor: 1 ring: kvstore: store: inmemory query_range: results_cache: cache: embedded_cache: enabled: true max_size_mb: 100 limits_config: metric_aggregation_enabled: true retention_period: 720h # 日志保留 30 天 schema_config: configs: - from: 2020-10-24 store: tsdb object_store: filesystem schema: v13 index: prefix: index_ period: 24h pattern_ingester: enabled: true metric_aggregation: loki_address: localhost:3100 compactor: working_directory: /loki/compactor retention_enabled: true delete_request_store: filesystem frontend: encoding: protobuf

配置说明:

配置项说明
auth_enabled: false关闭认证,单机部署使用
http_listen_port: 3100Loki HTTP API 端口
path_prefix: /loki数据存储路径前缀
retention_period: 720h日志保留 30 天
store: tsdb使用 TSDB 存储引擎(Loki 3.x 推荐)
schema: v13最新的 schema 版本
embedded_cache内置查询缓存,提升查询性能
compactor自动压缩和清理过期日志

2. Promtail 配置 (promtail-config.yaml)

/* by 01130.hk - online tools website : 01130.hk/zh/formatcsql.html */ 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: xiaohashu static_configs: - targets: - localhost labels: job: xiaohashu __path__: /var/log/xiaohashu/*.log pipeline_stages: # 从文件名提取服务名: note.2025-07-01-0.log → service=note - regex: source: filename expression: '(?P<service>[a-z-]+)\.\d{4}-\d{2}-\d{2}-\d+\.log$' - labels: service: # 从日志内容提取级别: INFO/WARN/ERROR/DEBUG - regex: expression: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} \[[^\]]+\] (?P<level>\w+)' - labels: level:

配置说明:

配置项说明
positions.filename记录读取位置,重启后继续读取
clients.urlLoki 推送地址
__path__日志文件匹配路径
pipeline_stages日志处理管道
regex+labels从文件名/内容提取标签

日志格式示例:

2025-07-01 10:30:00.123 [main] INFO com.example.Service - 启动成功

经过 pipeline 处理后,会自动添加标签:

  • service=note(从文件名提取)
  • level=INFO(从日志内容提取)

3. Docker Compose 配置

services: loki: image: grafana/loki:3.5.0 container_name: loki ports: - "3100:3100" volumes: - ./loki/loki-config.yaml:/etc/loki/local-config.yaml - loki-data:/loki command: -config.file=/etc/loki/local-config.yaml restart: unless-stopped promtail: image: grafana/promtail:3.5.0 container_name: promtail volumes: - ./promtail/promtail-config.yaml:/etc/promtail/config.yaml - /www/wwwroot/life_diary/logs:/var/log/xiaohashu:ro command: -config.file=/etc/promtail/config.yaml restart: unless-stopped depends_on: - loki grafana: image: grafana/grafana:11.4.0 container_name: grafana ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=admin123 volumes: - grafana-data:/var/lib/grafana restart: unless-stopped depends_on: - loki volumes: loki-data: grafana-data:

关键配置说明:

配置说明
loki-data:/lokiLoki 数据持久化,容器重启不丢失
/www/wwwroot/life_diary/logs:/var/log/xiaohashu:ro挂载宿主机日志目录,:ro表示只读
grafana-data:/var/lib/grafanaGrafana 配置持久化
depends_on服务启动依赖顺序

部署步骤

1. 创建目录和配置文件

mkdir -p /docker/loki /docker/promtail cd /docker # 创建配置文件(内容见上文) vim loki/loki-config.yaml vim promtail/promtail-config.yaml vim docker-compose.yaml

2. 启动服务

cd /docker docker-compose up -d

3. 查看服务状态

docker-compose ps docker-compose logs -f loki # 查看 Loki 日志 docker-compose logs -f promtail # 查看 Promtail 日志

4. 配置 Grafana 数据源

  1. 浏览器访问http://服务器IP:3000
  2. 登录(默认 admin / admin123)
  3. 左侧菜单 →ConnectionsData sources
  4. 点击Add data source→ 选择Loki
  5. URL 填写:http://loki:3100
  6. 点击Save & Test,显示绿色 ✓ 表示成功

LogQL 查询语法

基础查询

# 查看所有日志 {job="xiaohashu"} # 按服务筛选 {service="note"} {service="gateway"} # 按日志级别筛选 {level="ERROR"} {level="WARN"} # 组合条件 {service="note", level="ERROR"}

关键字搜索

# 包含关键字 {job="xiaohashu"} |= "Exception" {service="note"} |= "NullPointer" # 不包含关键字 {service="gateway"} != "health" # 正则匹配 {job="xiaohashu"} |~ "user.*login"

统计分析

# 最近 5 分钟各服务错误数 count_over_time({level="ERROR"}[5m]) by (service) # 每分钟日志量 rate({job="xiaohashu"}[1m]) # 错误率 sum(rate({level="ERROR"}[5m])) / sum(rate({job="xiaohashu"}[5m]))

常用运维命令

# 启动所有服务 docker-compose up -d # 停止所有服务 docker-compose down # 重启单个服务 docker-compose restart loki # 查看资源占用 docker stats loki promtail grafana # 查看日志 docker-compose logs -f --tail=100 loki # 清理旧数据(谨慎使用) docker volume rm docker_loki-data

常见问题

1. Promtail CPU 占用高

刚启动时需要扫描历史日志,属于正常现象。等处理完历史数据后会降下来。

2. Grafana 连接 Loki 失败

检查 URL 是否正确,容器内部通信使用服务名http://loki:3100,不是localhost

3. 看不到日志

  • 检查日志路径挂载是否正确
  • 检查 Promtail 日志:docker logs promtail
  • 确认日志文件名格式与__path__匹配

4. 磁盘空间不足

调整retention_period缩短保留时间,或手动清理:

docker-compose down docker volume rm docker_loki-data docker-compose up -d

总结

Grafana Loki 相比 ELK 更加轻量,适合中小型项目和资源有限的场景。通过合理配置 Promtail 的 pipeline,可以自动提取服务名和日志级别,实现高效的日志查询和分析。

对于已经使用 Prometheus + Grafana 的团队,Loki 是日志监控的最佳选择,可以在同一个 Grafana 界面中同时查看指标和日志,大大提升排查问题的效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1135454.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VMware macOS解锁神器:在Windows/Linux上轻松运行苹果系统

VMware macOS解锁神器&#xff1a;在Windows/Linux上轻松运行苹果系统 【免费下载链接】unlocker 项目地址: https://gitcode.com/gh_mirrors/unloc/unlocker 想要在普通PC上体验macOS的魅力吗&#xff1f;VMware macOS解锁工具Unlocker为你打开这扇大门&#xff01;这…

Minecraft存档修复:3步解决区域文件损坏问题

Minecraft存档修复&#xff1a;3步解决区域文件损坏问题 【免费下载链接】Minecraft-Region-Fixer Python script to fix some of the problems of the Minecraft save files (region files, *.mca). 项目地址: https://gitcode.com/gh_mirrors/mi/Minecraft-Region-Fixer …

Sambert-HifiGan在公共广播系统中的应用方案

Sambert-HifiGan在公共广播系统中的应用方案 引言&#xff1a;语音合成的演进与公共广播场景需求 随着智能语音技术的快速发展&#xff0c;高质量、自然流畅的语音合成&#xff08;TTS&#xff09; 已成为公共服务领域的重要基础设施。尤其在机场、地铁、医院等公共广播系统中…

6款支持Markdown文档的AI视频工具推荐:含GitHub项目地址

6款支持Markdown文档的AI视频工具推荐&#xff1a;含GitHub项目地址 在AI生成内容&#xff08;AIGC&#xff09;快速发展的今天&#xff0c;图像转视频&#xff08;Image-to-Video, I2V&#xff09;技术正成为创意生产、影视制作和数字营销的重要工具。相比传统视频剪辑&#…

为什么你的Image-to-Video生成总失败?答案在这里

为什么你的Image-to-Video生成总失败&#xff1f;答案在这里 核心问题定位&#xff1a;从用户反馈到技术根因 在实际使用 Image-to-Video 图像转视频生成器 的过程中&#xff0c;许多用户反馈“生成失败”、“显存溢出”、“动作不明显”或“结果不符合预期”。尽管该工具基于强…

5个构建系统优化技巧:快速提升Windows应用开发效率

5个构建系统优化技巧&#xff1a;快速提升Windows应用开发效率 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 在现代软件开发中&#xff0c;一个精心设计的构建系统是项目成功的核心要素。DLSS Swapper作为专业的DLSS…

提示词不生效?Image-to-Video高级参数避坑手册

提示词不生效&#xff1f;Image-to-Video高级参数避坑手册 &#x1f4d6; 引言&#xff1a;为什么你的提示词“没反应”&#xff1f; 在使用 Image-to-Video 图像转视频生成器&#xff08;二次构建开发 by 科哥&#xff09; 的过程中&#xff0c;许多用户反馈&#xff1a;“我写…

Sambert-HifiGan与噪声抑制结合:提升嘈杂环境语音清晰度

Sambert-HifiGan与噪声抑制结合&#xff1a;提升嘈杂环境语音清晰度 &#x1f4cc; 引言&#xff1a;中文多情感语音合成的现实挑战 随着智能语音助手、车载导航、远程会议等应用场景的普及&#xff0c;高质量语音合成&#xff08;TTS&#xff09;技术已成为人机交互的核心组…

医疗影像可视化:开源方案助力医学图片动态呈现

医疗影像可视化&#xff1a;开源方案助力医学图片动态呈现 引言&#xff1a;从静态到动态的医学视觉革命 在现代医学诊断中&#xff0c;影像数据是医生判断病情、制定治疗方案的核心依据。然而&#xff0c;传统的医学影像&#xff08;如CT、MRI、X光&#xff09;多以静态切片形…

哪些图片不适合做Image-to-Video输入?

哪些图片不适合做Image-to-Video输入&#xff1f; &#x1f4cc; 引言&#xff1a;图像质量决定视频生成成败 在使用 Image-to-Video 图像转视频生成器&#xff08;基于 I2VGen-XL 模型&#xff09;的过程中&#xff0c;我们发现一个关键规律&#xff1a;输入图像的质量和类型直…

如何用Sambert-HifiGan构建语音合成微服务架构

如何用Sambert-HifiGan构建语音合成微服务架构 &#x1f3af; 业务场景与痛点分析 在智能客服、有声阅读、虚拟主播等应用场景中&#xff0c;高质量中文语音合成&#xff08;TTS&#xff09; 已成为提升用户体验的核心能力。传统TTS系统往往存在音质生硬、情感单一、部署复杂…

RSI顶底通达信公式 副图 源码附图

{}WWWFXJGSWCOM:VOL/((HIGH-LOW)*2-ABS(CLOSE-OPEN)); 风险中值:50,COLOR0099FF,DOTLINE; 机会:IF(风险系数<10,风险系数,DRAWNULL),COLORRED; 风险:IF(风险系数>90,风险系数,DRAWNULL),COLORGREEN; ......

如何用Sambert-HifiGan为短视频自动生成旁白?

如何用Sambert-HifiGan为短视频自动生成旁白&#xff1f; 引言&#xff1a;中文多情感语音合成的现实需求 在短视频内容爆发式增长的今天&#xff0c;高质量、富有情感表现力的旁白配音已成为提升用户观看体验的关键因素。传统人工配音成本高、效率低&#xff0c;而普通TTS&…

【JPCS出版,往届均已见刊检索 | 大咖嘉宾与会交流 | 厦门·线下会议】第七届新材料与清洁能源国际学术会议(ICAMCE 2026)

第七届新材料与清洁能源国际学术会议&#xff08;ICAMCE 2026&#xff09; 2026 7th International Conference on Advanced Material and Clean Energy 2026年1月30-2月1日 | 中国厦门线下 大会官网&#xff1a;​​​​​​www.ic-amce.org【投稿参会】 最后截稿日期…

如何用Sambert-HifiGan为智能手表生成健康提醒

如何用Sambert-HifiGan为智能手表生成健康提醒 引言&#xff1a;让健康提醒“会说话”的语音合成需求 在可穿戴设备日益普及的今天&#xff0c;智能手表已不仅仅是时间显示工具&#xff0c;更是个人健康管理的重要入口。心率异常、久坐提醒、睡眠质量预警等功能逐渐成为标配。然…

Sambert-HifiGan在智能医疗助手中的应用实践

Sambert-HifiGan在智能医疗助手中的应用实践 &#x1f4cc; 引言&#xff1a;让AI语音更有“温度”的医疗交互体验 随着人工智能技术在医疗健康领域的深入渗透&#xff0c;智能语音助手正逐步成为医患沟通、康复指导、老年陪护等场景中的关键角色。然而&#xff0c;传统TTS&…

Sambert-HifiGan在虚拟偶像中的应用:打造数字人语音

Sambert-HifiGan在虚拟偶像中的应用&#xff1a;打造数字人语音 引言&#xff1a;让数字人“声”动起来——中文多情感语音合成的现实需求 随着虚拟偶像、AI主播、智能客服等数字人应用场景的快速普及&#xff0c;用户对语音交互的真实感与情感表达提出了更高要求。传统的TTS&a…

科研成果展示:论文配图转化为动态演示视频

科研成果展示&#xff1a;论文配图转化为动态演示视频 Image-to-Video图像转视频生成器 二次构建开发by科哥Image-to-Video 用户使用手册 &#x1f4d6; 简介 Image-to-Video 是一个基于 I2VGen-XL 模型的图像到视频生成系统&#xff0c;专为科研可视化、学术展示和创意表达设计…

Sambert-HifiGan语音合成错误排查手册

Sambert-HifiGan语音合成错误排查手册 &#x1f4cc; 背景与问题定位&#xff1a;为何需要一份系统性排查手册&#xff1f; 在基于 ModelScope 的 Sambert-HifiGan&#xff08;中文多情感&#xff09;模型 构建语音合成服务时&#xff0c;尽管项目已集成 Flask WebUI 并修复了 …

通达信能抓板的乾坤线主图指标

{}AS:(C*3OHL)/6; XJ:(AS0.618*REF(AS,1)0.382*REF(AS,2)0.236*REF(AS,3)0.146*REF(AS,4))/2.382; {回调认同} HLX:EMA(HHV(XJ,3),15); LLX:EMA(LLV(XJ,3),15); CH:CROSS(XJ,HLX);CL:CROSS(LLX,XJ); CHH:BARSLAST(CH);CLL:BARSLAST(CL); YF1:(CHH<CLL OR CH) AND NOT(CL); Y…