InfoGrab DocsInfoGrab Docs

Mattermost 로깅

요약

Mattermost v11부터 알림 로그 설정이 표준 콘솔 로그 및 mattermost.log 파일로 통합되었습니다. AdvancedLoggingJSON 구성에서 개별 알림 로그 레벨인 NotificationError, NotificationWarn, NotificationInfo, NotificationDebug, NotificationTrace를 사용하여 알림 로그를 별도의 ...

사용 가능 플랜: Entry, Professional, Enterprise, Enterprise Advanced

Important

Mattermost v11부터 알림 로그 설정이 표준 콘솔 로그 및 mattermost.log 파일로 통합되었습니다. 이제 메인 로그 레벨 설정이 서버 로그와 알림 로그를 모두 제어하므로 고급 로깅 설정을 사용하지 않고는 알림 로깅을 비활성화할 수 없습니다.

AdvancedLoggingJSON 구성에서 개별 알림 로그 레벨인 NotificationError, NotificationWarn, NotificationInfo, NotificationDebug, NotificationTrace를 사용하여 알림 로그를 별도의 파일로 분리하고 문제 해결 노이즈를 줄일 수 있습니다. 자세한 내용은 아래 고급 로깅 섹션을 참조하세요.

Mattermost는 서로 다른 운영 및 컴플라이언스 요구 사항을 충족하기 위해 별도의 로그 파일 및 순환 정책으로 별도로 구성할 수 있는 독립적인 로깅 시스템을 제공합니다.

로깅 유형 및 캡처 운영 권장 사항 구성 우선순위

Log Settings

모든 일반 Mattermost 서버 작업, 오류, 시작/초기화, API 호출 및 시스템 이벤트. v11.0부터 알림 하위 시스템 이벤트도 포함됩니다.

항상 활성화. 콘솔: INFO, 파일: INFO 높음 - 운영에 필수

Audit Log Settings

보안 및 컴플라이언스 이벤트, 사용자 작업, API 액세스, 인증 이벤트 및 관리 변경 사항.

컴플라이언스가 필요한 경우 활성화 중간 - 규제 요구 사항에 따라

Notification Log Settings (v10.12 이하 릴리즈에만 해당)

알림 하위 시스템 이벤트, 푸시 알림, 이메일 전달, 모바일 알림 처리.

알림 문제 해결을 위해 활성화 낮음 - 문제 디버깅 시 활성화

기본적으로 모든 Mattermost 플랜은 로그 집계 도구를 위한 머신 읽기 가능 JSON 형식으로 콘솔과 mattermost.log 파일 모두에 로그를 씁니다. Mattermost Enterprise 및 Professional 고객은 추가적으로 syslog 및 TCP 소켓 대상 타깃에 직접 로그를 기록할 수 있습니다. 감사 로깅은 성능 영향을 최소화하기 위해 비동기적으로 설계되었습니다.

시스템 관리자는 System Console > Environment > Logging으로 이동하거나 config.json 파일을 직접 편집하여 비즈니스 관행 및 요구 사항에 따라 다음 로깅 옵션을 사용자 정의할 수 있습니다.

Note

Mattermost v11.3부터 AdvancedLoggingJSON 구성에는 표준 로그 레벨과 감사 로그 레벨 간의 적절한 분리를 강화하는 향상된 유효성 검사가 포함됩니다.

  • 표준 로깅 구성은 감사 전용 로그 레벨(audit-api, audit-content, audit-permissions, audit-cli)을 거부합니다.
  • 감사 로깅 구성은 표준 로그 레벨(debug, info, warn, error, fatal, panic 등)을 거부합니다.
  • 구성 유효성 검사는 시작 시 및 설정 업데이트 시 발생하여 잘못된 로그 레벨 조합을 방지합니다.

Mattermost v12.0부터 표준 로깅 구성은 audit-delivery 로그 레벨도 거부합니다.

콘솔 로그#

콘솔 로그는 표준 출력 스트림(stdout)을 사용하여 콘솔에 기록되는 일반 활동에 대한 상세 디버그 레벨 로그 메시지를 제공합니다. 일반 활동에 대한 콘솔 로그를 사용자 정의할 수 있습니다.

Mattermost v11.0부터 알림 로그는 기본 콘솔 로그에 자동으로 포함됩니다. 자세한 내용은 로깅 구성 설정을 참조하세요.

파일 로그#

파일 로그는 시작, 초기화 관련 오류 및 정보, 웹훅 디버그 메시지를 포함한 일반 활동에 대한 info 레벨 로그 메시지를 제공합니다. 파일은 ./logs/mattermost.log에 저장되고, 100 MB에서 순환되며, 동일한 디렉터리의 별도 파일로 보관됩니다. 일반 활동에 대한 파일 로그를 사용자 정의할 수 있습니다.

Mattermost v11.0부터 알림 로그는 기본 mattermost.log 파일에 자동으로 포함됩니다. 자세한 내용은 로깅 구성 설정을 참조하세요.

Tip

System Console > Reporting > Server Logs로 이동하여 로그 다운로드를 선택하면 mattermost.log 파일을 로컬로 다운로드할 수 있습니다.

선택적으로 로그 레코드를 콘솔, 로컬 파일, syslog 및 TCP 소켓 타깃의 조합에 출력할 수 있으며 각각 추가 사용자 정의 기능을 제공합니다. 자세한 내용은 고급 로깅을 참조하세요.

로깅 출력 정의#

Environment > Logging > Advanced Logging으로 이동하거나 config.json 파일을 직접 편집하여 시스템 콘솔에서 JSON 형식으로 일반 활동에 대한 로깅 출력을 정의합니다.

아래 샘플 JSON을 시작점으로 사용할 수 있습니다.

{
    "console1": {
        "type": "console",
        "format": "json",
        "levels": [
            {"id": 5, "name": "debug", "stacktrace": false},
            {"id": 4, "name": "info", "stacktrace": false, "color": 36},
            {"id": 3, "name": "warn", "stacktrace": false},
            {"id": 2, "name": "error", "stacktrace": true, "color": 31},
            {"id": 1, "name": "fatal", "stacktrace": true, "color": 31},
            {"id": 0, "name": "panic", "stacktrace": true, "color": 31},
            {"id": 10, "name": "stdlog", "stacktrace": false},

            {"id": 300, "name": "NotificationError", "stacktrace": true, "color": 31},
            {"id": 301, "name": "NotificationWarn", "stacktrace": false},
            {"id": 302, "name": "NotificationInfo", "stacktrace": false, "color": 36},
            {"id": 303, "name": "NotificationDebug", "stacktrace": false},
            {"id": 304, "name": "NotificationTrace", "stacktrace": false}
        ],
        "options": {
            "out": "stdout"
        },
        "maxqueuesize": 1000
    },
    "file1": {
        "type": "file",
        "format": "json",
        "levels": [
            {"id": 5, "name": "debug", "stacktrace": false},
            {"id": 4, "name": "info", "stacktrace": false},
            {"id": 3, "name": "warn", "stacktrace": false},
            {"id": 2, "name": "error", "stacktrace": true},
            {"id": 1, "name": "fatal", "stacktrace": true},
            {"id": 0, "name": "panic", "stacktrace": true},

            {"id": 300, "name": "NotificationError", "stacktrace": true},
            {"id": 301, "name": "NotificationWarn", "stacktrace": false},
            {"id": 302, "name": "NotificationInfo", "stacktrace": false},
            {"id": 303, "name": "NotificationDebug", "stacktrace": false},
            {"id": 304, "name": "NotificationTrace", "stacktrace": false}
        ],
        "options": {
            "filename": "mattermost_logging.log",
            "max_size": 100,
            "max_age": 1,
            "max_backups": 10,
            "compress": true
        },
        "maxqueuesize": 1000
    },
    "file2": {
        "type": "file",
        "format": "json",
        "levels": [
            {"id": 2, "name": "error", "stacktrace": true},
            {"id": 1, "name": "fatal", "stacktrace": true},
            {"id": 0, "name": "panic", "stacktrace": true},

            {"id": 300, "name": "NotificationError", "stacktrace": true},
            {"id": 301, "name": "NotificationWarn", "stacktrace": false}
        ],
        "options": {
            "filename": "mattermost_logging_errors.log", 
            "max_size": 100,
            "max_age": 30,
            "max_backups": 10,
            "compress": true
        },
        "maxqueuesize": 1000
    }
}
{
    "console1": {
        "type": "console",
        "format": "json",
        "levels": [
            {"id": 5, "name": "debug", "stacktrace": false},
            {"id": 4, "name": "info", "stacktrace": false, "color": 36},
            {"id": 3, "name": "warn", "stacktrace": false},
            {"id": 2, "name": "error", "stacktrace": true, "color": 31},
            {"id": 1, "name": "fatal", "stacktrace": true, "color": 31},
            {"id": 0, "name": "panic", "stacktrace": true, "color": 31},
            {"id": 10, "name": "stdlog", "stacktrace": false}
        ],
        "options": {
            "out": "stdout"
        },
        "maxqueuesize": 1000
    },
    "file1": {
        "type": "file",
        "format": "json",
        "levels": [
            {"id": 5, "name": "debug", "stacktrace": false},
            {"id": 4, "name": "info", "stacktrace": false},
            {"id": 3, "name": "warn", "stacktrace": false},
            {"id": 2, "name": "error", "stacktrace": true},
            {"id": 1, "name": "fatal", "stacktrace": true},
            {"id": 0, "name": "panic", "stacktrace": true}
        ],
        "options": {
            "filename": "mattermost_logging.log",
            "max_size": 100,
            "max_age": 1,
            "max_backups": 10,
            "compress": true
        },
        "maxqueuesize": 1000
    },
    "file2": {
        "type": "file",
        "format": "json",
        "levels": [
            {"id": 2, "name": "error", "stacktrace": true},
            {"id": 1, "name": "fatal", "stacktrace": true},
            {"id": 0, "name": "panic", "stacktrace": true}
        ],
        "options": {
            "filename": "mattermost_logging_errors.log", 
            "max_size": 100,
            "max_age": 30,
            "max_backups": 10,
            "compress": true
        },
        "maxqueuesize": 1000
    }
}

감사 로깅#

사용 가능 플랜: Enterprise, Enterprise Advanced

기본적으로 Mattermost는 서버의 파일에 로컬로 감사 로그를 쓰지 않으며, Mattermost에서 감사 로깅을 활성화하는 기능은 현재 베타 상태입니다.

