创建一个简单的 Grafana 仪表板, 以实现对日志的快速搜索.
有经验的直接用 Grafana 的 Explore 功能就可以了.
但是对于没有经验的人, 他们如何能有一个已经预设了简单的标签搜索的仪表板,以帮助一些团队在排除故障时快速找到他们正在寻找的东西。虽然 Explore 很适合这个用例,但对于第一次使用的人,或者半夜收到告警的人来说,也可能有点令人生畏。
所以, 尝试通过一些模板变量来创建一个展示日志的 Grafana 仪表板.
创建个 Logs Panel 的仪表板, 然后添加几个变量, Logs Panel 的 LogQL 表达式引入这些变量.
因为 Loki 和 Prometheus 共享一套 Label, 所以可以通过 Prometheus 的 Label 来作为 Loki 的变量. 如下图:
这里创建一个可以通过: namespace
, pod
, 日志过滤条件
筛选日志的仪表板:
namespace
变量, 通过该变量获取所有的 namespace
作为变量筛选条件:
Query
label_values(kube_pod_info, namespace)
pod
变量, 通过该变量获取对应 namespace
下的 pod
作为变量筛选条件以缩小日志搜索空间:
Query
label_values(container_network_receive_bytes_total{namespace=~"$namespace"},pod)
.*
container_network_receive_bytes_total
作为指标名称来寻找可用的pod,但你可以使用任何指标来代表你环境中的所有pod。search
变量, 通过该变量作为 LogQL 的管道过滤条件, 它被用来实际执行搜索:
Text Box
rror
(命中 Error
或 error
)最后, 把上面的变量串联起来, 添加 Logs Panel, 使用 Loki 作为数据源, 并使用{namespace="$namespace", instance=~"$pod"} |~ "$search"
作为 LogQL. 如下:
所有这些加在一起,提供了一个漂亮而简单的搜索日志的界面--不熟悉的人甚至不需要写一个LogQL查询!
同样, 再做一个查看 Journal 日志的:
这里直接使用 Loki 的 Label.
这里创建一个可以通过: hostname
, unit
, 日志过滤条件
筛选日志的仪表板:
hostname
变量, 通过该变量获取所有的 hostname
作为变量筛选条件:
Query
label_values(hostname)
.+
unit
变量, 通过该变量获取对应 hostname
下的 unit
作为变量筛选条件以缩小日志搜索空间:
Query
label_values({hostname=~"$hostname"}, unit)
.+
container_network_receive_bytes_total
作为指标名称来寻找可用的pod,但你可以使用任何指标来代表你环境中的所有pod。search
变量, 通过该变量作为 LogQL 的管道过滤条件, 它被用来实际执行搜索:
Text Box
rror
(命中 Error
或 error
)最后, 把上面的变量串联起来, 添加 Logs Panel, 使用 Loki 作为数据源, 并使用{hostname=~"$hostname", unit=~"$unit"} |~ "$search"
作为 LogQL. 如下:
最终效果如下:
和如下:
🎉🎉🎉
三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.