다음을 통해 공유


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에서 이벤트를 수신했습니다. rsyslogomfwd 출력 모듈은 안정성 향상을 위해 스풀링 및 재시도 메커니즘을 제공합니다.

  • Syslog 디먼은 Azure Monitor 에이전트 수집이 지연되거나 Azure Monitor 에이전트에 연결할 수 없는 경우 큐를 사용합니다.
  • Azure Monitor 에이전트는 앞에서 언급한 소켓을 통해 Syslog 이벤트를 수집하고 /etc/opt/microsoft/azuremonitoragent/config-cache/configchunks/의 DCR(데이터 수집 규칙) 구성의 기능 또는 심각도를 함께 고려해서 필터링합니다. DCR에 없는 facility 또는 severity는 삭제됩니다.
  • Azure Monitor 에이전트는 RFC3164RFC5424에 따라 이벤트를 구문 분석하려고 시도합니다. 또한 이 웹 사이트에 나열된 메시지 형식을 구문 분석하는 방법도 알고 있습니다.
  • 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 에이전트로 전달됩니다.

  1. 예를 들어 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
    
  2. sudo systemctl restart rsyslog