다음을 통해 공유


about_Logging_Non-Windows

간단한 설명

PowerShell은 엔진, 공급자 및 cmdlet에서 내부 작업을 기록합니다.

자세한 설명

PowerShell은 엔진 시작 및 중지, 공급자 시작 및 중지와 같은 PowerShell 작업의 세부 정보를 기록합니다. 또한 PowerShell 명령에 대한 세부 정보도 기록합니다.

Windows PowerShell 5.1의 로깅에 대한 자세한 내용은 about_Logging 참조하세요.

PowerShell 로그의 위치는 대상 플랫폼에 따라 달라집니다.

  • Linux에서 PowerShell은 syslog 서버로 전달할 수 있는 시스템 저널로그 합니다. 자세한 내용은 Linux 배포에 man 대한 페이지를 참조하세요.
  • macOS에서는 Apple의 통합 로깅 시스템이 사용됩니다. 자세한 내용은 로깅에 대한 Apple의 개발자 설명서를 참조 하세요.

PowerShell은 두 가지 범주의 로깅 구성을 지원합니다.

  • 모듈 로깅 - 지정된 모듈의 멤버에 대한 파이프라인 실행 이벤트를 기록합니다. 세션 및 특정 모듈 모두에 대해 모듈 로깅을 사용하도록 설정해야 합니다. 이 로깅을 구성하는 방법에 대한 자세한 내용은 about_PowerShell_Config 참조하세요.

    구성을 통해 모듈 로깅을 사용하는 경우 모듈의 LogPipelineExecutionDetails 속성 값을 설정하여 세션에서 특정 모듈에 대한 로깅을 사용하거나 사용하지 않도록 설정할 수 있습니다 .

    예를 들어 PSReadLine 모듈에 대한 모듈 로깅을 사용하도록 설정하려면 다음을 수행합니다.

    $psrl = Get-Module PSReadLine
    $psrl.LogPipelineExecutionDetails = $true
    Get-Module PSReadLine | Select-Object Name, LogPipelineExecutionDetails
    
    Name       LogPipelineExecutionDetails
    ----       ---------------------------
    PSReadLine                        True
    
  • 스크립트 블록 로깅 - 명령, 스크립트 블록, 함수 및 스크립트의 처리를 대화형으로 호출하든 자동화를 통해 호출하든 기록합니다.

    스크립트 블록 로깅을 사용하도록 설정하면 PowerShell은 처리하는 모든 스크립트 블록의 콘텐츠를 기록합니다. 사용하도록 설정되면 모든 새 PowerShell 세션이 이 정보를 기록합니다.

    참고 항목

    진단 목적 이외의 다른 용도로 스크립트 블록 로깅을 사용하는 경우 보호된 이벤트 로깅을 사용하도록 설정하는 것이 좋습니다. 자세한 내용은 about_PowerShell_Config 참조하세요.

Linux 또는 macOS에서 로깅 구성

Linux 및 macOS에 대한 로깅 구성은 파일에 저장됩니다 powershell.config.json . 이 powershell.config.json 파일은 형식의 파일입니다. 이 구성 파일이 없는 경우 기본 설정을 변경하려면 구성 파일을 만들어야 합니다. PowerShell을 설치할 때마다 이 파일의 자체 복사본이 사용됩니다.

기본적으로 PowerShell은 채널에 로깅을 Informational 사용하도록 설정합니다Operational. 자세한 정보 표시 또는 분석 로그 출력 사용과 같은 추가 로그 출력이 필요한 경우 구성을 변경할 수 있습니다.

다음 코드는 예제 구성입니다.

{
    "ModuleLogging": {
        "EnableModuleLogging": false,
        "ModuleNames": [
            "PSReadLine",
            "PowerShellGet"
        ]
    },
    "ScriptBlockLogging": {
        "EnableScriptBlockInvocationLogging": true,
        "EnableScriptBlockLogging": true
    },
    "LogLevel": "verbose"
}

