loki-日志

2023-12-23 03:28
文章标签 日志 loki

本文主要是介绍loki-日志,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

一、loki

Github

  • ELK虽然功能丰富,但规模复杂,资源占用高,操作苦难,很多功能往往用不上,lokiprometheus 启发的水平可扩展、高可用、多租户日志聚合系统,它的设计非常经济高效且易于操作,不对日志进行全文索引。而是为每个日志流建立一组标签,并通过存储压缩非结构化日志和索引元数据
  • 特别适合存储 Kubernetes Pod 日志。Pod 标签等元数据会自动抓取并建立索引

1. 配置文件

参考一

  • 配置文件说明
auth_enabled: false				# 通过 X-Scope-OrgID 标头启用身份验证,如果为 true,则必须存在。 如果为 false,则 OrgID 将始终设置为“ fake”,默认值:trueserver:							# 用于配置 loki 提供 http 和 gRPC 这两种服务的行为http_listen_port: 3100		# Loki http 监听端口号为3100grpc_listen_port: 9096		# Loki grpc 监听端口号为3100# 通用配置,从 2.4 版本开始,common 字段将会逐步代替其他描述不清晰的字段,比如 common.storage 将会代替 storage_cofig 字段
common:							# 通用配置,用于配置一些其他配置部分可以共享的配置,比如存储、优先级低,若其他部分指定了相同的配置,则该配置在对应的其他部分的配置将被忽略instance_addr: 127.0.0.1		# Loki 实例地址path_prefix: /tmp/loki		# Loki 路径前缀storage:						# 存储配置filesystem:chunks_directory: /tmp/loki/chunksrules_directory: /tmp/loki/rulesreplication_factor: 1ring:kvstore:store: inmemoryquery_range:results_cache:cache:embedded_cache:enabled: true			# 启用结果缓存max_size_mb: 100		# 缓存的最大大小(以MB为单位)storage_config:boltdb_shipper:active_index_directory: /tmp/loki/boltdb-shipper-active		# 配置活动索引文件的存储目录为/tmp/loki/boltdb-shipper-activecache_location: /tmp/loki/boltdb-shipper-cache				# 配置BoltDB缓存文件的存储目录为/tmp/loki/boltdb-shipper-cachecache_ttl: 24				# 配置BoltDB缓存的TTLshared_store: s3			# 使用 s3 作为数据存储aws:s3: s3://admin:minio@0304@minio.yeemiao.net.cn/buckets/lokis3forcepathstyle: trueschema_config:configs:- from: 2020-10-24store: boltdb-shipperobject_store: filesystemschema: v11index:prefix: index_period: 24hruler:alertmanager_url: http://localhost:9093	 # Alertmanager的URLtable_manager:					# 日志保存时长retention_deletes_enabled: trueretention_period: 24h  		# 必须是24小时的倍数

案例配置文件

auth_enabled: falseserver:http_listen_port: 3100     #如是云服务需打开3100端口grpc_listen_port: 9096grpc_server_max_recv_msg_size: 8388608grpc_server_max_send_msg_size: 8388608ingester:lifecycler:address: 0.0.0.0      #监听地址,可不做修改。ring:kvstore:store: inmemoryreplication_factor: 1final_sleep: 0schunk_idle_period: 5mchunk_retain_period: 30smax_transfer_retries: 0ingester_client:remote_timeout: 2mschema_config:configs:- from: 2023-01-29store: boltdbobject_store: filesystemschema: v11index:prefix: index_period: 168hstorage_config:boltdb:directory: /data/tools/Loki/data/index   #自定义boltdb目录(在loki目录下新建data文件来存放)filesystem:directory: /data/tools/Loki/data/chunks        #自定义filesystem目录(在loki目录下新建data文件来存放)#positions:
#  filename: /data/tools/Loki/logs/loki-3100.log
#  rimestamp: utp
#  rotation:
#    max_age: 7d
#    max_size: 100MiBlimits_config:enforce_metric_name: falsereject_old_samples: truereject_old_samples_max_age: 168h#ngestion_rate_strategy: localingestion_rate_mb: 30ingestion_burst_size_mb: 60per_stream_rate_limit: 10MBper_stream_rate_limit_burst: 20MBmax_query_length: 0hchunk_store_config:max_look_back_period: 0stable_manager:retention_deletes_enabled: falseretention_period: 180h

2. 启动

Githup loki

3. 性能和原理

1). 组件介绍

