InfoGrab Docs

Mattermost 로깅

요약

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

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 등)을 거부합니다.
    • 구성 유효성 검사는 시작 시 및 설정 업데이트 시 발생하여 잘못된 로그 레벨 조합을 방지합니다.

콘솔 로그#

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

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

파일 로그#

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

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

Tip

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

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

로깅 출력 정의#

Environment > Logging > Advanced Logging으로 이동하거나 config.json 파일을 직접 편집하여 System Console에서 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
    }
}

#

감사 로깅#

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

Mattermost에서 고급 감사 로깅을 활성화하고 사용자 정의하여 Mattermost REST API 또는 mmctl에 대한 사용자 액세스와 같이 Mattermost 내에서 수행된 활동 및 이벤트를 기록할 수 있습니다. 감사 로그는 호출자의 지연 시간을 줄이기 위해 비동기적으로 기록되며 일반 로깅과 별도로 저장됩니다. 타겟에 쓸 수 없는 짧은 시간 동안 감사 레코드는 구성 가능한 최대 레코드 한도로 메모리에 버퍼링됩니다. 일반적인 감사 레코드 볼륨을 기준으로 버퍼를 채우는 데 수 분이 걸릴 수 있습니다. 그 후 레코드는 삭제되고 레코드 삭제 이벤트가 로그에 기록됩니다.

Note

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

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

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

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

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

Note
    • Mattermost v10.11부터 클라우드 배포에는 셀프 호스팅 배포에서는 사용할 수 없는 인증서 기반 감사 로깅 기능이 포함됩니다.
    • 클라우드 기반 배포는 다음 셀프 호스팅 감사 로깅 기본값을 사용합니다:
    • FileEnabled: false
    • FileMaxSizeMB: 100
    • FileMaxAgeDays: 0 (제한 없음)
    • FileMaxBackups: 0 (모두 유지)
    • FileCompress: false
    • FileMaxQueueSize: 1000
    • 클라우드 배포는 로컬 파일 기반 감사 로깅을 구성할 수 없으며 모든 파일 관련 설정이 숨겨집니다.

#

로그 경로 제한#

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 루트 디렉터리 외부에 있기 때문에 실패합니다.

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


고급 로깅#

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

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

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

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

고급 로그 출력 정의#

아래 예제에서 파일 출력은 일반 텍스트로 ./logs/audit.log에 기록되며 모든 감사 로그 레벨 및 이벤트를 포함합니다. 이전 로그는 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
    }
}</code></pre>
<div class="tabs-container" data-tabs><div class="tabs-nav"><button class="tab-button active" data-tab-index="0">Filespec</button>

고급 로깅 구성은 config.json 파일을 깔끔하게 유지하기 위해 멀티라인 JSON 대신 다른 구성 파일에 대한 filespec을 가리킬 수 있습니다:

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

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

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

두 번째 출력은 머신 읽기 가능 JSON 형식의 일반 텍스트로 ``./logs/audit.log``에 기록되며 모든 감사 로그 레벨, 이벤트 및 명령 출력을 포함합니다. 이전 로그는 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
}
}</code></pre>
<h3 id="대상-타겟-지정">대상 타겟 지정</h3>
<p>로그 레코드는 <a href="#console-target-configuration-options">콘솔</a>, <a href="#file-target-configuration-options">로컬 파일</a>, <a href="#syslog-target-configuration-options">syslog</a> 및 <a href="#tcp-target-configuration-options">TCP 소켓</a> 타겟의 조합에 전송될 수 있습니다. 로그 타겟은 추가 소프트웨어를 설치하지 않고 대부분의 로그 집계기 및 기타 로그 분석 도구를 지원하도록 선택되었습니다.

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

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

형식 기본 설정 구성#

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

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