다음은 PowerShell 로깅을 구성하기 위한 속성 목록입니다. 속성이 구성에 나열되지 않은 경우 PowerShell은 기본값을 사용합니다.

  • LogIdentity
    • 값: <string name>, powershell
    • 설명: 로깅할 때 사용할 이름입니다. 기본 ID는 .입니다 powershell. 이 값을 사용하여 릴리스 및 베타 버전과 같은 PowerShell 설치의 두 인스턴스 간의 차이를 알 수 있습니다. 이 값은 로그 출력을 별도의 파일로 리디렉션하는 데도 사용됩니다.
  • LogChannels
    • 값: Operational, Analytic
    • 설명: 사용할 채널입니다. 둘 이상을 지정할 때 값을 쉼표로 구분합니다. 기본값은 Operational입니다.
  • LogLevel
    • 값: Always,Critical, Error, WarningInformational, VerboseDebug
    • 설명: 단일 값을 지정합니다. 값은 자세한 정보 표시 순서로 나열됩니다. 선택한 값은 자체 및 그 앞에 있는 모든 값을 사용하도록 설정합니다. 기본값은 Informational입니다.
  • LogKeywords
    • 값: Runspace,Pipeline, ,ProtocolTransportHost, CmdletsSerializer, , SessionManagedPlugin
    • 설명: 키워드는 PowerShell 내의 특정 구성 요소로 로깅을 제한하는 기능을 제공합니다. 기본적으로 모든 키워드를 사용하도록 설정하고 이 값을 변경하면 특수한 문제 해결에만 유용합니다.
  • PowerShellPolicies
    • 설명: PowerShellPolicies 설정에는 ModuleLogging, ProtectedEventLoggingScriptBlockLogging 옵션이 포함 됩니다. 자세한 내용은 일반 구성 설정을 참조 하세요.

Linux에서 저널된 PowerShell 로그 데이터 보기

PowerShell은 Ubuntu 및 RHEL(Red Hat Enterprise Linux)과 같은 Linux 배포판에서 저널된 디먼을 사용하여 시스템화된 저널에 로그합니다.

저널된 디먼은 로그 메시지를 이진 형식으로 저장합니다. 유틸리티를 journalctl 사용하여 PowerShell 항목에 대한 저널 로그를 쿼리합니다.

journalctl --grep powershell

저널된 디먼은 로그 메시지를 시스템 로깅 프로토콜(syslog) 서버로 전달할 수 있습니다. ForwardToSysLog Linux 시스템에서 syslog 로깅을 사용하려는 경우 저널된 구성 파일에서 옵션을 /etc/systemd/journald.conf사용하도록 설정합니다. 이는 많은 Linux 배포에 대한 기본 구성입니다.

Linux의 syslog에서 PowerShell 로그 데이터 보기

Linux 배포용 패키지 관리자를 사용하여 Linux 시스템에서 syslog 로깅을 사용하려는 경우 rsyslog와 같은 syslog 서버를 설치합니다. Ubuntu 사전 설치 rsyslog와 같은 일부 Linux 배포

syslog 프로토콜은 로그 메시지를 표준화된 텍스트 형식으로 저장합니다. 텍스트 처리 유틸리티를 사용하여 syslog 콘텐츠를 쿼리하거나 볼 수 있습니다.

기본적으로 syslog 는 로그 항목을 다음 위치에 씁니다.

  • Ubuntu를 비롯한 Debian 기반 배포에서: /var/log/syslog
  • RHEL 기반 배포에서: /var/log/messages

다음 예제에서는 명령을 사용하여 cat Ubuntu에서 PowerShell syslog 항목을 쿼리합니다.

cat /var/log/syslog | grep -i powershell

Syslog 메시지 형식

Syslog 메시지에는 다음과 같은 형식이 있습니다.