Mattermost에서 고급 감사 로깅을 활성화하고 사용자 정의하여 Mattermost REST API 또는 mmctl에 대한 사용자 액세스와 같이 Mattermost 내에서 수행된 활동 및 이벤트를 기록할 수 있습니다. 감사 로그는 호출자의 지연 시간을 줄이기 위해 비동기적으로 기록되며 일반 로깅과 별도로 저장됩니다. 타깃에 쓸 수 없는 짧은 시간 동안 감사 레코드는 구성 가능한 최대 레코드 한도로 메모리에 버퍼링됩니다. 일반적인 감사 레코드 볼륨을 기준으로 버퍼를 채우는 데 수 분이 걸릴 수 있습니다. 그 후 레코드는 삭제되고 레코드 삭제 이벤트가 로그에 기록됩니다. Mattermost v12.0부터 이 공유 감사 큐는 최대 10,000개의 레코드를 보관하며, 이전의 1,000개에서 늘어났습니다. 이 큐는 개별 출력 타깃의 큐를 제한하는 타깃별 maxqueuesize 옵션과는 별개이며, 해당 옵션은 변경되지 않았습니다.

Note

Mattermost v7.2부터 감사 로깅은 새 형식으로 이전 감사 로그를 파싱하려는 고객의 경우 이전 릴리즈와의 호환성이 변경되었습니다. 감사 로그 레코드의 형식과 내용은 표준 JSON 스키마를 사용하는 모든 이벤트에 대해 표준화되도록 변경되었습니다. 감사 로그 레코드를 수집하거나 파싱하는 기존 도구를 수정해야 할 수 있습니다.

Mattermost v9.3부터 다른 로깅과 별도로 AD/LDAP 이벤트에 대한 고급 로깅을 활성화하고 사용자 정의할 수 있습니다.

System Console > Compliance > Audit Logging으로 이동하여 감사 로깅을 사용자 정의합니다. 아래 샘플 JSON을 시작점으로 사용할 수 있습니다.

일반 활동에 대한 콘솔 로그를 사용자 정의할 수 있습니다. v11.0부터 고급 로깅이 구성되지 않는 한 알림 로그는 자동으로 포함됩니다.

또한 감사 로그 레코드를 콘솔, 로컬 파일, syslog 및 TCP 소켓 타깃의 조합에 출력할 수 있으며 각각 추가 사용자 정의 기능을 제공합니다. 자세한 내용은 아래 고급 로깅을 참조하세요.

Mattermost v10.11부터 System Console > Compliance > Audit Logging으로 이동하여 감사 로깅을 사용자 정의합니다. 아래 샘플 JSON을 시작점으로 사용할 수 있습니다. Mattermost v10.11 이전에는 System Console > Experimental > Features > Audit Logging으로 이동하여 감사 로깅을 사용자 정의합니다.

Note
  • Mattermost v10.11부터 클라우드 배포에는 셀프 호스팅 배포에서는 사용할 수 없는 인증서 기반 감사 로깅 기능이 포함됩니다.

  • 클라우드 기반 배포는 다음 셀프 호스팅 감사 로깅 기본값을 사용합니다. FileEnabled: false

  • 클라우드 배포는 로컬 파일 기반 감사 로깅을 구성할 수 없으며 모든 파일 관련 설정이 숨겨집니다.


로그 경로 제한#

Mattermost v11.4부터 로그 파일 경로는 지정된 로깅 루트 디렉터리 내에 유지되도록 유효성이 검사됩니다. 이 보안 강화 기능은 파일 시스템의 허가되지 않은 위치에 로그 파일이 기록되거나 읽히는 것을 방지합니다.

로깅 루트 디렉터리 구성#

Mattermost v11.4부터 MM_LOG_PATH 환경 변수를 사용하여 모든 로그 파일에 대한 루트 디렉터리를 정의합니다.

export MM_LOG_PATH=/var/log/mattermost

MM_LOG_PATH가 설정되지 않은 경우 Mattermost는 Mattermost 바이너리 위치에 상대적인 기본 logs 디렉터리를 사용합니다.

로그 경로 유효성 검사#

다음 설정을 통해 구성된 모든 로그 파일 경로는 유효성이 검사됩니다.

유효성 검사 작동 방식:

  1. 경로가 절대 경로로 변환됩니다.
  2. 심볼릭 링크가 실제 위치로 변환됩니다.
  3. 변환된 경로가 로깅 루트 디렉터리에 대해 유효성이 검사됩니다.
  4. 루트 디렉터리 외부의 경로는 오류 로그가 생성되고 다운로드에서 제외됩니다.

유효성 검사 발생 시점:

  • System Console > Reporting > Server Logs를 통해 로그 파일에 액세스할 때
  • 지원 패킷 생성 시
  • 구성 변경 시 (잘못된 경로에 대한 경고가 로그에 기록됨)

로그 파일 경로가 허용된 루트 디렉터리 외부에 있으면 Mattermost는 오류를 기록하고 파일을 지원 패킷 다운로드에서 제외합니다. "Blocked attempt to read log file outside allowed root". 오류 메시지에는 파일 경로, 구성 섹션 및 유효성 검사 실패 세부 정보가 포함됩니다.

구성 요구 사항#

기본 로깅 사용 시: 별도 조치가 필요하지 않습니다. 로그는 기본 logs 디렉터리에 저장됩니다.

사용자 정의 로그 경로 사용 시: AdvancedLoggingJSON의 모든 로그 파일 경로가 로깅 루트 디렉터리 내의 위치를 가리키는지 확인하세요.

유효한 구성 예시:

export MM_LOG_PATH=/var/log/mattermost

config.json에서:

{
  "file1": {
    "type": "file",
    "format": "json",
    "levels": [
      {"id": 2, "name": "error", "stacktrace": true}
    ],
    "options": {
      "filename": "/var/log/mattermost/errors.log",
      "max_size": 100,
      "max_age": 7,
      "max_backups": 10,
      "compress": true
    },
    "maxqueuesize": 1000
  }
}

이 구성은 /var/log/mattermost/errors.log가 /var/log/mattermost 루트 내에 있기 때문에 유효합니다.

잘못된 구성 예시:

MM_LOG_PATH=/var/log/mattermost인 경우 다음 구성은 실패합니다.

{
  "file1": {
    "type": "file",
    "options": {
      "filename": "/tmp/logs/app.log"
    }
  }
}

/tmp/logs/app.log가 /var/log/mattermost 루트 디렉터리 외부에 있기 때문에 실패합니다.

로그 경로 문제로 인해 시스템 콘솔이나 지원 패킷에 로그가 나타나지 않는 경우 문제 해결 단계는 문제 해결 문서를 참조하세요.


고급 로깅#

사용 가능 플랜: Entry, Enterprise, Enterprise Advanced(Professional 제외)

시스템 관리자는 콘솔, 로컬 파일, syslog 및 TCP 소켓 타깃의 조합에 일반 활동 및 감사 활동에 대한 로그 및 감사 레코드를 출력할 수 있습니다.

Tip
  • Mattermost v11.0부터 알림 활동은 기본적으로 일반 로그에 포함되지만, 새로운 개별 알림 로그 레벨을 사용하여 분리할 수 있습니다. 각 출력 타깃에는 Mattermost 배포에 맞게 사용자 정의할 수 있는 추가 구성 옵션이 있습니다.
  • Mattermost v9.11부터 시스템 관리자는 mmctl config set 명령을 사용하여 고급 로깅 JSON 옵션을 구성할 수 있습니다. 예시 슬래시 명령에 대한 자세한 내용은 mmctl config set 문서를 참조하세요.
  • Mattermost v9.3부터 시스템 관리자는 Environment > Logging으로 이동하여 시스템 콘솔에서 멀티라인 JSON을 사용하여 고급 로깅 옵션을 구성할 수 있습니다.
  • 또는 관리자는 멀티라인 JSON 또는 문자열로 이스케이프된 JSON을 사용하여 config.json 파일의 AdvancedLoggingJSON 섹션 내에서 고급 로깅을 구성할 수 있습니다.
  • Mattermost Team Edition 고객은 콘솔이나 파일에 감사 로그 레코드를 출력할 수 있습니다.

고급 로깅 옵션을 구성하여 다음을 수행할 수 있습니다.

  • 인증 문제 해결을 위해 AD/LDAP에 대한 추적 로깅 활성화.
  • 알림을 트리거하는 별도의 모니터링된 파일에서 오류 및 패닉 캡처.
  • 디버그 로그가 사용할 수 있는 디스크 공간 양에 상한을 적용하면서 로그 파일 순환이 있는 별도 파일에서 프로덕션 디버그 및 오류 로그 캡처하여 문제 재현.
  • 사용자 워크플로 중 액세스된 모든 API 엔드포인트 감사.

고급 로그 출력 정의#

아래 예제에서 파일 출력은 일반 텍스트로 ./logs/audit.log에 기록되며 감사 로그 레벨 100-103 및 해당 이벤트를 포함합니다. 이전 로그는 1일 동안 유지되며 한 번에 최대 총 10개의 백업 로그 파일이 유지됩니다. 로그 파일의 최대 크기가 500 MB에 도달하면 gzip을 사용하여 로그가 순환됩니다. 파일에 쓰는 동안 최대 1000개의 감사 레코드를 대기열/버퍼링할 수 있습니다.

v11 이상#

"AdvancedLoggingJSON": {
    "file_1": {
        "type": "file",
        "format": "plain",
        "format_options": {
            "disable_level": false
        },
        "levels": [
            { "id": 100, "name": "audit-api" },
            { "id": 101, "name": "audit-content" },
            { "id": 102, "name": "audit-permissions" },
            { "id": 103, "name": "audit-cli" }
        ],
        "options": {
            "compress": true,
            "filename": "./logs/audit.log",
            "max_age": 1,
            "max_backups": 10,
            "max_size": 500
        },
        "maxqueuesize": 1000
    },
    "file_notifications": {
        "type": "file",
        "format": "json",
        "levels": [
            { "id": 300, "name": "NotificationError" },
            { "id": 301, "name": "NotificationWarn" },
            { "id": 302, "name": "NotificationInfo" },
            { "id": 303, "name": "NotificationDebug" },
            { "id": 304, "name": "NotificationTrace" }
        ],
        "options": {
            "compress": true,
            "filename": "./logs/notifications.log",
            "max_age": 7,
            "max_backups": 5,
            "max_size": 200
        },
        "maxqueuesize": 1000
    }
}

v10.12 이하#

"AdvancedLoggingJSON": {
    "file_1": {
        "type": "file",
        "format": "plain",
        "format_options": {
          "disable_level": false
        },
        "levels": [
            { "id": 100, "name": "audit-api" },
            { "id": 101, "name": "audit-content" },
            { "id": 102, "name": "audit-permissions" },
            { "id": 103, "name": "audit-cli" }
        ],
        "options": {
            "compress": true,
            "filename": "./logs/audit.log",
            "max_age": 1,
            "max_backups": 10,
            "max_size": 500
        },
        "maxqueuesize": 1000
    }
}

멀티라인 JSON 대신 고급 로깅 구성이 다른 구성 파일의 파일 사양(filespec)을 가리키도록 하여 config.json 파일을 깔끔하게 유지할 수 있습니다.

"AdvancedLoggingJSON": "/path/to/audit_log_config.json"

별도의 구성 파일에는 대신 멀티라인 JSON이 포함됩니다.

아래 예제에서 첫 번째 출력은 일반 텍스트로 콘솔에 기록되며 감사 로그 레벨 100-103, 해당 이벤트 및 명령 출력을 포함합니다. 필드 사이에는 파이프 | 구분 기호가 놓입니다.

