無需重新學習,使用 Kibana 查詢/視覺化 SLS 資料

阿里云云栖号發表於2024-05-22

1. 場景

現在透過 SLS 的 ES 相容能力,可以很方便地實現用 Kibana 來查詢和視覺化 SLS 的資料。對於從 ES 遷移到 SLS 的使用者可以繼續保留原來的 Kibana 使用習慣。下面來演示如何透過 Kibana 來訪問 SLS。

2. 使用方法

部署架構

這裡藍色部分是需要客戶端部署的元件。

  • Kibana 就是用來視覺化的
  • Proxy 用來區分 Kibana 的請求,將 SLS 相關的轉發到 SLS 的 ES 相容介面
  • Elasticsearch 用來存 Kibana 的 Meta

等等,為什麼這裡還需要一個 ES? 原因是 SLS 的 Logstore 不支援更新,很多 Meta 類的資料不適合存在 SLS。

而 Kibana 有很多後設資料要儲存,比如 Kibana 的圖表配置、Index Pattern 配置等。

因此需要部署一個 ES 例項,這個 ES 例項只會存 Kibana 的後設資料,所以它的資源佔用非常小。

3. 部署過程

使用 docker-compose 部署

相關準備

安裝好 docker 和 docker compose,下面的操作步驟對於 podman compose 的方式一樣適用。

建立相關目錄

mkdir sls-kibaba # 建立一個新的目錄
cd sls-kibaba # 進入
mkdir es_data # 建立一個目錄用於放es的資料

配置

在 sls-kibana 目錄下下建立 docker-compose.yml 檔案。

內容如下:(下面標識為此處請修改的地方,請根據實際情況做一下修改)

version: '3'
services:
  es:
    image: elasticsearch:7.17.3
    environment:
      - "discovery.type=single-node"
      - "ES_JAVA_OPTS=-Xms2G -Xmx2G"
      - ELASTIC_USERNAME=elastic
      - ELASTIC_PASSWORD=ES密碼 # 此處請修改
      - xpack.security.enabled=true
    volumes:
      - ./data:/usr/share/elasticsearch/data
    networks:
      - es717net

  kproxy:
    image: sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/kproxy:1.9d
    depends_on:
      - es
    environment:
      - ES_ENDPOINT=es:9200
      - SLS_ENDPOINT=https://etl-dev.cn-huhehaote.log.aliyuncs.com/es/ # 此處請修改,規則為 https://${project名}.${slsEnpoint名}/es/
      - SLS_PROJECT=etl-dev # 此處請修改
      - SLS_ACCESS_KEY_ID=ALIYUN_ACCESS_KEY_ID # 此處請修改, 確保有讀logstore的許可權
      - SLS_ACCESS_KEY_SECRET=ALIYUN_ACCESS_KEY_SECRET # 此處請修改為真實accessKeySecret
    networks:
      - es717net

  kibana:
    image: kibana:7.17.3
    depends_on:
      - kproxy
    environment:
      - ELASTICSEARCH_HOSTS=http://kproxy:9201
      - ELASTICSEARCH_USERNAME=elastic
      - ELASTICSEARCH_PASSWORD=ES密碼 # 此處請修改(跟前面設定的ES密碼相同)
      - XPACK_MONITORING_UI_CONTAINER_ELASTICSEARCH_ENABLED=true
    ports:
      - "5601:5601"
    networks:
      - es717net

networks:
  es717net:
    ipam:
      driver: default

啟動本地 Kibana 服務:

docker compose up -d

檢查 docker compose 啟動狀態:

docker compose ps

4. 訪問 Kibana

瀏覽器訪問 http://$(部署 Kibaba 的 IP 地址}:5601,輸入賬號密碼登入 Kibana。

4.1 配置 Index Pattern

選擇 Stack Managment:

無需重新學習,使用 Kibana 查詢/視覺化 SLS 資料

點選 Index Pattern Tab,在 Index Pattern 列表中看不到資料是正常的,日誌服務的 Logstore 對映到 Kibana 中的 Index Patterns 需要手動建立。在提示框中單擊 create an index pattern against hidden or system indices.

無需重新學習,使用 Kibana 查詢/視覺化 SLS 資料

在 Create Index Pattern 頁,Name 填寫格式為 ${project}.${logstore},注意這裡比必須完全填寫,不支援*匹配。

無需重新學習,使用 Kibana 查詢/視覺化 SLS 資料

點完成 Create Index Pattern 完成 Pattern 建立,然後進入 Discover 裡就可以查詢資料了。

無需重新學習,使用 Kibana 查詢/視覺化 SLS 資料

4.2 查詢 Logstore

無需重新學習,使用 Kibana 查詢/視覺化 SLS 資料

