首页 > 其他分享 >grafana Loki 日志采集

grafana Loki 日志采集

时间:2024-09-20 16:48:25浏览次数:8  
标签:存储 配置 grafana 索引 Loki 日志 loki

loki

Loki 是受 Prometheus 启发的水平可扩展,高度可用的多租户日志聚合系统。它的设计具有很高的成本效益,并且易于操作。它不索引日志的内容,而是为每个日志流设置一组标签。

日志对比

ELK stack和Graylog,ELK目前很多公司都在使用,是一种很不错的分布式日志解决方案,但是需要的组件多,部署和维护相对复杂,并且占用服务器资源多。底层存储是es导致占用服务器资源过多

Loki vs ELK

  • Loki 和 ELK(Elasticsearch, Logstash, Kibana)都是常用的日志处理系统,它们各自具有一些优点。下面是 Loki 相对于 ELK 的几个优点:
  • 存储效率更高:Loki 使用了压缩和切割日志数据的方法来减少存储空间的占用,相比之下,ELK 需要维护一个大的索引,需要更多的存储空间。
  • 查询速度更快:Loki 使用类似 Prometheus 的标签索引机制存储和查询日志数据,这使得它能够快速地进行分布式查询和聚合,而不需要将所有数据都从存储中加载到内存中。而ELK需要将数据从存储中加载到内存中进行查询,查询速度相对较慢。
  • 部署和管理更容易:Loki 是一个轻量级的日志聚合系统,相比之下,ELK 需要部署和管理多个组件,需要更多的资源和人力成本。

优势

与其他日志聚合系统相比,Loki 有以下特点:
● 不对日志进行全文本索引。通过存储压缩的,非结构化的日志以及仅索引元数据,Loki 更加易于操作且运行成本更低。
● 使用与 Prometheus 相同的标签对日志流进行索引和分组,从而使您能够使用与 Prometheus 相同的标签在指标和日志之间无缝切换。
● 特别适合存储 Kubernetes Pod 日志。诸如 Pod 标签之类的元数据会自动被抓取并建立索引。
● 在 Grafana 中具有本机支持(需要 Grafana v6.0)。

Loki 配置

auth_enabled: false

server:
  http_listen_port: 3100 # 配置HTTP监听端口号为3100。
  graceful_shutdown_timeout: 60s # 配置优雅停机的超时时间为60秒。
  http_server_read_timeout: 60s # 配置HTTP服务器读取超时时间为60秒。
  http_server_write_timeout: 60s # 配置HTTP服务器写入超时时间为60秒。


ingester: # 配置Loki的ingester部分,用于接收和处理日志数据。
  lifecycler: # 配置生命周期管理器,用于管理日志数据的生命周期。
    address: 127.0.0.1 # 配置生命周期管理器的地址
    ring:  # 配置哈希环,用于将日志数据分配给不同的Loki节点
      kvstore:  # 配置键值存储,用于存储哈希环的节点信息。 支持consul、etcd或者memroy,三者选其一
        store: inmemory  # 配置存储引擎为inmemory,即内存中存储
      replication_factor: 1  # 配置复制因子为1,即每个节点只存储一份数据。
    final_sleep: 0s # 配置最终休眠时间为0秒,即关闭时立即停止。
  chunk_idle_period: 1h       # 配置日志块的空闲时间为1小时。如果一个日志块在这段时间内没有收到新的日志数据,则会被刷新。
  max_chunk_age: 1h          # 配置日志块的最大年龄为1小时。当一个日志块达到这个年龄时,所有的日志数据都会被刷新。
  chunk_target_size: 1048576  # 配置日志块的目标大小为2048576字节(约为1.5MB)。如果日志块的空闲时间或最大年龄先达到,Loki会首先尝试将日志块刷新到目标大小。
  chunk_retain_period: 30s    # 配置日志块的保留时间为30秒。这个时间必须大于索引读取缓存的TTL(默认为5分钟)。
  max_transfer_retries: 0     # 配置日志块传输的最大重试次数为0,即禁用日志块传输。
  wal:
    enabled: true
    dir: /loki/wal