参考一

  • Loki实现由众多的组件组成, 每个组件都会拉起一个gRPC的服务来实现内部互通, 同时也对外暴露了一个HTTP/1的服务用来提供外部服务以应答API请求. 不同的组件会根据角色的差异提供不同的API, 目前loki主要由以下几个组件构成
    • Distributor
      • 主要负责分发从客户端上报的日志, 在进行完日志的校验之后便会分发给ingester处理. Distributor使用了一致性哈希以及一个可以配置的副本数来决定不同的日志流的后端ingester. 哈希环信息的存储使用了Consul. Ingester会根据自身的状态注册在哈希环上来标识自身可提供服务的状态. Distributor会使用注册租户id和标签集时作为哈希的输入, 计算出对应的哈希环位置, 并找到对应的ingester
    • Ingester
      • Ingester是loki中比较核心的服务, 该服务将从Distributor发送来的日志进行转储到后端存储, 并给Querier提供仍在内存中未写盘的数据查询功能. Ingester注册在哈希环上的状态有PENDING, JOINING, ACTIVE, LEAVING, UNHEALTHY, 除了ACTIVE状态外, 其余状态都只会提供部分服务 在存储到真正的存储前, 日志流只有按顺序收到才会被处理, Ingester会按照标签的组合set构建若干压缩过的chunks, 间隔一段时间将chunks作为整体刷写到后端存储. 刷进后端存储的chunks被标记为只读
    • Query frontend(Optional)
      • Querier frontend 的部署可以为查询提供加速, 他提供了排队, 切分大请求, 缓存等机制
    • Querier
      • Querier则是用来提供查询服务, 他使用了LogQL, 一种类似于PromQL的语言作为用户界面. Querier会查询已经写入后端存储的chunks以及仍在ingester内存中的数据, 根据label查找数据后, 再遍历数据查找到满足条件的日志
    • Chunk Store
      • Chunk Store是Loki的后端存储框架, 可以支持多种存储方式, 存储分为两部分:索引的存储和真正的日志数据存储
      • 索引存储目前可以使用 Amazon DynamoDB, Google Bigtable, Apsache Cassandra服务提供 日志存储使用了KV存储,目前可以使用Amazon DynamoDB, Google Bigtable, Apsache Cassandra, Amazon S3, Google Cloud Store来实现

2). 特点

参考一

  • lokiES 最大的不同是 loki 只对标签进行索引而不对内容索引, ES 无论你查不查,巨大的索引开销必须时刻承担
  • loki 只对标签进行索引,那么性能上就有局限,为了弥补没有全文索引带来的查询降速使用,Loki 将把查询分解成较小的分片,可以理解为并发的grep,同时支持 index、chunk 和 result缓存提速
  • Loki使用的是自己的查询语言LokiQL,这需要一定的学习曲线

4. 集群

  • loki核心服务distributor、ingester、querier没有分离,而是启动在一个实例当中
  • 抛弃了consul和etcd外部的kv存储,而是直接用 memberlist 在内存中维护集群状态,Loki的memberlist使用的是 gossip协议来让集群内的所有节点达到最终一致性的
  • 使用boltdb-shipper替代其他日志索引方案

Loki2.0版本之后,对于使用boltdb存储索引部分做了较大的重构,采用新的boltdb-shipper模式,可以让Loki的索引存储在S3上,而彻底摆脱Cassandra或者谷歌的BigTable。此后服务的横向扩展将变得更加容易。关于bolt-shipper的更多细节,可以参考:https://grafana.com/docs/loki/latest/operations/storage/boltdb-shipper/

二、prometail

  • prometail是一个跟踪日志文件并将其推送给 Loki 的代理
server:http_listen_port: 9080grpc_listen_port: 0grpc_server_max_recv_msg_size: 15728640grpc_server_max_send_msg_size: 15728640positions:filename: /opt/loki/promtail/positions.yamlclients:- url: http://192.168.66.178:3100/loki/api/v1/pushscrape_configs:
- job_name: app_logstatic_configs:- targets:- localhostlabels:job: varlogs_178__path__: /var/log/*log#__path__: /ceph_root/{dev,test}/apps_data/*/log/*log

这篇关于loki-日志的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/526537

相关文章

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

java -jar example.jar 产生的日志输出到指定文件的方法

《java-jarexample.jar产生的日志输出到指定文件的方法》这篇文章给大家介绍java-jarexample.jar产生的日志输出到指定文件的方法,本文给大家介绍的非常详细,对大家的... 目录怎么让 Java -jar example.jar 产生的日志输出到指定文件一、方法1:使用重定向1、

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

nginx配置错误日志的实现步骤

《nginx配置错误日志的实现步骤》配置nginx代理过程中,如果出现错误,需要看日志,可以把nginx日志配置出来,以便快速定位日志问题,下面就来介绍一下nginx配置错误日志的实现步骤,感兴趣的可... 目录前言nginx配置错误日志总结前言在配置nginx代理过程中,如果出现错误,需要看日志,可以把

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window