前言:小伙伴们是用什么看日志的呢?我是用的loki,今天我跟大家分享下loki的使用,喜欢的话一键三连点收藏哦!

loki使用超详细说明

  • 一、loki简介
  • 二、Loki 使用
  • 三、Loki语法说明
  • 四、Loki错误信息查看
  • 五、范围查询
  • 六、集合运算
  • 七、Loki Url 表达式编写
  • 八、Loki api使用

一、loki简介

Loki是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签。项目受 Prometheus 启发,官方的介绍就是:Like Prometheus, but for logs,类似于 Prometheus 的日志系统。

与其他日志聚合系统相比,Loki具有下面的一些特性:

  • 不对日志进行全文索引。通过存储压缩非结构化日志和仅索引元数据,Loki 操作起来会更简单,更省成本。
  • 通过使用与 Prometheus 相同的标签记录流对日志进行索引和分组,这使得日志的扩展和操作效率更高。
  • 特别适合储存 Kubernetes Pod 日志; 诸如 Pod 标签之类的元数据会被自动删除和编入索引。
  • 受 Grafana 原生支持。
    Loki 由以下3个部分组成:

loki是主服务器,负责存储日志和处理查询。

  • promtail是代理,负责收集日志并将其发送给 loki 。
  • Grafana用于 UI 展示

二、Loki 使用

切换到 grafana 左侧区域的Explore,即可进入到Loki的页面:



然后点击Log labels就可以把当前系统采集的日志标签给显示出来,可以根据这些标签进行日志的过滤查询

三、Loki语法说明

选择器
对于查询表达式的标签部分,将其包装在花括号中{},然后使用键值对的语法来选择标签,多个标签表达式用逗号分隔,比如

  • |=:日志行包含字符串。
  • !=:日志行不包含字符串。
  • |~:日志行匹配正则表达式。
  • !~:日志行与正则表达式不匹配
# 精确匹配:|="2020-11-16 "
{app_kubernetes_io_instance="admin-service-test2-container-provider"}|="2020-11-16 "
# 模糊匹配:|~"2020-11-16 "
{app_kubernetes_io_instance="admin-service-test2-container-provider"}|~"2020-11-16 "
# 排除过滤:!=/!~ "数据中心"
{app_kubernetes_io_instance="admin-service-master-container-provider"}!="数据中心"
{app_kubernetes_io_instance="admin-service-master-container-provider"}!~"数据中心"
# 正则匹配: |~ "()"
{app_kubernetes_io_instance="admin-service-master-container-provider"}!~"(admin|web)"
{app_kubernetes_io_instance="admin-service-master-container-provider"}|~"ERROR|error"

四、Loki错误信息查看

先通过表达式查询出有错误的日志

再根据上下文查看异常堆栈信息


异常信息如下

如果行数不够,可以点击Load 10 more,点击一次将会增加10行,左边将会显示Found 20 rows

历史查询使用,选择历史查询记录,查询,默认保留7天查询记录


分屏功能使用,根据不同标签选择器查询不同的日志

根据标签选择器,自动刷新日志

五、范围查询

  • rate:计算每秒的条目数
  • count_over_time:计算给定范围内每个日志流的条目
# 三十分钟日志行记录
count_over_time({app_kubernetes_io_instance="admin-service-master-container-web"}[30m]) # 12h小时内出现错误的速率
rate({app_kubernetes_io_instance=~".*master-container.*"} |~ "ERROR|error" [12h])

六、集合运算

与PromQL一样,LogQL支持内置聚合运算符的一个子集,可用于聚合单个向量的元素,从而产生具有更少元素但具有集合值的新向量:

  • sum:计算标签上的总和
  • min:选择最少的标签
  • max:选择标签上方的最大值
  • avg:计算标签上的平均值
  • stddev:计算标签上的总体标准差
  • stdvar:计算标签上的总体标准方差
  • count:计算向量中元素的数量
  • bottomk:通过样本值选择最小的k个元素
  • topk:通过样本值选择最大的k个元素
