对接Kibana

如果您已经在Kibana上实现Elasticsearch日志可视化,想要将日志数据从Elasticsearch迁移到SLS,可以使用SLS提供的Elasticsearch兼容接口,无需改动业务代码。

重要

本文档为阿里云原创文档,知识产权归阿里云所有,由于本文档旨在介绍阿里云与第三方产品交互的服务能力,因此可能会提及第三方公司或产品等名称。

前提条件

背景信息

Kibana是一款基于Elasticsearch的数据可视化和探索工具。您可以通过Kibana对Elasticsearch中的数据进行查询、分析和可视化。对于已经习惯使用Kibana做日志查询和可视化报表的用户,日志服务提供了兼容Elasticsearch的接口,用户可以使用这些兼容接口实现在Kibana中查询和分析日志服务中的数据。

操作视频

本视频指导您使用Kibana访问日志服务的Elasticsearch兼容接口。

工作原理

您需要在客户端环境中部署Kibana、Proxy和Elasticsearch。

  • Kibana:用于查询、分析和可视化展示数据。

  • Elasticsearch:用于存储Kibana的Meta数据(主要为配置信息,数据量极小)。

    由于Kibana的Meta信息经常需要更新,而日志服务不支持更新操作。因此需要部署一个Elasticsearch专门用于存储Kibana的Meta数据。

  • Proxy:用于区分Kibana对Meta数据和日志服务Elasticsearch兼容接口的API请求,需要部署一个Proxy对Kibana的API请求进行路由。

image

步骤一:部署Elasticsearch、Kibana和Proxy

重要

建议服务器的内存为8G及以上。

使用Docker Compose部署

  1. 在服务器执行以下命令,创建一个名为sls-kibana的新目录,在sls-kibana目录下创建一个名为data子目录。更改data目录的权限,确保Elasticsearch容器具有对该目录的读、写和执行权限。

    mkdir sls-kibana
    
    cd sls-kibana
    
    mkdir data
    chmod 777 data 
  2. 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
    #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的密码。

    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下, 不存在则自动创建。

  3. sls-kibana目录中创建docker-compose.yaml文件,内容如下。

    services:
      es:
        image: sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/elasticsearch:7.17.3
        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.1
        depends_on:
          - es
        environment:
          - ES_ENDPOINT=es:9200
    
          # 第一个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.3
        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.1
        command: /usr/bin/python3 -u /workspace/create_index_partten.py
        depends_on:
          - kibana
        environment:
          - KPROXY_ENDPOINT=http://kproxy:9201
          - KIBANA_ENDPOINT=http://kibana:5601
          - KIBANA_USER=elastic
          - KIBANA_PASSWORD=${ES_PASSWORD}
    
          - 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个
  4. 执行以下命令,启动服务。

    docker compose up -d
  5. 执行以下命令,查看服务状态。

    docker compose ps
  6. 部署完成后,在浏览器中输入http://${部署Kibaba的IP地址}:5601,进入Kibana的登录页面,输入第一步中设置的Elasticsearch的用户名和密码。

    重要

    必须在服务器的安全组规则中添加5601端口,请参见添加安全组规则

    http://${部署Kibana的IP地址}:5601

    image

使用Helm部署

前提条件

确保阿里云容器服务 Kubernetes 版ACK集群中有以下组件。查看已安装组件的操作步骤,请参见管理组件

操作步骤

  1. 创建命名空间(Namespace)。

    # 创建namespace
    kubectl create namespace sls-kibana
  2. 创建并编辑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;会使用公网拉取镜像
    
    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

    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*",注意加上双引号。

  3. 执行以下命令,使用Helm部署。

    helm install sls-kibana https://sls-kproxy.oss-cn-hangzhou.aliyuncs.com/sls-kibana-1.5.1.tgz -f values.yaml --namespace sls-kibana
  4. 部署完成后,在浏览器中输入http://${ingress地址}/kibana/,进入Kibana的登录页面,输入第一步中设置的Elasticsearch的用户名和密码。

    http://${ingress地址}/kibana/ 

    image

使用Docker部署

第一步:部署Elasticsearch

重要

使用Docker部署,必须先安装和启动Docker,请参见安装Docker

  1. 在服务器上执行如下命令,部署Elasticsearch。

    sudo docker pull sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/elasticsearch:7.17.3
    
    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.3

    参数

    说明

    ELASTIC_USERNAME

    登录Elasticsearch的用户名,固定为elastic。

    ELASTIC_PASSWORD

    登录Elasticsearch的密码。Elasticsearch的密码必须是字符串类型。

    /data

    Elasticsearch在物理机上的数据存储位置,请根据情况修改。

  2. 部署完成后,请执行如下命令验证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.1

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.1

多个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.1

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.1
  • 示例1

    对接2个Project(prjA和prjB),且使用相同的AccessKey,则示例如下:

    sudo docker pull sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/kproxy:2.1.1
    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_ENDPOINT=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.1
  • 示例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.1

重要参数说明如下表所示。

参数

说明

ES_ENDPOINT

Elasticsearch的访问地址,格式为${Elasticsearch所在机器的IP地址}:9200

SLS_ENDPOINT

数据访问地址,格式为https://${project}.${sls-endpoint}/es/。其中${project}为Project名称,${sls-endpoint}为日志服务Project的访问域名。更多信息,请参见服务入口例如:https://etl-guangzhou.cn-guangzhou.log.aliyuncs.com/es/

重要

必须使用HTTPS协议。

SLS_PROJECT

日志服务的Project名称,请参见管理Project

SLS_ACCESS_KEY_ID

阿里云AccessKey ID。

建议使用RAM用户的AccessKey,该RAM用户需具备Logstore的数据查询权限。您可以通过权限助手,配置权限。具体操作,请参见配置权限助手。AccessKey的获取方法,请参见访问密钥

SLS_ACCESS_KEY_SECRET

阿里云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.3版本为例。

sudo docker pull  sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/kibana:7.17.3

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.3

参数

说明

ELASTICSEARCH_HOSTS

Proxy的访问地址,格式为http://${proxy所在机器的IP地址}:9201

ELASTICSEARCH_USERNAME

登录Kibana的用户名。

需与您在部署Elasticsearch时设置的Elasticsearch用户名一致。

ELASTICSEARCH_PASSWORD

登录Kibana的密码。

需与您在部署Elasticsearch时设置的Elasticsearch密码一致。

部署完成后,在浏览器中输入http://${部署Kibana的IP地址}:5601,进入Kibana的登录页面,输入第一步中设置的Elasticsearch的用户名和密码。

重要

必须在服务器的安全组规则中添加5601端口,请参见添加安全组规则

http://${部署Kibana的IP地址}:5601

image

步骤二:访问Kibana

查询和分析数据

  1. 在左侧导航栏中,选择Analytics>Discover

    重要

    使用Kibana和Elasticsearch兼容接口分析日志服务数据时,目前只支持使用Discover和Dashboard这两个模块。

    image

  2. 在页面左上角选择目标索引,在页面右上角选择时间范围,查询日志数据。

    image.png

手动配置IndexPattern(可选)

重要

使用Docker Compose部署或使用Helm部署的情况下默认不需要手动创建Index Pattern。如果使用Docker手动部署,需要手工创建一下Index Pattern。

  1. 在左侧导航栏中,选择Management > Stack Managementimage..png

  2. 在左侧导航栏中,选择Kibana > Index Patterns

  3. 首次使用时,请先在提示框中单击create an index pattern against hidden or system indices.image.png

    说明

    在Index pattern列表中看不到数据是正常的,日志服务的logstore映射到Kibana中的Index patterns需要手动创建。

  4. Create index pattern窗口中,配置相关参数。

    image.png

    参数名称

    说明

    Name

    索引名称,该名称的命名规则为${日志服务Project名称}.${Logstore名称}

    重要

    索引名称仅支持精准匹配,不支持使用通配符,即您需要输入完整的索引名称。

    例如Project名称为etl-guangzhou,Logstore名称为es_test22,那么此处名称为etl-guangzhou.es_test22

    Timestamp field

    时间戳字段,固定选择为@timestamp

  5. 单击Create index pattern

常见问题

使用Docker Compose部署,无法访问Kibana

  1. sls-kibana目录里,执行docker compose ps查看容器的启动状态STATUS,确保都处于UP状态。

    image.png

  2. 如果三个容器的状态都为UP,则查看每个容器的错误日志。

    docker logs sls-kibana_es_1 # 查看es启动日志
    docker logs sls-kibana_kproxy_1 # 查看kproxy启动日志
    docker logs sls-kibana_kibana_1 # 查看kibana启动日志

使用Helm部署,无法访问Kibana

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 有状态

  3. 在页面顶端选择命名空间为sls-kibana。检查Elasticsearch、Kibana、Kproxy是否已经正常启动。查看和编辑有状态工作负载的状态、批量重新部署应用的步骤,请参见批量重新部署应用

如何卸载helm?

helm uninstall sls-kibana --namespace sls-kibana