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:
相关推荐
2401_8576226621 分钟前
SpringBoot框架下校园资料库的构建与优化
spring boot·后端·php
2402_8575893625 分钟前
“衣依”服装销售平台:Spring Boot框架的设计与实现
java·spring boot·后端
哎呦没2 小时前
大学生就业招聘:Spring Boot系统的架构分析
java·spring boot·后端
_.Switch2 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
杨哥带你写代码3 小时前
足球青训俱乐部管理:Spring Boot技术驱动
java·spring boot·后端
AskHarries4 小时前
读《show your work》的一点感悟
后端
A尘埃4 小时前
SpringBoot的数据访问
java·spring boot·后端
yang-23074 小时前
端口冲突的解决方案以及SpringBoot自动检测可用端口demo
java·spring boot·后端
Marst Code4 小时前
(Django)初步使用
后端·python·django
代码之光_19804 小时前
SpringBoot校园资料分享平台:设计与实现
java·spring boot·后端