日志系统新贵,Loki到底优秀在哪里?

schema: v11

index:

prefix: index_

period: 24h

storage_config:

boltdb_shipper:

active_index_directory: /opt/app/loki/boltdb-shipper-active

cache_location: /opt/app/loki/boltdb-shipper-cache

cache_ttl: 24h         # Can be increased for faster performance over longer query periods, uses more disk space

shared_store: filesystem

filesystem:

directory: /opt/app/loki/chunks

compactor:

working_directory: /opt/app/loki/boltdb-shipper-compactor

shared_store: filesystem

limits_config:

reject_old_samples: true

reject_old_samples_max_age: 168h

chunk_store_config:

max_look_back_period: 0s

table_manager:

retention_deletes_enabled: false

retention_period: 0s

ruler:

storage:

type: local

local:

directory: /opt/app/loki/rules

rule_path: /opt/app/loki/rules-temp

alertmanager_url: http://localhost:9093

ring:

kvstore:

store: inmemory

enable_api: true

EOF

# service文件

$ cat </etc/systemd/system/loki.service

[Unit]

Description=loki server

Wants=network-online.target

After=network-online.target

[Service]

ExecStart=/opt/app/loki/loki -config.file=/opt/app/loki/loki.yaml

StandardOutput=syslog

StandardError=syslog

SyslogIdentifier=loki

[Install]

WantedBy=default.target

EOF

$ systemctl daemon-reload

$ systemctl restart loki

$ systemctl status loki

grafana 上配置 loki 数据源

在 grafana explore 上配置查看日志

