권한 문제 (Permission Issues)
Agent가 호스트에서 데이터를 수집하려면 특정 권한이 필요해요. 가장 흔한 권한 문제와 해결 방법을 알려드릴게요.
출처: 문서
본문
주어진 호스트에서 Datadog Agent를 실행할 때 Agent가 제대로 로깅하지 못하게 하는 몇 가지 권한 관련 문제가 발생할 수 있어요. 예를 들면:
IOError: [Errno 13] Permission denied: '/var/log/datadog/supervisord.log'
Agent의 로그 파일과 해당 파일이 들어 있는 디렉터리가 Datadog Agent 사용자인 dd-agent 소유인지 확인하세요. 그렇지 않으면 Agent가 해당 파일에 로그 항목을 쓸 수 없어요. Unix 시스템에서 파일 소유권 정보를 표시하는 명령어는 아래와 같아요:
ls -l /var/log/datadog/
total 52300
-rw-r--r-- 1 dd-agent dd-agent 5742334 Jul 31 11:49 collector.log
-rw-r--r-- 1 dd-agent dd-agent 10485467 Jul 28 02:45 collector.log.1
-rw-r--r-- 1 dd-agent dd-agent 1202067 Jul 31 11:48 dogstatsd.log
-rw-r--r-- 1 dd-agent dd-agent 10485678 Jul 28 07:04 dogstatsd.log.1
-rw-r--r-- 1 dd-agent dd-agent 4680625 Jul 31 11:48 forwarder.log
-rw-r--r-- 1 dd-agent dd-agent 10485638 Jul 28 07:09 forwarder.log.1
-rw-r--r-- 1 dd-agent dd-agent 1476 Jul 31 11:37 jmxfetch.log
-rw-r--r-- 1 dd-agent dd-agent 31916 Jul 31 11:37 supervisord.log
-rw-r--r-- 1 dd-agent dd-agent 110424 Jul 31 11:48 trace-agent.log
-rw-r--r-- 1 dd-agent dd-agent 10000072 Jul 28 08:29 trace-agent.log.1
이 파일들이 dd-agent 사용자 소유가 아니라면, 아래 명령어로 소유권을 변경한 뒤 Agent를 재시작하세요:
sudo chown -R dd-agent:dd-agent /var/log/datadog/
Agent 소켓 권한 문제
Agent를 시작할 때 다음과 같은 소켓 권한 문제가 나타날 수 있어요:
Starting Datadog Agent (using supervisord):Error: Cannot open an HTTP server: socket.error reported errno.EACCES (13)
언뜻 보면 Agent가 적절한 소켓에 연결하지 못하는 것처럼 보일 수 있는데, 이미 사용 중이라서요. 하지만 남아 있는 Agent 프로세스가 없다는 것을 다시 확인했고 적절한 포트를 Agent가 사용할 수 있다고 확인해도 위 오류가 계속 나타날 때가 있어요.
Linux 호스트의 경우 /opt/datadog-agent/run 디렉터리가 dd-agent 사용자 소유여야 올바르게 시작돼요. 드물게 이 디렉터리의 소유권이 dd-agent가 아닌 다른 것으로 바뀔 수 있어요. 이러면 Agent를 시작할 때 위 오류가 발생해요. 다음 명령어로 이 디렉터리의 소유권을 다시 확인하세요:
ls -al /opt/datadog-agent/run
파일 소유자가 dd-agent가 아니라면, 다음 명령어로 수정해요:
sudo chown -R dd-agent:dd-agent /opt/datadog-agent/run
이 변경 후 Agent 시작 명령어로 Agent를 성공적으로 시작할 수 있을 거예요. 이 단계를 취했는데도 문제가 계속 보인다면 추가 지침을 위해 Datadog 지원팀에 문의하세요.
프로세스 메트릭 권한 문제
Linux OS에서 실행되는 Agent에 process 체크를 활성화했다면, system.processes.open_file_descriptors 메트릭이 기본적으로 수집되거나 보고되지 않는다는 것을 알 수 있어요. 이는 process 체크가 모니터링하는 프로세스가 Agent 사용자(dd-agent)와 다른 사용자로 실행될 때 발생해요. 사실 dd-agent 사용자는 Agent가 이 메트릭의 데이터를 수집하기 위해 찾는 /proc의 모든 파일에 대한 전체 접근 권한이 없어요.
process 체크 설정에서 try_sudo 옵션(Agent 6.3부터 사용 가능)을 활성화하고 적절한 sudoers 규칙을 추가하세요:
dd-agent ALL=NOPASSWD: /bin/ls /proc/*/fd/
이렇게 하면 process 체크가 sudo로 ls 명령어를 실행할 수 있지만 /proc/*/fd/ 경로의 내용 목록만 나열하도록 제한돼요.
Datadog error.log 파일에 sudo: sorry, you must have a tty to run sudo 줄이 보이면, visudo를 사용해 sudoers 파일에서 Default requiretty 줄을 주석 처리하세요.
Agent를 root로 실행하기 (Run Agent as root)
try_sudo를 사용할 수 없다면 우회 방법으로 Agent를 root로 실행할 수 있어요.
Linux에서 프로세스 데몬을
root로 실행하는 것은 모범 사례가 아니에요. Agent는 오픈소스이며 GitHub 저장소를 통해 감사할 수 있어요.
Agent를 root로 실행하려면:
- Agent를 중지하세요.
/etc/systemd/system/multi-user.target.wants/datadog-agent.service를 열고[Service]아래의user속성을 변경하세요.- Agent를 시작하세요.
Linux 머신에서 이 메트릭을 수집하는 방법에 대한 자세한 정보와 다른 가능한 방법은 다음 GitHub 이슈를 참고하세요.
macOS에서 Agent를 시스템 데몬으로 실행할 때의 권한 문제
DD_SYSTEMDAEMON_INSTALL과 DD_SYSTEMDAEMON_USER_GROUP 옵션을 사용해 Agent를 시스템 전체 launch daemon으로 설치했다면, DD_SYSTEMDAEMON_USER_GROUP에 사용한 사용자와 그룹이 유효하고 올바른 권한을 가지고 있는지 확인하세요.
더 알아보기 (Learn more)
도움이 되는 추가 문서, 링크, 글: