Kibana 和 Logstash
金蝶云社区-云社区用户D3466603
云社区用户D3466603
6人赞赏了该文章 471次浏览 未经作者许可,禁止转载编辑于2019年12月06日 09:28:49

本章介绍将 Kibana 和 Logstash 与 Amazon Elasticsearch Service 结合使用的注意事项。

主题

Kibana

Kibana 是一种流行的开源可视化工具,专为与 Elasticsearch 结合使用而设计。Amazon ES 为每个 Amazon ES 域默认安装 Kibana。在                        Amazon ES 控制台域控制面板上可以找到 Kibana 链接。URL 为 elasticsearch-domain-endpoint/_plugin/kibana/。使用此默认 Kibana 安装的查询具有 300 秒超时。

下面几节介绍一些常见 Kibana 使用案例:

控制对 Kibana 的访问

Kibana 本身不支持 IAM 用户和角色,但 Amazon ES 提供了多种解决方案来控制对 Kibana 的访问:


域配置访问控制选项
公有访问权限
VPC 访问

使用代理从 Kibana 访问 Amazon ES

注意

仅当域使用公有访问权限并且不想使用用于 Kibana 的 Amazon Cognito 身份验证时,此过程适用。请参阅 控制对 Kibana 的访问

Kibana 是 JavaScript 应用程序,因此请求源自用户的 IP 地址。基于 IP 的访问控制可能是不切实际的,这是因为,为了让每个用户能够访问 Kibana,需要加入白名单的                        IP 地址绝对数量太巨大。一种解决方案是在 Kibana 和 Amazon ES 之间配置一个代理服务器。然后,您可以添加基于 IP 的访问策略,仅允许来自一个 IP                        地址(即代理服务器)的请求。下图演示了此配置。

                                                                   

  1. 这是您的 Amazon ES 域。IAM 提供对此域的授权访问权限。此外,基于 IP 的访问策略提供对代理服务器的访问权限。

  2. 这是在 Amazon EC2 实例上运行的代理服务器。

  3. 其他应用程序可以使用签名版本 4 签名流程将通过身份验证的请求发送到 Amazon ES。

  4. Kibana 客户端通过代理连接到 Amazon ES 域。

要启用这种配置,需要在基于资源的策略中指定角色和 IP 地址。下面是示例策略:

{  "Version": "2012-10-17",  "Statement": [{      "Resource": "arn:aws:es:us-west-2:111111111111:domain/my-domain/*",      "Principal": {        "AWS": "arn:aws:iam::111111111111:role/allowedrole1"
      },      "Action": [        "es:ESHttpGet"
      ],      "Effect": "Allow"
    },
    {      "Effect": "Allow",      "Principal": {        "AWS": "*"
      },      "Action": "es:*",      "Condition": {        "IpAddress": {          "aws:SourceIp": [            "123.456.789.123"
          ]
        }
      },      "Resource": "arn:aws:es:us-west-2:111111111111:domain/my-domain/*"
    }
  ]
}

                   

建议使用弹性 IP 地址配置在代理服务器上运行的 EC2 实例。这样,如果有必要替换实例,仍然可以用相同的公有 IP 地址连接到实例。要了解更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的弹性 IP 地址

如果使用代理服务器 用于 Kibana 的 Amazon Cognito 身份验证,可能需要添加 Kibana 和 Amazon Cognito 的设置以避免 redirect_mismatch 错误。请参阅以下 nginx.conf 示例:

