Loki安装部署

Loki安装部署

1、Loki介绍

Loki 是受 Prometheus 启发由 Grafana Labs 团队开源的水平可扩展,高度可用的多租户日志聚合系统。开发语

言: Google Go。它的设计具有很高的成本效益,并且易于操作。使用标签来作为索引,而不是对全文进行检索,

也就是说,你通过这些标签既可以查询日志的内容也可以查询到监控的数据签,极大地降低了日志索引的存储。

Loki 对标 EFK/ELK,由于其轻量的设计,备受欢迎,Loki 相比 EFK/ELK,它不对原始日志进行索引,只对日志的

标签进行索引,而日志通过压缩进行存储,通常是文件系统存储,所以其操作成本更低,数量级效率更高。

由于 Loki 的存储都是基于文件系统的,所以它的日志搜索时基于内容即日志行中的文本,所以它的查询支持

LogQL,在搜索窗口中通过过滤标签的方式进行搜索和查询。

Loki文档网址:https://grafana.com/docs/loki/latest/

下载网址:https://github.com/grafana/loki/releases

Github Loki:https://github.com/grafana/helm-charts/tree/main/charts/loki-stack

2、Loki架构

Loki 架构如下图所示:

Loki安装部署_第1张图片

Loki 分两部分,Loki 是日志引擎部分,Promtail 是收集日志端。

  • Loki 是主服务器,负责存储日志和处理查询 。
  • promtail 是代理,负责收集日志并将其发送给 loki 。

promtail 是日志收集 client;loki 是日志收集 service,它是一个时间序列数据库,可以作为 Granfna 的数据源

(类似于prometheus),同时它也有 Alert Rule 规则功能,可以向 Alertmanager 发送告警信息;而 Alertmanager

是一个独立的组件,专注于告警处理。

Loki 的数据可以通过Grafana进行展示。

只要在应用程序服务器上安装 promtail 来收集日志然后发送给 Loki 存储,就可以在 Grafana UI 界面通过添加

Loki 为数据源进行日志查询(如果 Loki 服务器性能不够,可以部署多个 Loki 进行存储及查询)。作为一个日志

系统不光只有查询分析日志的能力,还能对日志进行监控和报警。

Promtail 客户端采集日志数据,将其索引并存储在后端持久化存储中。

用户可以使用 LogQL 查询语言来过滤和检索特定的日志记录,并通过 Grafana 的集成来进行可视化分析。

3、Loki工作流程

Loki安装部署_第2张图片

1、promtail 收集并将日志发送给 loki 的 Distributor 组件。

2、Distributor 会对接收到的日志流进行正确性校验,并将验证后的日志分批并行发送到 Ingester。

3、Ingester 接受日志流并构建数据块,压缩后存放到所连接的存储后端。

4、Querier 收到 HTTP 查询请求,并将请求发送至 Ingester 用以获取内存数据 ,Ingester 收到请求后返回符合

条件的数据 ;如果 Ingester 没有返回数据,Querier 会从后端存储加载数据并遍历去重执行查询 ,通过 HTTP 返

回查询结果。

  • Promtail(采集器):Loki 默认客户端,负责采集并上报日志。

  • Distributor(分发器): Distributor 是 Loki 的入口组件,负责接收来自客户端的日志数据,并将其分发给不

    同的 ingester 节点。

  • Ingester(摄取器): Ingester 负责接收并保存来自 Distributor 的日志数据。它将数据写入本地存储,并将

    索引相关的元数据发送给 index 组件。

  • Index(索引): Index 组件负责管理和维护 Loki 中的索引数据结构。

  • Chunks(块文件): Chunks 是 Loki 中日志数据的物理存储形式。

  • Querier(查询器): Querier 是用于查询 Loki 中日志数据的组件。

4、LPG(Loki+Promtail+Grafana)与ELK比较优势

ELK 虽然功能丰富,但规模复杂,资源占用高,操作苦难,很多功能往往用不上,有点杀鸡用牛刀的感觉。loki 不

对日志进行全文索引。通过存储压缩非结构化日志和索引元数据,Loki 操作起来会更简单,更省成本。通过使用

与 Prometheus 相同的标签记录流对日志进行索引和分组,这使得日志的扩展和操作效率更高。安装部署简单快

速,且受 Grafana 原生支持。

架构和组件:

  • Loki:Loki 是一个开源的水平可扩展日志聚合系统,由 Promtail、Loki 和 Grafana 组成。
  • EFK:EFK 是一个集成的解决方案,由 Elasticsearch、Fluentd 和 Kibana 组成。

