如果您已經在Kibana上實現Elasticsearch日誌可視化,想要將日誌資料從Elasticsearch遷移到SLS,可以使用SLS提供的Elasticsearch相容介面,無需改動業務代碼。
本文檔為阿里雲原創文檔,智慧財產權歸阿里雲所有,由於本文檔旨在介紹阿里雲與第三方產品互動的服務能力,因此可能會提及第三方公司或產品等名稱。
前提條件
已建立Project、標準型Logstore並完成日誌採集配置。具體操作,請參見管理Project、建立基礎LogStore和資料擷取概述。
查詢日誌前,已配置索引。具體操作,請參見建立索引。
已建立RAM使用者的AccessKey,並且為RAM使用者授予Logstore的查詢許可權。具體操作,請參見RAM授權。
背景資訊
Kibana是一款基於Elasticsearch的資料視覺效果和探索工具。您可以通過Kibana對Elasticsearch中的資料進行查詢、分析和可視化。對於已經習慣使用Kibana做日誌查詢和可視化報表的使用者,Log Service提供了相容Elasticsearch的介面,使用者可以使用這些相容介面實現在Kibana中查詢和分析Log Service中的資料。
工作原理
您需要在用戶端環境中部署Kibana、Proxy和Elasticsearch。
Kibana:用於查詢、分析和可視化展示資料。
Elasticsearch:用於儲存Kibana的Meta資料(主要為配置資訊,資料量極小)。
由於Kibana的Meta資訊經常需要更新,而Log Service不支援更新操作。因此需要部署一個Elasticsearch專門用於儲存Kibana的Meta資料。
Proxy:用於區分Kibana對Meta資料和Log ServiceElasticsearch相容介面的API請求,需要部署一個Proxy對Kibana的API請求進行路由。
步驟一:部署Elasticsearch、Kibana和Proxy
建議伺服器的記憶體為8G及以上。
Docker版本為1.18及以上。
使用Docker Compose部署
在伺服器執行以下命令,建立一個名為
sls-kibana的新目錄,在sls-kibana目錄下建立一個名為data子目錄。更改data目錄的許可權,確保Elasticsearch容器具有對該目錄的讀、寫和執行許可權。mkdir sls-kibana cd sls-kibana mkdir data chmod 777 data在
sls-kibana目錄建立.env檔案,內容如下,請根據實際參數修改。ES_PASSWORD=aStrongPassword # 請根據實際情況修改 SLS_ENDPOINT=cn-huhehaote.log.aliyuncs.com SLS_PROJECT=etl-dev-7494ab**** SLS_ACCESS_KEY_ID=xxx SLS_ACCESS_KEY_SECRET=xxx # ECS_ROLE_NAME="" # 如果使用ecs ram角色的方式訪問,這裡填具體ecs ram角色名稱 #SLS_PROJECT_ALIAS=etl-dev # 可選,如果覺得SLS_PROJECT名字太長,可以設定一下別名 #SLS_LOGSTORE_FILTERS="access*" # 可選,過濾哪些logstore自動建立index pattern,多個index pattern用逗號分隔,比如 "access*,error*",注意加上雙引號 #KIBANA_SPACE=default # 可選,指定索引模式(index pattern)建立在哪個space下, 不存在則自動建立。 # 如果有更多project,可以繼續加; 注意超過6個的話,docker-compose.yml中引用也要加 #SLS_ENDPOINT2=cn-huhehaote.log.aliyuncs.com #SLS_PROJECT2=etl-dev2 #SLS_ACCESS_KEY_ID2=xxx #SLS_ACCESS_KEY_SECRET2=xxx #SLS_PROJECT_ALIAS2=etl-dev2 # 可選,如果覺得SLS_PROJECT名字太長,可以設定一下別名 #SLS_LOGSTORE_FILTERS2="test*log" # 可選,過濾哪些logstore自動建立index pattern建立,多個pattern用逗號分隔,比如 "access*,error*",注意加上雙引號 #KIBANA_SPACE2=default # 可選,指定index parttern建立在哪個space下; 不存在則自動建立參數
說明
ES_PASSWORD
Elasticsearch的密碼,也是Kibana的密碼。
ECS_ROLE_NAME
ECS執行個體RAM角色,RAM角色需要的許可權操作請參見RAM授權。
SLS_ENDPOINT
Project的訪問網域名稱,請參見管理Project。
SLS_PROJECT
Log Service的Project名稱,請參見管理Project。
SLS_ACCESS_KEY_ID
前提條件中建立的RAM使用者的AK。RAM使用者需要具備LogStore的查詢許可權,請參見RAM授權。
SLS_ACCESS_KEY_SECRET
前提條件中建立的RAM使用者的SK。RAM使用者需要具備LogStore的查詢許可權,請參見RAM授權。
SLS_PROJECT_ALIAS
可選,如果SLS_PROJECT名稱過長,可以選擇設定一個別名。
SLS_LOGSTORE_FILTERS
可選,過濾哪些logstore自動建立index pattern,多個index pattern用逗號分隔,比如
"access*,error*",注意加上雙引號。KIBANA_SPACE
可選,指定索引模式(index pattern)建立在哪個space下, 不存在則自動建立。
在
sls-kibana目錄中建立docker-compose.yaml檔案,內容如下。services: es: image: sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/elasticsearch:7.17.26 #image: sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/elasticsearch:7.17.26-arm64 environment: - "discovery.type=single-node" - "ES_JAVA_OPTS=-Xms2G -Xmx2G" - ELASTIC_USERNAME=elastic - ELASTIC_PASSWORD=${ES_PASSWORD} - xpack.security.enabled=true volumes: # TODO 這裡的./data目錄需要提前建立, 確認已經mkdir data && chmod 777 data - ./data:/usr/share/elasticsearch/data kproxy: image: sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/kproxy:2.1.8 #image: sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/kproxy:2.1.8-arm64 depends_on: - es environment: - ES_ENDPOINT=es:9200 - ECS_ROLE_NAME=${ECS_ROLE_NAME} # 第一個sls project - SLS_ENDPOINT=${SLS_ENDPOINT} - SLS_PROJECT=${SLS_PROJECT} - SLS_LOGSTORE_FILTERS=${SLS_LOGSTORE_FILTERS} - KIBANA_SPACE=${KIBANA_SPACE} - SLS_PROJECT_ALIAS=${SLS_PROJECT_ALIAS} - SLS_ACCESS_KEY_ID=${SLS_ACCESS_KEY_ID} - SLS_ACCESS_KEY_SECRET=${SLS_ACCESS_KEY_SECRET} # 第二個sls project - SLS_ENDPOINT2=${SLS_ENDPOINT2} - SLS_PROJECT2=${SLS_PROJECT2} - SLS_LOGSTORE_FILTERS2=${SLS_LOGSTORE_FILTERS2} - KIBANA_SPACE2=${KIBANA_SPACE2} - SLS_PROJECT_ALIAS2=${SLS_PROJECT_ALIAS2} - SLS_ACCESS_KEY_ID2=${SLS_ACCESS_KEY_ID2} - SLS_ACCESS_KEY_SECRET2=${SLS_ACCESS_KEY_SECRET2} - SLS_ENDPOINT3=${SLS_ENDPOINT3} - SLS_PROJECT3=${SLS_PROJECT3} - SLS_LOGSTORE_FILTERS3=${SLS_LOGSTORE_FILTERS3} - KIBANA_SPACE3=${KIBANA_SPACE3} - SLS_PROJECT_ALIAS3=${SLS_PROJECT_ALIAS3} - SLS_ACCESS_KEY_ID3=${SLS_ACCESS_KEY_ID3} - SLS_ACCESS_KEY_SECRET3=${SLS_ACCESS_KEY_SECRET3} - SLS_ENDPOINT4=${SLS_ENDPOINT4} - SLS_PROJECT4=${SLS_PROJECT4} - SLS_LOGSTORE_FILTERS4=${SLS_LOGSTORE_FILTERS4} - KIBANA_SPACE4=${KIBANA_SPACE4} - SLS_PROJECT_ALIAS4=${SLS_PROJECT_ALIAS4} - SLS_ACCESS_KEY_ID4=${SLS_ACCESS_KEY_ID4} - SLS_ACCESS_KEY_SECRET4=${SLS_ACCESS_KEY_SECRET4} - SLS_ENDPOINT5=${SLS_ENDPOINT5} - SLS_PROJECT5=${SLS_PROJECT5} - SLS_LOGSTORE_FILTERS5=${SLS_LOGSTORE_FILTERS5} - KIBANA_SPACE5=${KIBANA_SPACE5} - SLS_PROJECT_ALIAS5=${SLS_PROJECT_ALIAS5} - SLS_ACCESS_KEY_ID5=${SLS_ACCESS_KEY_ID5} - SLS_ACCESS_KEY_SECRET5=${SLS_ACCESS_KEY_SECRET5} - SLS_ENDPOINT6=${SLS_ENDPOINT6} - SLS_PROJECT6=${SLS_PROJECT6} - SLS_LOGSTORE_FILTERS6=${SLS_LOGSTORE_FILTERS6} - KIBANA_SPACE6=${KIBANA_SPACE6} - SLS_PROJECT_ALIAS6=${SLS_PROJECT_ALIAS6} - SLS_ACCESS_KEY_ID6=${SLS_ACCESS_KEY_ID6} - SLS_ACCESS_KEY_SECRET6=${SLS_ACCESS_KEY_SECRET6} # 如有更多,可以繼續加,最多255個 kibana: image: sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/kibana:7.17.26 #image: sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/kibana:7.17.26-arm64 depends_on: - kproxy environment: - ELASTICSEARCH_HOSTS=http://kproxy:9201 - ELASTICSEARCH_USERNAME=elastic - ELASTICSEARCH_PASSWORD=${ES_PASSWORD} - XPACK_MONITORING_UI_CONTAINER_ELASTICSEARCH_ENABLED=true ports: - "5601:5601" # 這個服務元件是可選的,作用是自動建立kibana index pattern index-patterner: image: sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/kproxy:2.1.8 #image: sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/kproxy:2.1.8-arm64 command: /usr/bin/python3 -u /workspace/create_index_pattern.py depends_on: - kibana environment: - KPROXY_ENDPOINT=http://kproxy:9201 - KIBANA_ENDPOINT=http://kibana:5601 - KIBANA_USER=elastic - KIBANA_PASSWORD=${ES_PASSWORD} - ECS_ROLE_NAME=${ECS_ROLE_NAME} - SLS_PROJECT_ALIAS=${SLS_PROJECT_ALIAS} - SLS_ACCESS_KEY_ID=${SLS_ACCESS_KEY_ID} - SLS_ACCESS_KEY_SECRET=${SLS_ACCESS_KEY_SECRET} - SLS_PROJECT_ALIAS2=${SLS_PROJECT_ALIAS2} - SLS_ACCESS_KEY_ID2=${SLS_ACCESS_KEY_ID2} - SLS_ACCESS_KEY_SECRET2=${SLS_ACCESS_KEY_SECRET2} - SLS_PROJECT_ALIAS3=${SLS_PROJECT_ALIAS3} - SLS_ACCESS_KEY_ID3=${SLS_ACCESS_KEY_ID3} - SLS_ACCESS_KEY_SECRET3=${SLS_ACCESS_KEY_SECRET3} - SLS_PROJECT_ALIAS4=${SLS_PROJECT_ALIAS4} - SLS_ACCESS_KEY_ID4=${SLS_ACCESS_KEY_ID4} - SLS_ACCESS_KEY_SECRET4=${SLS_ACCESS_KEY_SECRET4} - SLS_PROJECT_ALIAS5=${SLS_PROJECT_ALIAS5} - SLS_ACCESS_KEY_ID5=${SLS_ACCESS_KEY_ID5} - SLS_ACCESS_KEY_SECRET5=${SLS_ACCESS_KEY_SECRET5} - SLS_PROJECT_ALIAS6=${SLS_PROJECT_ALIAS6} - SLS_ACCESS_KEY_ID6=${SLS_ACCESS_KEY_ID6} - SLS_ACCESS_KEY_SECRET6=${SLS_ACCESS_KEY_SECRET6} # 如有更多,可以繼續加,最多255個執行以下命令,啟動服務。
docker compose up -d執行以下命令,查看服務狀態。
docker compose ps部署完成後,在瀏覽器中輸入
http://${部署Kibana的IP地址}:5601,進入Kibana的登入頁面,輸入步驟二中設定的Elasticsearch的使用者名稱和密碼。重要必須在伺服器的安全性群組規則中添加5601連接埠,請參見添加安全性群組規則。
http://${部署Kibana的IP地址}:5601
使用Helm部署
前提條件
確保阿里雲Container Service Kubernetes 版ACK叢集中有以下組件。查看已安裝組件的操作步驟,請參見管理組件。
以下任意一種Ingress controller:
操作步驟
建立命名空間(Namespace)。
# 建立namespace kubectl create namespace sls-kibana建立並編輯
values.yaml檔案,內容如下,請根據實際情況修改。kibana: ingressClass: nginx # 根據實際安裝的ingress controller修改 # 根據ack叢集->營運管理->組件管理下搜ingress,查看已安裝的ingress控制台確定該值 # ALB Ingress Controller 設定為alb # MSE Ingress Controller 設定為mse # Nginx Ingress Controller 設定為nginx ingressDomain: #可以為空白,如果需要通過網域名稱訪問kibana,可以設定該值 ingressPath: /kibana/ # 必填,訪問時的子路徑 # 如果ingressDomain非空, 那麼ingressPath支援設定為/ #i18nLocale: en # 設定Kibana的語言,預設為英文,如果需要中文可以設定值為zh-CN elasticsearch: password: aStrongPass # 請根據實際情況修改es的密碼,同時也是kibana的訪問密碼,對應帳號為elastic #diskZoneId: cn-hongkong-c # 指定es使用的雲端硬碟所在的az。不設定的情況下az會系統選擇 repository: region: cn-hangzhou # 鏡像所在地區,中國固定設定為cn-hangzhou 海外固定設定為ap-southeast-1;會使用公網拉取鏡像 #kproxy: # ecsRoleName: # 如果使用ecs角色訪問,填寫該值 #arch: amd64 # amd64 or arm64 預設是amd64 sls: - project: k8s-log-c5****** # sls的project endpoint: cn-huhehaote.log.aliyuncs.com # sls project對應的endpoint accessKeyId: 具有sls存取權限的accessKeyId accessKeySecret: 具有sls存取權限的accessKeySecret # alias: etl-logs # 可選,如果覺得project名在kibana中顯示太長,可以設定別名 # kibanaSpace: default # 可選,指定index pattern建立在哪個space下; 不存在則自動建立 # logstoreFilters: "*" # 可選,過濾哪些logstore自動建立index pattern建立,多個pattern用逗號分隔,比如 "access*,error*",注意加上雙引號。 # 如果有第二個繼續按上面的格式添加 #- project: etl-dev2 # sls的project # endpoint: cn-huhehaote.log.aliyuncs.com # sls project對應的endpoint # accessKeyId: 具有sls存取權限的accessKeyId # accessKeySecret: 具有sls存取權限的accessKeySecret # alias: etl-logs2 # 可選,如果覺得project名在kibana中顯示太長,可以設定別名 # kibanaSpace: default # 可選,指定index pattern建立在哪個space下; 不存在則自動建立 # logstoreFilters: "*" # 可選,過濾哪些logstore自動建立index pattern建立,多個pattern用逗號分隔,比如 "access*,error*",注意加上雙引號參數說明
說明
kibana.ingressClass
根據實際安裝的ingress controller修改,查看組件的步驟請參見管理組件。
ALB Ingress Controller:設定為alb
MSE Ingress Controller:設定為mse
Nginx Ingress Controller:設定為nginx
kibana.ingressDomain
可以為空白,如果需要通過網域名稱訪問kibana,需要設定該值。
repository.region
鏡像所在地區,中國固定設定為
cn-hangzhou,海外固定設定為ap-southeast-1,會使用公網拉取鏡像。kibana.ingressPath
訪問時的子路徑。如果ingressDomain非空,那麼ingressPath支援設定為
/。elasticsearch.password
請根據實際情況修改Elasticsearch的密碼,同時也是Kibana的訪問密碼,Elasticsearch帳號為
elastic。kproxy.ecsRoleName
使用ECS執行個體RAM角色訪問,RAM角色需要的許可權操作請參見RAM授權。
sls.project
Log Service的Project名稱,請參見管理Project。
sls.endpoint
Project的訪問網域名稱,請參見管理Project。
sls.accessKeyId
前提條件中建立的RAM使用者的AK。RAM使用者需要具備LogStore的查詢許可權,請參見RAM授權。
sls.accessKeySecret
前提條件中建立的RAM使用者的SK。RAM使用者需要具備LogStore的查詢許可權,請參見RAM授權。
sls.alias
可選,如果Project名在Kibana中顯示太長,可以設定別名。
sls.kibanaSpace
可選,指定索引模式(index pattern)建立在哪個space下, 不存在則自動建立。
sls.logstoreFilters
可選,過濾哪些logstore自動建立index pattern,多個index pattern用逗號分隔,比如
"access*,error*",注意加上雙引號。執行以下命令,使用Helm部署。
helm install sls-kibana https://sls-kproxy.oss-cn-hangzhou.aliyuncs.com/sls-kibana-1.5.7.tgz -f values.yaml --namespace sls-kibana部署完成後,在瀏覽器中輸入
http://${ingress地址}/kibana/,進入Kibana的登入頁面,輸入步驟二中設定的Elasticsearch的使用者名稱和密碼。http://${ingress地址}/kibana/
使用Docker部署
第一步:部署Elasticsearch
使用Docker部署,必須先安裝和啟動Docker,請參見安裝並使用Docker和Docker Compose。
在伺服器上執行如下命令,部署Elasticsearch。
sudo docker pull sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/elasticsearch:7.17.26 sudo mkdir /data # Elasticsearch資料的儲存目錄, 請根據實際情況修改。 sudo chmod 777 /data # 配置許可權。 sudo docker run -d --name es -p 9200:9200 \ -e "discovery.type=single-node" \ -e "ES_JAVA_OPTS=-Xms2G -Xmx2G" \ -e ELASTIC_USERNAME=elastic \ -e ELASTIC_PASSWORD=passwd \ -e xpack.security.enabled=true \ -v /data:/usr/share/elasticsearch/data \ sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/elasticsearch:7.17.26參數
說明
ELASTIC_USERNAME登入Elasticsearch的使用者名稱,固定為elastic。
ELASTIC_PASSWORD登入Elasticsearch的密碼。Elasticsearch的密碼必須是字串類型。
/dataElasticsearch在物理機上的資料存放區位置,請根據情況修改。
部署完成後,請執行如下命令驗證Elasticsearch是否部署成功。如果使用公網IP,必須在伺服器的安全性群組規則中添加9200連接埠,請參見添加安全性群組規則。
curl http://${Elasticsearch所在機器的IP地址}:9200如果返回結果是包含
security_exception的JSON格式資料,則表示Elasticsearch已經成功部署。{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}
第二步:部署Proxy
Kibana對接Log Service時,支援對接單個或多個Project,您需要在部署Proxy時,添加對應的Project資訊。對應的部署樣本如下所示。
單個Project
sudo docker pull sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/kproxy:2.1.8
sudo docker run -d --name proxy \
-e ES_ENDPOINT=${Elasticsearch所在機器的IP地址}:9200 \
-e SLS_ENDPOINT=https://prjA.cn-guangzhou.log.aliyuncs.com/es/ \
-e SLS_PROJECT=prjA \
-e SLS_ACCESS_KEY_ID=${aliyunAccessId} \
-e SLS_ACCESS_KEY_SECRET=${aliyunAccessKey} \
-p 9201:9201 \
-ti sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/kproxy:2.1.8多個Project
最多可添加32個Project。
SLS_PROJECT、SLS_ENDPOINT、SLS_ACCESS_KEY_ID、SLS_ACCESS_KEY_SECRET為第一個Project相關的變數名稱。從第二個Project開始,其相關變數名稱需加數字尾碼,例如SLS_PROJECT2、SLS_ENDPOINT2。
如果後面某Project的相關變數取值與第一個Project相同,則該Project對應的Endpoint、AccessKey可省略配置。
sudo docker pull sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/kproxy:2.1.8
sudo docker run -d --name proxy \
-e ES_ENDPOINT=${Elasticsearch所在機器的IP地址}:9200 \
-e SLS_ENDPOINT=https://prjA.cn-guangzhou.log.aliyuncs.com/es/ \
-e SLS_ENDPOINT2=https://prjB.cn-guangzhou.log.aliyuncs.com/es/ \
-e SLS_PROJECT=prjA \
-e SLS_PROJECT2=prjB \
-e SLS_ACCESS_KEY_ID=${aliyunAccessId} \
-e SLS_ACCESS_KEY_SECRET=${aliyunAccessKey} \
-e SLS_ACCESS_KEY_ID2=${aliyunAccessId} \ #如果值和SLS_ACCESS_KEY_ID相同,無需配置。
-e SLS_ACCESS_KEY_SECRET2=${aliyunAccessKey} \ #如果值和SLS_ACCESS_KEY_SECRET相同,無需配置。
-p 9201:9201 \
-ti sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/kproxy:2.1.8樣本1
對接2個Project(prjA和prjB),且使用相同的AccessKey,則樣本如下:
sudo docker pull sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/kproxy:2.1.8 sudo docker run -d --name proxy \ -e ES_ENDPOINT=${Elasticsearch所在機器的IP地址}:9200 \ -e SLS_ENDPOINT=https://prjA.cn-guangzhou.log.aliyuncs.com/es/ \ -e SLS_ENDPOINT2=https://prjB.cn-guangzhou.log.aliyuncs.com/es/ \ -e SLS_PROJECT=prjA \ -e SLS_PROJECT2=prjB \ -e SLS_ACCESS_KEY_ID=${aliyunAccessId} \ -e SLS_ACCESS_KEY_SECRET=${aliyunAccessKey} \ -p 9201:9201 \ -ti sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/kproxy:2.1.8樣本2
對接3個Project(prjA、prjB、prjC),其中prjA和prjC使用相同的AccessKey,則樣本如下:
sudo docker run -d --name proxy \ -e ES_ENDPOINT=${Elasticsearch所在機器的IP地址}:9200 \ -e SLS_ENDPOINT=https://prjA.cn-guangzhou.log.aliyuncs.com/es/ \ -e SLS_ENDPOINT2=https://prjB.cn-guangzhou.log.aliyuncs.com/es/ \ -e SLS_ENDPOINT3=https://prjC.cn-guangzhou.log.aliyuncs.com/es/ \ -e SLS_PROJECT=prjA \ -e SLS_PROJECT2=prjB \ -e SLS_PROJECT3=prjC \ -e SLS_ACCESS_KEY_ID=${aliyunAccessId} \ -e SLS_ACCESS_KEY_SECRET=${aliyunAccessKey} \ -e SLS_ACCESS_KEY_ID2=${aliyunAccessId} \ -e SLS_ACCESS_KEY_SECRET2=${aliyunAccessKey} \ -p 9201:9201 \ -ti sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/kproxy:2.1.8
重要參數說明如下表所示。
參數 | 說明 |
| Elasticsearch的訪問地址,格式為 |
| 資料訪問地址,格式為 重要 必須使用HTTPS協議。 |
| Log Service的Project名稱,請參見管理Project。 |
| 阿里雲AccessKey ID。 建議使用RAM使用者的AccessKey,該RAM使用者需具備LogStore的資料查詢許可權。您可以通過許可權助手,配置許可權。具體操作,請參見配置許可權助手。AccessKey的擷取方法,請參見存取金鑰。 |
| 阿里雲AccessKey Secret。 建議使用RAM使用者的AccessKey,該RAM使用者需具備LogStore的資料查詢許可權。您可以通過許可權助手,配置許可權。具體操作,請參見配置許可權助手。AccessKey的擷取方法,請參見存取金鑰。 |
部署完成後,您可以執行如下命令驗證是否部署成功。如果使用公網IP,必須在伺服器的安全性群組規則中添加9201連接埠,請參見添加安全性群組規則。
curl http://${Proxy所在機器IP地址}:9201如果返回結果中包含security_exception的JSON格式資料,則表示Proxy已經成功部署。
{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}第三步:部署Kibana
參見如下樣本,部署Kibana。本文以Kibana 7.17.26版本為例。
sudo docker pull sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/kibana:7.17.26
sudo docker run -d --name kibana \
-e ELASTICSEARCH_HOSTS=http://${Proxy所在機器的IP地址}:9201 \
-e ELASTICSEARCH_USERNAME=elastic \
-e ELASTICSEARCH_PASSWORD=passwd \
-e XPACK_MONITORING_UI_CONTAINER_ELASTICSEARCH_ENABLED=true \
-p 5601:5601 \
sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/kibana:7.17.26參數 | 說明 |
| Proxy的訪問地址,格式為 |
| 登入Kibana的使用者名稱。 需與您在部署Elasticsearch時設定的Elasticsearch使用者名稱一致。 |
| 登入Kibana的密碼。 需與您在部署Elasticsearch時設定的Elasticsearch密碼一致。 |
部署完成後,在瀏覽器中輸入http://${部署Kibana的IP地址}:5601,進入Kibana的登入頁面,輸入第一步中設定的Elasticsearch的使用者名稱和密碼。
必須在伺服器的安全性群組規則中添加5601連接埠,請參見添加安全性群組規則。
http://${部署Kibana的IP地址}:5601
步驟二:訪問Kibana
查詢和分析資料
在左側導覽列中,選擇Analytics>Discover。
重要使用Kibana和Elasticsearch相容介面分析Log Service資料時,目前只支援使用Discover和Dashboard這兩個模組。

