-
Elasticsearch 7.17.3 → 8.0 버전 update사소한 트러블 슈팅 기록 2024. 2. 19. 11:26
상황
Elasticsearch 7.17.3 버전을 이용 중
Elasticsearch 8.0버전 부터 자연어 처리(NLP) 모델에 대한 네이티브 지원을 Elasticsearch에 직접 제공하여 벡터 검색을 더욱 실용적으로 구현하고 있습니다. 또한 Elasticsearch 8.0은 최근접 유사 항목(ANN) 검색에 대한 네이티브 지원을 포함하므로 빠르고 규모에 맞게 벡터 기반 쿼리를 벡터 기반 문서 모음과 비교할 수 있습니다.
위에 해당하는 글을 보고 자연어처리와 함께 프로젝트를 진행하기 때문에 혹시 사용할 수도 있을 까 이번 기회에 8.0 버전을 도입 하기로 함
문제 1
Elasticsearch 8.0 이후 버전에서 인덱스 조회시 REST 요청을 수행할 인증 자격 증명이 부족하다는 에러 발생
curl -k -X GET https://localhost:30000/_cat/indices
{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/_cat/indices]","header":{"WWW-Authenticate":["Basic realm=\"security\" charset=\"UTF-8\"","Bearer realm=\"security\"","ApiKey"]}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/_cat/indices]","header":{"WWW-Authenticate":["Basic realm=\"security\" charset=\"UTF-8\"","Bearer realm=\"security\"","ApiKey"]}},"status":401}%
해결
curl을 사용하여 Elasticsearch 노드로 요청을 보낼 때 인증 자격 증명을 제공 해야 된다고 함.
아래 설치시 자동으로 생성된 패스워드를 조회한 후 curl 명령어와 함께 제공하면 정상적인 응답을 받을 수 있음
# 자동으로 생성된 패스워드 조회 kubectl get secret elasticsearch-master-credentials -o go-template='{{.data.password | base64decode}}' # elastic 기본계정은 elastic 이다.
# 명령어 curl -k -u elastic:password -X GET https://localhost:30000/_cat/indices # 응답 값 health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
문제 2
Fluent-bit이 Elasticsearch에 데이터를 전달할 때 기존과 다르게 8.0버전부터 _type 필드를 생략함
아래와 같은 에러가 발생
[error] [output:es:es.0] HTTP status=400 URI=/_bulk, response: {"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"Action/metadata line [1] contains an unknown parameter [_type]"}],"type":"illegal_argument_exception","reason":"Action/metadata line [1] contains an unknown parameter [_type]"},"status":400}
기존 7.17.3 버전에서 사용했던 ConfigMap 내용인데 아무리 찾아도 Type에 대한 건 없었음..
apiVersion: v1 kind: ConfigMap metadata: name: fluent-bit-config namespace: elastic labels: k8s-app: fluent-bit data: fluent-bit.conf: | [SERVICE] Flush 1 Log_Level info Daemon off Parsers_File parsers.conf @INCLUDE input-kubernetes.conf @INCLUDE output-elasticsearch.conf input-kubernetes.conf: | [INPUT] Name tail Tag kube.* Path /var/log/containers/*.log Parser docker DB /var/log/flb_kube.db Mem_Buf_Limit 5MB Skip_Long_Lines On Refresh_Interval 10 output-elasticsearch.conf: | [OUTPUT] Name es Match * Host ${FLUENT_ELASTICSEARCH_HOST} Port ${FLUENT_ELASTICSEARCH_PORT} Logstash_Format On Logstash_Prefix fluent-bit Retry_Limit False parsers.conf: | [PARSER] Name docker Format json Time_Key time Time_Format %Y-%m-%dT%H:%M:%S.%L Time_Keep On
해결
#인증정보 HTTP_User elastic HTTP_Passwd S77RMGFWQo2geB1O #HTTPS 연결 설정 tls on tls.verify off Suppress_Type_Name On # Suppress_Type_Name On으로 설정하면 Fluent Bit가 Elasticsearch에 데이터를 보낼 때 _type 필드를 생략시킨다.
'사소한 트러블 슈팅 기록' 카테고리의 다른 글
jib을 사용한 Java애플리케이션 컨테이너화 중 Docker 권한 문제 (0) 2024.03.06 Alertmanager Slack연동 시 빈내용 반환 (0) 2024.02.20 Redis 크롤러봇에 의한 해킹 (1) 2023.12.19 Linux 두개 프로세스의 동시 쓰기 문제 (0) 2023.12.18 Debian Stretch(Debian 9) 저장소 지원 종료 트러블 (1) 2023.12.15