存储和查询:

  • Loki:Loki 使用了基于日志流的存储方式,将日志数据存储为可压缩的块文件,并达到高度压缩效率。
  • EFK:EFK 使用 Elasticsearch 作为中心化的日志存储和索引引擎。

可扩展性和资源消耗:

  • Loki:Loki 的水平可扩展性非常好,可以处理大规模的日志数据。
  • EFK:Elasticsearch 是一个高度可扩展的分布式存储系统,但它对硬件资源的要求较高,特别是在存储大规模日志数据时。

配置和部署复杂性:

  • Loki:Loki 的配置和部署较为简单。通过使用 Promtail 收集日志,并使用 Grafana 进行查询和可视化,可以

    相对快速地启动和使用。

  • EFK:EFK 的配置和部署相对复杂一些。需要配置 Fluentd 的输入、过滤和输出插件,以及 Elasticsearch 和

    Kibana 的集群设置。

5、Loki安装

这里通过编译好的二进制可执行文件进行安装。

下载地址:https://github.com/grafana/loki/releases/

配置文件参考地址:https://grafana.com/docs/loki/latest/configure/

5.1 下载Loki

# 下载
$ curl -O -L "https://github.com/grafana/loki/releases/download/v2.8.6/loki-linux-amd64.zip"
# 解压
# 解压之后只有一个二进制文件loki-linux-amd64
$ unzip "loki-linux-amd64.zip"
# 授权
$ chmod a+x "loki-linux-amd64"
# 查看版本
$ ./loki-linux-amd64 --version
loki, version 2.8.6 (branch: HEAD, revision: 990ac685e)
  build user:       root@75d791293cbe
  build date:       2023-10-17T14:27:04Z
  go version:       go1.20.10
  platform:         linux/amd64

5.2 下载Promtail

# 下载
$ curl -O -L "https://github.com/grafana/loki/releases/download/v2.8.6/promtail-linux-amd64.zip"
# 解压
# 解压之后只有一个二进制文件promtail-linux-amd64
$ unzip "promtail-linux-amd64.zip"
# 授权
$ chmod a+x "promtail-linux-amd64"
# 查看版本
$ ./promtail-linux-amd64 --version
promtail, version 2.8.6 (branch: HEAD, revision: 990ac685e)
  build user:       root@75d791293cbe
  build date:       2023-10-17T14:27:04Z
  go version:       go1.20.10
  platform:         linux/amd64

5.3 Loki配置文件

loki 配置文件:loki_config.yaml

auth_enabled: false

server:
  # http监听端口,代理服务(promtail)会向此端口发送日志流
  http_listen_port: 3100
  # grpc监听端口
  grpc_listen_port: 3110
  # grpc最大接收消息值,默认4M
  grpc_server_max_recv_msg_size: 1073741824
  # grpc最大发送消息值,默认4M
  grpc_server_max_send_msg_size: 1073741824

ingester:
  lifecycler:
    address: 192.168.151.195
    ring:
      kvstore:
        store: inmemory
      replication_factor: 1
    final_sleep: 0s
  chunk_idle_period: 5m
  chunk_retain_period: 30s
  max_transfer_retries: 0
  # 一个timeseries块在内存中的最大持续时间,如果timeseries运行的时间超过此时间,则当前块将刷新到存储并创建一个新块
  max_chunk_age: 20m

schema_config:
  configs:
    # 2020-10-24之后loki信息用下面的配置,这个主要是用来做兼容的
    - from: 2020-10-24
      # 索引使用哪种存储,还有boltdb-shipper
      store: boltdb
      # 怎么存储,简单部署的话保存在本地文件系统
      object_store: filesystem
      # 版本
      schema: v11
      # 索引怎么更新和存储
      index: 
        # 索引前缀
        prefix: index_
        # 索引期限168小时,每张表的时间范围7天
        period: 168h

storage_config:
  boltdb:
    # 索引文件存储地址
    directory: /data/loki/index
  filesystem:
    # 块存储地址
    directory: /data/loki/chunks

limits_config:
  enforce_metric_name: false
  reject_old_samples: true
  reject_old_samples_max_age: 168h
  # 修改每用户摄入速率限制,即每秒样本量,默认值为4M
  ingestion_rate_mb: 30
  # 修改每用户摄入速率限制,即每秒样本量,默认值为6M
  ingestion_burst_size_mb: 15

# 若不需要清理日志,以下配置均可删除
chunk_store_config:
  # 最大日志可见时间,回看日志行的最大时间,只适用于即时日志
  # 最大可查询历史日期28天,这个时间必须是schema_config中的period的倍数,否则报错
  # max_look_back_period: 168h
  max_look_back_period: 0s