두 번째 출력은 머신 읽기 가능 JSON 형식의 일반 텍스트로 ./logs/audit.log에 기록되며 감사 로그 레벨 100-103, 해당 이벤트 및 명령 출력을 포함합니다. 이전 로그는 1일 동안 유지되며 한 번에 최대 총 10개의 백업 로그 파일이 유지됩니다. 로그 파일의 최대 크기가 500 MB에 도달하면 GZIP을 사용하여 로그가 순환됩니다. 파일에 쓰는 동안 최대 1000개의 감사 레코드를 대기열/버퍼링할 수 있습니다.

audit_log_config.json 파일의 내용:

v11 이상#

{
    "sample-console": {
        "type": "console",
        "format": "plain",
        "format_options": {
            "delim": " | "
        },
        "levels": [
            {"id": 100, "name": "audit-api"},
            {"id": 101, "name": "audit-content"},
            {"id": 102, "name": "audit-permissions"},
            {"id": 103, "name": "audit-cli"}
        ],
        "options": {
            "out": "stdout"
        },
        "maxqueuesize": 1000
    },
    "sample-file": {
        "type": "file",
        "format": "json",
        "levels": [
            {"id": 100, "name": "audit-api"},
            {"id": 101, "name": "audit-content"},
            {"id": 102, "name": "audit-permissions"},
            {"id": 103, "name": "audit-cli"}
        ],
        "options": {
            "filename": "./logs/audit.log",
            "max_size": 500,
            "max_age": 1,
            "max_backups": 10,
            "compress": true
        },
        "maxqueuesize": 1000
    },
    "notifications-file": {
        "type": "file",
        "format": "json",
        "levels": [
            {"id": 300, "name": "NotificationError"},
            {"id": 301, "name": "NotificationWarn"},
            {"id": 302, "name": "NotificationInfo"},
            {"id": 303, "name": "NotificationDebug"},
            {"id": 304, "name": "NotificationTrace"}
        ],
        "options": {
            "filename": "./logs/notifications.log",
            "max_size": 200,
            "max_age": 7,
            "max_backups": 5,
            "compress": true
        },
        "maxqueuesize": 1000
    }
}

v10.12 이하#

{
    "sample-console": {
        "type": "console",
        "format": "plain",
        "format_options": {
            "delim": " | "
        },
        "levels": [
            {"id": 100, "name": "audit-api"},
            {"id": 101, "name": "audit-content"},
            {"id": 102, "name": "audit-permissions"},
            {"id": 103, "name": "audit-cli"}
        ],
        "options": {
            "out": "stdout"
        },
        "maxqueuesize": 1000
    },
    "sample-file": {
        "type": "file",
        "format": "json",
        "levels": [
            {"id": 100, "name": "audit-api"},
            {"id": 101, "name": "audit-content"},
            {"id": 102, "name": "audit-permissions"},
            {"id": 103, "name": "audit-cli"}
        ],
        "options": {
            "filename": "./logs/audit.log",
            "max_size": 500,
            "max_age": 1,
            "max_backups": 10,
            "compress": true
        },
        "maxqueuesize": 1000
    }
}

대상 타깃 지정#

로그 레코드는 콘솔, 로컬 파일, syslog 및 TCP 소켓 타깃의 조합에 전송될 수 있습니다. 로그 타깃은 추가 소프트웨어를 설치하지 않고 대부분의 로그 집계기 및 기타 로그 분석 도구를 지원하도록 선택되었습니다.

시스템 관리자는 여러 로그 타깃을 정의하여 다음을 수행할 수 있습니다.

  • 중복성을 위해 파일과 로그 집계기에 로그 출력 미러링.
  • 특정 항목을 특정 대상으로 기록. 예를 들어 모든 audit-content 레코드를 다른 레벨과 다른 대상으로 라우팅할 수 있습니다.
  • 관리자는 타깃의 type을 none으로 설정하여 일시적으로 로그 타깃을 비활성화할 수도 있습니다.

형식 기본 설정 구성#

시스템 관리자는 format_options 섹션을 구성하여 타깃별 로그 형식을 제어할 수 있습니다.

일반 텍스트 로그 형식 구성 옵션#

키 유형 설명
disable_timestamp bool 타임스탬프 출력을 비활성화합니다. 기본값은 false입니다.
disable_level bool 레벨 이름 출력을 비활성화합니다. 기본값은 false입니다.
disable_msg bool 메시지 텍스트 출력을 비활성화합니다. 기본값은 false입니다.
disable_fields bool 모든 필드의 출력을 비활성화합니다. 기본값은 false입니다.
disables_stacktrace bool 스택 트레이스 출력을 비활성화합니다. 기본값은 false입니다.
enable_caller string 로그 레코드를 내보낸 파일과 줄 번호의 출력을 활성화합니다. 기본값은 false입니다.
delim string 필드 사이에 놓이는 구분 기호입니다. 기본값은 단일 공백입니다.
min_level_len number 최소 레벨 이름 길이입니다. 레벨 이름이 최소값보다 짧으면 레벨 이름이 공백으로 채워집니다. 기본값은 0입니다.
min_msg_len number 최소 메시지 길이입니다. 메시지 텍스트가 최소값보다 짧으면 메시지 텍스트가 공백으로 채워집니다. 기본값은 0입니다.
timestamp_format string 타임스탬프 형식입니다. 기본값은 RFC3339입니다.
line_end string 대체 줄 끝 문자입니다. 기본값은 n입니다.
enable_color bool 색상 출력을 지원하는 타깃에 대해 색상을 활성화합니다. 기본값은 false입니다.

JSON 로그 형식 구성 옵션#

키 유형 설명
disable_timestamp bool 타임스탬프 출력을 비활성화합니다. 기본값은 false입니다.
disable_level bool 로그 레벨 표시 이름의 출력을 비활성화합니다. 기본값은 false입니다.
disable_msg bool 메시지 텍스트 출력을 비활성화합니다. 기본값은 false입니다.
disable_fields bool 모든 필드의 출력을 비활성화합니다. 기본값은 false입니다.
disables_stacktrace bool 스택 트레이스 출력을 비활성화합니다. 기본값은 false입니다.
enable_caller string 로그 레코드를 내보낸 파일과 줄 번호의 출력을 활성화합니다. 기본값은 false입니다.
timestamp_format string 타임스탬프 형식입니다. 기본값은 RFC3339입니다.

GELF 로그 형식 구성 옵션#

키 유형 설명
hostname string 로그 레코드에서 사용자 정의 호스트 이름을 출력합니다. 생략되면 운영 체제에서 호스트 이름을 가져옵니다.
enable_caller string 로그 레코드를 생성한 파일 및 줄 번호 출력을 활성화합니다. 기본값은 false입니다.

로그 레벨 및 이벤트 구성#

키 유형 설명
id number 로그 레벨의 고유 식별자입니다.
name string 로그 레벨의 이름입니다.
stacktrace bool 스택 추적을 출력합니다. 기본값은 false입니다.
color number

로그 레코드의 일부를 출력하는 데 사용되는 ANSI 색상 코드입니다. 지원되는 값은 다음과 같습니다.

  • 검정: 30
  • 빨강: 31
  • 녹색: 32
  • 노랑: 33
  • 파랑: 34
  • 자홍: 35
  • 청록: 36
  • 흰색: 37

로그 레벨#

다음 로그 레벨은 감사 로그를 지원합니다.

ID 이름 설명
100 audit-api API 이벤트
101 audit-content 콘텐츠 변경. 이 로그 레벨은 다른 감사 로그 레벨보다 훨씬 더 많은 레코드를 생성할 수 있습니다.
102 audit-permissions 권한 변경
103 audit-cli CLI 작업
104 audit-delivery 사용자, 플러그인, 아웃고잉 웹훅으로의 메시지 콘텐츠 전달. 대상 채널은 조건을 충족하는 채널로 한정되며, 다이렉트 메시지 채널과 그룹 메시지 채널은 대상에 포함되지 않습니다. Mattermost v12.0부터 사용할 수 있습니다. 이 로그 레벨은 다른 어떤 감사 로그 레벨보다 훨씬 더 많은 레코드를 생성합니다.
Warning

audit-delivery 로그 레벨은 기본 제공 감사 로그 파일 타깃에 기록되지 않으므로, ExperimentalAuditSettings.FileEnabled를 활성화해도 전달 레코드가 캡처되지 않고 삭제됩니다. 전달 레코드를 캡처하려면 levels 목록에 {"id": 104, "name": "audit-delivery"}를 포함하는 타깃을 ExperimentalAuditSettings.AdvancedLoggingJSON에 추가하세요. 게시물 전달 감사 로깅을 참조하세요.

다음 로그 레벨은 애플리케이션 로그를 지원합니다.

ID 이름 설명
140 LDAPError AD/LDAP 인증 오류
141 LDAPWarn AD/LDAP 인증 경고
142 LDAPInfo AD/LDAP 인증 정보 로그
143 LDAPDebug AD/LDAP 인증 디버그 로그
144 LDAPTrace AD/LDAP 인증 추적 로그. Mattermost v9.3부터 LdapSetings.trace를 대체합니다.

타깃별 설정 구성#

콘솔 타깃 구성 옵션#

콘솔 타깃은 stdout 또는 stderr일 수 있습니다.

  • 표준 출력 스트림 stout은 일반적으로 명령 결과를 사용자에게 출력하는 명령 출력에 사용됩니다.
  • 표준 오류 스트림 sterr은 일반적으로 프로그램 실행 중 발생하는 오류를 출력하는 데 사용됩니다.

파일 타깃 구성 옵션#

파일 타깃은 크기 및/또는 기간으로 트리거되는 순환 및 압축을 지원합니다.

키 유형 설명
filename string 출력 파일의 전체 경로입니다. v11.4부터 MM_LOG_PATH로 지정된 디렉터리 내에 있어야 합니다.
max_size number 로그 파일이 순환되기 전에 증가할 수 있는 최대 크기(메가바이트, MB)입니다. 기본값은 100 MB입니다.
max_age number 파일 이름에 인코딩된 타임스탬프를 기반으로 이전 로그 파일을 유지할 최대 일 수입니다. 기본값은 0으로, 이전 로그 파일 제거를 비활성화합니다.
max_backups number 유지할 이전 로그 파일의 최대 수입니다. 기본값은 0으로, 모든 이전 로그 파일을 유지합니다. 참고: max_age를 구성하면 이 구성 값에 관계없이 이전 로그 파일이 삭제될 수 있습니다.
compress bool gzip을 사용하여 순환된 로그 파일을 압축합니다. 기본값은 false입니다.

Syslog 타깃 구성 옵션#

사용 가능 플랜: Entry, Enterprise, Enterprise Advanced(Professional 제외)

Syslog 타깃은 TLS 전송이 있거나 없는 로컬 및 원격 syslog 서버를 지원합니다. Syslog 타깃 지원에는 Mattermost Enterprise가 필요합니다.

