С сервера в AWS я отправляю данные в сервис AWS ES. Эти данные прекрасно отображаются на Кибане. Я также могу выполнить очистку с помощью команд cURL с этого компьютера. Однако ни одна из моих машин не может успешно запустить ElasticSearch Curator и подключиться к AWS ES.
...jects/elasticsearch-curator❯ curator --host HOSTNAME.us-east-1.es.amazonaws.com delete indices --older-than 12 --time-unit days --timestring %Y.%m.%d
2016-12-18 16:54:08,631 INFO Job starting: delete indices
2016-12-18 16:58:10,143 ERROR Connection failure.
Моя политика доступа позволяет мне получить доступ к этому компьютеру:
~❯ curl HOSTNAME.us-east-1.es.amazonaws.com
{
"name" : "Exodus",
"cluster_name" : "########",
"version" : {
"number" : "2.3.2",
"build_hash" : "##########",
"build_timestamp" : "2016-11-14T15:59:50Z",
"build_snapshot" : false,
"lucene_version" : "5.5.0"
},
"tagline" : "You Know, for Search"
}
и запускаем команды:
~❯ curl -XDELETE 'HOSTNAME.us-east-1.es.amazonaws.com/2016-11*'
{"acknowledged":true}%
Я использую версию Куратор ES заявил, что работает с AWS ES:
...jects/elasticsearch-curator❯ pip list | grep curator
elasticsearch-curator (3.5.1)
В соответствии с ответом (1) я добавил настройку порта: «--port 80», соединение по-прежнему не работает, только намного быстрее:
curator --host HOSTNAME --port 80 delete indices --older-than 12 --time-unit days --timestring %Y.%m.%d
2016-12-19 08:28:18,309 INFO Job starting: delete indices
2016-12-19 08:28:18,324 ERROR Connection failure.
и вот результат для режима отладки:
2016-12-19 11:25:59,247 DEBUG curator.api.filter get_date_regex:157 regex = \l\o\g\s\t\a\s\h\-\d{4}\.\d{2}\.\d{2}
2016-12-19 11:25:59,247 DEBUG curator.cli.utils filter_callback:195 REGEX = (?P<date>\l\o\g\s\t\a\s\h\-\d{4}\.\d{2}\.\d{2})
2016-12-19 11:25:59,247 DEBUG curator.cli.utils filter_callback:198 Added filter: {'pattern': '(?P<date>\\l\\o\\g\\s\\t\\a\\s\\h\\-\\d{4}\\.\\d{2}\\.\\d{2})', 'value': 12, 'groupname': 'date', 'time_unit': 'days', 'timestring': u'logstash-%Y.%m.%d', 'method': 'older_than'}
2016-12-19 11:25:59,247 DEBUG curator.cli.utils filter_callback:199 New list of filters: [{'pattern': '(?P<date>\\l\\o\\g\\s\\t\\a\\s\\h\\-\\d{4}\\.\\d{2}\\.\\d{2})', 'value': 12, 'groupname': 'date', 'time_unit': 'days', 'timestring': u'logstash-%Y.%m.%d', 'method': 'older_than'}]
2016-12-19 11:25:59,248 INFO curator.cli.index_selection indices:62 Job starting: delete indices
2016-12-19 11:25:59,248 DEBUG curator.cli.index_selection indices:65 Params: {'url_prefix': u'', 'http_auth': None, 'dry_run': False, 'certificate': None, 'loglevel': u'INFO', 'logformat': u'default', 'client_cert': None, 'host': u'HOSTNAME', 'quiet': False, 'timeout': 30, 'debug': True, 'use_ssl': False, 'logfile': None, 'master_only': False, 'port': 80, 'ssl_no_validate': False, 'client_key': None}
2016-12-19 11:25:59,248 DEBUG curator.cli.utils get_client:114 kwargs = {'url_prefix': u'', 'http_auth': None, 'dry_run': False, 'certificate': None, 'loglevel': u'INFO', 'host': u'HOSTNAME', 'quiet': False, 'port': 80, 'logformat': u'default', 'timeout': 30, 'debug': True, 'use_ssl': False, 'logfile': None, 'master_only': False, 'client_cert': None, 'ssl_no_validate': False, 'client_key': None}
2016-12-19 11:25:59,248 DEBUG urllib3.util.retry from_int:191 Converted retries value: False -> Retry(total=False, connect=None, read=None, redirect=0)
2016-12-19 11:25:59,248 DEBUG urllib3.connectionpool _new_conn:212 Starting new HTTP connection (1): HOSTNAME
2016-12-19 11:25:59,584 DEBUG urllib3.connectionpool _make_request:400 http://HOSTNAME:80 "GET / HTTP/1.1" 200 None
2016-12-19 11:25:59,586 INFO elasticsearch log_request_success:66 GET http://HOSTNAME:80/ [status:200 request:0.338s]
2016-12-19 11:25:59,586 DEBUG elasticsearch log_request_success:68 > None
2016-12-19 11:25:59,587 DEBUG elasticsearch log_request_success:69 <
<!DOCTYPE html>
<html lang="en" charset="utf-8">
<head>
<title>Sign In</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<style>
body {
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
font-size: 14px;
line-height: 1.42857143;
color: #333;
background: #f0f0f0;
}
.signin {
display:block;
margin:20px auto;
max-width:400px;
background: #fff;
border:1px solid #ccc;
border-radius: 10px;
padding: 20px;
}
.center {
text-align:center;
}
.btn {
color: #fff;
background-color: #428bca;
border: 1px solid #357ebd;
-webkit-border-radius: 4;
-moz-border-radius: 4;
border-radius: 4px;
font-size: 14px;
padding: 6px 12px;
text-decoration: none;
cursor: pointer;
}
.btn:hover {
background-color: #3071a9;
border-color: #285e8e;
ext-decoration: none;
}
label {
display: inline-block;
max-width: 100%;
margin-bottom: 5px;
font-weight: 700;
}
input {
display: block;
width: 100%;
height: 34px;
padding: 6px 12px;
font-size: 14px;
line-height: 1.42857143;
color: #555;
background-color: #fff;
background-image: none;
border: 1px solid #ccc;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
-webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;
-o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
margin:0;
box-sizing: border-box;
}
footer {
display:block;
font-size:10px;
color:#aaa;
text-align:center;
margin-bottom:10px;
}
footer a {
display:inline-block;
height:25px;
line-height:25px;
color:#aaa;
text-decoration:underline;
}
footer a:hover {
color:#aaa;
}
</style>
</head>
<body>
<div class="signin center">
<form method="GET" action="/oauth2/start">
<input type="hidden" name="rd" value="/">
<p>Authenticate using @crosswise.com</p>
<button type="submit" class="btn">Sign in with a Google Account</button><br/>
</form>
</div>
<div class="signin">
<form method="POST" action="/oauth2/sign_in">
<input type="hidden" name="rd" value="/">
<label for="username">Username:</label><input type="text" name="username" id="username" size="10"><br/>
<label for="password">Password:</label><input type="password" name="password" id="password" size="10"><br/>
<button type="submit" class="btn">Sign In</button>
</form>
</div>
<script>
if (window.location.hash) {
(function() {
var inputs = document.getElementsByName('rd');
for (var i = 0; i < inputs.length; i++) {
inputs[i].value += window.location.hash;
}
})();
}
</script>
<footer>
Secured with <a href="https://github.com/bitly/oauth2_proxy#oauth2_proxy">OAuth2 Proxy</a> version 2.2.0-alpha
</footer>
</body>
</html>
2016-12-19 11:25:59,587 ERROR curator.cli.utils get_client:140 Connection failure.
Поэтому я добавил несколько диагностических строк в соответствующее место в utils.py:
try:
client = elasticsearch.Elasticsearch(**kwargs)
check_version(client)
# Verify the version is acceptable.
logger.debug('version is acceptable')
check_master(client, master_only=master_only)
# Verify "master_only" status, if applicable
logger.debug('Verify "master_only" status')
return client
except Exception as e:
import traceback
logger.error('Connection failure.')
logger.error(e)
traceback.print_exc()
sys.exit(1)
и получаем:
2016-12-19 11:42:37,345 ERROR curator.cli.utils get_client:143 Connection failure.
2016-12-19 11:42:37,345 ERROR curator.cli.utils get_client:144 Unknown mimetype, unable to deserialize: text/html
Traceback (most recent call last):
File "/Users/gilzellner/.virtualenvs/temp/lib/python2.7/site-packages/curator/cli/utils.py", line 134, in get_client
check_version(client)
File "/Users/gilzellner/.virtualenvs/temp/lib/python2.7/site-packages/curator/cli/utils.py", line 89, in check_version
version_number = get_version(client)
File "/Users/gilzellner/.virtualenvs/temp/lib/python2.7/site-packages/curator/api/utils.py", line 202, in get_version
version = client.info()['version']['number']
File "/Users/gilzellner/.virtualenvs/temp/lib/python2.7/site-packages/elasticsearch/client/utils.py", line 69, in _wrapped
return func(*args, params=params, **kwargs)
File "/Users/gilzellner/.virtualenvs/temp/lib/python2.7/site-packages/elasticsearch/client/__init__.py", line 220, in info
return self.transport.perform_request('GET', '/', params=params)
File "/Users/gilzellner/.virtualenvs/temp/lib/python2.7/site-packages/elasticsearch/transport.py", line 357, in perform_request
data = self.deserializer.loads(data, headers.get('content-type'))
File "/Users/gilzellner/.virtualenvs/temp/lib/python2.7/site-packages/elasticsearch/serializer.py", line 74, in loads
raise SerializationError('Unknown mimetype, unable to deserialize: %s' % mimetype)
SerializationError: Unknown mimetype, unable to deserialize: text/html
Куратор пытается подключиться к порту 9200, порту ES по умолчанию. AWS ES находится на порту 80. Добавить --port 80
в вашу командную строку.