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:
相关推荐
小北方城市网21 小时前
微服务注册中心与配置中心实战(Nacos 版):实现服务治理与配置统一
人工智能·后端·安全·职场和发展·wpf·restful
这儿有个昵称1 天前
互联网大厂Java面试场景:从Spring框架到微服务架构的提问解析
java·spring boot·微服务·kafka·grafana·prometheus·数据库优化
爬山算法1 天前
Hibernate(47)Hibernate的会话范围(Scope)如何控制?
java·后端·hibernate
源码宝1 天前
云HIS二次开发实施路径指南
后端·源码·二次开发·saas·云his·医院信息系统
李慕婉学姐1 天前
Springboot旅游景点管理系统2fj40iq6(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
蓝眸少年CY1 天前
(第八篇)spring cloud之zuul路由网关
后端·spring·spring cloud
long3161 天前
弗洛伊德·沃肖算法 Floyd Warshall Algorithm
java·后端·算法·spring·springboot·图论
Loo国昌1 天前
【LangChain1.0】第一篇:基础认知
后端·python·算法·语言模型·prompt
源代码•宸1 天前
Golang原理剖析(channel面试与分析)
开发语言·经验分享·后端·面试·golang·select·channel
鹿角片ljp1 天前
Java多线程编程:从基础到实战的完整指南
java·开发语言·后端