table_manager:
  # 日志保留周期开关,默认为false
  retention_deletes_enabled: false
  # 日志保留周期
  # 表的保留期28天
  # retention_period: 672h
  retention_period: 0s
  
ruler:
  # 告警地址,简单部署沿用即可
  alertmanager_url: http://192.168.151.195:9093
  
analytics:
  # 关闭向loki团队发送此配置文件
  reporting_enabled: false

# 默认配置
common:
  # 默认的路径前缀
  path_prefix: /data/loki
  storage:
    filesystem:
      # 压缩后的日志,存储在这个目录
      chunks_directory: /data/loki/chunks
      # 一些告警规则和查找规则,存储在这个目录,简单部署不用管
      rules_directory: /data/loki/rules
  # 简单部署不用管
  replication_factor: 1
  # 哈希环配置,简单部署不用管
  ring:
    # 一般为部署loki的机器的ip
    instance_addr: 192.168.151.195
    kvstore:
      # 沿用即可
      store: inmemory
   
compactor:
  # compactor运行状态保存目录
  working_directory: /data/loki/compactor
  shared_store: filesystem
  # 启动日志删除
  retention_enabled: true
  # compactor每隔10分钟运行一次
  compaction_interval:  10m
  # 在compactor运行2小时后删除
  retention_delete_delay: 2h
  # 用150个worker删除chunks
  retention_delete_worker_count: 150

5.4 Promtail配置文件

promtail 配置文件:promtail_config.yaml

server:
  # 监听端口
  http_listen_port: 9080
  # gRPC服务监听的端口(表示随机)
  grpc_listen_port: 0
  # grpc最大接收消息值,默认4M
  grpc_server_max_recv_msg_size: 900000000000
  # grpc最大发送消息值,默认4M
  grpc_server_max_send_msg_size: 900000000000
 
positions:
  # romtail保存文件的位置,服务异常关闭,启时可以继续在中断处继续采集,文件保存日志采集进度
  filename: ./ositions.yaml
 
clients:
  # oki接收日志的地址
  - url: http://192.168.151.195:3100/loki/api/v1/push
    batchwait: 10s
    batchsize: 40960000

# 日志采集配置
scrape_configs:
# 这个随意配置
- job_name: test 
  static_configs:
  - targets:
      - localhost
    labels:
      # note,host,server,level自己定义的标签,根据自己需要改动
      note: gl01
      host: zsx1
      server: 192.168.151.195
      level: info
      # 从此文件采集的日志会被打上上面的4个标签,支持正则
      __path__: /opt/logs/info.log
  - targets:
      - localhost
    labels:
      note: gl02
      host: zsx2
      server: 192.168.151.196
      level: error
      __path__: /opt/logs/error.log
# 日志文件
$ cat /opt/logs/info.log
[INFO] Hello
[INFO] World

$ cat /opt/logs/error.log
[ERROR] Bad
[ERROR] Now

5.5 启动

# 启动loki
$ nohup ./loki-linux-amd64 --config.file=loki_config.yaml > loki.out 2>&1 &
# 启动promtail
$ nohup ./promtail-linux-amd64 --config.file=promtail_config.yaml > promtail.out 2>&1 &
# 查看进程
$ ps -ef | grep loki
$ ps -ef | grep promtail

6、使用Grafana查询日志

Grafana的安装请参考:

https://blog.csdn.net/qq_30614345/article/details/131261635

6.1 配置Grafana Loki数据源

访问Grafana:

Loki安装部署_第3张图片

Loki安装部署_第4张图片

配置数据源:

Loki安装部署_第5张图片

Loki安装部署_第6张图片

Loki安装部署_第7张图片

填写相关信息:

Loki安装部署_第8张图片

点击测试连接:

Loki安装部署_第9张图片

回到主页:

Loki安装部署_第10张图片

6.2 进行查询

点击Explore:

Loki安装部署_第11张图片

Loki安装部署_第12张图片

选择loki数据源:

Loki安装部署_第13张图片

输入查询条件:

{host="zsx1",note="gl01",server="192.168.151.195"}

Loki安装部署_第14张图片

# 对Hello进行筛选
{host="zsx1",note="gl01",server="192.168.151.195"} |= "Hello"

Loki安装部署_第15张图片

6.3 标签筛选

Loki安装部署_第16张图片

红色框中生成的为查询 LogQL,后面我们将对 LogQL 进行介绍。

也可以对时间进行筛选:

Loki安装部署_第17张图片

至此,Loki + promtail + Grafana 部署完毕。

你可能感兴趣的:(prometheus,loki)