对接Kibana

更新时间:
复制 MD 格式

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

重要

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

前提条件

背景信息

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

工作原理

您需要在客户端环境中部署Kibana、ProxyElasticsearch。

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

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

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

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

步骤一:部署Elasticsearch、KibanaProxy

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

  • Docker版本为1.18及以上。

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

  3. 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
  4. 执行以下命令,启动服务。

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

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

    重要

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

    http://${部署KibanaIP地址}:5601

使用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;会使用公网拉取镜像
    
    #kproxy:
    #  ecsRoleName:  # 如果使用ecs角色访问,填写该值
    
    #arch: amd64 # amd64 or arm64 默认是amd64
    
    sls:
      - project: k8s-log-c5****** # slsproject
        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 # slsproject
      #  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*",注意加上双引号。

  3. 执行以下命令,使用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
  4. 部署完成后,在浏览器中输入http://${ingress地址}/kibana/,进入Kibana的登录页面,输入步骤二中设置的Elasticsearch的用户名和密码。

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

使用Docker部署

第一步:部署Elasticsearch

重要

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

  1. 在服务器上执行如下命令,部署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的密码必须是字符串类型。

    /data

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

  2. 部署完成后,请执行如下命令验证Elasticsearch是否部署成功。如果使用公网IP,必须在服务器的安全组规则中添加9200端口,请参见添加安全组规则

    curl http://${Elasticsearch所在机器的IP地址}:9200

    如果返回结果是包含security_exceptionJSON格式数据,则表示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

    重要
    • 最多可添加32Project。

    • 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

    对接2Project(prjAprjB),且使用相同的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

    对接3Project(prjA、prjB、prjC),其中prjAprjC使用相同的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

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

参数

说明

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_exceptionJSON格式数据,则表示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

参数

说明

ELASTICSEARCH_HOSTS

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

ELASTICSEARCH_USERNAME

登录Kibana的用户名。

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

ELASTICSEARCH_PASSWORD

登录Kibana的密码。

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

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

重要

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

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

步骤二:访问Kibana

查询和分析数据

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

    重要

    使用KibanaElasticsearch兼容接口分析日志服务数据时,目前只支持使用DiscoverDashboard这两个模块。

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

    查询完成后,页面展示匹配文档总数、时间分布柱状图以及日志详情列表,左侧 Available fields 面板列出所有可查询字段。

手动配置IndexPattern(可选)

重要

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

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

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

  3. 首次使用时,请先在提示框中单击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需要手动创建。

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

    配置完成后,单击 Create index pattern 完成索引模式创建。

    参数名称

    说明

    Name

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

    重要

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

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

    Timestamp field

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

  5. 单击Create index pattern

QueryString案例

  • 指定字段的查询比不指定字段的查询友好。

    content: "Hello World"

    如下不指定字段的查询语句是不友好的,可能在某些情况下被翻译成sql字段,concat后再匹配,导致查询效率低下。

    "Hello World"
  • 使用精准的匹配比使用*通配查询友好。

    content : "Hello World"

    如下查询语句使用*通配是不友好的,因为会触发全文扫描,在数据量大的情况下,响应时间会增加。

    content : "Hello*"

常见问题

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

  1. 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
  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是否已经正常启动。查看和编辑有状态工作负载的状态、批量重新部署应用的步骤,请参见创建有状态工作负载StatefulSet

如何卸载helm?

helm uninstall sls-kibana --namespace sls-kibana

Kibana中如何显示高精度时间?

  1. 确保SLS中的时间使用高精度时间采集或上报,通过配置 纳秒精度时间戳 ,支持纳秒级精度时间戳。

  2. 在确保高精度时间采集后,需在字段索引中添加类型为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?

  1. 列举出需要删除的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
  2. 使用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