์๋ผ์คํฑ์์น RestHighLevelClient๋ฅผ ์ด์ฉํ ๋ก๊ทธ๋ฐฑ ์ปค์คํ appender ๋ง๋ค๊ธฐ
AWS์์ ์ ๊ณตํ๋ ES๋ฅผ ์์ฉ์ ํ๋ฆฌ์ผ์ด์ ๋ก๊ทธ์์คํ ์ผ๋ก ํ์ฉํ๊ณ ์๋๋ฐ ์ต๊ทผ ์ฝ๋ก๋ ๋๋ถ์ ์ฌํ๊ทผ๋ฌด๋ฅผ ํ๋ค๋ณด๋ ์ธํ๋ผํ์์ ํค๋ฐ๋ ์ ์์ ์ ํํ๋ฉด์ ์ฌํ๊ทผ๋ฌด ํ๋ ๋ ์์ฉ์๋น์ค์ ๋ํ ๋ก๊ทธํ์ธ์ด ๋ถ๊ฐ๋ฅํด์ก๋ค. ๊ทธ๋์ ํค๋ฐ๋์ Cognito์๋น์ค๋ฅผ ์ ์ฉํ์ฌ ์ธ์ฆ์ ํตํด์ ํค๋ฐ๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋๋ก ์ค์ ์ ํ๊ธด ํ๋๋ฐ.....๋ก๊ทธ๊ฐ ๊ธฐ๋ก์ด ์๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ๊ธฐ์กด์ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ internetitem/logback-elasticsearch-appender ์๋๋ฐ ๊ธฐ๋ณธ์ ์ธ rest api๋ฅผ ํตํ ์ธ๋ฑ์ฑ๋ง ๊ฐ๋ฅํ๊ณ ES์ access policy๋ฅผ role ๊ธฐ๋ฐ์ผ๋ก cognito๋ฅผ ์ค์ ํ๋ฉด์ ์ธ์ฆ๋ฌธ์ ๋ก ์ธํด ES๋ก๊น ์ ๋ชปํ๊ฒ ๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ ์ด ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํด์ผ ํ ๊น ํ๋ค๊ฐ ๋ด๋ฆฐ ๊ฒฐ๋ก ์ "Elasticsearch์์ ์ ๊ณตํ๋ RestHighLevelClient๋ฅผ ์ด์ฉํด์ logback appender๋ฅผ ์ง์ ๋ง๋ค์ด์ ์จ๋ณด์ง ๋ญ~" ์๋ค.
์ฐ์ RestHighLevelClient๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ ค๋ฉด ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ถ๊ฐํด์ผํ๋ค.
compile 'org.elasticsearch:elasticsearch:7.7.1'
compile 'org.elasticsearch.client:elasticsearch-rest-high-level-client:7.7.1'
compile 'com.github.awslabs:aws-request-signing-apache-interceptor:deb7941e85'
compile 'org.elasticsearch:elasticsearch-x-content:7.7.1'
์ด๊ฒ๋ ๊ณต์ ์๋ผ์คํฑ์์น ๋ฌธ์๊ฐ ์ ๋๋ก ์ ๋ฐ์ดํธ ๋์ด์์ง ์๊ฑฐ๋ ๋ถ๋ช ํํด์ ๋ฐํ์์์ ์๊พธ ์๋ฌ๋์ ๊ตฌ๊ธ๋ง ์ด์ฌํ ํด์ ์ฐพ์๋๋ค
์, ์ด์ AWS Elasticsearch์ access policy๋ฅผ ์ด๋ป๊ฒ ์ค์ ํ๋์ง ํ๋ฒ ๋ณด์.
{
"Version":"2016-10-17",
"Statement":[
{"Effect":"Allow",
"Principal":{
"AWS":"arn:aws:iam::77345249:role/my-iam-role"},
"Action":"es:*",
"Resource":"arn:aws:es:ap-northeast-2:77345249:domain/my-application/*"},
{"Effect":"Allow",
"Principal":{
"AWS":"arn:aws:sts::77345249:assumed-role/Cognito_Role/CognitoIdentityCredentials"},
"Action":"es:*",
"Resource":"arn:aws:es:ap-northeast-2:77345249:domain/my-application/*" }
]
}
์ ์ฒ๋ผ ์ค์ ์ ํ๋ฉด ๊ธฐ์กด์ ์ ๋์ํ๋ ElasticsearchAppender๊ฐ ๋ก๊ทธ๋ฅผ ์ ๋๋ก ๋จ๊ธฐ์ง ๋ชปํ๊ฒ ๋๋ค. (my-iam-role์ ๊ธฐ๋ฐ์ผ๋ก ์ธ์ฆ์ ํด์ผ ์ ์์ ์ผ๋ก ๋ก๊น ์ ํ ์ ์๋ค) ๊ทธ๋์ internetitem/logback-elasticsearch-appender ์์ค๋ฅผ ์ข ๊น ๋ณด์๋๋ ๋๋ฆ AWSAuthentication์ด๋ผ๋ ์ธ์ฆ ๊ด๋ จ ํด๋์ค๋ฅผ ๊ฐ์ง๊ณ ์์๊ณ logback ์ค์ ์ผ๋ก BasicAuthentication ๋์ ์ ํด๋น ์ธ์ฆ ๋ฐฉ์์ ์ฌ์ฉํ ์ ์์ ๊ฒ ๊ฐ์์ logback ์ค์ ์ AWSAuthentication์ ์ค์ ํด์ฃผ์์ง๋ง region์ ์ ๋๋ก ๊ฐ์ ธ์ค์ง ๋ชปํ๋ ๋ฒ๊ทธ์ ํจ๊ป CredentialChain์ Default์ด์ฉ๊ตฌ ์ฒด์ธ์ ์ฌ์ฉํ๊ณ ์์๊ณ role๊ธฐ๋ฐ ์ธ์ฆ์ ํ๋๋ก ์ค์ ์ ํ ์๊ฐ ์์๋ค. ์ด๋ป๊ฒ๋ ๊ธฐ์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด๋ณด๋ ค๊ณ ํด๋น ์ธ์ฆํด๋์ค๋ฅผ ์์ํด์ ๋ณ๋์ ์ธ์ฆ ํด๋์ค๋ฅผ ์์ฑํ ๋ค ํด๋น ์ธ์ฆ์๋น์ค๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํด๋ณด๋ ค๊ณ ์๋ํด๋ณด์์ผ๋ ๊ฒฐ๊ตญ signed request๋ฅผ ๋ ๋ฆฌ์ง ๋ชปํ๊ณ ์ธ์ฆ์ค๋ฅ๋ก ES์์ 400 ์๋ฌ๋ง ์ฃผ๊ตฌ์ฅ์ฐฝ ๋ฐ์๋ค.
๊ทธ๋์ RestHighLevelClient๋ฅผ ์ด์ฉํด์ ์ธ๋ฑ์ฑ๋ถํฐ ํด๋ณด๊ณ ๊ทธ๊ฒ์ ๊ธฐ๋ฐ์ผ๋ก logback custom appender๋ฅผ ๋ง๋ค์ด ๋ณด๊ธฐ๋ก ํ๋ค. ์ฐ์ ์ธ๋ฑ์ฑํ๋ ๊ฒ์ ์๋ผ์คํฑ์์น ๋ฌธ์์ ์น์ ํ๊ฒ ๋์์๊ธด ํ์์ผ๋ ์์ ๊ฐ ์ต์ ํ๊ฐ ์๋์ด์์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐํ๋๋ฐ๋ง๋ ์๊ฐ์ ๋ญ๋นํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ES์ ์์ฒญํ๋ ์๊ฐ!!! cognito๊ฐ ์ ์ฉ๋์ด์์ด ์ธ์ฆ ์คํจ!! ๊ทธ๋์ ์ ES access policy statement์ ๋ง์ง๋ง ํญ๋ชฉ์ผ๋ก ์๋์ ๊ฐ์ด ์ ์ฑ ์ ์ถ๊ฐํด์ ์์๋ก ํ์ฉํด์ค๋ค.
,
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "es:*",
"Resource": "arn:aws:es:ap-northeast-2:72345249:domain/my-application/*"
}
ํด๋น ๋๋ฉ์ธ์์ ES๋ก ๋ค์ด์ค๋ ๋ชจ๋ ์์ฒญ์ ํ์ฉํด์ค๋ค๋ ์๋ฏธ๋ค.
์ฌ๊ธฐ๊น์ง ์ฑ๊ณตํ๋๋ฐ ์ธ์ฆ์ ๋๋์ฒด ์ด๋ค credential์ ์ด์ฉํด์ผํ ์ง ๋๋ฌด ๋๊ฐํ๋ค. ๊ธฐ์กด์ ๊ฒฝ๋ ฅ 20๋ ๊ฐ๊น์ด ๋ ๊ฐ๋ฐ์๊ฐ ์์ฑํด๋์ ์ฝ๋๊ฐ ์ ์์ ์ผ๋ก ๋์๊ฐ์ง ์์๊ธฐ ๋๋ฌธ์ ์ฒ์๋ถํฐ ํ๋ ์ฌ์ ์ผ๋ก ๊ตฌ๊ธ๋ง์ ํ๊ธฐ ์์ํ๋ค. ๋์์ aws sdk์ ์ธ์ฆ๊ด๋ จ ํด๋์ค๋ค์ ํ๋ํ๋ ๋ณด๊ธฐ ์์ํ๋ค. ๊ทธ๋ฌ๋ค๊ฐ ๋์ ๋ค์ด์จ ๋ ์. ๋ฐ๋ก STSAssumeRoleSessionCredentialsProvider ์ด๋ค. ์ด ๋ ์์ ์ด์ฉํด์ ์๋์ ๊ฐ์ด credential์ ๋ฐ์์ค๋ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ํด๋น credential์ ์ด์ฉํด์ ์ธ์ฆ์ ์ฑ๊ณตํ๋ค.
private AWSCredentialsProvider awsS3CredentialsProvider() {
List<AWSCredentialsProvider> credentialsProviders = new ArrayList<>();
String roleSessionName = "role-session-name-" + System.currentTimeMillis();
credentialsProviders.add(new STSAssumeRoleSessionCredentialsProvider.Builder(roleArn, roleSessionName)
.withStsClient(AWSSecurityTokenServiceClientBuilder.defaultClient())
.build());
return new AWSCredentialsProviderChain(credentialsProviders);
}
์ฌ๊ธฐ์ roleArn ์ ๋ณด๋ง ์์ผ๋ฉด ๋๋จธ์ง๋ aws sdk์์ ์์์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ ์ ์ฒ๋ฆฌํด์ค๋ค. ์ ํ~~ ์ธ์ฆ์ ์ฑ๊ณตํ์ผ๋ ์์์ access policy์ ๋ง์ง๋ง์ ์ถ๊ฐํ๋ ํญ๋ชฉ์ ๋ค์ ์ง์๋ ๋๋ค.
ํ์ง๋ง ์ ์ฝ๋๋ฅผ ์ป๊ธฐ๊น์ง ์๋ ์ค๋ฅ๋ฉ์์ง๋ฅผ ์๋ ์์ด ๋ณด์๋ค.
Failed to send events to Elasticsearch: Got response code [403] from server with data {"message":"The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method.
Failed to send events to Elasticsearch: Got response code [403] from server with data {"message":"The security token included in the request is expired"}
๊ทธ๋ฆฌ๊ณ ES์ max ์ค๋ ๊ฐ์๊ฐ ๊ฝ์ฐจ์ ๋ก๊น ์ ์ ๊ท ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค ์ ์๋ ์ํฉ๋ ์์๋๋ฐ ์ด๋๋ ์๋์ ๊ฐ์ ์ค๋ฅ ๋ฉ์์ง๊ฐ ๋ด๋ค.
Suppressed: org.elasticsearch.client.ResponseException: method [PUT], host [https://vpc-my-application-ig5szafi26tsfulustdplosdu3f4.ap-northeast-2.es.amazonaws.com], URI [/index-2020-06-20/_doc/4ba14a8b96b242d0?timeout=1m], status line [HTTP/1.1 400 Bad Request] {"error":{"root_cause":[{"type":"index_creation_exception","reason":"failed to create index [api-2020-06-20]"}],"type":"validation_exception","reason":"Validation Failed: 1: this action would add [10] total shards, but this cluster currently has [1002]/[1000] maximum shards open;"},"status":400}
ํค๋ฐ๋์์ ์ง์ PUT myindex-2020-06-20 ๋ช ๋ น์ผ๋ก ์๋ํด๋ ์คํจํ๊ณ , ์ ์๋ฌ๋ฉ์์ง์ ๋์ผํ ๋ด์ฉ์ ํ์ธํ ์ ์์๋ค. ์์ ๊ฐ์ ์๋ฌ๋ฉ์์ง๊ฐ ๋ฐ์ํ๋ฉด max ์ค๋๊ฐ์๋ฅผ ์ฌ๋ ค์ฃผ๋์ง ์๋๋ฉด ๊ธฐ์กด์ ์๋ ์ธ๋ฑ์ค๋ค ์ค์์ ๋ถํ์ํ ๊ฒ๋ค์ ์ข ๋ ๋ ค์ฃผ๋ฉด ๋๋ค. ์ผ๋ถ ์ธ๋ฑ์ค๋ฅผ ์ญ์ ํ๋ ๋ก๊น ์ด ์ ๋๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
ํ์ง๋ง ๋ญ๊ฐ ์ด์ํ๋ค. ํ ์คํธ API๋ฅผ ํธ์ถํ๋ฉด ๋ก๊ทธ๊ฐ 3๊ฐ๊ฐ ์ฐํ์ผ๋๋๋ฐ 1๊ฐ๋ง ์ฐํ๊ณ ์์๋ค. ๋๋์ฒด ๋ญ๊น ์ด๋๊ฐ ๋ฌธ์ ์ผ๊น ํ์ฐธ์ ๊ณ ๋ฏผํ๊ณ ์ด๊ฒ์ ๊ฒ ์์ ํ๋ฉด์ ํ ์คํธ๋ฅผ ํ๋ค.
์ฒ์ ๋ก๊ทธ๋ฉ์์ง ์ธ๋ฑ์ฑ์ ์ํ ํ ์คํธ์ฝ๋๋ ์๋์ฒ๋ผ ์์ฑํ์๋ค.
IndexRequest request = new IndexRequest(indexPrefix + LocalDate.now().toString())
.id(UuidUtil.getTrackingId())
.source(document);
Runnable r = () -> {
try (RestHighLevelClient esClient = esClient()) {
esClient.index(request, RequestOptions.DEFAULT);
} catch (Exception e) {
log.error("ES logging ERROR!!! e-msg:{}", e.getMessage(), e);
}
};
r.run();
์ ๋ ๊ฒ ์์ฑํ๋ ์๋ฌด ๋ฌธ์ ์์ด ๋ก๊น ์ ํ์ผ๋ ๋ก๊ทธ๊ฐ 3๊ฐ์ค 1๊ฐ๋ง ๊ธฐ๋ก์ด ๋๊ณ ์์๋ค. ๊ทธ๋์ IndexRequest์ create์ค์ (default:false)์ true๋ก ์ถ๊ฐํด๋ณด์๋ค. ์ ์ง ๋ฎ์ด์ฐ๋ ๊ฒ ๊ฐ์ ๋๋์ด ๋ค์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฌ๋๋ ์๋ "์ค๋ฅ 1" ๋ฉ์์ง๊ฐ ์ถ๋ ฅ์ด ๋์๊ณ , version ์ค์ ์ ํ๋๋ ์ค๋ฅ 2๊ฐ ์ถ๋ ฅ์ด ๋์๋ค.
// ์ค๋ฅ 1 : create(true) ์ถ๊ฐํ๋๋
status:CONFLICT, e-msg:Elasticsearch exception [type=version_conflict_engine_exception, reason=[bf0af4cfa5b64945]: version conflict, document already exists (current version [1])]
// ์ค๋ฅ 2 : version ์ค์ ์ ํด์คฌ๋๋
create operations do not support explicit versions. use index instead
// ์ค๋ฅ 3 : create ์ค์ ์ ๋ค์ ๋บ๋๋
internal versioning can not be used for optimistic concurrency control. Please use `if_seq_no` and `if_primary_term` instead
// ์ค๋ฅ 4 : ifSeqNo๋ง ์ค์ ํ๋๋
ifSeqNo is set, but primary term is [0];
// ์ค๋ฅ 5 : ifPrimaryTerm๋ ์ค์ ํ๋๋
version conflict, required seqNo [329563504204790], primary term [1592662218337]. but no document was found]
ํ๋ ๋ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํ์ธํ๋ฉด์ ์ฝ๋๋ฅผ ์์ ํ๊ณ ๋ค์ ํ ์คํธ ํ๊ธฐ๋ฅผ ๋ช ๋ฒ ํ๊ณ ๋๋ ๋์ผํ ๋ฒ์ ์ผ๋ก ์ฌ๋ฌ ๋ํ๋จผํธ๋ฅผ ์ธ๋ฑ์ฑํ๋ ค๋ค๊ฐ ์ค๋ฅ๊ฐ ๋ฐ์(versioning๋ฌธ์ )ํ๋ ๊ฒ์ด๋ผ ์ถ์ธกํ ์ ์์๊ณ , IndexRequest์ ์ธํ ํ๋ ๊ฐ์ version์ด ์์ด์ ๊ทธ๊ฒ ๋๋ฌธ์ผ ๊ฑฐ๋ผ ์๊ฐํ์์ผ๋ ๋ฌธ์ ๋ id์๋ค. -_-;; ์ฐ์ , ๋์ ๋ชฉ์ ์ ๋ชจ๋ ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๋ ค๋ ๊ฑฐ์๊ณ ๋ํ๋จผํธ๋ฅผ ๋ฒ์ ๋ํด๊ฐ๋ฉด์ ์ ๋ฐ์ดํธ ํ ์ผ์ ์๋๋ฐ ์ ์๊พธ ๋ฒ์ ๋ ๊ด๋ จ ์ค๋ฅ๊ฐ ๋๋ ๊ฒ์ผ๊น? ๊ณ ๋ฏผ์ ์ข ํ๋ค๊ฐ ๋ฐ๊ฒฌํ ์ฌ์ค! id๊ฐ์ ํน์ ํ๋ก์ธ์ค๋ฅผ ํธ๋ํนํ๊ธฐ์ํ ๋๊ฐ์ uuid๊ฐ์ ๋ฃ๊ณ ์์๋ ๊ฒ์ด๋ค. ๊ทธ๋์ id์ ์ธํ ํ๋ ๊ฐ์ ์๋์ฒ๋ผ ๋๋ ธ์๊ฐ์ผ๋ก ๋ฐ๊พธ์ด์ฃผ์๋ค.
IndexRequest request = new IndexRequest(indexPrefix + LocalDate.now().toString())
.id(String.valueOf(System.nanoTime()))
.source(document);
๊ทธ๋ฌ๋๋ ๋์ด์ ์ค๋ฅ๋ ๋์ง ์๊ณ ์ธ์ฆ๋ ์ํ๊ณ ์ ์์ ์ผ๋ก cognito ์ค์ ์ ์๋ฃํ ์ ์์๋ค.
ํ์ง๋ง ์ค์ ์์ฉ์๋น์ค์์ ์ฌ์ฉํจ์ ์์ด์ ๋ฒ๊ทธ๊ฐ ์๋์ง ๋๋ ์ฑ๋ฅ์ ๋ฌธ์ ๊ฐ ์์์ง๋ ๋ถํํ ์คํธ๋ฅผ ์ข ํด๋ด์ผ๊ฒ ๋ค.
ํฉ๊ธ๊ฐ์ ์ฃผ๋ง์ ์๊ฐ๋ ๋์์ฃผ์ง๋ ๋ชปํ๊ณ ์๋ฒฝ๊น์ง ์ด๋ฌ๊ณ ์๋ค๋ ใ ใ
๊ทธ๋๋ ํด๊ฒฐ์ ์ค๋ง๋ฆฌ๋ฅผ ์ฐพ์์ ๊ธฐ์๋ค. ์ป๊ณ ์์ผ๊ฒ ๋ค...
[6์ 24์ผ ์ ๋ฐ์ดํธ]
๋ถํํ ์คํธ ๊ฒฐ๊ณผ try with resource ๊ตฌ๋ฌธํํ๋ก index ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ BAD_REQUEST Unable to parse response body ์ ๊ฐ์ ์ค๋ฅ๋ ์๋๋ฉด "You have exceeded the number of permissible concurrent requests with unique IAM Identities. Please retry." ์ ๊ฐ์ ์ค๋ฅ๋ฅผ ๋ณด๊ฒ๋ ์ ์๋ค. ๋ฐ๋ผ์ ์์ฉ๋ก๊ทธ์ฒ๋ผ 1์ด๋ด์ ์๋ฐฑ~์์ฒ ๊ฑด์ ๋ก๊ทธ๋ฅผ ์์์ผ ํ๋ค๋ฉด IndexRequest๋์ BulkRequest๋ฅผ bulk๋ฉ์๋๋ก ํธ์ถํ๋๋ก ํ๊ณ , try with resource ๊ตฌ๋ฌธ์ด ์๋ client๋ฅผ ํ๋ฒ๋ง ์์ฑํ ๋ค์ ๊ณ์ ์ฌ์ฌ์ฉํ๋๋ก ํด์ผํ๋ค. ๊ด๋ จ๋ ๋ด์ฉ์ ์๋ ๋ฌธ์์์ ํ์ธํ ์ ์๋ค.
docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html
[6์ 30์ผ ์ ๋ฐ์ดํธ]
BulkRequest๋ bulk ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ synchronousํ๊ฒ ๋์ํ๊ธฐ ๋๋ฌธ์ ๋ก๊น ํ๋ ๊ฒ์ด ๊ธฐ์กด ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ ์์์๊ฐ์ ์ํฅ์ ์ฃผ๊ฒ ๋๋ค. ๋ฐ๋ผ์ ๋ก๊น ์ ๋งค์ฐ ๋น๋ฒํ๊ฒ ํด์ผํ๋ ๊ฒฝ์ฐ์๋ bulkAsync ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
ํ ์คํธ ๊ฒฐ๊ณผ bulk ๋ฉ์๋๋ bulkAsync ๋ฉ์๋๋ณด๋ค 2๋ฐฐ์ ์ฑ๋ฅ ์ ํ ํ์์ ๊ฐ์ ธ์จ๋ค. ํ ์คํธ ์ ES๋ AWS ES 7.1 ๋ฒ์ ์ผ๋ก ํ ์คํธํ๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ์ด์ง ์ฒซ ๋ถ๋ถ์ ๋ช ์ํ๋ฏ์ด 7.7.1 ๋ฒ์ ์ ์ฌ์ฉํ๋ค.
[7์ 7์ผ ์ ๋ฐ์ดํธ]
์ธ ๊ฐ์ง ์ด์๊ฐ ์ถ๊ฐ๋ก ๋ฐ๊ฒฌ๋์๋ค.
์ฒซ ๋ฒ์งธ, 6์ 24์ผ ์ ๋ฐ์ดํธ์ ๋์๋ ๋ฌธ์ ๊ฐ ๋ ๋์๋ค.
method [POST], host [https://vpc-elasticsearch.ap-northeast-2.es.amazonaws.com], URI [/_bulk?timeout=1m], status line [HTTP/1.1 400 Bad Request]
{"Message":"You have exceeded the number of permissible concurrent requests with unique IAM Identities. Please retry."}
์ด๋ฒ์๋ ์์ค๋ ๋ฒจ์์ ๋ง์ ํด๋ผ์ด์ธํธ๋ฅผ ์ฌ์ฉํ๊ฒ ์๋์์ง๋ง, AWS ์ฝ์์ ์ ์ํ์ฌ ์ฌ์ฉํ๋ ์ฌ์ฉ์๊ฐ ๋ง์ ๊ฒฝ์ฐ ์ข ์ข ๋ฐ์ํ๋ค. ์ด ๋ถ๋ถ์ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์์๊น ๊ณ ๋ฏผ์ ํด๋ณด์๋ ์ด ๋ถ๋ถ๊น์ง ์ปจํธ๋กค ํ ์๋ ์์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ ๋ค.
๋ ๋ฒ์งธ, ์๋์น ์๊ฒ ํด๋ผ์ด์ธํธ๊ฐ ์ข ๋ฃ๋๋ ํ์์ด ๊ฐ๋ฐ์๋ฒ์์ ๋ฐ๊ฒฌ๋์๋ค.
IllegalStateExceptionRequest cannot be executed; I/O reactor status: STOPPED
์ด๊ฑด ์์ธ๋ฅผ ์ก์์ ์๋ก์ด ํด๋ผ์ด์ธํธ๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋๋ก ์์ ํ๊ธด ํ์ผ๋....์ ํด๋ผ์ด์ธํธ๊ฐ ์ข ๋ฃ๋์๋์ง ์ ์๊ฐ ์์ด ๋ต๋ตํ๋ค.
์ธ ๋ฒ์งธ, ๋ถํ๋ฅผ ๋ง์ด ์ค ์ธ์คํด์ค์์ ์๋์ ๊ฐ์ ์ค๋ฅ ๋ฐ์ (thread: I/O dispatcher 2)
Connection lease request time out:
at org.apache.http.nio.pool.AbstractNIOConnPool.processPendingRequest(AbstractNIOConnPool.java:411)
at org.apache.http.nio.pool.AbstractNIOConnPool.processNextPendingRequest(AbstractNIOConnPool.java:391)
at org.apache.http.nio.pool.AbstractNIOConnPool.release(AbstractNIOConnPool.java:355)
at org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.releaseConnection(PoolingNHttpClientConnectionManager.java:364)
at org.apache.http.impl.nio.client.AbstractClientExchangeHandler.releaseConnection(AbstractClientExchangeHandler.java:245)
at org.apache.http.impl.nio.client.MainClientExec.responseCompleted(MainClientExec.java:387)
at org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl.responseCompleted(DefaultClientExchangeHandlerImpl.java:172)
at org.apache.http.nio.protocol.HttpAsyncRequestExecutor.processResponse(HttpAsyncRequestExecutor.java:448)
at org.apache.http.nio.protocol.HttpAsyncRequestExecutor.inputReady(HttpAsyncRequestExecutor.java:338)
at org.apache.http.impl.nio.client.InternalRequestExecutor.inputReady(InternalRequestExecutor.java:83)
at org.apache.http.impl.nio.DefaultNHttpClientConnection.consumeInput(DefaultNHttpClientConnection.java:265)
at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:81)
at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:39)
at org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:121)
at org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:162)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:337)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:315)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:276)
at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104)
at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:591)
at java.lang.Thread.run(Thread.java:748)
์ฐธ๊ณ ์๋ฃ:
https://www.elastic.co/guide/en/elasticsearch/client/java-rest/master/java-rest-high-document-index.html http://logback.qos.ch/manual/appenders.html
'๐ป Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Eclipse Version M1 M2 M3 R RC SR Difference (0) | 2020.08.02 |
---|---|
[Elasticsearch] Kibana์์ ์กฐํ์ x of y shards failed ์ค๋ฅ ๋ฐ์ (0) | 2020.06.29 |
[Kotlin/JVM] ์ฝํ๋ฆฐ์์ ์์ฃผ ์ฌ์ฉํ๋ ๋ฌธ๋ฒ (0) | 2020.05.29 |
[Kotlin/JVM] ์ฝํ๋ฆฐ ์ธ์ด์ ํน์ง (์ฝํ๋ฆฐ์ด๋?) (0) | 2020.05.26 |
[AWS/Java] Elasticsearch ์ธ๋ฑ์ค S3๋ก ๋ฐฑ์ /๋ณต์ ํ๊ธฐ (0) | 2020.05.25 |