키 유형 설명
host string 로그 레코드를 수신하는 서버의 IP 또는 도메인 이름입니다.
port number 로그 레코드를 수신하는 서버의 포트 번호입니다.
tls bool 로그 레코드를 수신하는 서버에 대한 TLS 연결을 만듭니다. 기본값은 false입니다.
cert string 서버에 TLS 연결을 설정할 때 사용할 인증서 파일(.pem) 경로입니다.
insecure bool Mattermost는 서버에서 제공하는 모든 인증서와 해당 인증서의 모든 호스트 이름을 수락합니다. 기본값은 false입니다. 참고: 테스트 환경에서만 사용해야 하며 운영 환경에서는 사용하지 않아야 합니다.
tag string Syslog 태그 필드입니다.

TCP 타깃 구성 옵션#

사용 가능 플랜: Entry, Enterprise, Enterprise Advanced(Professional 제외)

TCP 소켓 타깃은 IP 주소 또는 도메인 이름, 포트 및 선택적 TLS 인증서로 구성할 수 있습니다. TCP 소켓 타깃 지원에는 Mattermost Enterprise가 필요합니다. 시작점으로 사용할 구성의 샘플 JSON 파일을 다운로드할 수 있습니다.

키 유형 설명
host string 로그 레코드를 수신하는 서버의 IP 또는 도메인 이름입니다.
port number 로그 레코드를 수신하는 서버의 포트 번호입니다.
tls bool 로그 레코드를 수신하는 서버에 대한 TLS 연결을 만듭니다. 기본값은 false입니다.
cert string 서버에 TLS 연결을 설정할 때 사용할 인증서 파일(.pem) 경로입니다.
insecure bool Mattermost는 서버에서 제공하는 모든 인증서와 해당 인증서의 모든 호스트 이름을 수락합니다. 기본값은 false입니다. 참고: 테스트 환경에서만 사용해야 하며 운영 환경에서는 사용하지 않아야 합니다.

클러스터 작업 실행 디버그 메시지#

사용 가능 플랜: Enterprise, Enterprise Advanced

Mattermost v11.4부터 고가용성 배포에서 특정 반복 작업에 대한 클러스터 작업 실행 동작을 시스템 관리자가 이해하는 데 도움이 되는 디버그 레벨 로그 메시지를 사용할 수 있습니다.

이러한 디버그 메시지는 다음 반복 작업에만 적용됩니다.

  • 예약된 게시물
  • 게시물 알림 설정
  • 다른 용무 중 상태 초기화
Important
  • 이러한 디버그 메시지는 Elasticsearch 인덱싱, SAML 동기화, LDAP 동기화, 데이터 보존 또는 컴플라이언스 내보내기와 같은 다른 작업 유형에는 사용할 수 없습니다. 다른 작업 유형에 대한 이러한 디버그 메시지의 부재는 작업 실행에 문제가 있음을 나타내지 않습니다.
  • 이러한 메시지는 디버그 로깅이 활성화된 경우에만 표시됩니다. 자세한 내용은 디버그 로깅을 활성화하는 방법은 무엇입니까?를 참조하세요.
  • 클러스터 배포에서는 리더 노드만 이러한 반복 작업을 실행합니다. 비리더 노드는 이러한 특정 작업을 건너뛰고 이것이 예상된 동작임을 나타내는 디버그 메시지를 기록합니다.

작업 시작에 대한 디버그 메시지#

비리더 노드가 시작될 때 이러한 특정 반복 작업에 대한 초기화를 건너뛰고 다음 디버그 메시지 중 하나를 기록합니다.

  • Skipping scheduled posts job startup since this is not the leader node
  • Skipping unset DND status job startup since this is not the leader node
  • Skipping post reminder job startup since this is not the leader node

이러한 메시지는 정상 작동을 나타냅니다. 고가용성 클러스터에서 이러한 반복 작업은 중복 실행을 방지하기 위해 리더 노드에서만 실행되어야 합니다.

리더십 변경에 대한 디버그 메시지#

이러한 반복 작업이 실행되는 동안 노드가 리더십 상태를 잃으면 실행 중인 작업을 취소하고 다음을 기록합니다.

  • This is no longer leader node. Cancelling the [job name] task

여기서 [job name]은 scheduled posts, DND status reset 또는 post reminder 중 하나입니다.

이는 클러스터가 리더 선출을 올바르게 수행하고 있음을 나타냅니다. 새 리더 노드가 이러한 반복 작업의 실행을 인계받습니다.

클러스터 작업 디버그 메시지를 사용한 문제 해결#

반복 작업(예약된 게시물, 게시물 알림 설정 또는 다른 용무 중 상태 초기화)이 특정 노드에서 실행되지 않는 이유를 조사하는 경우 다음을 수행하세요.

  1. 디버그 로깅이 아직 활성화되지 않은 경우 활성화합니다.
  2. 위에 나열된 디버그 메시지에 대한 로그를 확인합니다.
  3. 이러한 메시지가 표시되면 노드가 비리더로 올바르게 식별되어 예상대로 동작하는 것입니다.
  4. 이러한 반복 작업은 대신 리더 노드에서 실행됩니다.
Note

이러한 디버그 메시지는 반복 작업에만 적용됩니다. 다른 작업 유형(Elasticsearch 인덱싱, SAML 동기화, LDAP 동기화, 데이터 보존, 컴플라이언스 내보내기)에는 다른 로깅 메커니즘이 적용됩니다. 다른 작업 유형에 대한 이러한 특정 디버그 메시지의 부재는 예상된 것이며 문제가 있음을 나타내지 않습니다.

리더 선출 및 클러스터 구성에 대한 자세한 내용은 고가용성 클러스터 기반 배포를 참조하세요.


자주 묻는 질문#

디버그 로깅을 활성화하는 방법은 무엇입니까?#

Mattermost 시스템 관리자로서 System Console > Environment > Logging > File Log Level로 이동하여 DEBUG로 설정합니다. 그런 다음 변경 사항을 저장합니다.

Mattermost 시스템 관리자가 디버그 로깅을 활성화하거나 비활성화할 수 있는 System Console 페이지 스크린샷.

디버그 로깅은 로그 파일을 상당히 확장시킬 수 있으며 서버 성능에 부정적인 영향을 미칠 수 있습니다. 서버 로그를 주의 깊게 모니터링하거나, 일시적으로만 활성화하거나, 개발 환경에서만 사용하고 운영 환경에서는 사용하지 마세요.

Mattermost에 시스템 auditd 외에 감사 로그가 있습니까?#

예. 자세한 내용은 감사 로깅 문서를 참조하세요.

syslog가 타깃으로 구성된 경우 데이터를 내보내는 주체(즉, Mattermost 앱 노드)의 IP 주소가 포함됩니까?#

예. 이는 syslog 데몬(수신자)의 기능입니다. 일반적으로 모든 로그 줄 앞에는 타임스탬프와 데이터를 보내는 노드의 호스트 이름이 붙습니다. 예를 들어 로그 줄은 Nov 28 10:56:59 tower kernel: [1072437.431123] ....로 시작하며, 여기서 tower는 해당 로그 줄을 생성한 서버의 호스트 이름입니다.

감사 로그가 활성화되면 관리자가 감사 로그 설정을 비활성화하거나 수정하는 이벤트를 감사 로깅이 추적할 수 있습니까?#

예, 감사 로그가 구성된 방식에 따라 다릅니다. 감사 로그 구성은 REST API, mmctl, System Console, 디스크의 파일 및 환경 변수를 통해 지정할 수 있습니다. REST API 또는 System Console을 통해 변경이 이루어지면 감사 레코드가 있습니다. 그러나 Mattermost 서버는 구성 파일이나 환경 변수를 통한 변경 사항을 캡처할 수 없습니다.

감사가 비활성화될 때 서비스 중지/업데이트에 대한 정보가 서버 로그에 표시됩니까?#

예. REST API, mmctl 또는 System Console을 통해 감사 로그 구성을 업데이트할 때 감사 로그의 마지막 이벤트는 서버의 구성을 업데이트하는 관리자 사용자에 관한 것이어야 합니다. 이를 통해 보안 팀이 시스템에서 어떤 작업이 수행되었고 누가 수행했는지 파악하는 데 도움이 됩니다.

수신 웹훅 세부 정보를 로그에서 생략하는 방법은 무엇입니까?#

enable-webhook-debugging 참조

최대 로그 필드 크기를 조정하는 방법은 무엇입니까?#

maximum-field-size 참조

환경 변수를 통해 고급 로깅을 구성하는 방법은 무엇입니까?#

고급 로깅을 구성하는 데 MM_LOGSETTINGS_ADVANCEDLOGGINGJSON 환경 변수가 사용됩니다. jq를 사용하여 JSON 페이로드를 생성할 수 있습니다. 예:

export MM_LOGSETTINGS_ADVANCEDLOGGINGJSON=$(jq -n -c '{
    "console1": {
        "Type": "console",
        "Format": "json",
        "Levels": [
            {"ID": 5, "Name": "debug", "Stacktrace": false},
            {"ID": 4, "Name": "info", "Stacktrace": false, "color": 36},
            {"ID": 3, "Name": "warn", "Stacktrace": false},
            {"ID": 2, "Name": "error", "Stacktrace": true, "color": 31},
            {"ID": 1, "Name": "fatal", "Stacktrace": true, "color": 31},
            {"ID": 0, "Name": "panic", "Stacktrace": true, "color": 31},
            {"ID": 10, "Name": "stdlog", "Stacktrace": false}
        ],
        "Options": {
            "Out": "stdout"
        },
        "MaxQueueSize": 1000
    }
}')

LDAP에 대한 추적 로깅을 활성화하는 방법은 무엇입니까?#

다음 JSON 구성을 LDAP에 대한 추적 로깅 활성화의 시작점으로 사용하세요.

{
    "ldap-file": {
        "type": "file",
        "format": "plain",
        "levels": [
            {
                "id": 144,
                "name": "LDAPTrace"
            },
            {
                "id": 143,
                "name": "LDAPDebug"
            },
            {
                "id": 142,
                "name": "LDAPInfo"
            },
            {
                "id": 141,
                "name": "LDAPWarn",
                "stacktrace": true
            },
            {
                "id": 140,
                "name": "LDAPError",
                "stacktrace": true
            }
        ],
        "options": {
            "filename": "./logs/ldap.log",
            "max_size": 100,
            "max_age": 14,
            "max_backups": 3,
            "compress": false
        },
        "maxqueuesize": 1000
    }
}

Mattermost에 중앙 집중식 로깅을 구성하는 방법은 무엇입니까?#

Mattermost는 Grafana Loki와 OpenTelemetry Collector를 사용하여 중앙 집중식 로깅을 권장합니다. 로그 집계 설정 방법, 유용한 LogQL 쿼리 및 Grafana 대시보드에 대한 자세한 내용은 중앙 집중식 로깅을 위한 Grafana Loki 배포 가이드를 참조하세요.