{
server {
    listen 443;
    server_name $host;
    rewrite ^/$ https://$host/_plugin/kibana redirect;

    ssl_certificate           /etc/nginx/cert.crt;
    ssl_certificate_key       /etc/nginx/cert.key;

    ssl on;
    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;

    location /_plugin/kibana {
        # Forward requests to Kibana
        proxy_pass https://$kibana_host/_plugin/kibana;

        # Handle redirects to Cognito
        proxy_redirect https://$cognito_host https://$host;

        # Update cookie domain and path
        proxy_cookie_domain $kibana_host $host;
        proxy_cookie_path / /_plugin/kibana/;

        # Response buffer settings
        proxy_buffer_size 128k;
        proxy_buffers 4 256k;
        proxy_busy_buffers_size 256k;
    }

    location ~ \/(log|sign|fav|forgot|change|saml|oauth2) {
        # Forward requests to Cognito
        proxy_pass https://$cognito_host;

        # Handle redirects to Kibana
        proxy_redirect https://$kibana_host https://$host;

        # Update cookie domain
        proxy_cookie_domain $cognito_host $host;
    }
}

                                                                                                   

将 Kibana 配置为使用 WMS 地图服务器

由于许可限制,使用 Elasticsearch 5.x 或更高版本的 Amazon ES 域上的默认 Kibana 安装 包括用于磁贴地图可视化的地图服务器。使用以下过程将 Kibana 配置为使用 Web Map Service (WMS) 地图服务器。

将 Kibana 配置为使用 WMS 地图服务器:

  1. 打开 Kibana。您可以在 https://console.aws.amazon.com/es/ 处的域摘要中找到指向 Kibana 的链接。

  2. 选择 Management (管理)

  3. 选择 Advanced Settings (高级设置)

  4. 找到 visualization:tileMap:WMSdefaults,然后选择 edit (编辑) 按钮以修改默认值。

  5. enabled 更改为 true 并将 url 更改为有效 WMS 地图服务器的 URL。

  6. (可选) 找到 visualization:tileMap:WMSdefaults,然后选择 edit 按钮以修改默认值。

  7. (可选) 将 "layers": "0" 更改为要显示的地图图层的逗号分隔列表。图层因地图服务而异。默认值为 0 通常是合适的。

  8. 选择 save 按钮。

要将新的默认值应用于可视化,您可能需要重新加载 Kibana。

注意

地图服务通常具有许可费用或限制。您负责考虑有关指定的任何地图服务器的所有此类事项。您可能会发现来自美国地质调查局的地图服务对测试非常有用。

将本地 Kibana 服务器连接到 Amazon ES

如果您已投入大量时间来配置自己的 Kibana 实例,则可以使用该实例而不是 (或以及) Amazon ES 提供的默认 Kibana 实例。

将本地 Kibana 服务器连接到 Amazon ES:

  • config/kibana.yml 进行以下更改:

    kibana_index: ".kibana"
    elasticsearch_url: "http://elasticsearch_domain:80"

                             

您必须使用 http 前缀并显式指定端口 80。

使用 Logstash 插件加载批量数据

Logstash 提供一种便捷的方式,通过 S3 插件使用批量 API 来上传数据到您的 Amazon ES 域。该服务还支持 Elasticsearch 提供的其他所有标准                        Logstash 输入插件。Amazon ES 还支持两种 Logstash 输出插件:标准 Elasticsearch 插件和向 Amazon ES 签署和导出                        Logstash 事件的 logstash-output-amazon-es 插件。

您必须安装自己的 Logstash 本地实例,并在 Logstash 配置文件中进行以下更改,从而启用与 Amazon ES 的交互。


配置字段输入 | 输出插件说明
bucket输入指定包含您要加载到 Amazon ES 域的数据的 Amazon S3 存储桶。
region输入指定 Amazon S3 存储桶所在的 AWS 区域。
hosts输出指定目标 Amazon ES 域的服务终端节点。
ssl输出指定是否使用 SSL 连接到 Amazon ES。

此示例将 Logstash 配置为执行以下操作:

  • 将输出插件指向 Amazon ES 终端节点

  • 指向 S3 中 wikipedia-stats-log 存储桶的输入插件

  • 使用 SSL 连接到 Amazon ES

input{
    s3 {
        bucket => "wikipedia-stats-log"
        access_key_id => "lizards"
        secret_access_key => "lollipops"
        region => "us-east-1"
    }
}
output{
    elasticsearch {
        hosts => "search-logs-demo0-cpxczkdpi4bkb4c44g3csyln5a.us-east-1.es.example.com"
        ssl => true
    }
}

                                       

注意

上述示例中的服务请求必须进行签名。有关签署请求的更多信息,请参阅发出和签署 Amazon ES 请求。使用 logstash-output-amazon-es 输出插件向 Amazon ES 签署和导出 Logstash 事件。有关说明,请参阅插件 README。                         


本文转载自:AWS

作者:AWS

原文链接:https://docs.aws.amazon.com/zh_cn/elasticsearch-service/latest/developerguide/es-kibana.html

赞 6