Amazon Elasticsearch Service
开发人员指南 (API 版本 2015-01-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

Kibana 和 Logstash

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

Kibana

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

下面几节介绍一些常见 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; location /login { proxy_pass https://$cognito_host/login; proxy_cookie_domain $cognito_host $proxy_host; proxy_redirect https://$kibana_host https://$proxy_host; } location / { proxy_pass https://$kibana_host; proxy_redirect https://$cognito_host https://$proxy_host; proxy_cookie_domain $kibana_host $proxy_host; proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; } } $cognito_host=your-cognito-domain-name.auth.us-west-2.amazoncognito.com $kibana_host=your-es-domain.us-west-2.es.amazonaws.com $proxy_host=your-proxy-server.us-west-2.compute.amazonaws.com

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

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

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

  1. 打开 Kibana。您可以在 https://console.amazonaws.cn/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-5" 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