# 统计1个小时日志量最大的前10个服务
topk(10,sum(rate({app_kubernetes_io_instance=~".*master-container.*"}[60m])) by(container))# 统计最近6小时内错误日志计数
sum(count_over_time({app_kubernetes_io_instance=~".*master-container.*"}|~"ERROR"[6h])) by (container)

七、Loki Url 表达式编写

url如下:

 https://grafana-liwenliang.com/explore?orgId=1&left=%5B%22now-1h%22,%22now%22,%22Loki%22,%7B%22expr%22:%22%7Bapp_kubernetes_io_instance%3D~%5C%22user-service-test2-container-provider%5C%22%7D%7C~%5C%222020-11-05%5C%22%7C~%5C%22ERROR%5C%22%7C~%5C%22.com.test.scrm.%5C%22%22,%22maxLines%22:5000%7D%5D

分析:

  • %7C 表示|
  • %5C%22 表示"
  • 时间:now-1h 可替换 now-1min或者 now-5min
  • 项目名称:user-service-test2-container-provider 可替换为 .test2-container. 或者 event-service-test2-container-provider
  • 查询日志:2020-11-05 可替换为 2020-11-04
  • 删除一个管道 %7C%5C%22ERROR%5C%22%7C%5C%22.com.dadi01.scrm.%5C%22 这一段删除
  • 最后生成的链接粘贴到浏览器访问

url加解密:

上述可通过url加解密生成最终查询url链接

  • 进入指定网站中:https://www.sojson.com/encodeurl.html

上例中解密如下:

 https://grafana-liwenliang.com/explore?orgId=1&left=["now-1h","now","Loki",{"expr":"{app_kubernetes_io_instance%3D~\"user-service-test2-container-provider\"}|~\"2020-11-05\"|~\"ERROR\"|~\".com.test.scrm.\"","maxLines":5000}]

根据自定义查询语句:

# 根据日期查询
https://grafana-liwenliang.com/explore?orgId=1&left=["now-1h","now","Loki",{"expr":"{app_kubernetes_io_instance=~\"user-service-test2-container-provider\\"}|~\"2020-11-18\\"","maxLines":5000}]
# 加密
https://grafana-liwenliang.com/explore?orgId=1&left=%5B%22now-1h%22,%22now%22,%22Loki%22,%7B%22expr%22:%22%7Bapp_kubernetes_io_instance=~%5C%22user-service-test2-container-provider%5C%22%7D%7C~%5C%222020-11-18%5C%22%22,%22maxLines%22:5000%7D%5D# 根据服务名称查询
https://grafana-liwenliang.com/explore?orgId=1&left=["now-1h","now","Loki",{"expr":"{app_kubernetes_io_instance=~\"data-service-test2-container-provider\\"}|~\"2020-11-18\\"","maxLines":5000}]
# 加密
https://grafana-liwenliang.com/explore?orgId=1&left=%5B%22now-1h%22,%22now%22,%22Loki%22,%7B%22expr%22:%22%7Bapp_kubernetes_io_instance=~%5C%22data-service-test2-container-provider%5C%22%7D%7C~%5C%222020-11-18%5C%22%22,%22maxLines%22:5000%7D%5D# 根据对应的数据库查询
https://grafana-liwenliang.com/explore?orgId=1&left=["now-1h","now","Loki",{"expr":"{app_kubernetes_io_instance=~\"data-service-test2-container-provider\\"}|~\"2020-11-18\\"|~\"databaseName:scrm_test\\"","maxLines":5000}]
## 加密
https://grafana-liwenliang.com/explore?orgId=1&left=%5B%22now-1h%22,%22now%22,%22Loki%22,%7B%22expr%22:%22%7Bapp_kubernetes_io_instance=~%5C%22data-service-test2-container-provider%5C%22%7D%7C~%5C%222020-11-18%5C%22%7C~%5C%22databaseName:scrm_test%5C%22%22,%22maxLines%22:5000%7D%5D

加密好的url直接粘贴到浏览器中即可查询

八、Loki api使用

