代码改变世界

轻量级日志解决方案---loki

2024-11-19 18:10  luoguoling  阅读(130)  评论(0)    收藏  举报

日志解决方案--LOKI

架构实现方案

微服务日志---->promtail--->loki<-----grafana

flowchart LR; 微服务日志-->promtail; promtail-->loki; grafana --> loki;

LOKI优势

名称 安装组件 特性 优点
loki grafana,loki,protail 不对全文索引,压缩非结构化和仅索引元数据,使用标签记录流对日志进行索引和分组 占用资源小,grafana原生支持,查询速度快

安装与配置

Loki安装

mkdir -p /opt/plg/loki && cd /opt/plg/loki
curl -O -L "https://github.com/grafana/loki/releases/download/v2.8.6/loki-linux-amd64.zip"  # 请根据实际需求替换版本号
unzip "loki-linux-amd64.zip"
chmod a+x "loki-linux-amd64"

promtail安装

mkdir -p /opt/plg/promtail && cd /opt/plg/promtail
curl -O -L "https://github.com/grafana/loki/releases/download/v2.8.6/promtail-linux-amd64.zip"  # 请确保与Loki版本匹配
unzip "promtail-linux-amd64.zip"
chmod a+x "promtail-linux-amd64"
#日志目录需要设置权限:
setfacl -R -m u:promtail:rx /var/log/nginx/

grafana安装配置

wget https://dl.grafana.com/oss/release/grafana-10.2.0-1.x86_64.rpm
yum install grafana-10.2.0-1.x86_64.rpm

配置文件下载

cd /usr/local/loki  # 如果Loki安装在其他位置,请切换到相应目录
wget https://raw.githubusercontent.com/grafana/loki/v2.8.6/cmd/loki/loki-local-config.yaml  # 同样根据实际版本替换
cd /usr/local/loki  # 切换到Promtail目录
wget https://raw.githubusercontent.com/grafana/loki/v2.8.6/clients/cmd/promtail/promtail-local-config.yaml

loki配置文件

auth_enabled: false

server:
  http_listen_port: 3100
  grpc_listen_port: 9096
  grpc_server_max_recv_msg_size: 104857600  #限制大小100M
  grpc_server_max_send_msg_size: 104857600  #限制大小100M

common:
  instance_addr: 127.0.0.1
  path_prefix: /tmp/loki
  storage:
    #boltdb:
    #  directory: /tmp/loki/index
    filesystem: #存储位置
      chunks_directory: /tmp/loki/chunks
      rules_directory: /tmp/loki/rules
  replication_factor: 1
  ring:
    kvstore:
      store: inmemory

query_range:
  results_cache:
    cache:
      embedded_cache:
        enabled: true
        max_size_mb: 100
compactor:
  working_directory: /data/loki/compactor      # 压缩目录,一般也作为持久化目录
  compaction_interval: 10m                 # 压缩间隔
  retention_enabled: true                  # 持久化开启
  retention_delete_delay: 2h               # 过期后多久删除
  retention_delete_worker_count: 150       # 过期删除协程数目

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

ruler:
  alertmanager_url: http://localhost:9093
limits_config:
  reject_old_samples: true   # 是否拒绝旧样本
  reject_old_samples_max_age: 168h   # 168小时之前的样本被拒绝

chunk_store_config:
  max_look_back_period: 168h  # 为避免查询超过保留期的数据,必须小于或等于下方的时间值
table_manager:
  retention_deletes_enabled: true   # 保留删除开启
  retention_period: 168h  # 超过168h的块数据将被删除,必须为24h的倍数
querier:
  query_timeout: 3m

promtail配置文件

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

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

scrape_configs:
- job_name: system
  static_configs:
  - targets:
      - localhost
    labels:
      job: servicelog
      __path__: /var/log/tima/*log
  - targets:
      - localhost
    labels:
      job: syslog
      __path__: /var/log/message
  #多行合并解决办法
  pipeline_stages:
    - multiline:
        firstline: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}'
    - regex:
        expression: '^(?P<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) (?P<level>INFO|WARN|ERROR) (?P<message>.*)$'
    - labels:
        level:
    - timestamp:
        format: '2006-01-02 15:04:05.000'
        source: time

启动脚本

nohup /usr/local/loki/loki-linux-amd64 -config.file=/usr/local/loki/loki-local-config.yaml >loki.out 2>&1 &
nohup /usr/local/loki/promtail-linux-amd64 -config.file=/usr/local/loki/promtail-local-config.yaml >promtail.out 2>&1 &
systemctl start grafana-server

LogQL语法

语法参考文档:https://grafana.com/docs/loki/latest/query/

#支持符号
= :完全相同。
!= :不平等。
=~ :正则表达式匹配。
!~ :不要正则表达式匹配
# 搜索表达式
|= line 包含字符串。
!= line 不包含字符串。
|~ line 匹配正则表达式。
!~ line 与正则表达式不匹配。

配置grafana

配置loki数据源

导入grafana模板

https://grafana.com/grafana/dashboards/13639-logs-app/

测试环境

测试环境地址
img.png

性能验证:

测试指标: 4核16G 每日日志量: 70GB 测试条件:40Gb日志全量查询最近2天

性能指标 初始值 loki启动 查询
cpu 1.73% 3.3% 5.5%
内存 41% 44% 46%

扩展: 链路监控(tempo) 告警实现
参考 :
https://blog.csdn.net/weixin_49124386/article/details/134188206
https://blog.51cto.com/u_16213716/12513261
https://blog.51cto.com/deva008/10026526 k8s部署