尝试为 ELK 创建 S3 snaphost 存储库时出现 HTTP 503 错误
HTTP 503 error when trying to create a S3 snaphost repo for ELK
每当我尝试 create a repository for an Elasticsearch snapshot on an Amazon S3 bucket:
时都会收到 HTTP 503 错误
[root@myserver ~]# curl -XPUT 'https://myes.example.org:9200/_snapshot/s3_repository' -H 'Content-Type: application/json' -d '
{
"type": "s3",
"settings": { "bucket": "mybucket/elk" }
}'
30 秒后超时:
{"error":{"root_cause":[{"type":"process_cluster_event_timeout_exception","reason":"failed to process cluster event (put_repository [s3_repository]) within 30s"}],"type":"process_cluster_event_timeout_exception","reason":"failed to process cluster event (put_repository [s3_repository]) within 30s"},"status":503}
但是,S3 存储桶确实可以从我的服务器访问:
[root@myserver ~]# aws s3 cp testfile s3://mybucket/elk/ --sse AES256
upload: ./testfile to s3://mybucket/elk/testfile
可能是什么原因以及如何解决?
您需要确保凭证正确存储在密钥库中。
cat /aws/access_key | base64 --decode | bin/elasticsearch-keystore add --stdin --force s3.client.default.access_key && \
cat /aws/secret_key | base64 --decode | bin/elasticsearch-keystore add --stdin --force s3.client.default.secret_key
来自插件文档:
S3 存储库插件
S3 存储库插件添加了对使用 S3 作为 {ref}/modules-snapshots.html[Snapshot/Restore].
存储库的支持
如果您正在寻找 Elasticsearch on AWS 的托管解决方案,请访问 http://www.elastic.co/cloud。
开始使用 AWS
该插件提供了一个名为 s3 的存储库类型,可以在创建存储库时使用。存储库默认使用 ECS IAM 角色或 EC2 IAM 角色凭证进行身份验证。唯一的强制设置是存储桶名称:
PUT _snapshot/my_s3_repository
{
"type": "s3",
"settings": {
"bucket": "my_bucket"
}
}
客户端设置
用于连接到 S3 的客户端有许多可用的设置。客户端设置名称的格式为 s3.client.CLIENT_NAME.SETTING_NAME。由 s3 存储库查找的默认客户端名称称为 default。可以使用存储库设置客户端对其进行修改。例如:
PUT _snapshot/my_s3_repository
{
"type": "s3",
"settings": {
"bucket": "my_bucket",
"client": "my_alternate_client"
}
}
大多数客户端设置都在 elasticsearch.yml 中指定,但有些是敏感的,必须存储在 {ref}/secure-settings.html[elasticsearch keystore] 中。
例如,在启动节点之前,运行这些命令将 AWS 访问密钥设置添加到密钥库:
bin/elasticsearch-keystore add s3.client.default.access_key
bin/elasticsearch-keystore add s3.client.default.secret_key
此插件的所有客户端安全设置都是{ref}/secure-settings.html#reloadable-secure-settings[reloadable]。重新加载设置后,用于传输快照内容的内部 s3 客户端将使用密钥库中的最新设置。任何现有的 s3 存储库以及任何新创建的存储库都将选取存储在密钥库中的新值。
或者,您可以运行 Kibana Dev Tools 中的以下内容轻松注册 s3 快照存储库。
PUT _snapshot/s3_repository
{
"type": "s3",
"settings": {
"bucket": "<s3-bucket-name>",
"region": "<region_name>",
"access_key": "<access_key>",
"secret_key": "<secret_key>",
"compress": true
}
}
看起来这是一个暂时性错误,现在它可以正常工作了。
顺便说一句,还需要在JSON中指定base_path
设置:
{
"type": "s3",
"settings": { "bucket": "mybucket", "base_path": "elk"}
}
每当我尝试 create a repository for an Elasticsearch snapshot on an Amazon S3 bucket:
时都会收到 HTTP 503 错误[root@myserver ~]# curl -XPUT 'https://myes.example.org:9200/_snapshot/s3_repository' -H 'Content-Type: application/json' -d '
{
"type": "s3",
"settings": { "bucket": "mybucket/elk" }
}'
30 秒后超时:
{"error":{"root_cause":[{"type":"process_cluster_event_timeout_exception","reason":"failed to process cluster event (put_repository [s3_repository]) within 30s"}],"type":"process_cluster_event_timeout_exception","reason":"failed to process cluster event (put_repository [s3_repository]) within 30s"},"status":503}
但是,S3 存储桶确实可以从我的服务器访问:
[root@myserver ~]# aws s3 cp testfile s3://mybucket/elk/ --sse AES256
upload: ./testfile to s3://mybucket/elk/testfile
可能是什么原因以及如何解决?
您需要确保凭证正确存储在密钥库中。
cat /aws/access_key | base64 --decode | bin/elasticsearch-keystore add --stdin --force s3.client.default.access_key && \
cat /aws/secret_key | base64 --decode | bin/elasticsearch-keystore add --stdin --force s3.client.default.secret_key
来自插件文档:
S3 存储库插件
S3 存储库插件添加了对使用 S3 作为 {ref}/modules-snapshots.html[Snapshot/Restore].
存储库的支持如果您正在寻找 Elasticsearch on AWS 的托管解决方案,请访问 http://www.elastic.co/cloud。
开始使用 AWS
该插件提供了一个名为 s3 的存储库类型,可以在创建存储库时使用。存储库默认使用 ECS IAM 角色或 EC2 IAM 角色凭证进行身份验证。唯一的强制设置是存储桶名称:
PUT _snapshot/my_s3_repository
{
"type": "s3",
"settings": {
"bucket": "my_bucket"
}
}
客户端设置
用于连接到 S3 的客户端有许多可用的设置。客户端设置名称的格式为 s3.client.CLIENT_NAME.SETTING_NAME。由 s3 存储库查找的默认客户端名称称为 default。可以使用存储库设置客户端对其进行修改。例如:
PUT _snapshot/my_s3_repository
{
"type": "s3",
"settings": {
"bucket": "my_bucket",
"client": "my_alternate_client"
}
}
大多数客户端设置都在 elasticsearch.yml 中指定,但有些是敏感的,必须存储在 {ref}/secure-settings.html[elasticsearch keystore] 中。
例如,在启动节点之前,运行这些命令将 AWS 访问密钥设置添加到密钥库:
bin/elasticsearch-keystore add s3.client.default.access_key
bin/elasticsearch-keystore add s3.client.default.secret_key
此插件的所有客户端安全设置都是{ref}/secure-settings.html#reloadable-secure-settings[reloadable]。重新加载设置后,用于传输快照内容的内部 s3 客户端将使用密钥库中的最新设置。任何现有的 s3 存储库以及任何新创建的存储库都将选取存储在密钥库中的新值。
或者,您可以运行 Kibana Dev Tools 中的以下内容轻松注册 s3 快照存储库。
PUT _snapshot/s3_repository
{
"type": "s3",
"settings": {
"bucket": "<s3-bucket-name>",
"region": "<region_name>",
"access_key": "<access_key>",
"secret_key": "<secret_key>",
"compress": true
}
}
看起来这是一个暂时性错误,现在它可以正常工作了。
顺便说一句,还需要在JSON中指定base_path
设置:
{
"type": "s3",
"settings": { "bucket": "mybucket", "base_path": "elk"}
}