查看日志 rate({job="message"} |="kubelet"

图片

算 qps rate({job="message"} |="kubelet" [1m])

图片

只索引标签

之前多次提到 loki 和 es 最大的不同是 loki 只对标签进行索引而不对内容索引 下面我们举例来看下

静态标签匹配模式

以简单的 promtail 配置举例

配置解读

scrape_configs:

- job_name: system

pipeline_stages:

static_configs:

- targets:

- localhost

labels:

job: message

path: /var/log/messages

  • 上面这段配置代表启动一个日志采集任务

  • 这个任务有 1 个固定标签job="syslog"

  • 采集日志路径为 /var/log/messages , 会以一个名为 filename 的固定标签

  • 在 promtail 的 web 页面上可以看到类似 prometheus 的 target 信息页面

图片

查询的时候可以使用和 prometheus 一样的标签匹配语句进行查询

  • {job="syslog"}

scrape_configs:

- job_name: system

pipeline_stages:

static_configs:

- targets:

- localhost

labels:

job: syslog

path: /var/log/syslog

- job_name: system

pipeline_stages:

static_configs:

- targets:

- localhost

labels:

job: apache

path: /var/log/apache.log

  • 如果我们配置了两个 job,则可以使用{job=~”apache|syslog”} 进行多 job 匹配

  • 同时也支持正则和正则非匹配

标签匹配模式的特点

原理
  • 和 prometheus 一致,相同标签对应的是一个流 prometheus 处理 series 的模式

  • prometheus 中标签一致对应的同一个 hash 值和 refid(正整数递增的 id),也就是同一个 series

  • 时序数据不断的 append 追加到这个 memseries 中

  • 当有任意标签发生变化时会产生新的 hash 值和 refid,对应新的 series

loki 处理日志的模式 - 和 prometheus 一致,loki 一组标签值会生成一个 stream - 日志随着时间的递增会追加到这个 stream 中,最后压缩为 chunk - 当有任意标签发生变化时会产生新的 hash 值,对应新的 stream

查询过程
  • 所以 loki 先根据标签算出 hash 值在倒排索引中找到对应的 chunk?

  • 然后再根据查询语句中的关键词等进行过滤,这样能大大的提速

  • 因为这种根据标签算哈希在倒排中查找 id,对应找到存储的块在 prometheus 中已经被验证过了

  • 属于开销低

  • 速度快

动态标签和高基数

所以有了上述知识,那么就得谈谈动态标签的问题了

两个概念

何为动态标签:说白了就是标签的 value 不固定 何为高基数标签:说白了就是标签的 value 可能性太多了,达到 10 万,100 万甚至更多

promtail 支持在 pipline_stages 中用正则匹配动态标签

  • 比如 apache 的 access 日志

11.11.11.11 - frank [25/Jan/2000:14:00:01 -0500] “GET /1986.js HTTP/1.1” 200 932 “-” “Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 GTB6”

  • 在 promtail 中使用 regex 想要匹配 actionstatus_code两个标签

- job_name: system

pipeline_stages:

- regex:

expression: “^(?P\S+) (?P\S+) (?P\S+) \[(?P[\w:/]+\s[+\-]\d{4})\] “(?P\S+)\s?(?P \S+)?\s?(?P\S+)?” (?P<status_code>\d{3}|-) (?P\d+|-)\s?”?(?P[ “]*)”?\s?"?(?P<useragent>[“]*)?”?$"

- labels:

action:

status_code:

static_configs:

- targets:

- localhost

labels:

job: apache

env: dev

path: /var/log/apache.log

  • 那么对应 action=get/post 和 status_code=200/400 则对应 4 个流

11.11.11.11 - frank [25/Jan/2000:14:00:01 -0500] “GET /1986.js HTTP/1.1” 200 932 “-” “Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 GTB6”

11.11.11.12 - frank [25/Jan/2000:14:00:02 -0500] “POST /1986.js HTTP/1.1” 200 932 “-” “Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 GTB6”

11.11.11.13 - frank [25/Jan/2000:14:00:03 -0500] “GET /1986.js HTTP/1.1” 400 932 “-” “Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 GTB6”

11.11.11.14 - frank [25/Jan/2000:14:00:04 -0500] “POST /1986.js HTTP/1.1” 400 932 “-” “Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 GTB6”

  • 那四个日志行将变成四个单独的流,并开始填充四个单独的块。

  • 如果出现另一个独特的标签组合(例如 status_code =“500”),则会创建另一个新流

高基数问题

  • 就像上面,如果给 ip 设置一个标签,现在想象一下,如果您为设置了标签 ip,来自用户的每个不同的 ip 请求不仅成为唯一的流

  • 可以快速生成成千上万的流,这是高基数,这可以杀死 Loki

  • 所以为了避免高基数则应该避免使用这种取值分位太大的标签

如果字段没有被当做标签被索引,会不会导致查询很慢

Loki 的超级能力是将查询分解为小块并并行分发,以便您可以在短时间内查询大量日志数据

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

小编在这里分享些我自己平时的学习资料,由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

程序员代码面试指南 IT名企算法与数据结构题目最优解

这是” 本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现。针对当前程序员面试缺乏权威题目汇总这一-痛点, 本书选取将近200道真实出现过的经典代码面试题,帮助广“大程序员的面试准备做到万无一失。 “刷”完本书后,你就是“题王”!

image.png

《TCP-IP协议组(第4版)》

本书是介绍TCP/IP协议族的经典图书的最新版本。本书自第1版出版以来,就广受读者欢迎。

本书最新版进行」护元,以体境计算机网络技不的最新发展,全书古有七大部分共30草和7个附录:第一部分介绍一些基本概念和基础底层技术:第二部分介绍网络层协议:第三部分介绍运输层协议;第四部分介绍应用层协议:第五部分介绍下一代协议,即IPv6协议:第六部分介绍网络安全问题:第七部分给出了7个附录。

image.png

Java开发手册(嵩山版)

这个不用多说了,阿里的开发手册,每次更新我都会看,这是8月初最新更新的**(嵩山版)**

image.png

MySQL 8从入门到精通

本书主要内容包括MySQL的安装与配置、数据库的创建、数据表的创建、数据类型和运算符、MySQL 函数、查询数据、数据表的操作(插入、更新与删除数据)、索引、存储过程和函数、视图、触发器、用户管理、数据备份与还原、MySQL 日志、性能优化、MySQL Repl ication、MySQL Workbench、 MySQL Utilities、 MySQL Proxy、PHP操作MySQL数据库和PDO数据库抽象类库等。最后通过3个综合案例的数据库设计,进步讲述 MySQL在实际工作中的应用。

image.png

Spring5高级编程(第5版)

本书涵盖Spring 5的所有内容,如果想要充分利用这一领先的企业级 Java应用程序开发框架的强大功能,本书是最全面的Spring参考和实用指南。

本书第5版涵盖核心的Spring及其与其他领先的Java技术(比如Hibemate JPA 2.Tls、Thymeleaf和WebSocket)的集成。本书的重点是介绍如何使用Java配置类、lambda 表达式、Spring Boot以及反应式编程。同时,将与企业级应用程序开发人员分享一些见解和实际经验,包括远程处理、事务、Web 和表示层,等等。

image.png

JAVA核心知识点+1000道 互联网Java工程师面试题

image.png

image.png

企业IT架构转型之道 阿里巴巴中台战略思想与架构实战

本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。

image.png
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
比如Hibemate JPA 2.Tls、Thymeleaf和WebSocket)的集成。本书的重点是介绍如何使用Java配置类、lambda 表达式、Spring Boot以及反应式编程。同时,将与企业级应用程序开发人员分享一些见解和实际经验,包括远程处理、事务、Web 和表示层,等等。

[外链图片转存中…(img-zWg0afEf-1712943243083)]

JAVA核心知识点+1000道 互联网Java工程师面试题

[外链图片转存中…(img-X2kz6TIA-1712943243084)]

[外链图片转存中…(img-yJDOgM5Z-1712943243084)]

企业IT架构转型之道 阿里巴巴中台战略思想与架构实战

本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。

[外链图片转存中…(img-Xrm3faW0-1712943243084)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值