概述

创建一个简单的 Grafana 仪表板, 以实现对日志的快速搜索.

有经验的直接用 Grafana 的 Explore 功能就可以了.

但是对于没有经验的人, 他们如何能有一个已经预设了简单的标签搜索的仪表板,以帮助一些团队在排除故障时快速找到他们正在寻找的东西。虽然 Explore 很适合这个用例,但对于第一次使用的人,或者半夜收到告警的人来说,也可能有点令人生畏。

所以, 尝试通过一些模板变量来创建一个展示日志的 Grafana 仪表板.

步骤

实现概述

创建个 Logs Panel 的仪表板, 然后添加几个变量, Logs Panel 的 LogQL 表达式引入这些变量.

创建变量

因为 Loki 和 Prometheus 共享一套 Label, 所以可以通过 Prometheus 的 Label 来作为 Loki 的变量. 如下图:

这里创建一个可以通过: namespace, pod, 日志过滤条件 筛选日志的仪表板:

  1. namespace 变量, 通过该变量获取所有的 namespace 作为变量筛选条件:

    1. Type: Query
    2. DataSource: Prometheus
    3. Query: label_values(kube_pod_info, namespace)
  2. pod 变量, 通过该变量获取对应 namespace 下的 pod 作为变量筛选条件以缩小日志搜索空间:
    1. Type: Query
    2. DataSource: Prometheus
    3. Query: label_values(container_network_receive_bytes_total{namespace=~"$namespace"},pod)
    4. Multi-value: 勾选;
    5. Include All option: 勾选
    6. Custom all value: .*
    7. 注意,使用container_network_receive_bytes_total作为指标名称来寻找可用的pod,但你可以使用任何指标来代表你环境中的所有pod。
  3. search 变量, 通过该变量作为 LogQL 的管道过滤条件, 它被用来实际执行搜索:
    1. Type: Text Box
    2. Default value: rror (命中 Errorerror)

执行 LogQL

最后, 把上面的变量串联起来, 添加 Logs Panel, 使用 Loki 作为数据源, 并使用{namespace="$namespace", instance=~"$pod"} |~ "$search" 作为 LogQL. 如下:

所有这些加在一起,提供了一个漂亮而简单的搜索日志的界面--不熟悉的人甚至不需要写一个LogQL查询!

如果你想查看的话,这里是仪表板json

再做一个查看 Journal 日志的

同样, 再做一个查看 Journal 日志的:

创建变量

这里直接使用 Loki 的 Label.

这里创建一个可以通过: hostname, unit, 日志过滤条件 筛选日志的仪表板:

  1. hostname 变量, 通过该变量获取所有的 hostname 作为变量筛选条件:

    1. Type: Query
    2. DataSource: Loki
    3. Query: label_values(hostname)
    4. Multi-value: 勾选
    5. Include All option: 勾选
    6. Custom all value: .+
  2. unit 变量, 通过该变量获取对应 hostname 下的 unit 作为变量筛选条件以缩小日志搜索空间:
    1. Type: Query
    2. DataSource: Loki
    3. Query: label_values({hostname=~"$hostname"}, unit)
    4. Multi-value: 勾选;
    5. Include All option: 勾选
    6. Custom all value: .+
    7. 注意,使用container_network_receive_bytes_total作为指标名称来寻找可用的pod,但你可以使用任何指标来代表你环境中的所有pod。
  3. search 变量, 通过该变量作为 LogQL 的管道过滤条件, 它被用来实际执行搜索:
    1. Type: Text Box
    2. Default value: rror (命中 Errorerror)

执行 LogQL

最后, 把上面的变量串联起来, 添加 Logs Panel, 使用 Loki 作为数据源, 并使用{hostname=~"$hostname", unit=~"$unit"} |~ "$search" 作为 LogQL. 如下:

最终效果

最终效果如下:

和如下:

Grafana 系列文章

Grafana 系列文章

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