유형설명
disable_timestampbool타임스탬프 출력을 비활성화합니다. 기본값은 false입니다.
disable_levelbool레벨 이름 출력을 비활성화합니다. 기본값은 false입니다.
disable_msgbool메시지 텍스트 출력을 비활성화합니다. 기본값은 false입니다.
disable_fieldsbool모든 필드의 출력을 비활성화합니다. 기본값은 false입니다.
disables_stacktracebool스택 추적 출력을 비활성화합니다. 기본값은 false입니다.
enable_callerstring로그 레코드를 생성한 파일 및 줄 번호 출력을 활성화합니다. 기본값은 false입니다.
delimstring필드 사이에 놓이는 구분 기호입니다. 기본값은 단일 공백입니다.
min_level_lennumber최소 레벨 이름 길이입니다. 레벨 이름이 최소값보다 짧으면 레벨 이름이 공백으로 채워집니다. 기본값은 0입니다.
min_msg_lennumber최소 메시지 길이입니다. 메시지 텍스트가 최소값보다 짧으면 메시지 텍스트가 공백으로 채워집니다. 기본값은 0입니다.
timestamp_formatstring타임스탬프 형식입니다. 기본값은 RFC3339입니다.
line_endstring대체 줄 끝 문자입니다. 기본값은 n입니다.
enable_colorbool색상 출력을 지원하는 타겟에 대해 색상을 활성화합니다. 기본값은 false입니다.

JSON 로그 형식 구성 옵션#

유형설명
disable_timestampbool타임스탬프 출력을 비활성화합니다. 기본값은 false입니다.
disable_levelbool로그 레벨 표시 이름의 출력을 비활성화합니다. 기본값은 false입니다.
disable_msgbool메시지 텍스트 출력을 비활성화합니다. 기본값은 false입니다.
disable_fieldsbool모든 필드의 출력을 비활성화합니다. 기본값은 false입니다.
disables_stacktracebool스택 추적 출력을 비활성화합니다. 기본값은 false입니다.
enable_callerstring로그 레코드를 생성한 파일 및 줄 번호 출력을 활성화합니다. 기본값은 false입니다.
timestamp_formatstring타임스탬프 형식입니다. 기본값은 RFC3339입니다.

GELF 로그 형식 구성 옵션#

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

로그 레벨 및 이벤트 구성#

유형설명
idnumber로그 레벨의 고유 식별자입니다.
namestring로그 레벨의 이름입니다.
stacktracebool스택 추적을 출력합니다. 기본값은 false입니다.
colornumber로그 레코드의 일부를 출력하는 데 사용되는 ANSI 색상 코드. 지원되는 값은 다음과 같습니다: - 검정: 30 - 빨강: 31 - 녹색: 32 - 노랑: 33 - 파랑: 34 - 자홍: 35 - 청록: 36 - 흰색: 37

로그 레벨#

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

ID이름설명
100audit-apiAPI 이벤트
101audit-content내용 변경. 이 로그 레벨은 다른 감사 로그 레벨보다 훨씬 더 많은 레코드 를 생성할 수 있습니다.
102audit-permissions권한 변경
103audit-cliCLI 작업

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

ID이름설명
140LDAPErrorAD/LDAP 인증 오류
141LDAPWarnAD/LDAP 인증 경고
142LDAPInfoAD/LDAP 인증 정보 로그
143LDAPDebugAD/LDAP 인증 디버그 로그
144LDAPTraceAD/LDAP 인증 추적 로그. Mattermost v9.3부터 LdapSetings.trace를 대체합니다.

타겟별 설정 구성#

콘솔 타겟 구성 옵션#

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

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

파일 타겟 구성 옵션#

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

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

Syslog 타겟 구성 옵션#

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

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

TCP 타겟 구성 옵션#

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

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

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

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로 설정합니다. 그런 다음 변경 사항을 저장합니다.

