轻量级日志监控平台LOKI实施方案详解(日志的过滤展示及LOKI告警配置详解)

一、简 介

Loki是受Prometheus启发由Grafana Labs团队开源的水平可扩展,高度可用的多租户日志聚合系统。 开发语言: Google Go。它的设计具有很高的成本效益,并且易于操作。使用标签来作为索引,而不是对全文进行检索,也就是说,你通过这些标签既可以查询日志的内容也可以查询到监控的数据签,极大地降低了日志索引的存储。系统架构十分简单,由以下3个部分组成 :

* Loki 是主服务器,负责存储日志和处理查询 。
* promtail 是代理,负责收集日志并将其发送给 loki(只收集日志,不在本地进行运算) 。
* Grafana 用于 UI 展示。
只要在被监控服务器上安装promtail来收集日志然后发送给Loki存储,就可以在Grafana UI界面通过添加Loki为数据源进行日志查询(如果Loki服务器性能不够,可以部署多个Loki进行存储及查询)。作为一个日志系统不关只有查询分析日志的能力,还能对日志进行监控和报警

二、系 统 架 构

轻量级日志监控平台LOKI实施方案详解(日志的过滤展示及LOKI告警配置详解)

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

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

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

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

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

三、与 ELK 比 较

1、ELK虽然功能丰富,但规模复杂,资源占用高,操作苦难,很多功能往往用不上,有点杀鸡用牛刀的感觉。
2、不对日志进行全文索引。通过存储压缩非结构化日志和仅索引元数据,Loki 操作起来会更简单,更省成本。
3、通过使用与 Prometheus 相同的标签记录流对日志进行索引和分组,这使得日志的扩展和操作效率更高。
4、安装部署简单快速,且受 Grafana 原生支持。

四、LOKI查询类型

1、日志查询返回日志行的内容。
例如:对关键字的统计(五分钟出现WARN次数)

轻量级日志监控平台LOKI实施方案详解(日志的过滤展示及LOKI告警配置详解)

2、度量查询扩展了日志查询,并根据来自日志查询的日志内容计算样本值。
例如:对数据的清洗:五分钟内数据的最小值

轻量级日志监控平台LOKI实施方案详解(日志的过滤展示及LOKI告警配置详解)

五、LOKI架构部署

1、部署环境

服务器 系统 部署软件 版本号 默认端口
被监控服务器 Linux Promtail v2.2.1 9080
LOKI服务器 Linux Loki v2.2.1 3100

2、部署过程

2.1 在应用服务器上部署promtail

curl -O -L "https://github.com/grafana/loki/releases/download/v2.2.1/promtail-linux-amd64.zip"
unzip -q promtail-linux-amd64.zip -d /opt/jzjk/promtail
并新增文件/opt/jzjk/promtail/promtail.yaml
 cat /opt/jzjk/promtail/promtail.yaml

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://loki服务器IP:3100/loki/api/v1/push  

scrape_configs:
- job_name: test_log
  static_configs:
    - targets:
         - localhost
      labels:
        job: test_log
        __path__: /opt/test.log

2.2 在LOKI服务器上部署loki

curl -O -L "https://github.com/grafana/loki/releases/download/v2.2.1/loki-linux-amd64.zip"
unzip -q loki-linux-amd64.zip -d /opt/jzjk/loki

并新增文件/opt/jzjk/loki/loki.yaml
auth_enabled: false

server:
  http_listen_port: 3100 #端口号
  log_level: debug #日志等级为debug

ingester:
  lifecycler:
    address: 127.0.0.1
    ring:
      kvstore:
        store: inmemory
      replication_factor: 1
    final_sleep: 0s
  chunk_idle_period: 5m
  chunk_retain_period: 30s
schema_config:
  configs:
  - from: 2020-05-15
    store: boltdb
    object_store: filesystem
    schema: v11
    index:
      prefix: index_
      period: 168h #每张表的时间范围6天

storage_config:
  boltdb:
    directory: /opt/jzjk/loki/index #索引文件存储地址

  filesystem:
    directory: /opt/jzjk/loki/chunks  #块存储地址

limits_config:
  enforce_metric_name: false
  reject_old_samples: true
  reject_old_samples_max_age: 168h

3.启动服务(先启动LOKI)

nohup /opt/jzjk/loki/loki-linux-amd64 -config.file=/opt/jzjk/loki/loki.yaml &
nohup /opt/jzjk/promtail/promtail-linux-amd64 -config.file=/opt/jzjk/promtail/promtail.yaml &

六、LOKI数据的展示

1.非json格式日志的数据处理

在loki中查看日志全量,发现Log labels 只有2个,假设java后面的数据是我们要获取的变量,仅用现在的Log labels 无法获取,故需要用正则表达式regexp新增我们要获取的数据

轻量级日志监控平台LOKI实施方案详解(日志的过滤展示及LOKI告警配置详解)

通过公式计算新增Log labels名称为“value”

轻量级日志监控平台LOKI实施方案详解(日志的过滤展示及LOKI告警配置详解)

获取纯数据,用图标用于展示(五分钟内最小值)

轻量级日志监控平台LOKI实施方案详解(日志的过滤展示及LOKI告警配置详解)

七、LOKI告警配置

1.在loki配置文件中新增ruler组件,新增内容如下:

ruler:
  storage:
    type: local
local:
#rule规则存储目录
      directory: /tmp/rules
  rule_path: /tmp/scratch
#告警推送地址,对接到prometheus告警地址
  alertmanager_url: http://localhost:9093
  ring:
    kvstore:
      store: inmemory
  enable_api: true

2、确保/tmp/rules及/tmp/scratch目录存在,并在/tmp/rules下新建目录fake(为何是fake,请看下图org_id部分),在fake下创建yaml文件存放告警规则

轻量级日志监控平台LOKI实施方案详解(日志的过滤展示及LOKI告警配置详解)

cat /tmp/rules/fake/aler.yaml 

groups:
  - name: example
    rules:
- alert: test_log_line number
# 日志最近五天的行数大于0就告警
      expr: count_over_time({job="test_log"} [5d]) >0
      for: 1m

3、重启loki进程,打开prometheus的告警页面 prometheus_ip:9093验证告警是否呈现

轻量级日志监控平台LOKI实施方案详解(日志的过滤展示及LOKI告警配置详解)
轻量级日志监控平台LOKI实施方案详解(日志的过滤展示及LOKI告警配置详解)

上一篇:java – 是否可以在现有对象中模拟单个方法?


下一篇:Loki 简明教程