Grafana 系列文章(十二):如何使用Loki创建一个用于搜索日志的Grafana仪表板
概述
创建一个简单的 Grafana 仪表板, 以实现对日志的快速搜索.
有经验的直接用 Grafana 的 Explore 功能就可以了.
但是对于没有经验的人, 他们如何能有一个已经预设了简单的标签搜索的仪表板,以帮助一些团队在排除故障时快速找到他们正在寻找的东西。虽然 Explore 很适合这个用例,但对于第一次使用的人,或者半夜收到告警的人来说,也可能有点令人生畏。
所以, 尝试通过一些模板变量来创建一个展示日志的 Grafana 仪表板.
步骤
实现概述
创建个 Logs Panel 的仪表板, 然后添加几个变量, Logs Panel 的 LogQL 表达式引入这些变量.
创建变量
因为 Loki 和 Prometheus 共享一套 Label, 所以可以通过 Prometheus 的 Label 来作为 Loki 的变量. 如下图:

这里创建一个可以通过: namespace, pod, 日志过滤条件 筛选日志的仪表板:
namespace变量, 通过该变量获取所有的namespace作为变量筛选条件:- Type:
Query - DataSource: Prometheus
- Query:
label_values(kube_pod_info, namespace)
- Type:
pod变量, 通过该变量获取对应namespace下的pod作为变量筛选条件以缩小日志搜索空间:- Type:
Query - DataSource: Prometheus
- Query:
label_values(container_network_receive_bytes_total{namespace=~"$namespace"},pod) - Multi-value: 勾选;
- Include All option: 勾选
- Custom all value:
.* - 注意,使用
container_network_receive_bytes_total作为指标名称来寻找可用的pod,但你可以使用任何指标来代表你环境中的所有pod。
- Type:
search变量, 通过该变量作为 LogQL 的管道过滤条件, 它被用来实际执行搜索:- Type:
Text Box - Default value:
rror(命中Error或error)
- Type:
执行 LogQL
最后, 把上面的变量串联起来, 添加 Logs Panel, 使用 Loki 作为数据源, 并使用{namespace="$namespace", instance=~"$pod"} |~ "$search" 作为 LogQL. 如下:

所有这些加在一起,提供了一个漂亮而简单的搜索日志的界面--不熟悉的人甚至不需要写一个LogQL查询!
再做一个查看 Journal 日志的
同样, 再做一个查看 Journal 日志的:
创建变量
这里直接使用 Loki 的 Label.
这里创建一个可以通过: hostname, unit, 日志过滤条件 筛选日志的仪表板:
hostname变量, 通过该变量获取所有的hostname作为变量筛选条件:- Type:
Query - DataSource: Loki
- Query:
label_values(hostname) - Multi-value: 勾选
- Include All option: 勾选
- Custom all value:
.+
- Type:
unit变量, 通过该变量获取对应hostname下的unit作为变量筛选条件以缩小日志搜索空间:- Type:
Query - DataSource: Loki
- Query:
label_values({hostname=~"$hostname"}, unit) - Multi-value: 勾选;
- Include All option: 勾选
- Custom all value:
.+ - 注意,使用
container_network_receive_bytes_total作为指标名称来寻找可用的pod,但你可以使用任何指标来代表你环境中的所有pod。
- Type:
search变量, 通过该变量作为 LogQL 的管道过滤条件, 它被用来实际执行搜索:- Type:
Text Box - Default value:
rror(命中Error或error)
- Type:
执行 LogQL
最后, 把上面的变量串联起来, 添加 Logs Panel, 使用 Loki 作为数据源, 并使用{hostname=~"$hostname", unit=~"$unit"} |~ "$search" 作为 LogQL. 如下:

最终效果
最终效果如下:

和如下:

