章工运维 章工运维
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)

章工运维

业精于勤,荒于嬉
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)
  • linux

  • windows

  • 中间件

  • 网络

  • 安全

  • 存储

  • 防火墙

  • 数据库

  • 系统

    • vmware

    • ftp

    • nexus

    • harbor

    • confluence&jira

    • loki

      • grafana loki轻量级日志收集系统
      • sonarqube

      • svn

      • other

      • openldap

      • influxdb

      • wordpress

      • kvm

      • argocd

      • jfrog

      • nextcloud

      • RustDesk

      • mail

      • ghost

    • docker

    • other

    • 监控

    • 运维
    • 系统
    • loki
    章工运维
    2023-03-26
    目录

    grafana loki轻量级日志收集系统

    # Loki 日志系统

    # Loki 概述

    Grafana Loki

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

    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
    
    1
    2

    启动 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
    
    1
    2
    3

    docker-compose启动

    version: "3"
    
    networks:
      loki:
    
    services:
      loki:
        image: grafana/loki:2.5.0
        ports:
          - 3100:3100
        volumes:
          - ./config/loki/local-config.yaml:/etc/loki/local-config.yaml
          - /etc/localtime:/etc/localtime
        command: -config.file=/etc/loki/local-config.yaml
        networks:
          - loki
    
      promtail:
        image: grafana/promtail:2.5.0
        volumes:
          - ./config/promtail/config.yml:/etc/promtail/config.yml
          - /var/log:/var/log
          - /etc/localtime:/etc/localtime
        command: -config.file=/etc/promtail/config.yml
        networks:
          - loki
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26

    收集 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  # 收集日志路径
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19

    挂载 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
    
    1
    2
    3
    4

    # 使用 Loki

    访问 grafana 面板

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

    添加数据源

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

    配置 Loki 地址

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

    使用 Loki

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

    # 查看日志

    # Loki 选择器

    查询表达式

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

    匹配运算符

    • = 等于

    • *!= 不相等

    • =~ 正则表达式匹配

    • !~ 不匹配正则表达式 Loki 过滤器 搜索表达式

    • 搜索表达式可以只是文本或正则表达式

    • 表达式接受RE2语法

    • 匹配项区分大小写 过滤器类型

    • |= 行包含字符串。

    • != 行不包含字符串。

    • |~ 行匹配正则表达式。

    • !~ 行与正则表达式不匹配

    {filename="/var/log/nginx/pcb.access.log",job="nginxlogs"} |~ "\"nx_status\":200"
    
    1

    # 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
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    # 注意事项

    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\"},"
    
    1

    增加 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
    
    1
    2
    3
    4
    5
    6
    微信 支付宝
    上次更新: 2023/06/09, 19:14:23

    ← jira和confluence备份恢复操作 centos7环境安装sonarqube→

    最近更新
    01
    shell脚本模块集合
    05-13
    02
    生活小技巧(认知版)
    04-29
    03
    生活小技巧(防骗版)
    04-29
    更多文章>
    Theme by Vdoing | Copyright © 2019-2025 | 点击查看十年之约 | 鄂ICP备2024072800号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式