나는 앱을 만들때, 같은 디렉토리에 access_log
파일을 테스트로 둔채, 개발을 진행했다. 따라서 다음과 같은 코드는 파일을 잘 가르키고 있었다.
const accessLogFile = process.env.ACCESS_LOG_FILE_LOCATION
왜냐면? 같은 디렉토리에 있으니까 잘 참조가 되었다. 그래서 환경변수를 처리해주어 EC2에서도 경로만 잘 지정하면 파일을 잘 참조할 수 있을줄 알았다. 그러나 에러가 발생하였다. 에러내용을 보자.
throw new ERR_INVALID_ARG_TYPE(propName, ['string', 'Buffer', 'URL'], path);
^
TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string or an instance of Buffer or URL. Received undefined
파일을 감시하는 라이브러리인 fs
가 undefined
인 파일을 전달받았다고 한다. 즉, 파일을 찾지못했단 소리이다. access_log
의 경로를 바로 지정해도 똑같았다.
실험
정말 작업중인 디렉토리 외에는 파일을 참조할 수 없는지 확인해보기위해 실험을 진행하였다.
실제 access_log222는 없는 파일인데 콘솔을 찍어보면 뜬다. 이것은 그냥 문자열로 인식했다는 소리이다. 파일참조가 전혀 이루어지지않고 있다.
혹시나해서 fs
모듈을 적용시켰다. 그랬더니 파일이 잘 참조가 되는것이다.
맞다. 방법은 틀리지 않았다. 경로를 제대로 지정해준다면 파일을 참조할 수 있는 것이고, 이번 실험을 통해 다른 문제라는 것을 확신한다.
권한문제
일반적으로 access_log
를 읽고, 쓰는 권한은 일반적인 user
에게 부여되지 않는다.
인스턴스의 사용중인 ec2-user
에게도 access_log
를 읽을 권한을 줘야지만, watchFile.js
를 실행하는 앱도 그 파일을 참조할 수 있을 것이다.
리눅스 전문가가 되려면 보안을 잘 알아야하는데, 권한설정과 관련된 부분이 그 시작점이지싶다. chmod
로 파일 혹은 디렉토리의 권한을 수정할 수 있다.
조사를 하다 알게된 흥미로운 내용을 적어보겠다.
- 리눅스는 사용자명과 같은 이름의 그룹을 만든다. 예를들어 ec2-user라는 사용자를 만들었다면, ec2-user라는 그룹이 만들어지고 해당 사용자가 속하게된다.
- 실행권한(x)가 있어야 디렉토리에 들어갈 수 있다.
권한문제 해결
ls -l
명령어를 사용하여, 현재 파일, 디렉토리에 부여된 권한을 모두 확인할 수 있다. 부여된 권한을 확인해보고 내가 필요한대로 바꾸어본다.
access_log
가 위치한 httpd
는 root
사용자만, 읽고 쓰고 실행을 할 수 있다.
나는 모든 사용자가 httpd
에 접근할 수 있도록 실행권한을 주고싶다.
chmod +x httpd
다시 확인해보니, 실행권한이 모두 부여되었다.
그래서 해당 디렉토리에 들어가서 access_log
파일을 읽어봤다.
디렉토리의 다른 내용은 권한부족으로 볼 수 없지만, 원하는 로그파일은 성공적으로 읽었으니 됐다!
에러 해결
const accessLogFile = process.env.ACCESS_LOG_FILE_LOCATION
console.log(typeof(accesslogFile));
access_log 파일의 위치를 환경변수로 빼주면, 추후 다른 사용자도 앱을 사용하기 편하리라 생각했다.
그런데, accesslogFile의 위치를 환경변수로 하면, 올바른 파일을 받아올 수가 없고, typeof()
를 해보면 undefined
가 출력되는 것을 알 수 있다.
어쩔수없이 하드코딩으로 url
주소를 적으니 성공적으로 동작한다.
에러는 해결했지만, 더 좋은 방법이 없을까?
'Monitoring' 카테고리의 다른 글
ELK 구축하고 Filebeat로 로그 수집하여 확인해보기 (0) | 2023.01.31 |
---|---|
accesslog란? 어떻게 사용하지? (0) | 2022.07.12 |
EC2의 accesslog를 cloudwatch로 수집하기 (0) | 2022.07.11 |
[모니터링]MBps vs. Mbps: latency 측정단위에 관하여 (0) | 2022.05.12 |
[모니터링]SLI, SLA, SLO 용어와 SRE 직무 (0) | 2022.05.11 |