Mattermost 로깅

Mattermost v12.0
원문 보기

요약

Mattermost v11부터 알림 로그 설정이 표준 콘솔 로그 및 mattermost.log 파일로 통합되었습니다. AdvancedLoggingJSON 구성에서 개별 알림 로그 레벨인 NotificationError, NotificationWarn, NotificationInfo, NotificationDebug, NotificationTrace를 사용하여 알림 로그를 별도의 ...

사용 가능 플랜: Entry, Professional, Enterprise, Enterprise Advanced

Important

Mattermost v11부터 알림 로그 설정이 표준 콘솔 로그 및 mattermost.log 파일로 통합되었습니다. 이제 메인 로그 레벨 설정이 서버 로그와 알림 로그를 모두 제어하므로 고급 로깅 설정을 사용하지 않고는 알림 로깅을 비활성화할 수 없습니다.

AdvancedLoggingJSON 구성에서 개별 알림 로그 레벨인 NotificationError, NotificationWarn, NotificationInfo, NotificationDebug, NotificationTrace를 사용하여 알림 로그를 별도의 파일로 분리하고 문제 해결 노이즈를 줄일 수 있습니다. 자세한 내용은 아래 고급 로깅 섹션을 참조하세요.

Mattermost는 서로 다른 운영 및 컴플라이언스 요구 사항을 충족하기 위해 별도의 로그 파일 및 순환 정책으로 별도로 구성할 수 있는 독립적인 로깅 시스템을 제공합니다.

로깅 유형 및 캡처 운영 권장 사항 구성 우선순위

Log Settings

모든 일반 Mattermost 서버 작업, 오류, 시작/초기화, API 호출 및 시스템 이벤트. v11.0부터 알림 하위 시스템 이벤트도 포함됩니다.

항상 활성화. 콘솔: INFO, 파일: INFO 높음 - 운영에 필수

Audit Log Settings

보안 및 컴플라이언스 이벤트, 사용자 작업, API 액세스, 인증 이벤트 및 관리 변경 사항.

컴플라이언스가 필요한 경우 활성화 중간 - 규제 요구 사항에 따라

Notification Log Settings (v10.12 이하 릴리즈에만 해당)

알림 하위 시스템 이벤트, 푸시 알림, 이메일 전달, 모바일 알림 처리.

알림 문제 해결을 위해 활성화 낮음 - 문제 디버깅 시 활성화

기본적으로 모든 Mattermost 플랜은 로그 집계 도구를 위한 머신 읽기 가능 JSON 형식으로 콘솔과 mattermost.log 파일 모두에 로그를 씁니다. Mattermost Enterprise 및 Professional 고객은 추가적으로 syslog 및 TCP 소켓 대상 타깃에 직접 로그를 기록할 수 있습니다. 감사 로깅은 성능 영향을 최소화하기 위해 비동기적으로 설계되었습니다.

시스템 관리자는 System Console > Environment > Logging으로 이동하거나 config.json 파일을 직접 편집하여 비즈니스 관행 및 요구 사항에 따라 다음 로깅 옵션을 사용자 정의할 수 있습니다.

Note

Mattermost v11.3부터 AdvancedLoggingJSON 구성에는 표준 로그 레벨과 감사 로그 레벨 간의 적절한 분리를 강화하는 향상된 유효성 검사가 포함됩니다.

  • 표준 로깅 구성은 감사 전용 로그 레벨(audit-api, audit-content, audit-permissions, audit-cli)을 거부합니다.
  • 감사 로깅 구성은 표준 로그 레벨(debug, info, warn, error, fatal, panic 등)을 거부합니다.
  • 구성 유효성 검사는 시작 시 및 설정 업데이트 시 발생하여 잘못된 로그 레벨 조합을 방지합니다.

Mattermost v12.0부터 표준 로깅 구성은 audit-delivery 로그 레벨도 거부합니다.

콘솔 로그#

콘솔 로그는 표준 출력 스트림(stdout)을 사용하여 콘솔에 기록되는 일반 활동에 대한 상세 디버그 레벨 로그 메시지를 제공합니다. 일반 활동에 대한 콘솔 로그를 사용자 정의할 수 있습니다.

Mattermost v11.0부터 알림 로그는 기본 콘솔 로그에 자동으로 포함됩니다. 자세한 내용은 로깅 구성 설정을 참조하세요.

파일 로그#

파일 로그는 시작, 초기화 관련 오류 및 정보, 웹훅 디버그 메시지를 포함한 일반 활동에 대한 info 레벨 로그 메시지를 제공합니다. 파일은 ./logs/mattermost.log에 저장되고, 100 MB에서 순환되며, 동일한 디렉터리의 별도 파일로 보관됩니다. 일반 활동에 대한 파일 로그를 사용자 정의할 수 있습니다.

Mattermost v11.0부터 알림 로그는 기본 mattermost.log 파일에 자동으로 포함됩니다. 자세한 내용은 로깅 구성 설정을 참조하세요.

Tip

System Console > Reporting > Server Logs로 이동하여 로그 다운로드를 선택하면 mattermost.log 파일을 로컬로 다운로드할 수 있습니다.

선택적으로 로그 레코드를 콘솔, 로컬 파일, syslog 및 TCP 소켓 타깃의 조합에 출력할 수 있으며 각각 추가 사용자 정의 기능을 제공합니다. 자세한 내용은 고급 로깅을 참조하세요.

로깅 출력 정의#

Environment > Logging > Advanced Logging으로 이동하거나 config.json 파일을 직접 편집하여 시스템 콘솔에서 JSON 형식으로 일반 활동에 대한 로깅 출력을 정의합니다.

아래 샘플 JSON을 시작점으로 사용할 수 있습니다.

{
    "console1": {
        "type": "console",
        "format": "json",
        "levels": [
            {"id": 5, "name": "debug", "stacktrace": false},
            {"id": 4, "name": "info", "stacktrace": false, "color": 36},
            {"id": 3, "name": "warn", "stacktrace": false},
            {"id": 2, "name": "error", "stacktrace": true, "color": 31},
            {"id": 1, "name": "fatal", "stacktrace": true, "color": 31},
            {"id": 0, "name": "panic", "stacktrace": true, "color": 31},
            {"id": 10, "name": "stdlog", "stacktrace": false},

            {"id": 300, "name": "NotificationError", "stacktrace": true, "color": 31},
            {"id": 301, "name": "NotificationWarn", "stacktrace": false},
            {"id": 302, "name": "NotificationInfo", "stacktrace": false, "color": 36},
            {"id": 303, "name": "NotificationDebug", "stacktrace": false},
            {"id": 304, "name": "NotificationTrace", "stacktrace": false}
        ],
        "options": {
            "out": "stdout"
        },
        "maxqueuesize": 1000
    },
    "file1": {
        "type": "file",
        "format": "json",
        "levels": [
            {"id": 5, "name": "debug", "stacktrace": false},
            {"id": 4, "name": "info", "stacktrace": false},
            {"id": 3, "name": "warn", "stacktrace": false},
            {"id": 2, "name": "error", "stacktrace": true},
            {"id": 1, "name": "fatal", "stacktrace": true},
            {"id": 0, "name": "panic", "stacktrace": true},

            {"id": 300, "name": "NotificationError", "stacktrace": true},
            {"id": 301, "name": "NotificationWarn", "stacktrace": false},
            {"id": 302, "name": "NotificationInfo", "stacktrace": false},
            {"id": 303, "name": "NotificationDebug", "stacktrace": false},
            {"id": 304, "name": "NotificationTrace", "stacktrace": false}
        ],
        "options": {
            "filename": "mattermost_logging.log",
            "max_size": 100,
            "max_age": 1,
            "max_backups": 10,
            "compress": true
        },
        "maxqueuesize": 1000
    },
    "file2": {
        "type": "file",
        "format": "json",
        "levels": [
            {"id": 2, "name": "error", "stacktrace": true},
            {"id": 1, "name": "fatal", "stacktrace": true},
            {"id": 0, "name": "panic", "stacktrace": true},

            {"id": 300, "name": "NotificationError", "stacktrace": true},
            {"id": 301, "name": "NotificationWarn", "stacktrace": false}
        ],
        "options": {
            "filename": "mattermost_logging_errors.log", 
            "max_size": 100,
            "max_age": 30,
            "max_backups": 10,
            "compress": true
        },
        "maxqueuesize": 1000
    }
}
{
    "console1": {
        "type": "console",
        "format": "json",
        "levels": [
            {"id": 5, "name": "debug", "stacktrace": false},
            {"id": 4, "name": "info", "stacktrace": false, "color": 36},
            {"id": 3, "name": "warn", "stacktrace": false},
            {"id": 2, "name": "error", "stacktrace": true, "color": 31},
            {"id": 1, "name": "fatal", "stacktrace": true, "color": 31},
            {"id": 0, "name": "panic", "stacktrace": true, "color": 31},
            {"id": 10, "name": "stdlog", "stacktrace": false}
        ],
        "options": {
            "out": "stdout"
        },
        "maxqueuesize": 1000
    },
    "file1": {
        "type": "file",
        "format": "json",
        "levels": [
            {"id": 5, "name": "debug", "stacktrace": false},
            {"id": 4, "name": "info", "stacktrace": false},
            {"id": 3, "name": "warn", "stacktrace": false},
            {"id": 2, "name": "error", "stacktrace": true},
            {"id": 1, "name": "fatal", "stacktrace": true},
            {"id": 0, "name": "panic", "stacktrace": true}
        ],
        "options": {
            "filename": "mattermost_logging.log",
            "max_size": 100,
            "max_age": 1,
            "max_backups": 10,
            "compress": true
        },
        "maxqueuesize": 1000
    },
    "file2": {
        "type": "file",
        "format": "json",
        "levels": [
            {"id": 2, "name": "error", "stacktrace": true},
            {"id": 1, "name": "fatal", "stacktrace": true},
            {"id": 0, "name": "panic", "stacktrace": true}
        ],
        "options": {
            "filename": "mattermost_logging_errors.log", 
            "max_size": 100,
            "max_age": 30,
            "max_backups": 10,
            "compress": true
        },
        "maxqueuesize": 1000
    }
}

감사 로깅#

사용 가능 플랜: Enterprise, Enterprise Advanced

기본적으로 Mattermost는 서버의 파일에 로컬로 감사 로그를 쓰지 않으며, Mattermost에서 감사 로깅을 활성화하는 기능은 현재 베타 상태입니다.

