Linux용 Azure Monitor 에이전트에 대한 Syslog 문제 해결 가이드
주의
이 문서에서는 EOL(서비스 종료) 상태의 Linux 배포판인 CentOS에 대한 내용을 다룹니다. 이에 따라 사용 및 계획을 고려하세요. 자세한 내용은 CentOS 수명 종료 지침을 참조하세요.
Linux용 Azure Monitor 에이전트 Syslog 컬렉션 및 지원되는 RFC 표준 개요:
- Azure Monitor 에이전트는 설치 프로세스 중에 시스템 Syslog 디먼에 대한 출력 구성을 설치합니다. 구성 파일은 Syslog 디먼과 Azure Monitor 에이전트 간에 이벤트가 흐르는 방식을 지정합니다.
rsyslog
(대부분의 Linux 배포판)의 경우 구성 파일은/etc/rsyslog.d/10-azuremonitoragent-omfwd.conf
입니다.syslog-ng
의 경우 구성 파일은/etc/syslog-ng/conf.d/azuremonitoragent-tcp.conf
입니다.- Azure Monitor 에이전트는
rsyslog
/syslog-ng
에서 이벤트를 수신하기 위해 TCP 포트를 수신 대기합니다. 이 통신용 포트는/etc/opt/microsoft/azuremonitoragent/config-cache/syslog.port
에 로그됩니다.참고 항목
Azure Monitor 에이전트 버전 1.28 이전에는 TCP 포트 대신 Unix 도메인 소켓을 사용하여 rsyslog에서 이벤트를 수신했습니다.
rsyslog
의omfwd
출력 모듈은 안정성 향상을 위해 스풀링 및 재시도 메커니즘을 제공합니다. - Syslog 디먼은 Azure Monitor 에이전트 수집이 지연되거나 Azure Monitor 에이전트에 연결할 수 없는 경우 큐를 사용합니다.
- Azure Monitor 에이전트는 앞에서 언급한 소켓을 통해 Syslog 이벤트를 수집하고
/etc/opt/microsoft/azuremonitoragent/config-cache/configchunks/
의 DCR(데이터 수집 규칙) 구성의 기능 또는 심각도를 함께 고려해서 필터링합니다. DCR에 없는facility
또는severity
는 삭제됩니다. - Azure Monitor 에이전트는 RFC3164 및 RFC5424에 따라 이벤트를 구문 분석하려고 시도합니다. 또한 이 웹 사이트에 나열된 메시지 형식을 구문 분석하는 방법도 알고 있습니다.
- Azure Monitor 에이전트는 DCR 구성에서 Syslog 이벤트에 대한 대상 엔드포인트를 식별하고 이벤트 업로드를 시도합니다.
참고 항목
Azure Monitor 에이전트는 기본적으로 로컬 지속성을 사용합니다.
rsyslog
또는syslog-ng
에서 수신된 모든 이벤트는 업로드에 실패할 경우/var/opt/microsoft/azuremonitoragent/events
의 큐에 대기됩니다.
문제
다음과 같은 문제가 발생할 수 있습니다.
Linux용 Azure Monitor 에이전트의 전체 디스크 공간 문제로 인해 Rsyslog 데이터가 업로드되지 않음
다음 섹션에서는 이 문제를 설명합니다.
증상
Syslog 데이터가 업로드되지 않음: /var/opt/microsoft/azuremonitoragent/log/mdsd.err
에서 오류 로그를 검사할 때 다음 코드 조각과 유사한 로컬 영구 저장소에 항목을 삽입하는 동안 오류가 발생합니다... 디바이스에 공간이 없습니다.에 대한 항목이 표시됩니다.
2021-11-23T18:15:10.9712760Z: Error while inserting item to Local persistent store syslog.error: IO error: No space left on device: While appending to file: /var/opt/microsoft/azuremonitoragent/events/syslog.error/000555.log: No space left on device
원인
Linux용 Azure Monitor 에이전트는 수집 전에 이벤트를 /var/opt/microsoft/azuremonitoragent/events
로 버퍼링합니다. Linux용 기본 Azure Monitor 에이전트 설치에서 이 디렉터리에는 유휴 상태일 때 최대 650MB의 디스크 공간이 사용됩니다. 지속적인 로깅 부하가 발생할 때 디스크의 크기가 증가합니다. 약 60초마다 정리되고 부하가 유휴 상태로 돌아오면 다시 ~650MB로 줄어듭니다.
전체 디스크 문제 확인
다음 출력에 표시된 것처럼 df
명령은 /dev/sda1
에 사용 가능한 공간이 거의 없음을 표시합니다. 로그 디렉터리(예: /var/log
, /var
또는 /
)와 관련된 품목을 검사해야 합니다.
df -h
Filesystem Size Used Avail Use% Mounted on
udev 63G 0 63G 0% /dev
tmpfs 13G 720K 13G 1% /run
/dev/sda1 29G 29G 481M 99% /
tmpfs 63G 0 63G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 63G 0 63G 0% /sys/fs/cgroup
/dev/sda15 105M 4.4M 100M 5% /boot/efi
/dev/sdb1 251G 61M 239G 1% /mnt
tmpfs 13G 0 13G 0% /run/user/1000
du
명령을 사용해 디스크를 검사하여 디스크를 가득 채우는 파일을 확인할 수 있습니다. 예시:
cd /var/log
du -h syslog*
6.7G syslog
18G syslog.1
경우에 따라 du
는 대용량 파일 또는 디렉터리를 보고하지 않을 수 있습니다. 삭제된 것으로 표시된 파일이 공간을 차지할 수 있습니다. 이 문제는 일부 다른 프로세스가 파일을 삭제하려고 시도했지만 파일이 열려 있는 프로세스가 남아 있는 경우에 발생할 수 있습니다. 이 lsof
명령을 사용하여 이러한 파일을 확인할 수 있습니다. 다음 예제에서 /var/log/syslog
는 삭제된 것으로 표시되지만 최대 3.6GB의 디스크 공간을 차지합니다. PID가 1484인 프로세스에 아직 파일이 열려 있으므로 삭제되지 않았습니다.
sudo lsof +L1
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NODE NAME
none 849 root txt REG 0,1 8632 0 16764 / (deleted)
rsyslogd 1484 syslog 14w REG 8,1 3601566564 0 35280 /var/log/syslog (deleted)
Rsyslog 기본 구성은 모든 기능을 /var/log/에 기록합니다.
일부 인기 있는 배포판(예: Ubuntu 18.04 LTS)에서 rsyslog는 거의 모든 기능의 이벤트를 /var/log/syslog
에 있는 디스크로 기록하는 기본 구성 파일(/etc/rsyslog.d/50-default.conf
)과 함께 제공됩니다. RedHat/CentOS 제품군 Syslog 이벤트는 /var/log/
아래에 저장되지만 다른 파일 /var/log/messages
에 저장됩니다.
Azure Monitor 에이전트는 /var/log/
에 로그되는 Syslog 이벤트를 사용하지 않습니다. 대신 TCP 포트를 통해 이벤트를 azuremonitoragent
서비스 프로세스(mdsd)로 직접 전달하도록 rsyslog 서비스를 구성합니다.
수정: /etc/rsyslog.d/50-default.conf에서 대용량 기능 제거
rsyslog를 통해 높은 볼륨의 로그를 보내고, 시스템이 이러한 기능에 대한 이벤트를 로그하도록 설정된 경우 이벤트를 로그하여 /var/log/
아래에 저장하지 않도록 기본 rsyslog 구성을 수정하는 것이 좋습니다. rsyslog는 전달을 위해 /etc/rsyslog.d/10-azuremonitoragent-omfwd.conf
에 배치된 다른 구성을 사용하므로 이 기능에 대한 이벤트는 여전히 Azure Monitor 에이전트로 전달됩니다.
예를 들어
local4
이벤트가/var/log/syslog
또는/var/log/messages
에 로그되지 않도록 하려면 이 코드 조각에서/etc/rsyslog.d/50-default.conf
의 이 줄을*.*;auth,authpriv.none -/var/log/syslog
이 코드 조각으로 변경합니다(
local4.none;
추가).*.*;local4.none;auth,authpriv.none -/var/log/syslog
sudo systemctl restart rsyslog