Grafana 系列文章
三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.
Grafana 系列文章(十二):如何使用Loki创建一个用于搜索日志的Grafana仪表板的更多相关文章
- NHibernate系列文章十二:Load/Get方法
摘要 NHibernate提供两个方法按主键值查找对象:Load/Get. 1. Load/Get方法的区别 Load: Load方法可以对查询进行优化. Load方法实际得到一proxy对象,并不立 ...
- 《神经网络和深度学习》系列文章十二:Hadamard积,s⊙t
出处: Michael Nielsen的<Neural Network and Deep Learning>,点击末尾“阅读原文”即可查看英文原文. 本节译者:哈工大SCIR本科生 王宇轩 ...
- 二十二、SAP中创建一个内表,并添加内容循环输出显示
一.直接上代码 二.输出如下
- CRL快速开发框架系列教程十二(MongoDB支持)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- webpack4 系列教程(十二):处理第三方JavaScript库
教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步<webpack4 系列教程(十二):处理第三方 JavaScript 库>原文地址.或者来我的小站看更多内容:godbm ...
- 一步步实现windows版ijkplayer系列文章之二——Ijkplayer播放器源码分析之音视频输出——视频篇
一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...
- OSGi 系列(十二)之 Http Service
OSGi 系列(十二)之 Http Service 1. 原始的 HttpService (1) 新建 web-osgi 工程,目录结构如下: (2) HomeServlet package com. ...
- Java 设计模式系列(十二)策略模式(Strategy)
Java 设计模式系列(十二)策略模式(Strategy) 策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以 ...
- hbase源码系列(十二)Get、Scan在服务端是如何处理
hbase源码系列(十二)Get.Scan在服务端是如何处理? 继上一篇讲了Put和Delete之后,这一篇我们讲Get和Scan, 因为我发现这两个操作几乎是一样的过程,就像之前的Put和Del ...
- VMware vSphere 服务器虚拟化之二十二桌面虚拟化之创建View Composer链接克隆的虚拟桌面池
VMware vSphere 服务器虚拟化之二十二桌面虚拟化之创建View Composer链接克隆的虚拟桌面池 在上一节我们创建了完整克隆的自动专有桌面池,在创建过程比较缓慢,这次我们将学习创建Vi ...
随机推荐
- 将C#的bitmap格式转换为Halcon的图像格式
/// <summary> /// Bitmap转HObject灰度图 /// </summary> /// <param name="bmp"> ...
- 2022春每日一题:Day 17
今天打CF去了,但是很菜,只做了三题.赛后一分钟做出了第四题,wa了,改了一下下,过了 第一题就是对应的小写字母在大写字母前出现. 第二题直接dfs. 第三题dp,f[i][j]表示以第i个数开始加了 ...
- 【Docker】容器使用规范--安全挂载建议
容器挂载过程和安全挂载建议 绑定挂载 本文所提到的挂载主要指绑定挂载(bind mount),即通过-v /xx/xx:/xx/xx 和 --mount type=bind,xxx,xxx两种方式设置 ...
- requests模块/openpyxl模块/简单爬虫实战
内容概要 第三方模块的下载及使用 网络爬虫及requests模块 网络爬虫实战爬取二手房信息 自动化办公领域模块openpyxl 练习题及答案 第三方模块的下载 第三方模块就类似与别人写好的模块,我们 ...
- Java Web中requset,session,application 的作用域及区别
三者概述 requset概述: request是表示一个请求,只要发出一个请求就会创建一个request 用处:常用于服务器间同一请求不同页面之间的参数传递,常应用于表单的控件值传递. session ...
- 2. 第一个PyQt5 程序 Helloword!
专栏地址 ʅ(‾◡◝)ʃ 第一个 PyQt5 程序 2.1 import sys from PyQt5.QtWidgets import QApplication,QWidget app = QApp ...
- 如何使用C#在Excel中插入分页符
在日常办公中,我们经常会用到Excel文档来帮助我们整理数据.为了方便打印Excel工作表,我们可以在Excel中插入分页符.各种处理软件一般都会自动按照用户所设置页面的大小自动进行分页,以美化文档的 ...
- HCIE Routing&Switching之MPLS LDP理论
前文我们了解了MPLS的静态LSP配置相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16937104.html:今天我们来聊一聊标签分发协议LDP相关 ...
- 螺旋矩阵II-LeetCode59 考验代码能力
力扣链接:https://leetcode.cn/problems/spiral-matrix-ii/ 题目 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 ...
- 【Scala】思维导图
思维导图:http://naotu.baidu.com/file/8ac705df572cd2f131aff5f0ed9c4c88?token=871f7d35671c6287 Scala 算术运算 ...