grafana + loki + promtail 快速搭建本地日志系统

日常我都是使用 ubuntu 系统做开发,可以用 tail 命令很方便地实时查看一个日志文件,比如 nginx 日志 tail -f /var/log/nginx/access.log。

但是开发微服务的时候,本地可能会启动很多个服务,同时生成多个日志文件,tail 或者 multitail 同时查看很多个日志文件的话,就不是很方便了。

常见的日志系统比如 elk、efk,搭建起来比较复杂,又非常耗资源。

今天给大家介绍一个轻量级的日志系统 GLP(grafana loki promtail)。

简介

  • Loki 是受 Prometheus 启发的一种水平可扩展、高度可用、支持多租户的日志聚合系统。它旨在非常具有成本效益且易于操作。它不会索引日志的内容,而是针对每个日志流通过一组标签进行索引。
  • Promtail Promtail 是一个代理工具,将本地日志内容发送到私有的 Grafana Loki 实例或 Grafana Cloud 中。
  • Grafana Grafana 能够查询、可视化、提醒和探索您存储的度量、日志和追踪数据。

安装

Loki

如果你熟悉 docker,你也可以使用 docker 或者 docker-compose 安装,这里我们选择本地安装,下载安装包 github.com/grafana/lok... ,loki 跟 promtail 安装包都在这里下载,你可以一起下载好。

配置 loki,如果你下载的是 deb 或者 rpm 格式的,安装之后配置文件已经帮你生成好了,默认放在 /etc/loki/config.yml。

yaml 复制代码
auth_enabled: false

server:
  http_listen_port: 3100
  grpc_listen_port: 9096

common:
  instance_addr: 127.0.0.1
  path_prefix: /tmp/loki
  storage:
    filesystem:
      chunks_directory: /tmp/loki/chunks
      rules_directory: /tmp/loki/rules
  replication_factor: 1
  ring:
    kvstore:
      store: inmemory

query_range:
  results_cache:
    cache:
      embedded_cache:
        enabled: true
        max_size_mb: 100

schema_config:
  configs:
    - from: 2020-10-24
      store: tsdb # 这里修改成了 tsdb,之前版本是 boltdb-shipper,新版本推荐使用 tsdb
      object_store: filesystem
      schema: v11
      index:
        prefix: index_
        period: 24h

promtail

下载 loki 的页面也可以下载 promtail,promtail 的配置文件很多地方类似于 prometheus,比如 scrape_config,这里重点关注下 pipline_stages、relabel_configs 的相关配置,详细文档可以在 loki 官网 stages 查看。

yaml 复制代码
server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://localhost:3100/loki/api/v1/push

scrape_configs:
  - job_name: kitex
    pipeline_stages:
      - json:
          expressions:
            level: level # json 获取到日志里的 level 字段
      - labels:
          level: # 使用上面获取到的 level 设置为 label
    static_configs:
      - targets:
          - localhost
        labels:
          job: kitex # 设置固定 labels
          __path__: /opt/golang/tmp/log/kitex.log

这里我是要收集本地一些 kitex 项目的日志

单行日志格式 {"level":"info","msg":"hello world","time":"2024-01-15T00:34:03+08:00"}

grafana

grafana 可以在 grafana 官网 下载,这个没有太多要解释的,如果需要深入了解可以多看看官方文档,loki 暂时我们使用 explore 界面来查看收集到的日志

使用

打开 grafana,添加一个 Data sources,类型选择 loki,地址就填 http://127.0.0.1:3100 拉到最下边,Save & test

打开 Explore 界面,Label filters 选择刚刚设置好的 label, job=kitex

选中 wrap lines 日志太长会换行,prettify json 可以展开 json 日志

对于堆栈日志会提示 Your logs might have incorrectly escaped content

可以点击右边的 Escape newlines

查看日志就非常方便了

如果需要增加日志文件,只需要新增一个 target,搜索的时候也可以按 level 来搜索,当然也可以增加其他的 label,比如在日志里增加项目名 {"app": "product"},只需要将 pipeline_stages 修改成下面的样子

yaml 复制代码
      - json:
          expressions:
            level: level # json 获取到日志里的 level 字段
            app: app # json 获取到日志里的 app 字段
      - labels:
          level: # 使用上面获取到的 level 设置为 label
          app:
相关推荐
geovindu6 分钟前
rust: pool Pattern
开发语言·后端·设计模式·rust·对象池简写模式
Rain的Java大神之路9 分钟前
Java 工程师做 AI,核心机会在「落地」而非「训练」
java·后端·ai编程
柠檬味拥抱11 分钟前
基于 YOLO11 的六类生活垃圾视觉分类系统 | 用于社区投放点智能督导、分拣线品类分流、投错率统计分析 | 附完整源码与效果演示
后端
程序员小新70027 分钟前
RAG 实战与踩坑:交通法规智能问答助手
人工智能·后端
拖孩28 分钟前
AI 时代,个人开发者到底能不能靠一个小程序赚到钱
前端·后端·微信小程序
EAIReport36 分钟前
SpringBoot 与 SpringCloud 深度解析:核心特点、差异与协同关系
spring boot·后端·spring cloud
梦里寻码40 分钟前
从 0 到 1 用 NestJS + LangChain 搭一套可售卖的 SaaS AI 客服:挂件一行代码接入,知识库秒变 SEO 帮助中心
前端·后端·github
imDwAaY43 分钟前
程序为什么会卡在死锁里?从四个必要条件到预防与解除
后端·操作系统
Bazingga1 小时前
知识注入的两条路:RAG知识库与Skills蒸馏
后端
QQ14220784491 小时前
基于 Flask 的「自动任务控制台」设计与踩坑实录
后端·python·flask