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

grafana,系列,文章,十二,如何,使用,loki,创建,一个,用于,搜索,日志,仪表板 · 浏览次数 : 428

小编点评

**创建日志搜索仪表板** **步骤 1:创建 Logs Panel** 1. 打开 Grafana。 2. 在左侧菜单中选择“仪表板”。 3. 在搜索栏中输入“Logs Panel”。 4. 点击“创建”。 **步骤 2:添加变量** 1. 在弹出的“配置”窗口中,选择“变量”。 2. 点击“添加”。 3. 为变量名输入 `namespace`。 4. 点击“确定”。 **步骤 3:创建 LogQL 表达式** 1. 在弹出的“配置”窗口中,选择“LogQL”。 2. 在“Variable” 中输入变量名 `namespace`。 3. 在“Query” 中使用以下表达式: ```logquery kube_pod_info.namespace = '$namespace' ``` **步骤 4:创建多值变量** 1. 在弹出的“配置”窗口中,选择“变量”。 2. 为变量名输入 `pod`。 3. 点击“确定”。 **步骤 5:创建多值变量** 1. 在弹出的“配置”窗口中,选择“变量”。 2. 为变量名输入 `multi`。 3. 在“Query” 中使用以下表达式: ```logquery container_network_receive_bytes_total{namespace=~"$namespace"} ``` **步骤 6:创建 LogQL 表达式** 1. 在弹出的“配置”窗口中,选择“LogQL”。 2. 在“Variable” 中输入变量名 `search`。 3. 在“Query” 中使用以下表达式: ```logquery ror (命中 Error 或 error) ``` **步骤 7:串联变量** 1. 在弹出的“配置”窗口中,选择“变量”。 2. 为变量名输入 `hostname`。 3. 在“Query” 中使用以下表达式: ```logquery hostname = ~"$hostname" ``` 4. 在“Variable” 中输入变量名 `unit`。 5. 在“Query” 中使用以下表达式: ```logquery unit = ~"$unit" ``` 6. 在“Variable” 中输入变量名 `multi`。 7. 在“Query” 中使用以下表达式: ```logquery multi = ~"$multi" ``` **步骤 8:创建 Logs Panel** 1. 在弹出的“配置”窗口中,选择“图表”。 2. 选择“图表类型”为“仪表板”。 3. 选择数据源为 Loki。 4. 在“LogQL” 中输入以下表达式: ``` {namespace=\"$namespace\", instance=~\"$pod\"} |~ \"$search\" ``` **步骤 9:保存并启动** 1. 点击“保存”。 2. 点击“启动”。 **完成** 您现在拥有一个可以快速搜索日志的 Grafana 仪表板。

正文

概述

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

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

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

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

步骤

实现概述

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

创建变量

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

String together Prometheus variables

这里创建一个可以通过: 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. 如下:

Logs panel

所有这些加在一起,提供了一个漂亮而简单的搜索日志的界面--不熟悉的人甚至不需要写一个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. 如下:

Loki Journal Logs

最终效果

最终效果如下:

Logs panel

和如下:

Loki Journal Logs

🎉🎉🎉

Grafana 系列文章

Grafana 系列文章

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

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

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

概述 创建一个简单的 Grafana 仪表板, 以实现对日志的快速搜索. 有经验的直接用 Grafana 的 Explore 功能就可以了. 但是对于没有经验的人, 他们如何能有一个已经预设了简单的标签搜索的仪表板,以帮助一些团队在排除故障时快速找到他们正在寻找的东西。虽然 Explore 很适合这

Grafana系列-统一展示-8-ElasticSearch日志快速搜索仪表板

系列文章 Grafana 系列文章 概述 我们是基于这篇文章: Grafana 系列文章(十二):如何使用 Loki 创建一个用于搜索日志的 Grafana 仪表板, 创建一个类似的, 但是基于 ElasticSearch 的日志快速搜索仪表板. 最终完整效果如下: 📝Notes: 其实我基于 E

Grafana 系列文章(十四):Helm 安装Loki

前言 写或者翻译这么多篇 Loki 相关的文章了, 发现还没写怎么安装 😓 现在开始介绍如何使用 Helm 安装 Loki. 前提 有 Helm, 并且添加 Grafana 的官方源: helm repo add grafana https://grafana.github.io/helm-cha

Grafana 系列文章(十一):Loki 中的标签如何使日志查询更快更方便

👉️URL: https://grafana.com/blog/2020/04/21/how-labels-in-loki-can-make-log-queries-faster-and-easier/ 📝Description: 关于标签在 Loki 中如何真正发挥作用,你需要知道的一切。它可

Grafana 系列文章(十三):如何用 Loki 收集查看 Kubernetes Events

前情提要 IoT 边缘集群基于 Kubernetes Events 的告警通知实现 IoT 边缘集群基于 Kubernetes Events 的告警通知实现(二):进一步配置 概述 在分析 K8S 集群问题时,Kubernetes Events 是超级有用的。 Kubernetes Events 可

Grafana 系列文章(十):为什么应该使用 Loki

👉️URL: https://grafana.com/blog/2020/09/09/all-the-non-technical-advantages-of-loki-reduce-costs-streamline-operations-build-better-teams/ 📝Descript

Grafana 系列文章(十五):Exemplars

Exemplars 简介 Exemplar 是用一个特定的 trace,代表在给定时间间隔内的度量。Metrics 擅长给你一个系统的综合视图,而 traces 给你一个单一请求的细粒度视图;Exemplar 是连接这两者的一种方式。 假设你的公司网站正经历着流量的激增。虽然超过百分之八十的用户能够

Grafana 系列文章(一):基于 Grafana 的全栈可观察性 Demo

📚️Reference: https://github.com/grafana/intro-to-mlt 这是关于 Grafana 中可观察性的三个支柱的一系列演讲的配套资源库。 它以一个自我封闭的 Docker 沙盒的形式出现,包括在本地机器上运行和实验所提供的服务所需的所有组件。 Grafan

Grafana 系列文章(二):使用 Grafana Agent 和 Grafana Tempo 进行 Tracing

👉️URL: https://grafana.com/blog/2020/11/17/tracing-with-the-grafana-cloud-agent-and-grafana-tempo/ ✍Author: Robert Fratto • 17 Nov 2020 📝Description

Grafana 系列文章(三):Tempo-使用 HTTP 推送 Spans

👉️URL: https://grafana.com/docs/tempo/latest/api_docs/pushing-spans-with-http/ 📝Description: 有时,使用追踪系统是令人生畏的,因为它似乎需要复杂的应用程序仪器或 span 摄取管道,以便 ... 有时,使