Grafana Loki自动监控日志

Grafana Loki 日志监控配置指南

d3135d676e_1_k-hdOAQjRXKoyguzKuoeKg

前言

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

Loki vs ELK 技术栈对比

架构对比

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

核心差异

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

567ffc184541f44c0384d02f8b991447

056f09368ad6dde870727e48171c89ee

选型建议

选择 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 界面中同时查看指标和日志,大大提升排查问题的效率。

【3D应力敏感度分析拓扑优化】【基于p-范数全局应力衡量的3D敏感度分析】基于伴随方法的有限元分析和p-范数应力敏感度分析(Matlab代码实现)内容概要:本文档介绍了基于伴随方法的有限元分析与p-范数全局应力衡量的3D应力敏感度分析,并结合拓扑优化技术,提供了完整的Matlab代码实现方案。该方法通过有限元建模计算结构在载荷作用下的应力分布,采用p-范数对全局应力进行有效聚合,避免传统方法中应力约束过多的问题,进而利用伴随法高效求解设计变量对应力的敏感度,为结构优化提供关键梯度信息。整个流程涵盖了从有限元分析、应力评估到敏感度计算的核心环节,适用于复杂三维结构的轻量化与高强度设计。; 适合人群:具备有限元分析基础、拓扑优化背景及Matlab编程能力的研究生、科研人员与工程技术人员,尤其适合从事结构设计、力学仿真与多学科优化的相关从业者; 使用场景及目标:①用于实现高精度三维结构的应力约束拓扑优化;②帮助理解伴随法在敏感度分析中的应用原理与编程实现;③服务于科研复现、论文写作与工程项目中的结构性能提升需求; 阅读建议:建议读者结合有限元理论与优化算法知识,逐步调试Matlab代码,重点关注伴随方程的构建与p-范数的数值处理技巧,以深入掌握方法本质并实现个性化拓展。
下载前必看:https://pan.quark.cn/s/9f13b242f4b9 Android 平板设备远程操控个人计算机的指南 Android 平板设备远程操控个人计算机的指南详细阐述了如何运用 Splashtop Remote 应用程序达成 Android 平板设备对个人计算机的远程操控。 该指南被划分为四个环节:首先,在个人计算机上获取并部署 Splashtop Remote 应用程序,并设定客户端密码;其次,在 Android 平板设备上获取并部署 Splashtop Remote 应用程序,并与之建立连接至个人计算机的通道;再次,在 Splashtop Remote 应用程序中识别已部署个人计算机端软件的设备;最后,运用平板设备对个人计算机实施远程操控。 关键点1:Splashtop Remote 应用程序的部署与配置* 在个人计算机上获取并部署 Splashtop Remote 应用程序,可通过官方网站或其他获取途径进行下载。 * 部署结束后,必须输入客户端密码,该密码在平板控制计算机时用作验证,密码长度至少为8个字符,且需包含字母与数字。 * 在配置选项中,能够设定是否在设备启动时自动运行客户端,以及进行互联网搜索设置。 关键点2:Splashtop Remote 应用程序的 Android 版本获取与部署* 在 Android 平板设备上获取并部署 Splashtop Remote 应用程序,可通过 Google Play Store 或其他获取途径进行下载。 * 部署结束后,必须输入客户端密码,该密码用于连接至个人计算机端软件。 关键点3:运用 Splashtop Remote 远程操控个人计算机* 在 Splashtop Remote 应用程序中识别...
### 如何在 Grafana Loki 日志表中更改或自定义字段 要在 Grafana Loki日志表视图中修改或自定义字段,可以通过调整查询语句以及配置面板设置来实现。以下是具体方法: #### 1. 使用 LogQL 查询语言定制字段 Loki 提供了一种专门的日志查询语言——LogQL (Logs Query Language),可以用来过滤、解析和转换日志数据。通过编写合适的表达式,能够提取特定的字段或将现有字段重新命名。 例如,在原始日志消息中存在 `level` 和 `message` 字段的情况下,如果希望只显示这些字段或者为其指定新的名称,则可以在 Explore 页面输入如下查询[^1]: ```logql {job="myapp"} | json | level, msg=message ``` 此命令的作用是从标签匹配器 `{job="myapp"}` 中筛选出符合条件的日志条目;接着利用管道符 (`|`) 调用内置函数 `json` 自动解析 JSON 结构化日志中的键值对;最后选取两个感兴趣的字段,并将其中一个重命名为更具描述性的名字(即将原生 key `msg` 替换为 alias `message`)。 #### 2. 配置 Panel Options 显示所需列 除了依赖于强大的查询功能外,还可以进一步优化前端展示效果。当完成初步检索之后,切换至 Visualization Settings 下拉菜单下的 Table tab,这里允许用户手动挑选哪些属性应该呈现出来作为表格里的列项。 - **Fields**: 默认情况下会列出所有可用维度及其对应值。勾选那些对于当前分析场景至关重要的选项即可。 - **Transformations**: 此部分提供了额外的数据处理能力,比如按时间戳分组统计次数等操作。虽然它不会直接影响到最终输出的具体项目列表,但对于某些复杂报表生成而言非常有用。 以上两步结合起来就能达到既满足业务需求又保持界面清晰简洁的目的了。 ```yaml version: "3" networks: loki: services: loki: image: grafana/loki:2.6.0 ports: - "3100:3100" command: - "-config.file=/etc/loki/local-config.yaml" networks: - loki promtail: image: grafana/promtail:2.6.0 volumes: - "/Users/hfy/work/loki/:/var/log/" command: - "-config.file=/etc/promtail/docker-config.yaml" networks: - loki grafana: image: grafana/grafana:latest ports: - "3000:3000" networks: - loki ``` 上述 YAML 文件展示了如何通过 Docker Compose 设置完整的监控栈环境,其中包含了必要的组件如 Loki 数据存储服务、Promtail 日志采集代理以及图形化界面工具 Grafana 。确保按照官方文档指示正确部署各节点之间的网络连接关系以便正常工作[^1]。 #### 注意事项 尽管 LogQL 提供丰富的语法支持帮助我们灵活操控海量非结构化文本信息流,但在实际应用过程中仍需注意以下几点: - 对于未遵循标准格式编写的自由形式字符串来说,可能无法直接适用预设模板进行拆解映射; - 如果目标平台不兼容所期望的新标记名,则需要考虑其他替代方案解决冲突问题。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值