# 查询标签
curl -G -s "http://localhost:3100/loki/api/v1/labels" | jqcurl -G -s  "http://localhost:3100/loki/api/v1/labels" | jq .data[]
"__name__"
"app"
"app_kubernetes_io_component"
"app_kubernetes_io_instance"
"app_kubernetes_io_managed_by"
"app_kubernetes_io_name"
"app_kubernetes_io_version"
"chart"
"component"
"container"
"controller_revision_hash"
"filename"
"helm_sh_chart"
"heritage"
"job"
"k8s_app"
"name"
"namespace"
"pod"
"pod_template_generation"
"pod_template_hash"
"release"
"releaseRevision"
"statefulset_kubernetes_io_pod_name"
"stream"
"task"
# 根据标签查询对应标签值
curl -G -s http://localhost:3100/loki/api/v1/label/<name>/values | jqcurl -G -s  "http://localhost:3100/loki/api/v1/label/app_kubernetes_io_instance/values" | jq .data[]
"admin-service-test2-container-provider"
"admin-service-test2-container-web"
"admin-service-uat-container-provider"
"admin-service-uat-container-web"
"data-service-test2-container-provider"
"data-service-uat-container-provider"
"domain-service-test2-container-provider"
"domain-service-uat-container-provider"
"equity-service-test2-container-provider"
"equity-service-uat-container-provider"
"event-service-test2-container-provider"
"event-service-uat-container-provider"
"gateway-service-test2-container-soul-bootstrap"
"gateway-service-uat-container-soul-bootstrap"
"job-admin-service-test2-container-executor"
"job-admin-service-test2-container-web"
"job-admin-service-uat-container-executor"
"job-admin-service-uat-container-web"
"kubernetes-dashboard"
# 根据标签查询对应的日志
curl -G -s http://localhost:3100/loki/api/v1/query_range | jqcurl -G -s  "http://localhost:3100/loki/api/v1/query_range" --data-urlencode 'query={app_kubernetes_io_instance=~".*test2-container.*"}|~"ERROR|error"' | jq .data.result | jq .[].values[0][1]
"2020-11-18 18:08:17.149 DEBUG org.apache.coyote.http11.Http11NioProtocol - Processing socket [org.apache.tomcat.util.net.NioChannel@3bf51e7e:java.nio.channels.SocketChannel[connected local=admin-service-test2-container-web-686d7c459d-fzc7d/ remote=/]] with status [ERROR]\n"
"2020-11-18 18:10:18.876 DEBUG io.lettuce.core.protocol.RedisStateMachine - Decoded LatencyMeteredCommand [type=GET, output=ValueOutput [output=[B@cd9fe9e, error='null'], commandType=io.lettuce.core.protocol.AsyncCommand], empty stack: true\n"
"2020-11-18 18:07:03.967 DEBUG org.springframework.jdbc.datasource.DataSourceTransactionManager - Creating new transaction with name [com.test.scrm.service.mot.provider.handler.WechatOpenAuthHandler.authHandler]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-me.chanjar.weixin.common.error.WxErrorException\n"