Grafana 系列文章(十二):如何使用Loki创建一个用于搜索日志的Grafana仪表板的更多相关文章

  1. NHibernate系列文章十二:Load/Get方法

    摘要 NHibernate提供两个方法按主键值查找对象:Load/Get. 1. Load/Get方法的区别 Load: Load方法可以对查询进行优化. Load方法实际得到一proxy对象,并不立 ...

  2. 《神经网络和深度学习》系列文章十二:Hadamard积,s⊙t

    出处: Michael Nielsen的<Neural Network and Deep Learning>,点击末尾“阅读原文”即可查看英文原文. 本节译者:哈工大SCIR本科生 王宇轩 ...

  3. 二十二、SAP中创建一个内表,并添加内容循环输出显示

    一.直接上代码 二.输出如下

  4. CRL快速开发框架系列教程十二(MongoDB支持)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  5. webpack4 系列教程(十二):处理第三方JavaScript库

    教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步<webpack4 系列教程(十二):处理第三方 JavaScript 库>原文地址.或者来我的小站看更多内容:godbm ...

  6. 一步步实现windows版ijkplayer系列文章之二——Ijkplayer播放器源码分析之音视频输出——视频篇

    一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...

  7. OSGi 系列(十二)之 Http Service

    OSGi 系列(十二)之 Http Service 1. 原始的 HttpService (1) 新建 web-osgi 工程,目录结构如下: (2) HomeServlet package com. ...

  8. Java 设计模式系列(十二)策略模式(Strategy)

    Java 设计模式系列(十二)策略模式(Strategy) 策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以 ...

  9. hbase源码系列(十二)Get、Scan在服务端是如何处理

    hbase源码系列(十二)Get.Scan在服务端是如何处理?   继上一篇讲了Put和Delete之后,这一篇我们讲Get和Scan, 因为我发现这两个操作几乎是一样的过程,就像之前的Put和Del ...

  10. VMware vSphere 服务器虚拟化之二十二桌面虚拟化之创建View Composer链接克隆的虚拟桌面池

    VMware vSphere 服务器虚拟化之二十二桌面虚拟化之创建View Composer链接克隆的虚拟桌面池 在上一节我们创建了完整克隆的自动专有桌面池,在创建过程比较缓慢,这次我们将学习创建Vi ...

随机推荐

  1. Day03.1:初学者安装IDEA后需要知道的小技巧

    初学者安装IDEA后需要知道的小技巧 1.输入psvm直接生成 main方法 2.输入sout可以直接生成输出语句 3.代码放大设置 4.注释颜色更改 5.代码字体大小通过Ctrl+鼠标滑轮控制的设置 ...

  2. MYSQL一键导库脚本

    上周完成了一个性能测试环境搭建,有富余时间的同时研究了一个一键导库的脚本,一周的开始先马住!!! 一.思路 准备:54.158服务器上分别已经装好了MYSQL数据库 目的:把部分库从54导出并导入到1 ...

  3. Linux内核替换的一种简单方法

    前言 使用现有centos的镜像,在海光机器上出现了无法运行的情况,grub引导后就只剩下光标一直在闪,无任何字符输出.这种情况大概率是因为Linux的内核无法运行在海光的CPU上所导致的. 已得知L ...

  4. 基于python的数学建模---传染病六个模型

    六个模型的区别 SI-Model import scipy.integrate as spi import numpy as np import matplotlib.pyplot as plt # ...

  5. 解决一个mysql报错

    问题描述 insert into btsync (key,title) values ('a','b'); ERROR 1064 (42000): You have an error in your ...

  6. 【每日一题】【动态规划】2022年1月30日-NC127 最长公共子串

    描述 给定两个字符串str1和str2,输出两个字符串的最长公共子串 题目保证str1和str2的最长公共子串存在且唯一. 方法1:dp数组存子串 import java.util.*; public ...

  7. Crane如何做到利用率提升3倍稳定性还不受损?

    作为云平台用户,我们都希望购买的服务器物尽其用,能够达到最大利用率.然而要达到理论上的节点负载目标是很的,计算节点总是存在一些装箱碎片和低负载导致的闲置资源.下图展示了某个生产系统的CPU资源现状,从 ...

  8. Python:多进程并行编程与进程池

    Python的并行编程可以采用multiprocessing或mpi4py模块来完成. multiprocessing是Python标准库中的模块,实现了共享内存机制,也就是说,可以让运行在不同处理器 ...

  9. 【Java】【数据库】索引为何使查询变得更快?--B+树

    排序数据的二分查找 二分查找的时间复杂度是\(O(log_2n)\),明显快于暴力搜索. 索引 建立索引的数据,就是通过事先排好顺序,在查找时可以应用二分查找来提高查询效率. 所以索引应该尽可能建立在 ...

  10. django框架(部分讲解)

    ORM执行SQL语句 有时候ORM的操作效率可能偏低 我们是可以自己编写SQL的 方式1: raw()方法执行原生sql语句 models.User.objects.raw('select * fro ...