上一篇们已经教大家如何将 Windows Event Logs 推送到 Grafana Loki,透过 Explore 功能透过预先设置的标籤进行日誌搜索。
虽然 Explore 非常适合熟悉 LogQL 的系统管理员用来快速进行除错,但对于初次使用或在第一线的 Help Desk 的人员来说,它就有点不友善了。
所以我们将教大家如何透过模板变量创建用于搜索日誌的 Grafana 仪表板
如果您的 Grafana 功能跟我不太一样,请先升级至最新版本 9.3.2。
複习一下在 promtail-local-config.yaml 中,我们用 Pipeline Stages 将日誌转成 JSON 格式并将 source、event_id 与 leveltext 栏位贴上标籤。
- job_name: windows windows_events: eventlog_name: "System" use_incoming_timestamp: true xpath_query: '*' bookmark_path: "./bookmark-system.xml" exclude_event_data: true exclude_user_data: true labels: logsource: windows-eventlog pipeline_stages: - json: expressions: source: source eventID: event_id level: levelText - labels: source: eventID: level:
我们希望这些栏位与预设产生的 Channel 与 Computer 标籤,都可以成为仪表板的过滤条件。
建立一个 Windows EventLogs 仪表板,点选 Setting 中的 Variables。
General
Name 输入 computer 当作变数名称使用Label 输入电脑做为显示名称Query options
Data Source 选择 LokiQuery Type 选择 Label vaules,Label 选择 computerSort 就依照个人喜好选择Refresh 选择 On dashboard loadSelection options
勾选 Multi-value勾选 Include All option若都有配置正确,Preview of vaules 会出现您想要的变数数值,按下 Apply 后,即建立完成。
若变数出现橘色警告,那是因为仪錶板还没有任何 LogQL 使用该变数。
依序建立 channel、level、source 与 eventID 变数
Dashboard
回到仪錶板,此时变数已成为可挑选的下拉选项。
新增一个 Panel,资料来源选择 Loki。
Label browser 输入 LogQL 语法如下,日誌流选择器带入我们设定的变数。
{computer=~"$computer",channel=~"$channel",level=~"$level",source=~"$source",eventID=~"$eventID"}
点击 Open visualization suggestions
挑左边的 Logs 可视化
顺便填入 Title 为 Logs Panel,打开 Logs 时间显示。
按下 Apply 后,日誌会根据我们的变数条件筛选出来了。
接下来我们想要知道时间序列内事件的数量
新增一个 Panel,选择 Time series 可视化。资料来源选择 Loki,顺便填入 Title 为 Logs Volume。
Label browser 输入 LogQL 语法如下,日誌流选择器带入我们设定的变数。
可根据下拉选项的过滤,依照事件等级的数量进行统计。
sum by (level) (count_over_time({computer=~"$computer",channel=~"$channel",source=~"$source",eventID=~"$eventID"} [$__interval]))
Query Options 可以使用 Legend 对 {{level}} 标籤值进行重写
Graph styles 选择 Bars 进行呈现,Stack series 选择 Normal 将统计结果堆叠在一起。
按下 Apply 后,我们就完成了一个用于搜索日誌的仪表板。
第一线的 Help Desk 的人员即使不懂得 LogQL 语法也可以透过该仪表板,快速地协助团队进行故障排除与分析。
搜寻功能
除了透过下拉式选单来过滤事件,若想要透过关键字来查找日誌也是可以的,接下来我们把搜寻功能也放进去吧。
回到 Setting 中的 Variables,这次我们建立一个 Text box 类型的变数。
Name 输入 search 当作变数名称使用Label 输入搜寻做为显示名称替代 Logs Panel 的 LogQL 语法如下
{computer=~"$computer",channel=~"$channel",level=~"$level",source=~"$source",eventID=~"$eventID"} |~ "(?i)$search"
替代 Logs Volume 的 LogQL 语法如下
sum by (level) (count_over_time({computer=~"$computer",channel=~"$channel",source=~"$source",eventID=~"$eventID"} |~ "(?i)$search" [$__interval]))
可以用 (?i) 做为正规表达式的前缀,切换为不区分大小写。
顺便让 Logs Volume 显示加总的数值, Legend 的 Values 选择 Count。
接着再把事件等级颜色重写成你想要的颜色
回到仪表板便多了一个搜寻栏位可以进行关键字搜寻,Logs Volume 加总的数值与 Logs Panel 也会依照关键字进行更新。
今天的教学就到这边,希望有帮助到大家。
参考文件
https://grafana.com/blog/2020/04/08/loki-quick-tip-how-to-create-a-grafana-dashboard-for-searching-logs-using-loki-and-prometheus/https://grafana.com/blog/2022/11/15/grafana-9.2-create-edit-queries-easier-with-the-new-grafana-loki-query-variable-editor/