TIMESTAMP MACHINENAME powershell[PID]: (COMMITID:TID:CID)
  [EVENTID:TASK.OPCODE.LEVEL] MESSAGE
  • TIMESTAMP - 로그 항목이 생성된 날짜/시간입니다.
  • MACHINENAME - 로그가 생성된 시스템의 이름입니다.
  • PID - 로그 항목을 작성한 프로세스의 프로세스 ID입니다.
  • COMMITID - 빌드를 생성하는 데 사용되는 git 커밋 ID 또는 태그입니다.
  • TID - 로그 항목을 작성한 스레드의 스레드 ID입니다.
  • CID - 로그 항목의 16진수 채널 식별자입니다.
    • 0x10 = 작동
    • 0x11 = 분석
  • EVENTID - 로그 항목의 이벤트 식별자입니다.
  • TASK - 이벤트 항목의 작업 식별자입니다.
  • OPCODE - 이벤트 항목에 대한 opcode
  • LEVEL - 이벤트 항목의 로그 수준
  • MESSAGE - 이벤트 항목과 연결된 메시지

EVENTID, TASK, OPCODE 및 LEVEL은 Windows 이벤트 로그에 로깅할 때 사용되는 값과 동일합니다.

별도의 파일에 PowerShell 로그 메시지 쓰기

PowerShell 로그 항목을 별도의 파일로 리디렉션할 수도 있습니다. PowerShell 로그 항목이 별도의 파일로 리디렉션되면 더 이상 기본 syslog 파일에 기록되지 않습니다.

