登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
Grafana Loki自动监控日志
Grafana Loki自动监控日志
[ 复制链接 ]
摹熹
3 天前
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
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)
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)
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 数据源
浏览器访问 http://服务器IP:3000
登录(默认 admin / admin123)
左侧菜单 →
Connections
→
Data sources
点击
Add data source
→ 选择
Loki
URL 填写:http://loki:3100
点击
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 界面中同时查看指标和日志,大大提升排查问题的效率。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
Grafana
Loki
自动
监控
日志
相关帖子
go语言/golang 自动升级配置
监控指标与容量预警——延迟、命中率、慢查询与内存碎片的解读方法
Apache Parquet 优势与日志应用场景解析
MySQL 数据库日志总结(一)
同事查日志太慢,我现场教他一套 awk、tail、grep、sed 组合拳
从日志到检索的一站式方案——采集、清洗、入库与可视化的组件协同关系图
视频自动字幕生成器 (Video Subtitle Generator)
Serilog 日志库简单实践(四)消息队列 Sinks(.net8)
从手动到自动:基于 Mutating Admission Webhook 实现 Envoy Sidecar 自动注入
瞧瞧别人家的日志打印,那叫一个优雅!
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
go语言/golang 自动升级配置
0
712
柄利
2025-12-17
业界
监控指标与容量预警——延迟、命中率、慢查询与内存碎片的解读方法
4
886
澹台忆然
2025-12-21
安全
Apache Parquet 优势与日志应用场景解析
2
197
司马黛
2025-12-23
业界
MySQL 数据库日志总结(一)
0
782
决台
2025-12-25
业界
同事查日志太慢,我现场教他一套 awk、tail、grep、sed 组合拳
1
891
峰襞副
2025-12-26
业界
从日志到检索的一站式方案——采集、清洗、入库与可视化的组件协同关系图
0
1015
衣旱
2025-12-28
安全
视频自动字幕生成器 (Video Subtitle Generator)
1
852
膏包
2026-01-02
业界
Serilog 日志库简单实践(四)消息队列 Sinks(.net8)
1
187
僻嘶
2026-01-04
业界
从手动到自动:基于 Mutating Admission Webhook 实现 Envoy Sidecar 自动注入
0
101
命煦砌
2026-01-05
业界
瞧瞧别人家的日志打印,那叫一个优雅!
0
549
缑莺韵
2026-01-12
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
摹熹
3 天前
关注
0
粉丝关注
16
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994891
kk14977
6845359
4
xiangqian
638210
5
韶又彤
9992
6
宋子
9977
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9945
查看更多
今日好文热榜
354
51单片机__LED相关
549
瞧瞧别人家的日志打印,那叫一个优雅!
23
印度尼西亚(IDX)股票数据对接开发
483
obet实现对数据文件坏块检测功能(obet dbv
308
[20260108]sqlplus下exec以及execute immed
82
Agent设计模式学习(基于langchain4j实现)(1
208
Java中线程安全问题的原因和解决方案
188
飞书 .NET SDK 事件处理的幂等性与去重机制
680
迭代器 iteration、iter 与 多线程 concurr
375
奇点之年?对互联网、程序员的影响及应对指
872
AI编程的实践场景与未来可能:一场开发范式
205
【机器学习】-长尾分布解读指南
793
TensorRtSharp:在 C# 世界中释放 GPU 推理
643
TheIsle恐龙岛读取游戏基址做插件(C#语言
603
当我不想再为「小决定」消耗注意力时,我做
244
网站的<h1> 标签的内容跟 <title> 里面的一
30
PDF 转 Markdown 神器:MinerU 2.5 (1.2B)
334
彻底弄懂KeepAlive
938
听说C++好像偷偷去练什么"绝世武功"去了
538
C++小白训练第二天