Kibana 的查詢框中可以選擇 KQL 和 Lucene 兩種方式,SLS 的 ES 相容介面都進行了支援。

簡單的 host 查詢:

無需重新學習,使用 Kibana 查詢/視覺化 SLS 資料

複雜一些 query、filter 都可以查詢。

無需重新學習,使用 Kibana 查詢/視覺化 SLS 資料

4.3 視覺化圖表

那麼除了查詢,可以用 Kibana 來做視覺化嗎?當然可以! 選擇 Dashboard。

無需重新學習,使用 Kibana 查詢/視覺化 SLS 資料

進入後點選 Create Dashboard 來建立一個圖表。

無需重新學習,使用 Kibana 查詢/視覺化 SLS 資料

透過設定,橫軸、縱軸的欄位和統計方式,可以很方便地做出想要圖。

比如最簡單的統計一個請求訪問數的柱狀圖,時間為橫軸,記錄數為縱軸。

無需重新學習,使用 Kibana 查詢/視覺化 SLS 資料

現在我想看到每個柱子中,status 的情況,可以選擇 Break down by 的欄位為 status。

無需重新學習,使用 Kibana 查詢/視覺化 SLS 資料

4.4 FAQ

1)為什麼在 Kibana 上看不到 SLS 上的 Logstore?

SLS 上的 Logstore 是透過 Kibana 的 Index Pattern 方式來查詢的,而 SLS 上的 Logstore 需要透過手工建立 Index Pattern 的方式來建立。

2)Kibana 上建立 Index Pattern 的時候,不做輸入的時候,為什麼沒有提示?

這個是正常的,在左側輸入正確的 project.project.{project}.{logstore} (這裡project、project、{project}、{logstore}需替換成真實值)後,會展示:

無需重新學習,使用 Kibana 查詢/視覺化 SLS 資料

3)Kibana 上建立 Index Pattern 的時候支援*通配嗎?

不支援通配,需要完整填寫 project.project.{project}.{logstore},比如 etl-dev.accesslog 這種方式來匹配。

無需重新學習,使用 Kibana 查詢/視覺化 SLS 資料

4)為什麼 Kibana 上建立 Logstore 的 Index Pattern 時右側沒有提示出現?

無需重新學習,使用 Kibana 查詢/視覺化 SLS 資料

有幾種可能:

1. SLS 的 ES 相容地址不對,在 kproxy 中配置時,規則為 https://${project名}.${slsEnpoint名}/es/,注意 /es/ 這個字尾。

2. 對應的 accessKeyId、accessKeySerect 沒有訪問 SLS Logstore 的許可權(讀許可權)。

5)我有多個 SLS Project 想在 Kibana 上訪問,可以做到嗎?

可以的,關鍵在於 kproxy 的配置。SLS_PROJECT、SLS_ENDPOINT、SLS_ACCESS_KEY_ID、SLS_ACCESS_KEY_SECRET 為第一個 Project 相關的變數名稱。從第二個 Project 開始,其相關變數名稱需加數字字尾,例如 SLS_PROJECT2、SLS_ENDPOINT2、SLS_ACCESS_KEY_ID2、SLS_ACCESS_KEY_SECRET2。如果後面某 Project 的 AccessKey 與第一個 Project 相同,則該 Project 對應的 AccessKey 可省略配置。

舉例,假設另外一個 Project 要被 Kibaba 查,那麼作為第二個 kproxy:

- SLS_ENDPOINT2=https://etl-dev2.cn-huhehaote.log.aliyuncs.com/es/
- SLS_PROJECT2=etl-dev2
- SLS_ACCESS_KEY_ID2=etl-dev2對應的accessKeyId  #如果和SLS_ACCESS_KEY_ID2一樣可以不加
- SLS_ACCESS_KEY_SECRET2=etl-dev2對應的accessKeyKey #如果和SLS_ACCESS_KEY_ID2一樣可以不加

5. 小結

本文演示了使用 Kibana 連線 SLS ES 相容介面進行查詢和分析的方法,對於 Kibana 的 query 和視覺化能力都能正常對接和使用。適合下面兩種情況:

  • 如果您之前的使用習慣是 Kibana,而日誌已經存在了阿里雲 SLS 上,可以使用該方案對接。
  • 如果您現在使用的是標準的 ELK 方案,但厭倦了 ES 使用時維護工作或者調優,不妨試一試阿里雲 SLS 的方案(c++ 底層、Serverless、低成本、ES 相容)。

期待您的使用。

參考文件:

SLS 相容 ES 介紹

使用 Kibana 連線 ES 相容介面

作者:荊磊

原文連結

本文為阿里雲原創內容,未經允許不得轉載。

相關文章