Promtail + Loki + Grafana实现日志管理系统

参考文献https://blog.csdn.net/weixin_52270081/article/details/124801308

介绍

日志监控告警系统,较为主流的是ELK(Elasticsearch 、 Logstash和Kibana核心套件构成),虽然优点是功能丰富,允许复杂的操作。但是,这些方案往往规模复杂,资源占用高,操作苦难。很多功能往往用不上,大多数查询只关注一定时间范围和一些简单的参数(如host、service等),使用这些解决方案就有点杀鸡用牛刀的感觉了。

所以寻找更轻量级的日志监控系统,所以也就有了EFK(elasticsearch+kibana+filebeat),
搭建参考:EFK轻量级日志系统搭建

另外一种是Promtail + Loki + Grafana核心组件构成,简称PLG,这种是更轻量级的,配置要求也不高,功能简单,但是目的明确,就是日志采集。

Loki的架构也非常简单,使用了和prometheus一样的标签来作为索引,Loki 是受Prometheus启发的水平可扩展、高可用、多租户日志聚合系统。

组件:

promtail: 日志收集的代理,安装部署在需要收集和分析日志的服务器,promtail会将日志发给Loki服务。

Loki: 主服务器,负责存储日志和处理查询。

Grafana:提供web管理界面,数据展示功能。

docker-compose基础文件

version: "3"

networks:
  loki:

services:
  loki:
    image: grafana/loki:2.5.0
    ports:
      - "3100:3100"
    command: -config.file=/etc/loki/local-config.yaml
    networks:
      - loki

  promtail:
    image: grafana/promtail:2.5.0
    volumes:
      - /var/log:/var/log
    command: -config.file=/etc/promtail/config.yml
    networks:
      - loki

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    networks:
      - loki

执行:docker-compose up --build
目的是尝试运行,确保能够正常拉取镜像,并通过运行好的容器,获取相关的配置文件

通过 :
docker cp eb5c3c8c3f5b:/var/lib/grafana/grafana.db /home/Promtail_Loki_Grafana/
docker cp 容器ID:/容器内路径/** /宿主机路径/**
复制容器内文件到宿主机中自定义的目录中(参考以下配置)

docker-compose正式文件

version: "3"
  
networks:
  loki:

services:
  loki:
    image: grafana/loki:2.6.0
    ports:
      - "3100:3100"
    volumes:
      - ./config/loki/:/etc/loki/
    command: -config.file=/etc/loki/local-config.yaml
    networks:
      - loki

  promtail:
    image: grafana/promtail:2.6.0
    volumes:
      - /var/log:/var/log
      - ./config/promtail/:/etc/promtail/
    command: -config.file=/etc/promtail/config.yml
    networks:
      - loki

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    volumes:
      - ./config/grafana/:/etc/grafana/
        #- ./grafana-data:/var/lib/grafana/  #不注释会导致grafana无法登录
    networks:
      - loki

通过 docker-compose up --build 命令启动

local-config.yaml 配置文件参考

auth_enabled: false
  
server:
  http_listen_port: 3100

common:
  path_prefix: /loki
  storage:
    filesystem:
      chunks_directory: /loki/chunks
      rules_directory: /loki/rules
  replication_factor: 1
  ring:
    kvstore:
      store: inmemory

schema_config:
  configs:
    - from: 2020-10-24
      store: boltdb-shipper
      object_store: filesystem
      schema: v11
      index:
        prefix: index_
        period: 24h

ruler:
  alertmanager_url: http://192.168.6.129:9093

promtail/config.yml配置文件参考

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

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

scrape_configs:
- job_name: system
  static_configs:
  - targets:
      - localhost
    labels:
      job: varlogs
      __path__: /var/log/*log

客户端安装以及配置

只需要安装promtail,也可以docker启动安装,也可以二进制安装。
现在通过二进制安装
二进制官方下载地址:https://github.com/grafana/loki/releases

在这里插入图片描述
下载完成后,安装到你要上报日志的服务器中
通过unzip命令解压出一个可执行文件
在这里插入图片描述
这里要创建一个config.yml文件

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://192.168.6.129:3100/loki/api/v1/push #上报到指定的loki日志分析处理服务

scrape_configs:
- job_name: 136system
  static_configs:
  - targets:
      - localhost
    labels:
      job: 136system #在grafana中显示的job分类名称
      __path__: /var/log/*log #要监听上报的日志文件

- job_name: 136device
  static_configs:
  - targets:
      - localhost
    labels:
      job: 136device 
      __path__: /home/giacp/log/device-service/*log

- job_name: 136business
  static_configs:
  - targets:
      - localhost
    labels:
      job: 136business
      __path__: /home/giacp/log/business-service/*log

启动

./promtail-linux-amd64 -config.file=./config.yaml

后台启动

#输入日志到指定位置
nohup ./promtail-linux-amd64 -config.file=./config.yml  > /var/log/promtail.log 2>&1 &
#不需要日志输入,直接为空。
nohup ./promtail-linux-amd64 -config.file=./config.yml  > /dev/null 2>&1 &

grafana

添加数据源
在这里插入图片描述

在这里插入图片描述
这里是填写loki所在的服务ip以及loki端口

在这里插入图片描述

在这里插入图片描述

查看日志

Loki 选择器

查询表达式

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

匹配运算符

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

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

|= 行包含字符串。
!= 行不包含字符串。
|~ 行匹配正则表达式。
!~ 行与正则表达式不匹配

通过关键字过滤

{job="136business"}|~ "Parameters"

在这里插入图片描述

注意事项

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值