当前位置: 首页 > news >正文

loki使用超详细说明

前言:小伙伴们是用什么看日志的呢?我是用的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"
http://www.xdnf.cn/news/848917.html

相关文章:

  • 吴恩达《机器学习》——Logistic多分类与神经网络
  • @Transactional 详解 示例
  • 深度学习———— BP神经网络
  • CISP考证指南:避免常见误区,一次拿证,零基础入门到精通,收藏这一篇就够了
  • SQL sever中的触发器
  • MySQL数据库基础知识,基础操作详细整理
  • JavaScript的五种排序方法
  • Activiti学习之入门:个人任务(07)
  • 后台-husky提交代码规范使用
  • 青柠起始页——一言接口调用
  • ELF文件格式的详解
  • Hue概述,核心功能,架构说明
  • 什么是MVC模式
  • 保姆级教程,龙蜥操作系统安装使用一步到位!
  • Netty框架基本介绍
  • Python Spyder开发的应用项目_pyscada应用
  • 终于有人把华为认证全部说清楚了
  • 广告召回率是什么意思_图解机器学习的准确率、精准率、召回率、F1、ROC曲线、AUC曲线...
  • Linux---项目自动化构建工具-make/Makefile
  • ViT (Visual Transformer)
  • 阿里云域名搭建DNSLOG
  • 深度学习AI编译器-LLVM简介
  • 枚举概念与特性
  • 【Java开发环境配置】7-Apache Tomcat安装教程环境变量配置IDEA配置(27)
  • base64编码简介
  • 频率与补偿(下)
  • 一文带你了解MindSpore的知识及安装入手
  • 我收集的搜索引擎
  • 带你深入了解Android Handler的用法
  • Java HashMap 详解