loki使用超详细说明相关推荐

  1. k8s核心组件详细介绍教程(配超详细实例演示)

    本文实验环境基于上篇文章手把手从零开始搭建k8s集群超详细教程 本文根据B站课程云原生Java架构师的第一课K8s+Docker+KubeSphere+DevOps学习总结而来 k8s核心组件介绍 1 ...

  2. 手把手从零开始搭建k8s集群超详细教程

    本教程根据B站课程云原生Java架构师的第一课K8s+Docker+KubeSphere+DevOps同步所做笔记教程 k8s集群搭建超详细教程 1. 基本环境搭建 1. 创建私有网络 2. 创建服务 ...

  3. 归并排序(代码注释超详细)

    归并排序: (复制粘贴百度百科没什么意思),简单来说,就是对数组进行分组,然后分组进行排序,排序完最后再整合起来排序! 我看了很多博客,都是写的8个数据呀什么的(2^4,分组方便),我就想着,要是10 ...

  4. 超详细的Java面试题总结(四 )之JavaWeb基础知识总结

    系列文章请查看: 超详细的Java面试题总结(一)之Java基础知识篇 超详细的Java面试题总结(二)之Java基础知识篇 超详细的Java面试题总结(三)之Java集合篇常见问题 超详细的Java ...

  5. 400 多行代码!超详细 Rasa 中文聊天机器人开发指南 | 原力计划

    作者 | 无名之辈FTER 责编 | 夕颜 出品 | 程序人生(ID:coder_life) 本文翻译自Rasa官方文档,并融合了自己的理解和项目实战,同时对文档中涉及到的技术点进行了一定程度的扩展, ...

  6. 一份超详细的数据科学路线图!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:魔王.陈萍,来源:机器之心 从头开始学习数据科学的免费资源. 如何 ...

  7. OSSIM系统的安装教程(超详细)

    OSSIM系统的安装教程(超详细) 一.创建虚拟机 二.安装ossim系统 三.web登录 一.创建虚拟机 首先在网上下载OSSIM系统的镜像,记住自己保存的位置. 打开vm,新建虚拟机. 选择自定义 ...

  8. 超详细的 Redis Cluster 官方集群搭建指南,适用于 redis 5.x, 6.x

    今天从 0 开始搭建 Redis Cluster 官方集群,解决搭建过程中遇到的问题,超详细. 旧版本使用 redis-trib.rb ruby 脚本安装集群,5.0版本redis-cli 已经自带 ...

  9. Python的零基础超详细讲解(第十三天)-Python的类与对象

    基础篇往期文章如下: Python的零基础超详细讲解(第一天)-Python简介以及下载 Python的零基础超详细讲解(第二天)-Python的基础语法1 Python的零基础超详细讲解(第三天)- ...

最新文章

  1. [JAVA EE]ajax 方式提交数据
  2. 浮层java_通过遮罩层实现浮层DIV登录的js代码
  3. python 属性可修改的装饰器 监控函数的运行时间
  4. php后台开发工具有哪些,热门的 PHP 开发工具都有哪些?
  5. C语言 读取txt文档按行读取到新的txt文档
  6. 《Go语言圣经》学习笔记 第八章 Groroutines和Channels
  7. java实现数据库内容修改_数据库更改到Java环境中实现可持续和平
  8. mysql显示百分比例_显示值mysql的百分比
  9. php 表格分页代码,[Php]分页及表格样式
  10. bouncing-balls-evil-circle
  11. 如何在Mac电脑查看后台程序?
  12. rpgmakermv导出html,RpgMaker MV 插件基础(一)
  13. 新版“北京通”今天上线 一个APP可办650件事儿
  14. 经纬度距离、范围、方位角计算、坐标转换
  15. 【图像超分辨(SR)】通俗直观彻底理解双线性插值、双三次插值及其作用
  16. 软件需求规格说明书,概要设计说明书,详细设计说明书(文档)
  17. 【视频分享】尚硅谷Java视频教程_SpringBoot视频教程
  18. JimuReport 1.4.0-beta 里程碑版本发布,免费的低代码报表
  19. 国家,省/州,城市下拉框
  20. 嵌入式Uboot,通过tftp进行内核镜像的加载及flash写入

热门文章

  1. 怎么隔离计算机硬盘坏死通道,雨林木风v5.0硬盘坏死怎么进行分区详细教程?
  2. 职业高中计算机应用基础说课模板,职业教育:计算机应用基础类一等奖作品:《青春形象设计》说课课件.ppt...
  3. 利用串口线获取中兴ZXV10 B760EV3机顶盒获取ROOT权限
  4. 读完你就知道对话式人工智能的数据采集如何解决啦!
  5. 模糊数学20220610
  6. 计算机5800计算道路标高程序,Casio fx-5800P计算器三个公路基本测量程序编写与应用...
  7. 会声会影2021软件如何快速找到最新版下载?
  8. 问题 A: 沙子的质量
  9. 【知识兔】Excel小技巧系列之图片压缩
  10. 红帽峰会2018第一天:数字转型扛把子OpenShift