Mattermost에서 고급 감사 로깅을 활성화하고 사용자 정의하여 Mattermost REST API 또는 mmctl에 대한 사용자 액세스와 같이 Mattermost 내에서 수행된 활동 및 이벤트를 기록할 수 있습니다. 감사 로그는 호출자의 지연 시간을 줄이기 위해 비동기적으로 기록되며 일반 로깅과 별도로 저장됩니다. 타깃에 쓸 수 없는 짧은 시간 동안 감사 레코드는 구성 가능한 최대 레코드 한도로 메모리에 버퍼링됩니다. 일반적인 감사 레코드 볼륨을 기준으로 버퍼를 채우는 데 수 분이 걸릴 수 있습니다. 그 후 레코드는 삭제되고 레코드 삭제 이벤트가 로그에 기록됩니다. Mattermost v12.0부터 이 공유 감사 큐는 최대 10,000개의 레코드를 보관하며, 이전의 1,000개에서 늘어났습니다. 이 큐는 개별 출력 타깃의 큐를 제한하는 타깃별 maxqueuesize 옵션과는 별개이며, 해당 옵션은 변경되지 않았습니다.

Note

Mattermost v7.2부터 감사 로깅은 새 형식으로 이전 감사 로그를 파싱하려는 고객의 경우 이전 릴리즈와의 호환성이 변경되었습니다. 감사 로그 레코드의 형식과 내용은 표준 JSON 스키마를 사용하는 모든 이벤트에 대해 표준화되도록 변경되었습니다. 감사 로그 레코드를 수집하거나 파싱하는 기존 도구를 수정해야 할 수 있습니다.

Mattermost v9.3부터 다른 로깅과 별도로 AD/LDAP 이벤트에 대한 고급 로깅을 활성화하고 사용자 정의할 수 있습니다.

System Console > Compliance > Audit Logging으로 이동하여 감사 로깅을 사용자 정의합니다. 아래 샘플 JSON을 시작점으로 사용할 수 있습니다.

일반 활동에 대한 콘솔 로그를 사용자 정의할 수 있습니다. v11.0부터 고급 로깅이 구성되지 않는 한 알림 로그는 자동으로 포함됩니다.

또한 감사 로그 레코드를 콘솔, 로컬 파일, syslog 및 TCP 소켓 타깃의 조합에 출력할 수 있으며 각각 추가 사용자 정의 기능을 제공합니다. 자세한 내용은 아래 고급 로깅을 참조하세요.

Mattermost v10.11부터 System Console > Compliance > Audit Logging으로 이동하여 감사 로깅을 사용자 정의합니다. 아래 샘플 JSON을 시작점으로 사용할 수 있습니다. Mattermost v10.11 이전에는 System Console > Experimental > Features > Audit Logging으로 이동하여 감사 로깅을 사용자 정의합니다.

Note
  • Mattermost v10.11부터 클라우드 배포에는 셀프 호스팅 배포에서는 사용할 수 없는 인증서 기반 감사 로깅 기능이 포함됩니다.

  • 클라우드 기반 배포는 다음 셀프 호스팅 감사 로깅 기본값을 사용합니다. FileEnabled: false

  • 클라우드 배포는 로컬 파일 기반 감사 로깅을 구성할 수 없으며 모든 파일 관련 설정이 숨겨집니다.


로그 경로 제한#

Mattermost v11.4부터 로그 파일 경로는 지정된 로깅 루트 디렉터리 내에 유지되도록 유효성이 검사됩니다. 이 보안 강화 기능은 파일 시스템의 허가되지 않은 위치에 로그 파일이 기록되거나 읽히는 것을 방지합니다.

로깅 루트 디렉터리 구성#

Mattermost v11.4부터 MM_LOG_PATH 환경 변수를 사용하여 모든 로그 파일에 대한 루트 디렉터리를 정의합니다.

export MM_LOG_PATH=/var/log/mattermost

MM_LOG_PATH가 설정되지 않은 경우 Mattermost는 Mattermost 바이너리 위치에 상대적인 기본 logs 디렉터리를 사용합니다.

로그 경로 유효성 검사#

다음 설정을 통해 구성된 모든 로그 파일 경로는 유효성이 검사됩니다.

유효성 검사 작동 방식:

  1. 경로가 절대 경로로 변환됩니다.
  2. 심볼릭 링크가 실제 위치로 변환됩니다.
  3. 변환된 경로가 로깅 루트 디렉터리에 대해 유효성이 검사됩니다.
  4. 루트 디렉터리 외부의 경로는 오류 로그가 생성되고 다운로드에서 제외됩니다.

유효성 검사 발생 시점:

  • System Console > Reporting > Server Logs를 통해 로그 파일에 액세스할 때
  • 지원 패킷 생성 시
  • 구성 변경 시 (잘못된 경로에 대한 경고가 로그에 기록됨)

로그 파일 경로가 허용된 루트 디렉터리 외부에 있으면 Mattermost는 오류를 기록하고 파일을 지원 패킷 다운로드에서 제외합니다. "Blocked attempt to read log file outside allowed root". 오류 메시지에는 파일 경로, 구성 섹션 및 유효성 검사 실패 세부 정보가 포함됩니다.

구성 요구 사항#

기본 로깅 사용 시: 별도 조치가 필요하지 않습니다. 로그는 기본 logs 디렉터리에 저장됩니다.

사용자 정의 로그 경로 사용 시: AdvancedLoggingJSON의 모든 로그 파일 경로가 로깅 루트 디렉터리 내의 위치를 가리키는지 확인하세요.

유효한 구성 예시:

export MM_LOG_PATH=/var/log/mattermost

config.json에서:

{
  "file1": {
    "type": "file",
    "format": "json",
    "levels": [
      {"id": 2, "name": "error", "stacktrace": true}
    ],
    "options": {
      "filename": "/var/log/mattermost/errors.log",
      "max_size": 100,
      "max_age": 7,
      "max_backups": 10,
      "compress": true
    },
    "maxqueuesize": 1000
  }
}

이 구성은 /var/log/mattermost/errors.log가 /var/log/mattermost 루트 내에 있기 때문에 유효합니다.

잘못된 구성 예시:

MM_LOG_PATH=/var/log/mattermost인 경우 다음 구성은 실패합니다.

{
  "file1": {
    "type": "file",
    "options": {
      "filename": "/tmp/logs/app.log"
    }
  }
}

/tmp/logs/app.log가 /var/log/mattermost 루트 디렉터리 외부에 있기 때문에 실패합니다.

로그 경로 문제로 인해 시스템 콘솔이나 지원 패킷에 로그가 나타나지 않는 경우 문제 해결 단계는 문제 해결 문서를 참조하세요.


고급 로깅#

사용 가능 플랜: Entry, Enterprise, Enterprise Advanced(Professional 제외)

시스템 관리자는 콘솔, 로컬 파일, syslog 및 TCP 소켓 타깃의 조합에 일반 활동 및 감사 활동에 대한 로그 및 감사 레코드를 출력할 수 있습니다.

Tip
  • Mattermost v11.0부터 알림 활동은 기본적으로 일반 로그에 포함되지만, 새로운 개별 알림 로그 레벨을 사용하여 분리할 수 있습니다. 각 출력 타깃에는 Mattermost 배포에 맞게 사용자 정의할 수 있는 추가 구성 옵션이 있습니다.
  • Mattermost v9.11부터 시스템 관리자는 mmctl config set 명령을 사용하여 고급 로깅 JSON 옵션을 구성할 수 있습니다. 예시 슬래시 명령에 대한 자세한 내용은 mmctl config set 문서를 참조하세요.
  • Mattermost v9.3부터 시스템 관리자는 Environment > Logging으로 이동하여 시스템 콘솔에서 멀티라인 JSON을 사용하여 고급 로깅 옵션을 구성할 수 있습니다.
  • 또는 관리자는 멀티라인 JSON 또는 문자열로 이스케이프된 JSON을 사용하여 config.json 파일의 AdvancedLoggingJSON 섹션 내에서 고급 로깅을 구성할 수 있습니다.
  • Mattermost Team Edition 고객은 콘솔이나 파일에 감사 로그 레코드를 출력할 수 있습니다.

고급 로깅 옵션을 구성하여 다음을 수행할 수 있습니다.

  • 인증 문제 해결을 위해 AD/LDAP에 대한 추적 로깅 활성화.
  • 알림을 트리거하는 별도의 모니터링된 파일에서 오류 및 패닉 캡처.
  • 디버그 로그가 사용할 수 있는 디스크 공간 양에 상한을 적용하면서 로그 파일 순환이 있는 별도 파일에서 프로덕션 디버그 및 오류 로그 캡처하여 문제 재현.
  • 사용자 워크플로 중 액세스된 모든 API 엔드포인트 감사.

고급 로그 출력 정의#

아래 예제에서 파일 출력은 일반 텍스트로 ./logs/audit.log에 기록되며 감사 로그 레벨 100-103 및 해당 이벤트를 포함합니다. 이전 로그는 1일 동안 유지되며 한 번에 최대 총 10개의 백업 로그 파일이 유지됩니다. 로그 파일의 최대 크기가 500 MB에 도달하면 gzip을 사용하여 로그가 순환됩니다. 파일에 쓰는 동안 최대 1000개의 감사 레코드를 대기열/버퍼링할 수 있습니다.

v11 이상#

"AdvancedLoggingJSON": {
    "file_1": {
        "type": "file",
        "format": "plain",
        "format_options": {
            "disable_level": false
        },
        "levels": [
            { "id": 100, "name": "audit-api" },
            { "id": 101, "name": "audit-content" },
            { "id": 102, "name": "audit-permissions" },
            { "id": 103, "name": "audit-cli" }
        ],
        "options": {
            "compress": true,
            "filename": "./logs/audit.log",
            "max_age": 1,
            "max_backups": 10,
            "max_size": 500
        },
        "maxqueuesize": 1000
    },
    "file_notifications": {
        "type": "file",
        "format": "json",
        "levels": [
            { "id": 300, "name": "NotificationError" },
            { "id": 301, "name": "NotificationWarn" },
            { "id": 302, "name": "NotificationInfo" },
            { "id": 303, "name": "NotificationDebug" },
            { "id": 304, "name": "NotificationTrace" }
        ],
        "options": {
            "compress": true,
            "filename": "./logs/notifications.log",
            "max_age": 7,
            "max_backups": 5,
            "max_size": 200
        },
        "maxqueuesize": 1000
    }
}

v10.12 이하#

"AdvancedLoggingJSON": {
    "file_1": {
        "type": "file",
        "format": "plain",
        "format_options": {
          "disable_level": false
        },
        "levels": [
            { "id": 100, "name": "audit-api" },
            { "id": 101, "name": "audit-content" },
            { "id": 102, "name": "audit-permissions" },
            { "id": 103, "name": "audit-cli" }
        ],
        "options": {
            "compress": true,
            "filename": "./logs/audit.log",
            "max_age": 1,
            "max_backups": 10,
            "max_size": 500
        },
        "maxqueuesize": 1000
    }
}

멀티라인 JSON 대신 고급 로깅 구성이 다른 구성 파일의 파일 사양(filespec)을 가리키도록 하여 config.json 파일을 깔끔하게 유지할 수 있습니다.

"AdvancedLoggingJSON": "/path/to/audit_log_config.json"

별도의 구성 파일에는 대신 멀티라인 JSON이 포함됩니다.

아래 예제에서 첫 번째 출력은 일반 텍스트로 콘솔에 기록되며 감사 로그 레벨 100-103, 해당 이벤트 및 명령 출력을 포함합니다. 필드 사이에는 파이프 | 구분 기호가 놓입니다.

