無需重新學習,使用 Kibana 查詢/可視化 SLS 數據

作者:荊磊

場景

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

使用方法

部署架構

這裏藍色部分是需要客戶端部署的組件。

  • Kibana 就是用來可視化的
  • Proxy 用來區分 Kibana 的請求,將 SLS 相關的轉發到 SLS 的 ES 兼容接口
  • Elasticsearch 用來存 Kibana 的 Meta

等等,爲什麼這裏還需要一個 ES? 

原因是 SLS 的 Logstore 不支持更新,很多 Meta 類的數據不適合存在 SLS。

而 Kibana 有很多元數據要存儲,比如 Kibana 的圖表配置、Index Pattern 配置等。

因此需要部署一個 ES 實例,這個 ES 實例只會存 Kibana 的元數據,所以它的資源佔用非常小。

部署過程

使用 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

訪問 Kibana

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

配置 Index Pattern

選擇 Stack Managment:

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

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

點完成 Create Index Pattern 完成 Pattern 創建,然後進入 Discover 裏就可以查詢數據了。

查詢 Logstore

Kibana 的查詢框中可以選擇 KQL 和 Lucene 兩種方式,SLS 的 ES 兼容接口都進行了支持。

簡單的 host 查詢:

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

可視化圖表

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

進入後點擊 Create Dashboard 來創建一個圖表。

通過設置,橫軸、縱軸的字段和統計方式,可以很方便地做出想要圖。

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

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

FAQ

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

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

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

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

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

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

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

有幾種可能:

  1. SLS 的 ES 兼容地址不對,在 kproxy 中配置時,規則爲 https://${project名}.${slsEnpoint名}/es/,注意 /es/ 這個後綴。2. 對應的 accessKeyId、accessKeySerect 沒有訪問 SLS Logstore 的權限(讀權限)。
  2. 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一樣可以不加

小結

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

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

期待您的使用。

參考文檔:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章