다음 단계에서는 Ubuntu에서 PowerShell 로그 항목을 구성하여 이름이 지정된 powershell.log로그 파일에 씁니다.

  1. 와 같은 conf텍스트 파일 편집기를 사용하여 디렉터리에서 /etc/rsyslog.d PowerShell 로그 구성에 대한 구성nano() 파일을 만듭니다. 파일 이름 앞에 기본값보다 작은 숫자로 접두사를 지정합니다. 예를 들어 기본 40-powershell.conf 값은 .입니다 50-default.conf.

    sudo nano /etc/rsyslog.d/40-powershell.conf
    
  2. 파일에 다음 정보를 추가합니다 40-powershell.conf .

    :syslogtag, contains, "powershell[" /var/log/powershell.log
    & stop
    
  3. 새 파일에 대한 include 문이 있는지 /etc/rsyslog.conf 확인합니다. 다음과 같은 제네릭 문이 있을 수 있습니다.

    $IncludeConfig /etc/rsyslog.d/*.conf
    

    그렇지 않은 경우 include 문을 수동으로 추가해야 합니다.

  4. 특성 및 사용 권한이 적절하게 설정되었는지 확인합니다.

    ls -l /etc/rsyslog.d/40-powershell.conf
    
    -rw-r--r-- 1 root root   67 Nov 28 12:51 40-powershell.conf
    

    40-powershell.conf 파일에 다른 소유권 또는 권한이 있는 경우 다음 단계를 완료합니다.

    1. 소유권을 루트설정합니다.

      sudo chown root:root /etc/rsyslog.d/40-powershell.conf
      
    2. 액세스 권한 설정: 루트 에 읽기/쓰기가 있고, 사용자가 읽었습니다.

      sudo chmod 644 /etc/rsyslog.d/40-powershell.conf
      
  5. rsyslog 서비스를 다시 시작합니다.

    sudo systemctl restart rsyslog.service
    
  6. 실행 pwsh 하여 로그할 PowerShell 정보를 생성합니다.

    pwsh
    

    참고 항목

    rsyslog /var/log/powershell.log 서비스가 다시 시작되고 PowerShell에서 로그할 정보를 생성할 때까지 파일이 만들어지지 않습니다.

  7. powershell.log 파일을 쿼리하여 PowerShell 정보가 새 파일에 기록되고 있는지 확인합니다.

    cat /var/log/powershell.log
    

macOS에서 PowerShell 로그 데이터 보기

PowerShell은 단일 중앙 집중식 위치에서 시스템 및 애플리케이션 로그의 수집 및 스토리지를 허용하는 macOS 기능인 Apple의 통합 로깅 시스템에 로그합니다.

Apple의 통합 로깅 시스템은 로그 메시지를 이진 형식으로 저장합니다. 이 도구를 사용하여 log PowerShell 로그 이벤트에 대한 통합 로깅 시스템을 쿼리해야 합니다. PowerShell 로그 이벤트는 macOS의 콘솔 애플리케이션에 표시되지 않습니다. 콘솔 앱은 통합 로깅 시스템보다 이전의 이전 syslog 기반 로깅을 위해 설계되었습니다.

macOS의 명령줄에서 PowerShell 로그 데이터 보기

macOS의 명령줄에서 PowerShell 로그 데이터를 보려면 터미널log명령을 사용합니다. 이러한 명령은 PowerShell, Z Shell 또는 Bash에서 실행할 수 있습니다.

다음 예제 log 에서 명령은 실시간으로 발생하는 로그 데이터를 시스템에 표시하는 데 사용됩니다. 프로세스 매개 변수는 프로세스에 대해서만 로그 데이터를 필터링합니다pwsh. 둘 이상의 실행 인스턴스 pwsh 가 있는 경우 프로세스 매개 변수는 프로세스 ID도 해당 값으로 허용합니다. 수준 매개 변수는 지정된 수준 이하의 메시지를 표시합니다.

log stream --predicate "subsystem == 'com.microsoft.powershell'" --level info

log show 명령을 사용하여 로그 항목을 내보낼 수 있습니다. 이 log show 명령은 마지막 N 항목, 지정된 시간 이후의 항목 또는 지정된 시간 범위 내의 항목을 내보내는 옵션을 제공합니다.

예를 들어 다음 명령은 다음 이후 9am on April 5, 2022항목을 내보냅니다.

log show --start "2022-04-05 09:00:00" --predicate "subsystem == 'com.microsoft.powershell'"

자세한 내용은 명령을 실행 log show --help 하여 명령에 대한 도움말을 확인합니다 log show .

이벤트 데이터를 PowerShell 개체로 변환할 수 있는 로그 데이터를 JSON 형식으로 출력할 수도 있습니다. 다음 예제에서는 이벤트를 JSON 형식으로 출력합니다. cmdlet ConvertFrom-Json 은 JSON 데이터를 PowerShell 개체로 변환하는 데 사용되며 변수에 $logRecord 저장됩니다.

log show --predicate "subsystem == 'com.microsoft.powershell'" --style json |
    ConvertFrom-Json | Set-Variable logRecord

또한 SIEM(보안 정보 및 이벤트 관리) 집계와 같은 보다 안전한 위치에 로그를 저장하는 것이 좋습니다. 클라우드용 Microsoft Defender 앱을 사용하여 Azure에서 SIEM을 설정할 수 있습니다. 자세한 내용은 일반 SIEM 통합을 참조 하세요.

macOS의 PowerShell 로그 데이터 모드 및 수준

기본적으로 PowerShell 하위 시스템은 정보 수준 메시지를 메모리(모드) 및 기본 수준 메시지를 macOS의 디스크(지속성)에 기록합니다. 이 동작은 명령을 사용하여 log config 다른 모드 및 로깅 수준을 사용하도록 변경할 수 있습니다.

다음 예제에서는 PowerShell 하위 시스템에 대한 정보 수준 로깅 및 지속성을 사용하도록 설정합니다.

sudo log config --subsystem com.microsoft.powershell --mode level:info,persist:info

재설정 매개 변수를 사용하여 로그 설정을 PowerShell 하위 시스템의 기본값으로 되돌려 놓습니다.

sudo log config --subsystem com.microsoft.powershell --reset

참고 항목

  • Linux syslogrsyslog.conf 정보는 Linux 컴퓨터의 로컬 man 페이지를 참조하세요.
  • macOS 로깅 정보는 로깅 에 대한 Apple의 개발자 설명서를 참조 하세요.
  • Windows의 경우 about_Logging_Windows 참조하세요 .
  • 일반 SIEM 통합