在頁面左上方選擇目標索引,在頁面右上方選擇時間範圍,查詢日誌資料。

手動設定IndexPattern(可選)
使用Docker Compose部署或使用Helm部署的情況下預設不需要手動建立Index Pattern。如果使用Docker手動部署,需要手工建立一下Index Pattern。
在左側導覽列中,選擇Management > Stack Management。

在左側導覽列中,選擇Kibana > Index Patterns。
首次使用時,請先在提示框中單擊create an index pattern against hidden or system indices.
說明在Index pattern列表中看不到資料是正常的,Simple Log Service的logstore映射到Kibana中的Index patterns需要手動建立。
在Create index pattern視窗中,配置相關參數。

參數名稱
說明
Name索引名稱,該名稱的命名規則為
${Log ServiceProject名稱}.${LogStore名稱}。重要索引名稱僅支援精準匹配,不支援使用萬用字元,即您需要輸入完整的索引名稱。
例如Project名稱為etl-guangzhou,LogStore名稱為es_test22,那麼此處名稱為
etl-guangzhou.es_test22。Timestamp field時間戳記欄位,固定選擇為
@timestamp。單擊Create index pattern。
QueryString案例
指定欄位的查詢比不指定欄位的查詢友好。
content: "Hello World"如下不指定欄位的查詢語句是不友好的,可能在某些情況下被翻譯成sql欄位,concat後再匹配,導致查詢效率低下。
"Hello World"使用精準的匹配比使用
*通配查詢友好。content : "Hello World"如下查詢語句使用
*通配是不友好的,因為會觸發全文掃描,在資料量大的情況下,回應時間會增加。content : "Hello*"
常見問題
使用Docker Compose部署,無法訪問Kibana?
在
sls-kibana目錄裡,執行docker compose ps查看容器的啟動狀態STATUS,確保都處於UP狀態。
如果三個容器的狀態都為UP,則查看每個容器的錯誤記錄檔。
docker logs sls-kibana_es_1 # 查看es開機記錄 docker logs sls-kibana_kproxy_1 # 查看kproxy開機記錄 docker logs sls-kibana_kibana_1 # 查看kibana開機記錄
使用Helm部署,無法訪問Kibana?
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在頁面頂端選擇命名空間為
sls-kibana。檢查Elasticsearch、Kibana、Kproxy是否已經正常啟動。查看和編輯有狀態工作負載的狀態、批量重新部署應用的步驟,請參見建立有狀態工作負載StatefulSet。
如何卸載helm?
helm uninstall sls-kibana --namespace sls-kibanaKibana中如何顯示高精度時間?
確保SLS中的時間使用高精度時間採集或上報,通過配置 納秒精度時間戳記 ,支援納秒級精度時間戳記。
在確保高精度時間採集後,需在欄位索引中添加類型為
long的__time_ns_part__納秒欄位索引。由於Kibana的部分查詢可能被轉換為SQL執行,因此需要在SQL結果中包含高精度時間。
如何升級Helm Chart?
Helm Chart升級和install類似,把install命令換成upgrade即可。values.yaml可以複用之前install時的檔案。
helm upgrade sls-kibana https://sls-kproxy.oss-cn-hangzhou.aliyuncs.com/sls-kibana-1.5.5.tgz -f values.yaml --namespace sls-kibana如何大量刪除Index pattern?
列舉出需要刪除的Index pattern。
準備
kibana_config.json:{ "url" : "http://xxx:5601", "user" : "elastic", "password" : "", "space" : "default" }使用ptn_list.py列舉出已有的Index pattern,並將結果輸出到
/tmp/ptnlist.txt檔案。➜ python ptn_list.py kibana_config.json > /tmp/ptnlist.txt編輯
/tmp/ptnlist.txt檔案,只留下需要刪除的index pattern行。54c0d6c0-****-****-****-15adf26175c7 etl-dev.batch_test52 54266b80-****-****-****-15adf26175c7 etl-dev.batch_test51 52f369c0-****-****-****-15adf26175c7 etl-dev.batch_test49 538ceaa0-****-****-****-15adf26175c7 etl-dev.batch_test50使用ptn_delete.py刪除Index pattern。
說明Index pattern刪除後對應的Dashboard等都會無法使用,請確保待刪的Index Pattern是沒有用的。
# 查看/tmp/ptnlist.txt,確認都是要刪除的Index Pattern ➜ cat /tmp/ptnlist.txt # 執行刪除 ➜ python ptn_delete.py kibana_config.json /tmp/ptnlist.txt