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

相关文章

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

Qt spdlog日志模块的使用详解

《Qtspdlog日志模块的使用详解》在Qt应用程序开发中,良好的日志系统至关重要,本文将介绍如何使用spdlog1.5.0创建满足以下要求的日志系统,感兴趣的朋友一起看看吧... 目录版本摘要例子logmanager.cpp文件main.cpp文件版本spdlog版本:1.5.0采用1.5.0版本主要

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一

golang 日志log与logrus示例详解

《golang日志log与logrus示例详解》log是Go语言标准库中一个简单的日志库,本文给大家介绍golang日志log与logrus示例详解,感兴趣的朋友一起看看吧... 目录一、Go 标准库 log 详解1. 功能特点2. 常用函数3. 示例代码4. 优势和局限二、第三方库 logrus 详解1.

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

SpringBoot项目使用MDC给日志增加唯一标识的实现步骤

《SpringBoot项目使用MDC给日志增加唯一标识的实现步骤》本文介绍了如何在SpringBoot项目中使用MDC(MappedDiagnosticContext)为日志增加唯一标识,以便于日... 目录【Java】SpringBoot项目使用MDC给日志增加唯一标识,方便日志追踪1.日志效果2.实现步

SQL Server清除日志文件ERRORLOG和删除tempdb.mdf

《SQLServer清除日志文件ERRORLOG和删除tempdb.mdf》数据库再使用一段时间后,日志文件会增大,特别是在磁盘容量不足的情况下,更是需要缩减,以下为缩减方法:如果可以停止SQLSe... 目录缩减 ERRORLOG 文件(停止服务后)停止 SQL Server 服务:找到错误日志文件:删除

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL