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:
點選 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 裡就可以查詢資料了。
4.2 查詢 Logstore
Kibana 的查詢框中可以選擇 KQL 和 Lucene 兩種方式,SLS 的 ES 相容介面都進行了支援。
簡單的 host 查詢:
複雜一些 query、filter 都可以查詢。
4.3 視覺化圖表
那麼除了查詢,可以用 Kibana 來做視覺化嗎?當然可以! 選擇 Dashboard。
進入後點選 Create Dashboard 來建立一個圖表。
透過設定,橫軸、縱軸的欄位和統計方式,可以很方便地做出想要圖。
比如最簡單的統計一個請求訪問數的柱狀圖,時間為橫軸,記錄數為縱軸。
現在我想看到每個柱子中,status 的情況,可以選擇 Break down by 的欄位為 status。
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}需替換成真實值)後,會展示:
3)Kibana 上建立 Index Pattern 的時候支援*通配嗎?
不支援通配,需要完整填寫 project.project.{project}.{logstore},比如 etl-dev.accesslog 這種方式來匹配。
4)為什麼 Kibana 上建立 Logstore 的 Index Pattern 時右側沒有提示出現?
有幾種可能:
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 相容介面
作者:荊磊
原文連結
本文為阿里雲原創內容,未經允許不得轉載。