Loki架构设计思路 ? Loki内部组件介绍 ? Loki配置 Loki的配置比较多,配置在/etc/loki/loki.yaml中,如果需要优化存储或者日志接收出现异常问题时可能需要修改配置。 然而Loki数据存储设计思想是使用尽可能少的索引,因为Loki本身会把数据存储为多个数据块,并通过标签中的索引匹配数据块。 /localhost:3100或者Loki svc地址:https://loki:3100 ?
Grafana 对 Loki 的描述如下: Loki: like Prometheus, but for logs. Loki 由以下3个部分组成: loki是主服务器,负责存储日志和处理查询。 promtail是代理,负责收集日志并将其发送给 loki 。 Grafana用于 UI 展示。 loki上,方便相互通讯。 _1 /run.sh Up 0.0.0.0:3000->3000/tcp loki_loki_1 /usr/bin/loki 选择loki ? 源地址配置http://loki:3100即可 ? 注意:这里的 http://loki:3100,表示访问容器名为loki的3100端口。 点击保存 ?
/helm-chartshelm repo update# kubectl create ns loki# 安装,设置副本数3,使用pvc# 时间较长helm upgrade --install loki grafana/loki-stack --set grafana.enabled=true,grafana.service.type=NodePort,loki.replicas=3,loki.persistence.enabled =true,loki.persistence.storageClassName=rook-ceph-block,loki.persistence.size=50Gi -n loki1.2、配置 ingress : loki-grafana namespace: loki annotations: kubernetes.io/ingress.class: "nginx"spec: tls: - hosts: - loki-grafana.test.com secretName: test-secret rules: - host: loki-grafana.test.com
要查询特定标签的值,只需将其添加到查询条件中。例如:{app="nginx"}将返回所有标签app值为nginx的记录。
优缺点# 与其他日志聚合系统相比, Loki 具有下面的一些特性: 低索引开销 不对日志进行全文索引。通过存储压缩非结构化日志和仅索引元数据,Loki 操作起来会更简单,更省成本。 和 prometheus 采用相同的标签,对接 alertmanager Loki 和 Prometheus 之间的标签一致是 Loki 的超级能力之一 受到 Grafana 原生支持 避免 Loki:相当于 EFK 中的 ElasticSearch ,用于存储日志和处理查询。 LogQL:Loki 提供的日志查询语言,类似 Prometheus 的 PromQL,而且 Loki 支持 LogQL 查询直接转换为 Prometheus 指标。 3.3 loki# Loki 采用读写分离架构,关键组件有: Distributor 分发器:日志数据传输的“第一站”,Distributor 分发器接收到日志数据后,根据元数据和 hash 算法,
前言# 基于 centos7.9 docker-ce-20.10.18 kubelet-1.22.3-0 loki-2.3.0 promtail-2.3.0 这次部署的 loki 整体架构如下, loki name: loki configmap apiVersion: v1 kind: ConfigMap metadata: name: loki namespace: logging labels: app: loki data: loki.yaml: | auth_enabled: false ingester: chunk_idle_period =/etc/loki/loki.yaml volumeMounts: - name: config mountPath: /etc READY STATUS RESTARTS AGE loki-0 1/1 Running 0 3m29s loki-promtail
Loki整体架构 Promtail 介绍 Promtail 将本地日志内容传送到 Loki 实例。需要监控的应用程序的机器上都需要部署该组件。 promtail原理 Loki 介绍 Loki 是用来接受、存储、处理、查询日志的集合体。 组件通信 Loki 提供了两种部署方式: 单体模式,ALL IN ONE:Loki 支持单一进程模式,可在一个进程中运行所有必需的组件。 helm install loki grafana/loki -f loki-config.yaml -n loki # 部署 promtail helm install promtail grafana /promtail -f promtail-config.yaml -n loki loki-config.yaml 配置: # loki 配置 config: limits_config:
Grafana Loki 是一套可以组合成一个功能齐全的日志堆栈组件,与其他日志记录系统不同,Loki 是基于仅索引有关日志元数据的想法而构建的:标签(就像 Prometheus 标签一样)。 Grafana Loki 主要由 3 部分组成: loki: 日志记录引擎,负责存储日志和处理查询 promtail: 代理,负责收集日志并将其发送给 loki grafana: UI 界面 多租户 Loki Loki 运行模式 Loki 针对本地运行(或小规模运行)和水平扩展进行了优化吗,Loki 带有单一进程模式,可在一个进程中运行所有必需的微服务。单进程模式非常适合测试 Loki 或以小规模运行。 Loki 运行哪个组件取决于命令行中的 -target 标志或 Loki 的配置文件中的 target:<string> 部分。 Loki 的每个组件,例如 ingester 和 distributors 都使用 Loki 配置中定义的 gRPC 侦听端口通过 gRPC 相互通信。
运算符Loki语言中有许多运算符用于组合查询条件和函数。以下是一些常用的运算符:==运算符用于比较查询条件中标签的值。例如:{app="nginx"}。!=!
$ mkdir /opt/app/{promtail,loki} -pv # promtail配置文件 $ cat <<EOF> /opt/app/loki/loki.yaml auth_enabled /opt/app/loki/loki # service文件 $ cat <<EOF >/etc/systemd/system/loki.service [Unit] Description /loki -config.file=/opt/app/loki/loki.yaml StandardOutput=syslog StandardError=syslog SyslogIdentifier status loki 使用 grafana上配置loki数据源 image.png grafana-loki-dashsource 在数据源列表中选择 Loki,配置 Loki 源地址: image.png grafana-loki-dashsource-config 源地址配置 http://loki:3100 即可,保存。
Loki 日志系统由以下3个部分组成: Loki是主服务器,负责存储日志和处理查询。 Promtail是专为loki定制的代理,负责收集日志并将其发送给 loki 。 在 promtail 收集并将日志发送给Loki 之后, Distributor 就是第一个接收它们的组件,每秒可以接收数百万次写入。 Loki使用一致性哈希来保证数据流和Ingester的一致性,他们共同在一个哈希环上,哈希环的信息可以存放到etcd、Consul或者内存中。 由于存储的数据类型不同,Loki 的数据块和索引可以使用不同的存储。 目前 Cortex 中已经实现了并行查询,该功能可以扩展到 Loki,通过分布式的 grep 加速查询。
Grafana Loki 配置文件是一个YML文件,在Grafana Loki 快速尝鲜的示例中是loki-config.yaml,该文件包含关于Loki 服务和各个组件的配置信息。 如下是Grafana Loki 快速尝鲜一文中,安装完Loki后的默认配置: auth_enabled: false server: http_listen_port: 3100 grpc_listen_port chunks_directory: /tmp/loki/chunks rules_directory: /tmp/loki/rules replication_factor: 1 ring 没有配置该参数,Loki会在当前工作目录和config/子目录中查找config.yaml。 规则使用的Ring # Ring used by Loki ruler.
/pkg/loki" "github.com/grafana/loki/pkg/util" _ "github.com/grafana/loki/pkg/util/build" "github.com/grafana/loki/pkg/util/cfg" util_log "github.com/grafana/loki/pkg/util/log" "github.com t, err := loki.New(config.Config) util_log.CheckFatal("initialising loki", err, util_log.Logger ", "version", version.Info()) err = t.Run(loki.RunOpts{}) util_log.CheckFatal("running loki" , err, util_log.Logger) } https://github.com/grafana/loki/blob/main/cmd/loki/main.go
Loki语言是一种用于日志分析的查询语言,它具有类似SQL的语法结构,但是专门针对日志数据进行设计。 Loki是Prometheus生态系统中的一个组件,它允许您将日志数据存储在可扩展的分布式系统中,并且使用Loki查询语言查询这些数据。 语法结构Loki语法的基础结构包括以下几个部分:查询语句查询语句是Loki语言中最基本的结构,用于从日志数据中检索特定的记录。查询语句以{}括号包含,其中包含查询条件和操作符。 操作符操作符是Loki语言中用于组合查询条件的逻辑符号。例如,AND操作符and可以将两个或多个查询条件组合在一起,OR操作符or可以将两个或多个查询条件任意组合。 函数Loki语言中提供了许多函数,用于从日志数据中提取和计算数据。这些函数包括count、sum、rate、topk等。关键字Loki语言中有许多关键字用于构建查询语句。
loki简介 Loki是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。 Loki 由以下3个部分组成: loki是主服务器,负责存储日志和处理查询。 promtail是代理,负责收集日志并将其发送给 loki 。 指定命名空间 helm upgrade --install loki --namespace=logging loki/loki 指定配置 helm upgrade --install loki 部署 Loki 工具栈(Loki, Promtail, Grafana, Prometheus) helm upgrade --install loki loki/loki-stack \ -- 然后 按照提示添加 Loki 数据源,Loki 地址为http://loki:3100。
谨慎使用动态标签 过多的标签组合会造成大量的流,它会让Loki存储大量的索引和小块的对象文件。这些都会显著消耗Loki的查询性能。为避免这些问题,在你知道需要之前不要添加标签! 以上这种情况是比较属于典型无界的动态标签值,在loki里面我们用Cardinality来表述它,Cardinality值越高,loki的查询效率越低。。 配置缓存 关于loki的缓存,可以参考小白之前的文章《巧用缓存加速Loki查询》 缓存在Loki的应用比较灵活,你可以让loki所有组件公用一个缓存,也可以让每个loki组件单独使用自己的缓存,具体可以参考小白前面关于 loki分布式部署的相关文章 6. ,这样我们可以快速看到整个Loki配置,便于调试。
序 本文主要研究一下loki的Query kubecon2019_tomkeynote_correlation.png Query loki/pkg/logql/engine.go // Query promql_parser.Value Statistics stats.Result } Query接口定义了Exec方法,返回Result;Result定义了Data、Statistics属性 Exec loki data, Statistics: statResult, }, err } Exec方法执行q.Eval(ctx)及stats.Snapshot Eval loki 之后根据Expr的类型做不同处理,如果是SampleExpr类型执行q.evalSample;如果是LogSelectorExpr类型则执行q.evaluator.Iterator Snapshot loki existing } Snapshot方法从ctx.Value取出StoreData及ChunkData计算res,然后再取出Result,进行Merge及ComputeSummary 小结 loki
1、loki是什么 Loki是一个水平可扩展,高可用性,多租户的日志聚合系统,受到Prometheus的启发。 3、loki组成 Loki由3个组成部分组成: loki 是主服务器,负责存储日志和处理查询。 promtail 是代理,负责收集日志并将其发送给loki。 用户界面的Grafana。 loki loki/loki-stack 自定义namespaces安装 helm upgrade --install loki --namespace=loki-stack loki/loki-stack 选择安装,只安装loki或只安装promtail helm upgrade --install loki loki/loki helm upgrade --install promtail loki/ helm upgrade --install loki loki/loki-stack --set "key1=val1,key2=val2,..."
Loki、ELK、EFK是三种广泛使用的开源日志管理工具。这些工具可以帮助开发人员和运维人员更轻松地管理应用程序的日志数据,包括收集、存储、分析和可视化。 Loki Loki是一个开源、分布式的日志聚合系统,由Grafana Labs推出。Loki的设计目标是为了高效地处理大规模的日志数据,并具有良好的可扩展性。 Loki的最大优点是它具有低资源占用和高效的查询速度。这是因为Loki不需要在处理日志数据时进行索引,而是将数据存储在类似于散列表的内存数据结构中,可以快速地定位和检索日志数据。 扩展性:ELK和EFK具有广泛的扩展性和适应性,可以对多种数据源进行处理;Loki的扩展性相对较弱。 学习曲线:ELK和EFK相对于Loki具有更陡峭的学习曲线,因为它们具有更多的组件和功能。 总的来说,Loki是一个快速、轻量级的日志管理工具,适合处理大量日志数据,并且可以与Prometheus集成,实现更强大的监控功能。
本文仅对Loki进行简单评测,不涉及原理和细节。 部署Loki Loki是grafana团队开发一个日志采集工具。推荐使用helm方式安装loki,官方推荐的tanka需要使用aws的s3服务。 安装helm后直接运行如下命令即可在loki命名空间中部署最简单的loki套件。 # helm repo add loki https://grafana.github.io/loki/charts # helm upgrade --install loki loki/loki-stack loki/loki 0.30.1 v1.5.0 Loki: like Prometheus, but for logs. loki/loki-stack 部署好Loki之后,在grafana中配置Loki的datasource ? 在exporter中就可以通过Loki自动生成的标签查看日志信息。 ?