요새 ELK 구축도 조금씩 배우고 있습니다. 이 중에서, elasticsearch의 설정 값들을 하나 하나 배워보도록 하겠습니다. 저는 7.9.0을 기준으로 작성하였습니다.

 


 먼저, elasticsearch의 path 부분을 보면, data와 log 파일을 저장할 수 있는 위치를 설정할 수 있다고 나옵니다.

 

 그러면 기본적으로 path.data의 값은 /var/lib/elasticsearch이고, logs의 값은 /var/log/elasticseaerch입니다. 이 기본 값들은 메모를 해 두는 것이 좋습니다. 최상위 디렉토리에 data 디렉토리를 생성하고, 그 안에 elasticsearch를 생성하였습니다.

 

 

 그리고 path.data를 바꿔보았습니다.

 

 

 그랬더니, failed가 떴습니다. 친절하게도, journalctl -xe 명령어를 치라고 나와 있습니다. 이 명령어를 쳐 보도록 하겠습니다.

 

 

 그러면 뭔가 이상한 메세지들이 나옵니다.

 

 

 보시다 보면, error detail을 보려면, /var/log/elasticsearch/elasticsearch.log로 가라고 합니다. 이 로그 파일을 보겠습니다.

 

 

 그러면 왠 Exception들이 여러개가 뜨는데요. 이 중에서 java.nio.file.AccessDeniedException이 유독 눈에 보입니다. 제가 설정한 디렉토리가 접근 거부되었다는 이야기입니다. 이건 또 무슨 일일까요? 디폴트로 셋팅되어 있는 path.data 디렉토리에 대한 정보를 보겠습니다.

 

 

 디폴트로 설정 되어 있는 디렉토리로 가서 ls -ail 명령어를 날려 보겠습니다. 그러면 파일/디렉토리에 . 이라고 찍혀져 있는 것이 보이실 겁니다. 이것은 현재 디렉토리를 의미합니다. 이것의 권한, 소유자, 그룹 등이 있는데요. 소유자와 그룹이 둘 다 엘라스틱 서치임을 알 수 있습니다. 권한값 중에 s는 리눅스 카데고리에서 다시 언급을 하도록 하겠습니다.

 

 

 그런데 문제의 경로에 가면, 소유자와 그룹은 모두 root로 되어 있고, 권한 값은 755로 되어 있음을 알 수 있습니다. 특정 유저가 이 폴더에 쓰기 권한이 없기 때문에 그럴 거라고 추측할 수 있습니다. 그러면 어떻게 하면 될까요? 소유자에 대해서 rwx가 모두 있기 때문에, 소유자를 바꾸는 방법이 있습니다.

 


 chown 명령어는 그러한 역할을 수행합니다.

 

 딱 봐도 무엇의 약자인지는 대강 짐작이 가실 겁니다. CHange OWNer. 즉 소유자와 소유 그룹을 바꾼다는 겁니다.

 

 

 그런데 여기서 중요한 옵션 중 하나는 -R입니다. 이것은 하위 디렉토리에 적용된 파일이나 폴더들도 적용이 됩니다. recursive라는 것만 봐도 재귀적으로 동작한다는 것을 짐작할 수 있습니다.

 

 

 그러면, 명령어를 data 폴더에 가셔서, chown -R elasticsearch:elasticsearch elasticsearch 이렇게 입력하시면 됩니다. 이는 엘라스틱서치에 있는 하위 폴더들과 파일들에 대해서, 소유자와 소유 그룹이 ES인 속성을 적용합니다. 이제 서비스를 재시작 해 보겠습니다.

 

 

 잘 동작함을 알 수 있습니다.

 


 이제 path.logs도 바꿔봅시다.

 

 마찬가지로, 해당 경로의 소유자와 소유 그룹을 재귀적으로 바꿔주어야 합니다.

 

 

 그러면 /data/log에 가셔서, 똑같은 명령어를 치시면 되겠네요.

 

 

 서비스를 재시작하면 잘 동작함을 알 수 있습니다. 만약에 data나 log가 저장되어 있는 디렉토리를 허가되지 않은 사용자에게 보여지는 게 싫다면 chmod를 이용해서 권한을 잘 설정하면 되겠네요.