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:
相关推荐
我命由我123457 分钟前
Java 并发编程 - Delay(Delayed 概述、Delayed 实现、Delayed 使用、Delay 缓存实现、Delayed 延迟获取数据实现)
java·开发语言·后端·缓存·java-ee·intellij-idea·intellij idea
我是天龙_绍1 小时前
java 比对两对象大小 重写 comparator
后端
IT_陈寒1 小时前
Python 3.12新特性实测:10个让你的代码提速30%的隐藏技巧 🚀
前端·人工智能·后端
BingoGo1 小时前
从零开始打造 Laravel 扩展包:开发、测试到发布完整指南
后端·php
9号达人2 小时前
普通公司对账系统的现实困境与解决方案
java·后端·面试
golang学习记2 小时前
Go 1.26 新特性:netip.Prefix.Compare —— 标准化 IP 子网排序能力
后端
花落已飘2 小时前
openEuler容器化实践:从Docker入门到生产部署
后端
Cache技术分享2 小时前
233. Java 集合 - 遍历 Collection 中的元素
前端·后端
回家路上绕了弯2 小时前
五分钟内重复登录 QQ 号定位:数据结构选型与高效实现方案
分布式·后端