登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
Grafana Loki自动监控日志
Grafana Loki自动监控日志
[ 复制链接 ]
摹熹
昨天 16:20
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
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
自动
监控
日志
相关帖子
监听小工具-股票监控神奇九转分钟线信号触发提醒工具V2.0
go语言/golang 自动升级配置
监控指标与容量预警——延迟、命中率、慢查询与内存碎片的解读方法
Apache Parquet 优势与日志应用场景解析
MySQL 数据库日志总结(一)
同事查日志太慢,我现场教他一套 awk、tail、grep、sed 组合拳
从日志到检索的一站式方案——采集、清洗、入库与可视化的组件协同关系图
视频自动字幕生成器 (Video Subtitle Generator)
Serilog 日志库简单实践(四)消息队列 Sinks(.net8)
从手动到自动:基于 Mutating Admission Webhook 实现 Envoy Sidecar 自动注入
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
监听小工具-股票监控神奇九转分钟线信号触发提醒工具V2.0
2
413
懵崭
2025-12-17
安全
go语言/golang 自动升级配置
0
709
柄利
2025-12-17
业界
监控指标与容量预警——延迟、命中率、慢查询与内存碎片的解读方法
3
876
澹台忆然
2025-12-21
安全
Apache Parquet 优势与日志应用场景解析
2
188
司马黛
2025-12-23
业界
MySQL 数据库日志总结(一)
0
774
决台
2025-12-25
业界
同事查日志太慢,我现场教他一套 awk、tail、grep、sed 组合拳
1
887
峰襞副
2025-12-26
业界
从日志到检索的一站式方案——采集、清洗、入库与可视化的组件协同关系图
0
1012
衣旱
2025-12-28
安全
视频自动字幕生成器 (Video Subtitle Generator)
1
845
膏包
2026-01-02
业界
Serilog 日志库简单实践(四)消息队列 Sinks(.net8)
1
178
僻嘶
2026-01-04
业界
从手动到自动:基于 Mutating Admission Webhook 实现 Envoy Sidecar 自动注入
0
93
命煦砌
2026-01-05
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
安全
签约作者
程序园优秀签约作者
发帖
摹熹
昨天 16:20
关注
0
粉丝关注
16
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994891
kk14977
6845358
4
xiangqian
638210
5
韶又彤
9992
6
宋子
9978
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9946
查看更多
今日好文热榜
268
棒棒糖图:当条形图遇上极简美学
221
基于python mne库构造自定义fNIRS数据并可
242
TMS FNC Core和 Maps的Edge WebView2安装问
887
15分钟开发一个周报生成mcp,再也不用为写
941
搭建你的个人图床
194
obet快速修改scn/resetlogs恢复数据库(缺少
246
Thread 类的基本用法、Java 线程的几种状态
994
MQTT状态管理Vuex全局状态管理
127
初识Tauri
924
源码独立部署成企业数据安全新选择 广州旗
140
一款基于 .NET 9 构建的企业级 Web RBAC 快
361
2026.1.9日闲话:DAG 计数
435
Git使用经验总结9-Git提交关联到Issue
270
盘点北京地区都有哪些值得推荐的陪诊机构
796
ftrace可视化工具迎来重大升级
741
2026年质量领先的装配式内装品牌盘点:华耐
877
Flink源码阅读:Task数据交互
903
公众号推荐机制整理:科技号怎么把社交流量
336
混合检索(Hybrid Search):多模态检索实
103
12个JS核心,搞懂这些直接起飞!