Grafana 系列文章(十二):如何使用Loki建立一個用於搜尋日誌的Grafana儀表板

東風微鳴發表於2023-02-09

概述

建立一個簡單的 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 編寫.

相關文章