如果您已经在Kibana上实现Elasticsearch日志可视化,想要将日志数据从Elasticsearch迁移到SLS,可以使用SLS提供的Elasticsearch兼容接口,无需改动业务代码。
本文档为阿里云原创文档,知识产权归阿里云所有,由于本文档旨在介绍阿里云与第三方产品交互的服务能力,因此可能会提及第三方公司或产品等名称。
前提条件
已创建Project、标准型Logstore并完成日志采集配置。具体操作,请参见管理Project、创建基础LogStore和数据采集概述。
查询日志前,已配置索引。具体操作,请参见创建索引。
已创建RAM用户的AccessKey,并且为RAM用户授予Logstore的查询权限。具体操作,请参见RAM授权。
背景信息
Kibana是一款基于Elasticsearch的数据可视化和探索工具。您可以通过Kibana对Elasticsearch中的数据进行查询、分析和可视化。对于已经习惯使用Kibana做日志查询和可视化报表的用户,日志服务提供了兼容Elasticsearch的接口,用户可以使用这些兼容接口实现在Kibana中查询和分析日志服务中的数据。
工作原理
您需要在客户端环境中部署Kibana、Proxy和Elasticsearch。
Kibana:用于查询、分析和可视化展示数据。
Elasticsearch:用于存储Kibana的Meta数据(主要为配置信息,数据量极小)。
由于Kibana的Meta信息经常需要更新,而日志服务不支持更新操作。因此需要部署一个Elasticsearch专门用于存储Kibana的Meta数据。
Proxy:用于区分Kibana对Meta数据和日志服务Elasticsearch兼容接口的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
日志服务的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部署
前提条件
确保阿里云容器服务 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
日志服务的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对接日志服务时,支持对接单个或多个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协议。 |
| 日志服务的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兼容接口分析日志服务数据时,目前只支持使用Discover和Dashboard这两个模块。
在页面左上角选择目标索引,在页面右上角选择时间范围,查询日志数据。
查询完成后,页面展示匹配文档总数、时间分布柱状图以及日志详情列表,左侧 Available fields 面板列出所有可查询字段。
手动配置IndexPattern(可选)
使用Docker Compose部署或使用Helm部署的情况下默认不需要手动创建Index Pattern。如果使用Docker手动部署,需要手工创建一下Index Pattern。
在左侧导航栏中,选择Management > Stack Management。
在左侧导航栏中,选择Kibana > Index Patterns。
首次使用时,请先在提示框中单击create an index pattern against hidden or system indices.页面提示需要先添加数据,单击页面底部的 create an index pattern against hidden or system indices 链接,进入手动创建 Index pattern 的入口。
说明在Index pattern列表中看不到数据是正常的,日志服务的LogStore映射到Kibana中的Index patterns需要手动创建。
在Create index pattern窗口中,配置相关参数。
配置完成后,单击 Create index pattern 完成索引模式创建。
参数名称
说明
Name索引名称,该名称的命名规则为
${日志服务Project名称}.${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状态。CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 639d8701ca66 sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/elasticsearch:7.17.3 eswrapper 30 hours ago Up 30 hours sls-kibana_es_1 d8440cb7aebd sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/kproxy:2.0.5 /workspace/start.... 30 hours ago Up 30 hours sls-kibana_kproxy_1 a5a5d4df2c20 sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/kibana:7.17.3 /usr/local/bin/ki... 30 hours ago Up 30 hours 0.0.0.0:5601->5601/tcp sls-kibana_kibana_1 38f321de86f5 sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/kproxy:2.0.5 /usr/bin/python3 ... 30 hours ago Up 30 hours sls-kibana_index-patterner_1如果三个容器的状态都为UP,则查看每个容器的错误日志。
docker logs sls-kibana_es_1 # 查看es启动日志 docker logs sls-kibana_kproxy_1 # 查看kproxy启动日志 docker logs sls-kibana_kibana_1 # 查看kibana启动日志
使用Helm部署,无法访问Kibana?
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。
在页面顶端选择命名空间为
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