grafana Loki 轻量级日志收集系统

Loki 日志系统

Loki 概述

Grafana Loki

  • Loki的第一个稳定版本于2019年11月19日发布
  • 是 Grafana Labs 团队最新的开源项目
  • 是一个水平可扩展,高可用性,多租户的日志聚合系统

Loki 特性

  • 不对日志进行全文索引(vs ELK技)
  • 通过存储压缩非结构化日志和仅索引元数据,Loki 操作起来会更简单,更省成本
  • 通过使用与 Prometheus 相同的标签记录流对日志进行索引和分组,使得日志的扩展和操作效率更高
  • 特别适合储存 Kubernetes Pod 日志; 诸如 Pod 标签之类的元数据会被自动删除和编入索引
  • 适合中小团队对日志平台的需求
  • 受 Grafana 原生支持

Loki 组成

  • loki 是主服务器,负责存储日志和处理查询
  • promtail 是代理,负责收集日志并将其发送给 loki
  • Grafana 用于 UI 展示

安装 Loki

环境说明

演示环境拓扑

  • Loki和grafana服务器:192.168.0.11
  • promtail 日志收集服务器:192.168.0.11,192.168.0.12
  • 使用docker下载并运行镜像
Loki 主服务器

运行 grafana loki

$ docker run -ti -p 3000:3000 grafana/grafana:master
$ docker run -ti -p --name loki 3100:3100 grafana/loki:2.4.1

启动 promtail ,将 promtail 配置文件拷贝到宿主机

$ docker run -ti --name promtail grafana/promtail:2.4.1 -config.file=/etc/promtail/config.yml
$ mkdir /data/soft/promtail
$ docker cp promtail:/etc/promtail/config.yml /data/soft/promtail/config.yml

收集 nginx 日志

  • 修改 promtail 配置文件
  • url: 指定 Loki 地址
$ vim /data/soft/promtail/config.yml
server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://192.168.0.11:3100/loki/api/v1/push

scrape_configs:
- job_name: system
  static_configs:
  - targets:
      - localhost
    labels:
      job: nginxlogs # job 名称
      __path__: /var/log/nginx/*log  # 收集日志路径

挂载 nginx 日志文件目录和 promtail 配置文件到容器

$ docker run -ti --name promtail \
-v /var/log/nginx/:/var/log/nginx/ \
-v /data/soft/promtail/config.yml:/etc/promtail/config.yml \
grafana/promtail:2.4.1 -config.file=/etc/promtail/config.yml
使用 Loki

访问 grafana 面板

  • 默认用户名和密码是 admin
  • http://192.168.0.11:3000

添加数据源

  • 配置选择 DATA SOURCES
  • 点击 Add data source 添加 Loki

添加数据源

新增数据库源

选择 Loki

配置 Loki 地址

  • url 填写正确地址
  • 点击 Save & test 测试并保存

配置正确的Loki地址

检查保存

使用 Loki

  • 切换到 grafana 左侧区域的 Explore
  • 数据库源选择 Loki
  • 点击 Log browser 选择需要查看的日志

切换到 Loki

选择日志点击查看

查看日志

查看日志

Loki 选择器

查询表达式

  • 对于查询表达式的标签部分,将其包装在花括号中{}
  • 使用键值对的语法来选择标签
  • 多个标签表达式用逗号分隔
{filename="/var/log/nginx/pcb.access.log",job="nginxlogs"}

匹配运算符

  • = 等于
  • != 不相等
  • =~ 正则表达式匹配
  • !~ 不匹配正则表达式
Loki 过滤器

搜索表达式

  • 搜索表达式可以只是文本或正则表达式
  • 表达式接受RE2语法
  • 匹配项区分大小写

过滤器类型

  • |= 行包含字符串。
  • != 行不包含字符串。
  • |~ 行匹配正则表达式。
  • !~ 行与正则表达式不匹配
{filename="/var/log/nginx/pcb.access.log",job="nginxlogs"} |~ "\"nx_status\":200"

lLoki 过滤器

promtail

客户端收集日志

将需要收集的日志挂载到 promtail 容器

  • 客户端仅启动 promtail 日志收集容器

  • -v 宿主机日志目录:/var/log/****

promtail 配置说明

  • 支持通配符 *, 表示所有,比如 *.log
  • 多个日志目录可以使用 {path1,path2,…pathN} 区分
  • 不同的 job 使用 targets 区分
  - targets:
      - localhost
    labels:
      job: logsname1
      __path__: /var/log/path1/*log

  - targets:
      - localhost
    labels:
      job: logsname2
      __path__: /var/log/path2/*log
注意事项

promtail 报 429 错误

  • 收集的日志太多了,超过了 loki 的限制
level=warn ts=2021-12-02T06:27:01.372586524Z caller=client.go:349 component=client host=192.168.0.11:3100 msg="error sending batch, will retry" status=429 error="server returned HTTP status 429 Too Many Requests (429): entry with timestamp 2021-12-02 06:27:01.316127865 +0000 UTC ignored, reason: 'Per stream rate limit exceeded (limit: 3MB/sec) while attempting to ingest for stream '{filename=\"/var/log/nginx/nginx.log\", job=\"nginxlogs\"}' totaling 1697740B, consider splitting a stream via additional labels or contact your Loki administrator to see if the limt can be increased' for stream: {filename=\"/var/log/nginx/nginx.log\", job=\"nginxlogs\"},"

增加 Loki 限制

limits_config:
  enforce_metric_name: false
  reject_old_samples: true
  reject_old_samples_max_age: 168h
  ingestion_rate_mb: 40
  ingestion_burst_size_mb: 20
  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值