두 번째 출력은 머신 읽기 가능 JSON 형식의 일반 텍스트로 ./logs/audit.log에 기록되며 감사 로그 레벨 100-103, 해당 이벤트 및 명령 출력을 포함합니다. 이전 로그는 1일 동안 유지되며 한 번에 최대 총 10개의 백업 로그 파일이 유지됩니다. 로그 파일의 최대 크기가 500 MB에 도달하면 GZIP을 사용하여 로그가 순환됩니다. 파일에 쓰는 동안 최대 1000개의 감사 레코드를 대기열/버퍼링할 수 있습니다.

audit_log_config.json 파일의 내용:

v11 이상#

{
    "sample-console": {
        "type": "console",
        "format": "plain",
        "format_options": {
            "delim": " | "
        },
        "levels": [
            {"id": 100, "name": "audit-api"},
            {"id": 101, "name": "audit-content"},
            {"id": 102, "name": "audit-permissions"},
            {"id": 103, "name": "audit-cli"}
        ],
        "options": {
            "out": "stdout"
        },
        "maxqueuesize": 1000
    },
    "sample-file": {
        "type": "file",
        "format": "json",
        "levels": [
            {"id": 100, "name": "audit-api"},
            {"id": 101, "name": "audit-content"},
            {"id": 102, "name": "audit-permissions"},
            {"id": 103, "name": "audit-cli"}
        ],
        "options": {
            "filename": "./logs/audit.log",
            "max_size": 500,
            "max_age": 1,
            "max_backups": 10,
            "compress": true
        },
        "maxqueuesize": 1000
    },
    "notifications-file": {
        "type": "file",
        "format": "json",
        "levels": [
            {"id": 300, "name": "NotificationError"},
            {"id": 301, "name": "NotificationWarn"},
            {"id": 302, "name": "NotificationInfo"},
            {"id": 303, "name": "NotificationDebug"},
            {"id": 304, "name": "NotificationTrace"}
        ],
        "options": {
            "filename": "./logs/notifications.log",
            "max_size": 200,
            "max_age": 7,
            "max_backups": 5,
            "compress": true
        },
        "maxqueuesize": 1000
    }
}

v10.12 이하#

{
    "sample-console": {
        "type": "console",
        "format": "plain",
        "format_options": {
            "delim": " | "
        },
        "levels": [
            {"id": 100, "name": "audit-api"},
            {"id": 101, "name": "audit-content"},
            {"id": 102, "name": "audit-permissions"},
            {"id": 103, "name": "audit-cli"}
        ],
        "options": {
            "out": "stdout"
        },
        "maxqueuesize": 1000
    },
    "sample-file": {
        "type": "file",
        "format": "json",
        "levels": [
            {"id": 100, "name": "audit-api"},
            {"id": 101, "name": "audit-content"},
            {"id": 102, "name": "audit-permissions"},
            {"id": 103, "name": "audit-cli"}
        ],
        "options": {
            "filename": "./logs/audit.log",
            "max_size": 500,
            "max_age": 1,
            "max_backups": 10,
            "compress": true
        },
        "maxqueuesize": 1000
    }
}

대상 타깃 지정#

로그 레코드는 콘솔, 로컬 파일, syslog 및 TCP 소켓 타깃의 조합에 전송될 수 있습니다. 로그 타깃은 추가 소프트웨어를 설치하지 않고 대부분의 로그 집계기 및 기타 로그 분석 도구를 지원하도록 선택되었습니다.

시스템 관리자는 여러 로그 타깃을 정의하여 다음을 수행할 수 있습니다.

  • 중복성을 위해 파일과 로그 집계기에 로그 출력 미러링.
  • 특정 항목을 특정 대상으로 기록. 예를 들어 모든 audit-content 레코드를 다른 레벨과 다른 대상으로 라우팅할 수 있습니다.
  • 관리자는 타깃의 type을 none으로 설정하여 일시적으로 로그 타깃을 비활성화할 수도 있습니다.

형식 기본 설정 구성#

시스템 관리자는 format_options 섹션을 구성하여 타깃별 로그 형식을 제어할 수 있습니다.

일반 텍스트 로그 형식 구성 옵션#

키 유형 설명
disable_timestamp bool 타임스탬프 출력을 비활성화합니다. 기본값은 false입니다.
disable_level bool 레벨 이름 출력을 비활성화합니다. 기본값은 false입니다.
disable_msg bool 메시지 텍스트 출력을 비활성화합니다. 기본값은 false입니다.
disable_fields bool 모든 필드의 출력을 비활성화합니다. 기본값은 false입니다.
disables_stacktrace bool 스택 트레이스 출력을 비활성화합니다. 기본값은 false입니다.
enable_caller string 로그 레코드를 내보낸 파일과 줄 번호의 출력을 활성화합니다. 기본값은 false입니다.
delim string 필드 사이에 놓이는 구분 기호입니다. 기본값은 단일 공백입니다.
min_level_len number 최소 레벨 이름 길이입니다. 레벨 이름이 최소값보다 짧으면 레벨 이름이 공백으로 채워집니다. 기본값은 0입니다.
min_msg_len number 최소 메시지 길이입니다. 메시지 텍스트가 최소값보다 짧으면 메시지 텍스트가 공백으로 채워집니다. 기본값은 0입니다.
timestamp_format string 타임스탬프 형식입니다. 기본값은 RFC3339입니다.
line_end string 대체 줄 끝 문자입니다. 기본값은 n입니다.
enable_color bool 색상 출력을 지원하는 타깃에 대해 색상을 활성화합니다. 기본값은 false입니다.

JSON 로그 형식 구성 옵션#

키 유형 설명
disable_timestamp bool 타임스탬프 출력을 비활성화합니다. 기본값은 false입니다.
disable_level bool 로그 레벨 표시 이름의 출력을 비활성화합니다. 기본값은 false입니다.
disable_msg bool 메시지 텍스트 출력을 비활성화합니다. 기본값은 false입니다.
disable_fields bool 모든 필드의 출력을 비활성화합니다. 기본값은 false입니다.
disables_stacktrace bool 스택 트레이스 출력을 비활성화합니다. 기본값은 false입니다.
enable_caller string 로그 레코드를 내보낸 파일과 줄 번호의 출력을 활성화합니다. 기본값은 false입니다.
timestamp_format string 타임스탬프 형식입니다. 기본값은 RFC3339입니다.

GELF 로그 형식 구성 옵션#

키 유형 설명
hostname string 로그 레코드에서 사용자 정의 호스트 이름을 출력합니다. 생략되면 운영 체제에서 호스트 이름을 가져옵니다.
enable_caller string 로그 레코드를 생성한 파일 및 줄 번호 출력을 활성화합니다. 기본값은 false입니다.

로그 레벨 및 이벤트 구성#

키 유형 설명
id number 로그 레벨의 고유 식별자입니다.
name string 로그 레벨의 이름입니다.
stacktrace bool 스택 추적을 출력합니다. 기본값은 false입니다.
color number

로그 레코드의 일부를 출력하는 데 사용되는 ANSI 색상 코드입니다. 지원되는 값은 다음과 같습니다.

  • 검정: 30
  • 빨강: 31
  • 녹색: 32
  • 노랑: 33
  • 파랑: 34
  • 자홍: 35
  • 청록: 36
  • 흰색: 37

로그 레벨#

다음 로그 레벨은 감사 로그를 지원합니다.

ID 이름 설명
100 audit-api API 이벤트
101 audit-content 콘텐츠 변경. 이 로그 레벨은 다른 감사 로그 레벨보다 훨씬 더 많은 레코드를 생성할 수 있습니다.
102 audit-permissions 권한 변경
103 audit-cli CLI 작업
104 audit-delivery 사용자, 플러그인, 아웃고잉 웹훅으로의 메시지 콘텐츠 전달. 대상 채널은 조건을 충족하는 채널로 한정되며, 다이렉트 메시지 채널과 그룹 메시지 채널은 대상에 포함되지 않습니다. Mattermost v12.0부터 사용할 수 있습니다. 이 로그 레벨은 다른 어떤 감사 로그 레벨보다 훨씬 더 많은 레코드를 생성합니다.
Warning

audit-delivery 로그 레벨은 기본 제공 감사 로그 파일 타깃에 기록되지 않으므로, ExperimentalAuditSettings.FileEnabled를 활성화해도 전달 레코드가 캡처되지 않고 삭제됩니다. 전달 레코드를 캡처하려면 levels 목록에 {"id": 104, "name": "audit-delivery"}를 포함하는 타깃을 ExperimentalAuditSettings.AdvancedLoggingJSON에 추가하세요. 게시물 전달 감사 로깅을 참조하세요.

다음 로그 레벨은 애플리케이션 로그를 지원합니다.

ID 이름 설명
140 LDAPError AD/LDAP 인증 오류
141 LDAPWarn AD/LDAP 인증 경고
142 LDAPInfo AD/LDAP 인증 정보 로그
143 LDAPDebug AD/LDAP 인증 디버그 로그
144 LDAPTrace AD/LDAP 인증 추적 로그. Mattermost v9.3부터 LdapSetings.trace를 대체합니다.

타깃별 설정 구성#

콘솔 타깃 구성 옵션#

콘솔 타깃은 stdout 또는 stderr일 수 있습니다.

  • 표준 출력 스트림 stout은 일반적으로 명령 결과를 사용자에게 출력하는 명령 출력에 사용됩니다.
  • 표준 오류 스트림 sterr은 일반적으로 프로그램 실행 중 발생하는 오류를 출력하는 데 사용됩니다.

파일 타깃 구성 옵션#

파일 타깃은 크기 및/또는 기간으로 트리거되는 순환 및 압축을 지원합니다.

키 유형 설명
filename string 출력 파일의 전체 경로입니다. v11.4부터 MM_LOG_PATH로 지정된 디렉터리 내에 있어야 합니다.
max_size number 로그 파일이 순환되기 전에 증가할 수 있는 최대 크기(메가바이트, MB)입니다. 기본값은 100 MB입니다.
max_age number 파일 이름에 인코딩된 타임스탬프를 기반으로 이전 로그 파일을 유지할 최대 일 수입니다. 기본값은 0으로, 이전 로그 파일 제거를 비활성화합니다.
max_backups number 유지할 이전 로그 파일의 최대 수입니다. 기본값은 0으로, 모든 이전 로그 파일을 유지합니다. 참고: max_age를 구성하면 이 구성 값에 관계없이 이전 로그 파일이 삭제될 수 있습니다.
compress bool gzip을 사용하여 순환된 로그 파일을 압축합니다. 기본값은 false입니다.

Syslog 타깃 구성 옵션#

사용 가능 플랜: Entry, Enterprise, Enterprise Advanced(Professional 제외)

Syslog 타깃은 TLS 전송이 있거나 없는 로컬 및 원격 syslog 서버를 지원합니다. Syslog 타깃 지원에는 Mattermost Enterprise가 필요합니다.

