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_stagesrelabel_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 选择刚刚设置好的 labeljob=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:
相关推荐
import_random30 分钟前
[macos]rocketmq(安装)
后端
程序员小假1 小时前
你会不会使用 SpringBoot 整合 Flowable 快速实现工作流呢?
java·后端
明月与玄武1 小时前
快速掌握Django框架设计思想(图解版)
后端·python·django
陪我一起学编程1 小时前
关于ORM增删改查的总结——跨表
数据库·后端·python·django·restful
南囝coding1 小时前
这个 361K Star 的项目,一定要收藏!
前端·后端·github
虎鲸不是鱼2 小时前
Spring Boot3流式访问Dify聊天助手接口
java·spring boot·后端·大模型·llm
onlooker66662 小时前
Go语言底层(五): 深入浅出Go语言的ants协程池
开发语言·后端·golang
武子康2 小时前
Java-46 深入浅出 Tomcat 核心架构 Catalina 容器全解析 启动流程 线程机制
java·开发语言·spring boot·后端·spring·架构·tomcat
寻月隐君3 小时前
Solana 开发实战:Rust 客户端调用链上程序全流程
后端·rust·web3
丘山子3 小时前
别再滥用 None 了!这才是 Python 处理缺失值的好方法
后端·python·面试