schema_config:  # 配置Loki的schema部分,用于管理索引和存储引擎。
  configs: # 配置索引和存储引擎的信息。
    - from: 2023-05-01  # 配置索引和存储引擎的起始时间。
      store: boltdb-shipper # 配置存储引擎为boltdb-shipper,即使用BoltDB存储引擎。
      object_store: filesystem # 配置对象存储引擎为filesystem,即使用文件系统存储。
      schema: v11 # 配置schema版本号为v11。
      index: # 配置索引相关的信息。
        prefix: index_  # 配置索引文件的前缀为index_。
        period: 24h  # 配置索引文件的周期为24小时。

storage_config: # 配置Loki的存储引擎相关的信息。
  boltdb_shipper:  # 配置BoltDB存储引擎的信息。
    active_index_directory: /loki/boltdb-shipper-active # 配置活动索引文件的存储目录为/tmp/loki/boltdb-shipper-active。
    cache_location: /loki/boltdb-shipper-cache  # 配置BoltDB缓存文件的存储目录为/tmp/loki/boltdb-shipper-cache。
    cache_ttl: 240h        # 配置BoltDB缓存的TTL为240小时。
    shared_store: filesystem # 配置共享存储引擎为filesystem,即使用文件系统存储。
  filesystem: # 配置文件系统存储引擎的信息,即日志数据的存储目录为/tmp/loki/chunks
    directory: /loki/chunks

compactor: # 配置日志压缩器的信息。
  working_directory: /loki/boltdb-shipper-compactor # 配置工作目录为/tmp/loki/boltdb-shipper-compactor。
  shared_store: filesystem  #配置共享存储引擎为filesystem,即使用文件系统存储
limits_config: # 配置Loki的限制策略。
  reject_old_samples: true  # 配置是否拒绝旧的日志数据。
  reject_old_samples_max_age: 168h  # 配置拒绝旧的日志数据的最大年龄为168小时。
  ingestion_rate_mb: 64 # 配置日志数据的最大摄入速率为64MB/s。
  ingestion_burst_size_mb: 128 # 配置日志数据的最大摄入突发大小为128MB。
  max_streams_matchers_per_query: 100000 # 配置每个查询的最大流匹配器数量为100000。
  max_entries_limit_per_query: 50000 # 配置每个查询的最大条目限制为50000。


chunk_store_config:  # 配置日志数据的存储策略。
  max_look_back_period: 0s # 配置最大回溯时间为240小时。

table_manager:  # 配置Loki的表管理器。
  retention_deletes_enabled: false  # 配置是否启用保留期删除。
    # retention_period: 240h # 配置保留期为240小时。
  retention_period: 0s

ruler:
  storage:
    type: local
    local:
      directory: /loki/rules
  rule_path: /loki/rules-temp
  alertmanager_url: http://localhost:9093
  ring:
    kvstore:
      store: inmemory
  enable_api: true

promtail 配置

#  配置 promtail 程序运行时行为。如指定监听的ip、port等信息。
server:
  http_listen_port: 9080
  grpc_listen_port: 0
# positions 文件用于记录 Promtail 发现的目标。该字段用于定义如何保存 postitions.yaml 文件
# Promtail 发现的目标就是指日志文件。
positions:
  filename: /etc/promtail/positions.yaml   # 游标记录上一次同步位置
  sync_period: 10s #10秒钟同步一次
# 配置 Promtail 如何连接到 Loki 的多个实例,并向每个实例发送日志。
# Note:如果其中一台远程Loki服务器无法响应或发生任何可重试的错误,这将影响将日志发送到任何其他已配置的远程Loki服务器。
# 发送是在单个线程上完成的! 如果要发送到多个远程Loki实例,通常建议并行运行多个Promtail客户端。
clients:
  - url: http://loki:3100/api/prom/push