키 유형 설명
host string 로그 레코드를 수신하는 서버의 IP 또는 도메인 이름입니다.
port number 로그 레코드를 수신하는 서버의 포트 번호입니다.
tls bool 로그 레코드를 수신하는 서버에 대한 TLS 연결을 만듭니다. 기본값은 false입니다.
cert string 서버에 TLS 연결을 설정할 때 사용할 인증서 파일(.pem) 경로입니다.
insecure bool Mattermost는 서버에서 제공하는 모든 인증서와 해당 인증서의 모든 호스트 이름을 수락합니다. 기본값은 false입니다. 참고: 테스트 환경에서만 사용해야 하며 운영 환경에서는 사용하지 않아야 합니다.
tag string Syslog 태그 필드입니다.

TCP 타깃 구성 옵션#

사용 가능 플랜: Entry, Enterprise, Enterprise Advanced(Professional 제외)

TCP 소켓 타깃은 IP 주소 또는 도메인 이름, 포트 및 선택적 TLS 인증서로 구성할 수 있습니다. TCP 소켓 타깃 지원에는 Mattermost Enterprise가 필요합니다. 시작점으로 사용할 구성의 샘플 JSON 파일을 다운로드할 수 있습니다.

키 유형 설명
host string 로그 레코드를 수신하는 서버의 IP 또는 도메인 이름입니다.
port number 로그 레코드를 수신하는 서버의 포트 번호입니다.
tls bool 로그 레코드를 수신하는 서버에 대한 TLS 연결을 만듭니다. 기본값은 false입니다.
cert string 서버에 TLS 연결을 설정할 때 사용할 인증서 파일(.pem) 경로입니다.
insecure bool Mattermost는 서버에서 제공하는 모든 인증서와 해당 인증서의 모든 호스트 이름을 수락합니다. 기본값은 false입니다. 참고: 테스트 환경에서만 사용해야 하며 운영 환경에서는 사용하지 않아야 합니다.

클러스터 작업 실행 디버그 메시지#

사용 가능 플랜: Enterprise, Enterprise Advanced

Mattermost v11.4부터 고가용성 배포에서 특정 반복 작업에 대한 클러스터 작업 실행 동작을 시스템 관리자가 이해하는 데 도움이 되는 디버그 레벨 로그 메시지를 사용할 수 있습니다.

이러한 디버그 메시지는 다음 반복 작업에만 적용됩니다.

  • 예약된 게시물
  • 게시물 알림 설정
  • 다른 용무 중 상태 초기화
Important
  • 이러한 디버그 메시지는 Elasticsearch 인덱싱, SAML 동기화, LDAP 동기화, 데이터 보존 또는 컴플라이언스 내보내기와 같은 다른 작업 유형에는 사용할 수 없습니다. 다른 작업 유형에 대한 이러한 디버그 메시지의 부재는 작업 실행에 문제가 있음을 나타내지 않습니다.
  • 이러한 메시지는 디버그 로깅이 활성화된 경우에만 표시됩니다. 자세한 내용은 디버그 로깅을 활성화하는 방법은 무엇입니까?를 참조하세요.
  • 클러스터 배포에서는 리더 노드만 이러한 반복 작업을 실행합니다. 비리더 노드는 이러한 특정 작업을 건너뛰고 이것이 예상된 동작임을 나타내는 디버그 메시지를 기록합니다.

작업 시작에 대한 디버그 메시지#

비리더 노드가 시작될 때 이러한 특정 반복 작업에 대한 초기화를 건너뛰고 다음 디버그 메시지 중 하나를 기록합니다.

  • Skipping scheduled posts job startup since this is not the leader node
  • Skipping unset DND status job startup since this is not the leader node
  • Skipping post reminder job startup since this is not the leader node

이러한 메시지는 정상 작동을 나타냅니다. 고가용성 클러스터에서 이러한 반복 작업은 중복 실행을 방지하기 위해 리더 노드에서만 실행되어야 합니다.

리더십 변경에 대한 디버그 메시지#

이러한 반복 작업이 실행되는 동안 노드가 리더십 상태를 잃으면 실행 중인 작업을 취소하고 다음을 기록합니다.

  • This is no longer leader node. Cancelling the [job name] task

여기서 [job name]은 scheduled posts, DND status reset 또는 post reminder 중 하나입니다.

이는 클러스터가 리더 선출을 올바르게 수행하고 있음을 나타냅니다. 새 리더 노드가 이러한 반복 작업의 실행을 인계받습니다.

클러스터 작업 디버그 메시지를 사용한 문제 해결#

반복 작업(예약된 게시물, 게시물 알림 설정 또는 다른 용무 중 상태 초기화)이 특정 노드에서 실행되지 않는 이유를 조사하는 경우 다음을 수행하세요.

  1. 디버그 로깅이 아직 활성화되지 않은 경우 활성화합니다.
  2. 위에 나열된 디버그 메시지에 대한 로그를 확인합니다.
  3. 이러한 메시지가 표시되면 노드가 비리더로 올바르게 식별되어 예상대로 동작하는 것입니다.
  4. 이러한 반복 작업은 대신 리더 노드에서 실행됩니다.
Note

이러한 디버그 메시지는 반복 작업에만 적용됩니다. 다른 작업 유형(Elasticsearch 인덱싱, SAML 동기화, LDAP 동기화, 데이터 보존, 컴플라이언스 내보내기)에는 다른 로깅 메커니즘이 적용됩니다. 다른 작업 유형에 대한 이러한 특정 디버그 메시지의 부재는 예상된 것이며 문제가 있음을 나타내지 않습니다.

리더 선출 및 클러스터 구성에 대한 자세한 내용은 고가용성 클러스터 기반 배포를 참조하세요.


자주 묻는 질문#

디버그 로깅을 활성화하는 방법은 무엇입니까?#

Mattermost 시스템 관리자로서 System Console > Environment > Logging > File Log Level로 이동하여 DEBUG로 설정합니다. 그런 다음 변경 사항을 저장합니다.

Mattermost 시스템 관리자가 디버그 로깅을 활성화하거나 비활성화할 수 있는 System Console 페이지 스크린샷.

디버그 로깅은 로그 파일을 상당히 확장시킬 수 있으며 서버 성능에 부정적인 영향을 미칠 수 있습니다. 서버 로그를 주의 깊게 모니터링하거나, 일시적으로만 활성화하거나, 개발 환경에서만 사용하고 운영 환경에서는 사용하지 마세요.

Mattermost에 시스템 auditd 외에 감사 로그가 있습니까?#

예. 자세한 내용은 감사 로깅 문서를 참조하세요.

syslog가 타깃으로 구성된 경우 데이터를 내보내는 주체(즉, Mattermost 앱 노드)의 IP 주소가 포함됩니까?#

예. 이는 syslog 데몬(수신자)의 기능입니다. 일반적으로 모든 로그 줄 앞에는 타임스탬프와 데이터를 보내는 노드의 호스트 이름이 붙습니다. 예를 들어 로그 줄은 Nov 28 10:56:59 tower kernel: [1072437.431123] ....로 시작하며, 여기서 tower는 해당 로그 줄을 생성한 서버의 호스트 이름입니다.

감사 로그가 활성화되면 관리자가 감사 로그 설정을 비활성화하거나 수정하는 이벤트를 감사 로깅이 추적할 수 있습니까?#

예, 감사 로그가 구성된 방식에 따라 다릅니다. 감사 로그 구성은 REST API, mmctl, System Console, 디스크의 파일 및 환경 변수를 통해 지정할 수 있습니다. REST API 또는 System Console을 통해 변경이 이루어지면 감사 레코드가 있습니다. 그러나 Mattermost 서버는 구성 파일이나 환경 변수를 통한 변경 사항을 캡처할 수 없습니다.

감사가 비활성화될 때 서비스 중지/업데이트에 대한 정보가 서버 로그에 표시됩니까?#

예. REST API, mmctl 또는 System Console을 통해 감사 로그 구성을 업데이트할 때 감사 로그의 마지막 이벤트는 서버의 구성을 업데이트하는 관리자 사용자에 관한 것이어야 합니다. 이를 통해 보안 팀이 시스템에서 어떤 작업이 수행되었고 누가 수행했는지 파악하는 데 도움이 됩니다.

수신 웹훅 세부 정보를 로그에서 생략하는 방법은 무엇입니까?#

enable-webhook-debugging 참조

최대 로그 필드 크기를 조정하는 방법은 무엇입니까?#

maximum-field-size 참조

환경 변수를 통해 고급 로깅을 구성하는 방법은 무엇입니까?#

고급 로깅을 구성하는 데 MM_LOGSETTINGS_ADVANCEDLOGGINGJSON 환경 변수가 사용됩니다. jq를 사용하여 JSON 페이로드를 생성할 수 있습니다. 예:

export MM_LOGSETTINGS_ADVANCEDLOGGINGJSON=$(jq -n -c '{
    "console1": {
        "Type": "console",
        "Format": "json",
        "Levels": [
            {"ID": 5, "Name": "debug", "Stacktrace": false},
            {"ID": 4, "Name": "info", "Stacktrace": false, "color": 36},
            {"ID": 3, "Name": "warn", "Stacktrace": false},
            {"ID": 2, "Name": "error", "Stacktrace": true, "color": 31},
            {"ID": 1, "Name": "fatal", "Stacktrace": true, "color": 31},
            {"ID": 0, "Name": "panic", "Stacktrace": true, "color": 31},
            {"ID": 10, "Name": "stdlog", "Stacktrace": false}
        ],
        "Options": {
            "Out": "stdout"
        },
        "MaxQueueSize": 1000
    }
}')

LDAP에 대한 추적 로깅을 활성화하는 방법은 무엇입니까?#

다음 JSON 구성을 LDAP에 대한 추적 로깅 활성화의 시작점으로 사용하세요.

{
    "ldap-file": {
        "type": "file",
        "format": "plain",
        "levels": [
            {
                "id": 144,
                "name": "LDAPTrace"
            },
            {
                "id": 143,
                "name": "LDAPDebug"
            },
            {
                "id": 142,
                "name": "LDAPInfo"
            },
            {
                "id": 141,
                "name": "LDAPWarn",
                "stacktrace": true
            },
            {
                "id": 140,
                "name": "LDAPError",
                "stacktrace": true
            }
        ],
        "options": {
            "filename": "./logs/ldap.log",
            "max_size": 100,
            "max_age": 14,
            "max_backups": 3,
            "compress": false
        },
        "maxqueuesize": 1000
    }
}

Mattermost에 중앙 집중식 로깅을 구성하는 방법은 무엇입니까?#

Mattermost는 Grafana Loki와 OpenTelemetry Collector를 사용하여 중앙 집중식 로깅을 권장합니다. 로그 집계 설정 방법, 유용한 LogQL 쿼리 및 Grafana 대시보드에 대한 자세한 내용은 중앙 집중식 로깅을 위한 Grafana Loki 배포 가이드를 참조하세요.