A screenshot of the System Console page where Mattermost system admins can enable and disable debug logging.

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

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 페이로드를 생성할 수 있습니다. 예:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

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 등)을 거부합니다.
    • 구성 유효성 검사는 시작 시 및 설정 업데이트 시 발생하여 잘못된 로그 레벨 조합을 방지합니다.

콘솔 로그#

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

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

파일 로그#

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

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

Tip

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

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

로깅 출력 정의#

Environment > Logging > Advanced Logging으로 이동하거나 config.json 파일을 직접 편집하여 System Console에서 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
    }
}

#

감사 로깅#

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

Mattermost에서 고급 감사 로깅을 활성화하고 사용자 정의하여 Mattermost REST API 또는 mmctl에 대한 사용자 액세스와 같이 Mattermost 내에서 수행된 활동 및 이벤트를 기록할 수 있습니다. 감사 로그는 호출자의 지연 시간을 줄이기 위해 비동기적으로 기록되며 일반 로깅과 별도로 저장됩니다. 타겟에 쓸 수 없는 짧은 시간 동안 감사 레코드는 구성 가능한 최대 레코드 한도로 메모리에 버퍼링됩니다. 일반적인 감사 레코드 볼륨을 기준으로 버퍼를 채우는 데 수 분이 걸릴 수 있습니다. 그 후 레코드는 삭제되고 레코드 삭제 이벤트가 로그에 기록됩니다.

Note

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

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

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

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

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

Note
    • Mattermost v10.11부터 클라우드 배포에는 셀프 호스팅 배포에서는 사용할 수 없는 인증서 기반 감사 로깅 기능이 포함됩니다.
    • 클라우드 기반 배포는 다음 셀프 호스팅 감사 로깅 기본값을 사용합니다:
    • FileEnabled: false
    • FileMaxSizeMB: 100
    • FileMaxAgeDays: 0 (제한 없음)
    • FileMaxBackups: 0 (모두 유지)
    • FileCompress: false
    • FileMaxQueueSize: 1000
    • 클라우드 배포는 로컬 파일 기반 감사 로깅을 구성할 수 없으며 모든 파일 관련 설정이 숨겨집니다.

#

로그 경로 제한#

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 루트 디렉터리 외부에 있기 때문에 실패합니다.

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


고급 로깅#

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

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

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

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

고급 로그 출력 정의#

아래 예제에서 파일 출력은 일반 텍스트로 ./logs/audit.log에 기록되며 모든 감사 로그 레벨 및 이벤트를 포함합니다. 이전 로그는 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
    }
}</code></pre>
<div class="tabs-container" data-tabs><div class="tabs-nav"><button class="tab-button active" data-tab-index="0">Filespec</button>

고급 로깅 구성은 config.json 파일을 깔끔하게 유지하기 위해 멀티라인 JSON 대신 다른 구성 파일에 대한 filespec을 가리킬 수 있습니다:

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

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

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

두 번째 출력은 머신 읽기 가능 JSON 형식의 일반 텍스트로 ``./logs/audit.log``에 기록되며 모든 감사 로그 레벨, 이벤트 및 명령 출력을 포함합니다. 이전 로그는 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
}
}</code></pre>
<h3 id="대상-타겟-지정">대상 타겟 지정</h3>
<p>로그 레코드는 <a href="#console-target-configuration-options">콘솔</a>, <a href="#file-target-configuration-options">로컬 파일</a>, <a href="#syslog-target-configuration-options">syslog</a> 및 <a href="#tcp-target-configuration-options">TCP 소켓</a> 타겟의 조합에 전송될 수 있습니다. 로그 타겟은 추가 소프트웨어를 설치하지 않고 대부분의 로그 집계기 및 기타 로그 분석 도구를 지원하도록 선택되었습니다.

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

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

형식 기본 설정 구성#

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

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

