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 ...
随机推荐
- Day03.1:初学者安装IDEA后需要知道的小技巧
初学者安装IDEA后需要知道的小技巧 1.输入psvm直接生成 main方法 2.输入sout可以直接生成输出语句 3.代码放大设置 4.注释颜色更改 5.代码字体大小通过Ctrl+鼠标滑轮控制的设置 ...
- MYSQL一键导库脚本
上周完成了一个性能测试环境搭建,有富余时间的同时研究了一个一键导库的脚本,一周的开始先马住!!! 一.思路 准备:54.158服务器上分别已经装好了MYSQL数据库 目的:把部分库从54导出并导入到1 ...
- Linux内核替换的一种简单方法
前言 使用现有centos的镜像,在海光机器上出现了无法运行的情况,grub引导后就只剩下光标一直在闪,无任何字符输出.这种情况大概率是因为Linux的内核无法运行在海光的CPU上所导致的. 已得知L ...
- 基于python的数学建模---传染病六个模型
六个模型的区别 SI-Model import scipy.integrate as spi import numpy as np import matplotlib.pyplot as plt # ...
- 解决一个mysql报错
问题描述 insert into btsync (key,title) values ('a','b'); ERROR 1064 (42000): You have an error in your ...
- 【每日一题】【动态规划】2022年1月30日-NC127 最长公共子串
描述 给定两个字符串str1和str2,输出两个字符串的最长公共子串 题目保证str1和str2的最长公共子串存在且唯一. 方法1:dp数组存子串 import java.util.*; public ...
- Crane如何做到利用率提升3倍稳定性还不受损?
作为云平台用户,我们都希望购买的服务器物尽其用,能够达到最大利用率.然而要达到理论上的节点负载目标是很的,计算节点总是存在一些装箱碎片和低负载导致的闲置资源.下图展示了某个生产系统的CPU资源现状,从 ...
- Python:多进程并行编程与进程池
Python的并行编程可以采用multiprocessing或mpi4py模块来完成. multiprocessing是Python标准库中的模块,实现了共享内存机制,也就是说,可以让运行在不同处理器 ...
- 【Java】【数据库】索引为何使查询变得更快?--B+树
排序数据的二分查找 二分查找的时间复杂度是\(O(log_2n)\),明显快于暴力搜索. 索引 建立索引的数据,就是通过事先排好顺序,在查找时可以应用二分查找来提高查询效率. 所以索引应该尽可能建立在 ...
- django框架(部分讲解)
ORM执行SQL语句 有时候ORM的操作效率可能偏低 我们是可以自己编写SQL的 方式1: raw()方法执行原生sql语句 models.User.objects.raw('select * fro ...