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

相关文章

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

我在移动打工的日志

客户:给我搞一下录音 我:不会。不在服务范围。 客户:是不想吧 我:笑嘻嘻(气笑) 客户:小姑娘明明会,却欺负老人 我:笑嘻嘻 客户:那我交话费 我:手机号 客户:给我搞录音 我:不会。不懂。没搞过。 客户:那我交话费 我:手机号。这是电信的啊!!我这是中国移动!! 客户:我不管,我要充话费,充话费是你们的 我:可是这是移动!!中国移动!! 客户:我这是手机号 我:那又如何,这是移动!你是电信!!

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录 在深度学习项目中,目标检测是一项重要的任务。本文将详细介绍如何使用Detectron2进行目标检测模型的复现训练,涵盖训练数据准备、训练命令、训练日志分析、训练指标以及训练输出目录的各个文件及其作用。特别地,我们将演示在训练过程中出现中断后,如何使用 resume 功能继续训练,并将我们复现的模型与Model Zoo中的

SSM项目使用AOP技术进行日志记录

本步骤只记录完成切面所需的必要代码 本人开发中遇到的问题: 切面一直切不进去,最后发现需要在springMVC的核心配置文件中中开启注解驱动才可以,只在spring的核心配置文件中开启是不会在web项目中生效的。 之后按照下面的代码进行配置,然后前端在访问controller层中的路径时即可观察到日志已经被正常记录到数据库,代码中有部分注释,看不懂的可以参照注释。接下来进入正题 1、导入m

多数据源的事务处理总是打印很多无用的log日志

之前做了一个项目,需要用到多数据源以及事务处理,在使用事务处理,服务器总是打印很多关于事务处理的log日志(com.atomikos.logging.Slf4jLogger),但是我们根本不会用到这些log日志,反而使得查询一些有用的log日志变得困难。那要如何屏蔽这些log日志呢? 之前的项目是提高项目打印log日志的级别,后来觉得这样治标不治本。 现在有一个更好的方法: 我使用的是log

android两种日志获取log4j

android   log4j 加载日志使用方法; 先上图: 有两种方式: 1:直接使用架包 加载(两个都要使用); 架包:android-logging-log4j-1.0.3.jar 、log4j-1.2.15.jar  (说明:也可以使用架包:log4j-1.2.17.jar)  2:对架包输入日志的二次封装使用; 1:直接使用 log4j 日志框架获取日志信息: A:配置 日志 文

Unity Post Process Unity后处理学习日志

Unity Post Process Unity后处理学习日志 在现代游戏开发中,后处理(Post Processing)技术已经成为提升游戏画面质量的关键工具。Unity的后处理栈(Post Processing Stack)是一个强大的插件,它允许开发者为游戏场景添加各种视觉效果,如景深、色彩校正、辉光、模糊等。这些效果不仅能够增强游戏的视觉吸引力,还能帮助传达特定的情感和氛围。 文档

机械学习—零基础学习日志(概率论总笔记5)

引言——“黑天鹅” 要获得95%以上置信度的统计结果,需要被统计的对象出现上千次,但是如果整个样本只有几千字,被统计的对象能出现几次就不错了。这样得到的数据可能和真实的概率相差很远。怎么避免“黑天鹅”? 古德-图灵折扣估计法 在词语统计中,有点词语虽然是出现0次,但是实际的出现概率并不是永远不可能的零。 那需要把一些概率转移给到这些词语。 古德的做法实际上就是把出现1次的单词的总量,给了

如何使用Selenium捕获控制台日志

Selenium是一个流行的开源工具,用于自动化Web浏览器。其中一个关键功能是能够与浏览器的开发者控制台交互。本文将向您展示如何在Selenium中使用Java获取控制台日志。这些日志对于调试和解决Selenium脚本的问题非常有用。 如何查看任何网页的控制台日志 首先,打开浏览器的开发者控制台。在大多数浏览器中,您可以通过右键点击页面并选择“检查”来做到这一点。我们将在我们的测试网站——h

ELK+Spring Cloud搭建分布式日志中心

ELK+Spring Cloud搭建分布式日志中心 1.ELK简介2.资源包下载3.Elasticsearch安装3.1 解压Elasticsearch3.2 修改Elasticsearch的配置文件3.3 修改系统配置3.4 启动Elasticsearch 4.ElasticSearch-head插件安装5.Logstash安装6.Kibana安装7.SpringCloud集成logsta