유형설명
disable_timestampbool타임스탬프 출력을 비활성화합니다. 기본값은 false입니다.
disable_levelbool레벨 이름 출력을 비활성화합니다. 기본값은 false입니다.
disable_msgbool메시지 텍스트 출력을 비활성화합니다. 기본값은 false입니다.
disable_fieldsbool모든 필드의 출력을 비활성화합니다. 기본값은 false입니다.
disables_stacktracebool스택 추적 출력을 비활성화합니다. 기본값은 false입니다.
enable_callerstring로그 레코드를 생성한 파일 및 줄 번호 출력을 활성화합니다. 기본값은 false입니다.
delimstring필드 사이에 놓이는 구분 기호입니다. 기본값은 단일 공백입니다.
min_level_lennumber최소 레벨 이름 길이입니다. 레벨 이름이 최소값보다 짧으면 레벨 이름이 공백으로 채워집니다. 기본값은 0입니다.
min_msg_lennumber최소 메시지 길이입니다. 메시지 텍스트가 최소값보다 짧으면 메시지 텍스트가 공백으로 채워집니다. 기본값은 0입니다.
timestamp_formatstring타임스탬프 형식입니다. 기본값은 RFC3339입니다.
line_endstring대체 줄 끝 문자입니다. 기본값은 n입니다.
enable_colorbool색상 출력을 지원하는 타겟에 대해 색상을 활성화합니다. 기본값은 false입니다.

JSON 로그 형식 구성 옵션#

유형설명
disable_timestampbool타임스탬프 출력을 비활성화합니다. 기본값은 false입니다.
disable_levelbool로그 레벨 표시 이름의 출력을 비활성화합니다. 기본값은 false입니다.
disable_msgbool메시지 텍스트 출력을 비활성화합니다. 기본값은 false입니다.
disable_fieldsbool모든 필드의 출력을 비활성화합니다. 기본값은 false입니다.
disables_stacktracebool스택 추적 출력을 비활성화합니다. 기본값은 false입니다.
enable_callerstring로그 레코드를 생성한 파일 및 줄 번호 출력을 활성화합니다. 기본값은 false입니다.
timestamp_formatstring타임스탬프 형식입니다. 기본값은 RFC3339입니다.

GELF 로그 형식 구성 옵션#

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

로그 레벨 및 이벤트 구성#

유형설명
idnumber로그 레벨의 고유 식별자입니다.
namestring로그 레벨의 이름입니다.
stacktracebool스택 추적을 출력합니다. 기본값은 false입니다.
colornumber로그 레코드의 일부를 출력하는 데 사용되는 ANSI 색상 코드. 지원되는 값은 다음과 같습니다: - 검정: 30 - 빨강: 31 - 녹색: 32 - 노랑: 33 - 파랑: 34 - 자홍: 35 - 청록: 36 - 흰색: 37

로그 레벨#

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

ID이름설명
100audit-apiAPI 이벤트
101audit-content내용 변경. 이 로그 레벨은 다른 감사 로그 레벨보다 훨씬 더 많은 레코드 를 생성할 수 있습니다.
102audit-permissions권한 변경
103audit-cliCLI 작업

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

ID이름설명
140LDAPErrorAD/LDAP 인증 오류
141LDAPWarnAD/LDAP 인증 경고
142LDAPInfoAD/LDAP 인증 정보 로그
143LDAPDebugAD/LDAP 인증 디버그 로그
144LDAPTraceAD/LDAP 인증 추적 로그. Mattermost v9.3부터 LdapSetings.trace를 대체합니다.

타겟별 설정 구성#

콘솔 타겟 구성 옵션#

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

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

파일 타겟 구성 옵션#

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

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

Syslog 타겟 구성 옵션#

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

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

TCP 타겟 구성 옵션#

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

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

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

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로 설정합니다. 그런 다음 변경 사항을 저장합니다.

A screenshot of the System Console page where Mattermost system admins can enable and disable debug logging.

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

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 페이로드를 생성할 수 있습니다. 예:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

다음 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 배포 가이드를 참조하세요.