# 配置 Promtail 如何发现日志文件,以及如何从这些日志文件抓取日志。
scrape_configs:  # 指定要抓取日志的目标。
- job_name: http-log  
  pipeline_stages: 
    - regex:
        expression: "^(?P<time>(\\d{4}-\\d{2}-\\d{2})\\s(\\d{2}:\\d{2}:\\d{2})) (?P<logtype>(\\[(.+?)\\])) (?P<appname>(\\[(.+?)\\])) (?P<requesttype>(\\[(.+?)\\])) (?P<tid>(\\[(.+?)\\])) (?P<cid>(\\[(.+?)\\])) (?P<traceid>(\\[(.+?)\\])) (?P<spanid>(\\[(.+?)\\])) (?P<parentid>(\\[(.+?)\\])) (?P<trace>(trace\\[(.+?)\\])) (?P<data>(.*)) (?P<logcate>(.*))"
    - labels:
        logtype:
        logcate:
    - timestamp:
        source: time
        format: RFC3339Nano
  static_configs:
  - targets:
      - localhost # 指定抓取目标,i.e.抓取哪台设备上的文件
    labels: # 指定该日志流的标签
      job: http-log 
      __path__: /var/logs/http/*.log  # 指定抓取路径,该匹配标识抓取 /var/log/host 目录下的所有文件。注意:不包含子目录下的文件

 

标签:存储,配置,grafana,索引,Loki,日志,loki
From: https://www.cnblogs.com/wuchangsoft/p/18422786

相关文章

  • Django4中的日志管理
    Django4中的日志管理参考:Django配置日志:https://www.cnblogs.com/Neeo/articles/17588553.htmlpython内置模块logging模块:https://www.cnblogs.com/Neeo/articles/10951734.html按照文件大小进行切割日志在你的settings.py中。LOGS_DIRS=os.path.join(BASE_DIR,'logs')if......
  • aop日志管理
    1.//作用于方法的注解@AutoLog("删除图书")importjava.lang.annotation.*;//作用于方法的注解@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic@interfaceAutoLog{Stringvalue()default"";}2.日志插入importcn.hutool.cor......
  • 轻量级日志系统Loki搭建与使用
    参考https://blog.csdn.net/wzpny/article/details/139833234官方文档https://grafana.com/docs/loki/latest/Loki简介Loki是GrafanaLabs团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,......
  • nginx代理grafana
    nginx代理grafana背景我自己nginx不怎么会,然后我的生产环境已经不允许我使用【/】这个根路径了。我只能为其加上一个路径来解析。网络拓扑示意图如图所示,我想在运维电脑上请求grafanaweb。但是这中间夹了几层,目前已知防火墙是放通了负载均衡的80端口到运维电脑上,nginx和负载......
  • nginx: 分析最慢的url(日志中增加请求时长)
    一,设置nginx的日志格式:1,编辑nginx.conf[root@blogconf]#vinginx.conf说明:比默认设置只是在末尾增加了$request_time一项log_formatmain'$remote_addr-$remote_user[$time_local]"$request"''$status$body_bytes_sent"......
  • 痞子衡嵌入式:MCUBootUtility v6.3发布,支持获取与解析启动日志
    --痞子衡维护的NXP-MCUBootUtility工具距离上一个大版本(v5.3.0)发布过去一年了,期间痞子衡也做过三个版本更新,但不足以单独介绍。这一次痞子衡为大家带来了全新重要版本v6.3.x,这次更新主要是想和大家特别聊聊ROM启动日志这个特性的支持。一、v6.0-v6.3更新记录--v5.......
  • 基于Prometheus和Grafana的现代服务器监控体系构建
    引言随着云计算和微服务架构的迅速发展,服务器监控已成为保障系统稳定性和性能的重要手段。Prometheus和Grafana作为两个非常受欢迎的开源项目,为构建现代监控体系提供了强有力的支持。本文将详细探讨如何使用Prometheus和Grafana构建现代服务器监控体系,并结合实际案例进行技术......
  • 关于springcloud中openfeign中服务调用日志输出
    在使用openfeign进行服务调用的时候,我们可以通过一些配置,获取到服务调用的日志输出,可以从消费端看到日志有两种方法:一、使用配置类;二、使用配置文件配置日志输出级别有四种:NONE:不输出(默认)BASIC:只输出请求方式、url、请求成功与否HEADERS:输出请求头的部分信息等FULL:BASIC+HEA......
  • Linux查看日志各种方式
    我发现有很多小伙伴都不会正确地查看日志,总喜欢拿tail和cat去查询,这里我分享一些查看日志的命令。先说结论,less是最适合的一、less方式命令格式1.命令格式:less[参数]文件2.命令功能:less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且l......
  • centos(linux): logrotate是怎么触发日志轮询的?
    一,通过查看crontab中的配置,没有logroate1,查看crontab[[email protected]]#more/etc/crontabSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=root#Fordetailsseeman4crontabs#Exampleofjobdefinition:#.----------------minute(0-59)#......