다음 예시에서는 username이 있는 기본 사용자의 암호를 자동 생성된 값으로 재설정하고 콘솔에 새 암호를 인쇄합니다. 지정된 URL은 elasticsearch-reset-password 도구가 로컬 Elasticsearch 노드에 연결하려고 시도하는 위치를 나타냅니다.
이후에 해당 docker compose를 restart 해줍니다. docker compose restart
2. Elasticsearch 보안 설정 점검
Elasticsearch에서 X-Pack Security가 활성화되어 있는지 확인하고, 필요하면 일시적으로 비활성화하여 테스트합니다.
보안 설정 확인: Elasticsearch의 설정 파일(예: elasticsearch.yml) 또는 docker-compose.yml에서 보안 설정을 확인하세요. 기본적으로 7.10.0 이상에서는 보안이 활성화되어 있습니다. docker-compose.yml에서 다음이 설정되어 있는지 확인:
오류가 사라지면 인증 문제가 원인입니다. 주의: 프로덕션 환경에서는 보안을 비활성화하지 마세요. 대신 올바른 자격 증명을 설정하세요.
이후에 logstash 에서 아래와 같은 오류가 또 발생 - 403에러
비밀번호를 바꿔줬는데도 뭔가 에러가 계속 발생하고 있었는데, 이번엔 좀 다른 종류의 에러였습니다. (아래)
[2025-04-17T04:07:20,233][WARN ][logstash.outputs.elasticsearch][main] Health check failed {:code=>403, :url=>http://elasticsearch:9200/, :message=>"Got response code '403' contacting Elasticsearch at URL 'http://elasticsearch:9200/'"} [2025-04-17T04:07:20,304][WARN ][logstash.outputs.elasticsearch][main] Elasticsearch main endpoint returns 403 {:message=>"Got response code '403' contacting Elasticsearch at URL 'http://elasticsearch:9200/'", :body=>"{\"error\":{\"root_cause\":[{\"type\":\"security_exception\",\"reason\":\"action [cluster:monitor/main] is unauthorized for user [logstash_internal] with effective roles [] (assigned roles [logstash_writer] were not found), this action is granted by the cluster privileges [monitor,manage,all]\"}],\"type\":\"security_exception\",\"reason\":\"action [cluster:monitor/main] is unauthorized for user [logstash_internal] with effective roles [] (assigned roles [logstash_writer] were not found), this action is granted by the cluster privileges [monitor,manage,all]\"},\"status\":403}"}
위 에러를 요약하자면 HTTP 403 Forbidden 응답 코드로 인해 Elasticsearch에 접근할 수 없는 문제라는 내용입니다. 구체적으로, logstash_internal 사용자가 cluster:monitor/main 액션을 수행할 권한이 없으며, 할당된 역할(logstash_writer)이 Elasticsearch에서 인식되지 않는다는 메시지가 나타납니다.
오류 원인
로그를 분석해보면 다음과 같은 주요 원인을 확인할 수 있습니다:
권한 부족 (HTTP 403 Forbidden)
logstash_internal 사용자가 Elasticsearch에서 필요한 작업(cluster:monitor/main)을 수행할 권한이 없습니다.
역할 설정 문제
logstash_writer 역할이 logstash_internal 사용자에게 할당되었지만, Elasticsearch에서 이 역할이 정의되지 않았거나 찾을 수 없습니다.
보안 설정 오류
Elasticsearch에서 X-Pack Security가 활성화된 상태에서 사용자와 역할이 올바르게 구성되지 않았을 가능성이 있습니다.
해결 방법
1. Elasticsearch에서 사용자와 역할 확인
먼저, logstash_internal 사용자와 logstash_writer 역할이 Elasticsearch에 제대로 설정되어 있는지 확인합니다.
Elasticsearch 컨테이너에 접속:
docker exec -it elasticsearch bash
사용자 역할 확인:
bin/elasticsearch-users roles logstash_internal
출력 결과에 logstash_writer 역할이 포함되어 있는지 확인하세요.
역할 정의 확인:
bin/elasticsearch-roles list logstash_writer
logstash_writer 역할이 존재하지 않거나, 필요한 권한(monitor, manage_index_templates, write 등)이 누락되었는지 확인합니다.
제 경우, bin/elasticsearch-roles list 에서 사용자가 아무것도 나타나지 않았습니다.
그래서 kibana web console로 접속(http://kibana:5601/app/dev_tools#/console/shell) 한 뒤에 아래 3개의 POST 명령을 각각 실행해줬습니다.
오래된 SMB 버전(예: SMBv1)을 사용하는 경우 호환성 문제가 있을 수 있음. -o vers=3.0을 추가.
mount -t cifs //192.168.1.10/share /mnt/nas -o username=<smb_user>,password=<smb_pass>,uid=1000,gid=1000,vers=3.0
최종확인:
ls -ld /mnt/nas
아래와 같이 뜨면서 언마운트가 되는 경우
root@server1:/mnt# umount -f /mnt/nas umount: /mnt/nas: target is busy.
umount -f /mnt/nas를 실행했는데 target is busy 오류가 발생한다는 것은 /mnt/nas 디렉토리가 현재 사용 중이어서 마운트를 해제할 수 없다는 뜻입니다. SMB 마운트를 강제로 해제하려면 사용 중인 프로세스를 종료하거나, 더 강력한 옵션을 사용해야 합니다. 아래에서 단계별로 해결 방법을 설명하겠습니다.
1. 왜 'target is busy'가 발생하는가?
/mnt/nas에 접근 중인 프로세스가 있거나, 열린 파일/디렉토리가 존재합니다.
예: 셸에서 cd /mnt/nas로 이동한 상태이거나, 프로그램이 해당 경로의 파일을 사용 중일 수 있습니다.
2. 해결 방법
(1) 사용 중인 프로세스 확인
lsof 또는 fuser를 사용해 /mnt/nas를 사용 중인 프로세스를 찾아봅니다.
lsof 사용:
lsof /mnt/nas
출력 예시:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 1234 user1 cwd DIR 0,XX 4096 12 /mnt/nas
PID 열에 나오는 프로세스 번호(위 예시에서는 1234)를 확인하세요.
fuser 사용:
fuser -m /mnt/nas
출력 예시:
/mnt/nas: 1234 5678
사용 중인 프로세스 ID(PID)가 나옵니다.
(2) 프로세스 종료
확인된 PID를 종료합니다.
특정 PID 종료:
kill -9 1234
예: 1234는 lsof나 fuser로 찾은 PID로 대체하세요.
fuser로 한 번에 종료:
fuser -km /mnt/nas
-k: 프로세스를 강제로 종료.
-m: 마운트 포인트를 지정.
(3) 다시 언마운트 시도
프로세스를 종료한 후 다시 시도:
umount /mnt/nas
여전히 실패하면 강제 옵션 추가:
umount -f /mnt/nas
(4) 최후의 수단: Lazy 언마운트
위 방법으로도 안 되면, lazy unmount(-l)를 사용해 즉시 마운트를 해제할 수 있습니다:
umount -l /mnt/nas
-l: 사용 중인 프로세스가 끝날 때까지 기다리지 않고 마운트를 즉시 해제. 이후 시스템이 자동으로 정리합니다.
이 방법은 마운트 포인트를 즉시 사용 가능한 상태로 만들지만, 백그라운드에서 정리 작업이 진행되므로 주의하세요.