本章介绍将 Kibana 和 Logstash 与 Amazon Elasticsearch Service 结合使用的注意事项。
主题
Kibana
Kibana 是一种流行的开源可视化工具,专为与 Elasticsearch 结合使用而设计。Amazon ES 为每个 Amazon ES 域默认安装 Kibana。在
Amazon ES 控制台域控制面板上可以找到 Kibana 链接。URL 为
。使用此默认 Kibana 安装的查询具有 300 秒超时。elasticsearch-domain-endpoint
/_plugin/kibana/
下面几节介绍一些常见 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 地址(即代理服务器)的请求。下图演示了此配置。
这是您的 Amazon ES 域。IAM 提供对此域的授权访问权限。此外,基于 IP 的访问策略提供对代理服务器的访问权限。
这是在 Amazon EC2 实例上运行的代理服务器。
其他应用程序可以使用签名版本 4 签名流程将通过身份验证的请求发送到 Amazon ES。
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 地图服务器:
打开 Kibana。您可以在 https://console.aws.amazon.com/es/ 处的域摘要中找到指向 Kibana 的链接。
选择 Management (管理)。
选择 Advanced Settings (高级设置)。
找到 visualization:tileMap:WMSdefaults,然后选择 edit (编辑) 按钮以修改默认值。
将
enabled
更改为true
并将url
更改为有效 WMS 地图服务器的 URL。(可选) 找到 visualization:tileMap:WMSdefaults,然后选择 edit 按钮以修改默认值。
(可选) 将
"layers": "0"
更改为要显示的地图图层的逗号分隔列表。图层因地图服务而异。默认值为0
通常是合适的。选择 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
推荐阅读