Bagikan melalui


tentang_Logging_Non-Windows

Deskripsi singkat

PowerShell mencatat operasi internal dari mesin, penyedia, dan cmdlet.

Deskripsi panjang

PowerShell mencatat detail operasi PowerShell, seperti memulai dan menghentikan mesin dan memulai dan menghentikan penyedia. Ini juga mencatat detail tentang perintah PowerShell.

Untuk informasi tentang pengelogan di Windows PowerShell 5.1, lihat about_Logging.

Lokasi log PowerShell bergantung pada platform target.

  • Di Linux, PowerShell mencatat ke jurnal systemd yang dapat diteruskan ke server syslog . Untuk informasi selengkapnya, lihat halaman man untuk distribusi Linux Anda.
  • Di macOS, sistem pengelogan terpadu Apple digunakan. Untuk informasi selengkapnya, lihat dokumentasi pengembang Apple tentang pencatatan.

PowerShell mendukung konfigurasi dua kategori pengelogan:

  • Pencatatan log modul - Rekam peristiwa eksekusi pipeline untuk anggota modul tertentu. Pengelogan modul harus diaktifkan untuk sesi dan modul tertentu. Untuk informasi selengkapnya tentang mengonfigurasi pengelogan ini, lihat about_PowerShell_Config.

    Jika pengelogan modul diaktifkan melalui konfigurasi, Anda dapat mengaktifkan dan menonaktifkan pengelogan untuk modul tertentu dalam sesi dengan mengatur nilai LogPipelineExecutionDetails properti modul.

    Misalnya, untuk mengaktifkan pengelogan modul untuk modul PSReadLine:

    $psrl = Get-Module PSReadLine
    $psrl.LogPipelineExecutionDetails = $true
    Get-Module PSReadLine | Select-Object Name, LogPipelineExecutionDetails
    
    Name       LogPipelineExecutionDetails
    ----       ---------------------------
    PSReadLine                        True
    
  • Pengelogan blok skrip - Rekam pemrosesan perintah, blok skrip, fungsi, dan skrip baik dipanggil secara interaktif, atau melalui otomatisasi.

    Saat Anda mengaktifkan Pembuatan Log Blok Skrip, PowerShell merekam konten semua blokir skrip yang diprosesnya. Setelah diaktifkan, sesi PowerShell baru mencatat informasi ini.

    Nota

    Disarankan untuk mengaktifkan Pencatatan Peristiwa Terproteksi, saat menggunakan Pengelogan Blok Skrip untuk apa pun selain tujuan diagnostik. Untuk informasi selengkapnya, lihat about_PowerShell_Config.

Mengonfigurasi pengelogan di Linux atau macOS

Konfigurasi untuk pengelogan di Linux dan macOS disimpan dalam file powershell.config.json. File adalah file JSON yang berada di direktori PowerShell. Jika file konfigurasi ini tidak ada, Anda harus membuatnya untuk mengubah pengaturan default. Setiap penginstalan PowerShell menggunakan salinan file ini sendiri.

Secara default, PowerShell memungkinkan pengelogan Informational ke saluran Operational. Anda dapat mengubah konfigurasi jika memerlukan output log lebih lanjut, seperti rinci atau mengaktifkan output log analitik.

Kode berikut adalah contoh konfigurasi:

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

Berikut ini adalah daftar properti untuk mengonfigurasi pengelogan PowerShell. Jika properti tidak tercantum dalam konfigurasi, PowerShell menggunakan nilai default.

  • LogIdentitas
    • Nilai: <string name>, powershell
    • Deskripsi: Nama yang digunakan saat pengelogan. Identitas default adalah powershell. Nilai ini dapat digunakan untuk membedakan antara dua instans penginstalan PowerShell, seperti rilis dan versi beta. Nilai ini juga digunakan untuk mengalihkan output log ke file terpisah.
  • LogChannels
    • Nilai: Operational, Analytic
    • Deskripsi: Saluran yang akan diaktifkan. Pisahkan nilai dengan koma saat menentukan lebih dari satu. Nilai defaultnya adalah Operational.
  • LogLevel
    • Nilai: Always, Critical, Error, Warning, Informational, Verbose, Debug
    • Deskripsi: Tentukan satu nilai. Nilai tercantum dalam urutan verbositas yang meningkat. Nilai yang Anda pilih mengaktifkan dirinya sendiri dan semua nilai sebelum itu. Nilai defaultnya adalah Informational.
  • LogKeywords
    • Nilai: Runspace, Pipeline, Protocol, Transport, Host, Cmdlets, Serializer, Session, ManagedPlugin
    • Deskripsi: Kata kunci menyediakan kemampuan untuk membatasi pengelogan ke komponen tertentu dalam PowerShell. Secara default, semua kata kunci diaktifkan dan mengubah nilai ini hanya berguna untuk pemecahan masalah khusus.
  • PowerShellPolicies
    • Deskripsi: Pengaturan PowerShellPolicies berisi opsi ModuleLogging, ProtectedEventLogging, dan ScriptBlockLogging. Untuk informasi selengkapnya, lihat pengaturan konfigurasi umum .

Menampilkan data log PowerShell dalam jurnal di Linux

PowerShell mencatat ke jurnal systemd menggunakan daemon journald pada distribusi Linux seperti Ubuntu dan Red Hat Enterprise Linux (RHEL).

Daemon yang diberi jurnal menyimpan pesan log dalam format biner. Gunakan utilitas journalctl untuk mengkueri log jurnal untuk entri PowerShell.

journalctl --grep powershell

Daemon yang diberi jurnal dapat meneruskan pesan log ke server Protokol Pengelogan Sistem (syslog). Aktifkan opsi dalam file konfigurasi jurnal jika Anda ingin menggunakan syslog pengelogan pada sistem Linux Anda. Ini adalah konfigurasi default untuk banyak distribusi Linux.

Menampilkan data log PowerShell di syslog di Linux

Gunakan manajer paket untuk distribusi Linux Anda untuk menginstal server syslog seperti rsyslog jika Anda ingin menggunakan pengelogan syslog pada sistem Linux Anda. Beberapa distribusi Linux seperti Ubuntu sudah terpasang rsyslog.

Protokol syslog menyimpan pesan log dalam format teks standar. Anda dapat menggunakan utilitas pemrosesan teks apa pun untuk mengkueri atau menampilkan konten syslog .

Secara default, syslog menulis entri log ke lokasi berikut:

  • Pada distribusi berbasis Debian, termasuk Ubuntu: /var/log/syslog
  • Pada distribusi berbasis RHEL: /var/log/messages

Contoh berikut menggunakan perintah untuk mengkueri entri syslog PowerShell di Ubuntu.

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

Format pesan Syslog

Pesan Syslog memiliki format berikut:

TIMESTAMP MACHINENAME powershell[PID]: (COMMITID:TID:CID)
  [EVENTID:TASK.OPCODE.LEVEL] MESSAGE
  • TIMESTAMP - Tanggal/waktu saat entri log diproduksi.
  • MACHINENAME - Nama sistem tempat log diproduksi.
  • PID - ID proses proses yang menulis entri log.
  • COMMITID - ID atau tag git commit yang digunakan untuk memproduksi build.
  • TID - ID utas yang menulis entri log.
  • CID - Pengidentifikasi saluran heksadesimal dari entri log.
    • 0x10 = Operasional
    • 0x11 = Analitik
  • EVENTID - Pengidentifikasi peristiwa entri log.
  • TASK - Pengidentifikasi tugas untuk entri peristiwa
  • OPCODE - Opcode untuk entri acara
  • LEVEL - Tingkat log untuk pencatatan kejadian
  • MESSAGE - Pesan yang terkait dengan entri peristiwa

EVENTID , TASK, OPCODE, dan LEVEL adalah nilai yang sama seperti yang digunakan saat masuk ke log peristiwa Windows.

Menulis pesan log PowerShell ke file terpisah

Dimungkinkan juga untuk mengalihkan entri log PowerShell ke file terpisah. Saat entri log PowerShell dialihkan ke file terpisah, entri log PowerShell tidak lagi dicatat ke file syslog default.

Langkah-langkah berikut mengonfigurasi entri log PowerShell di Ubuntu untuk menulis ke file log bernama powershell.log.

  1. Buat file konfigurasi (conf) untuk konfigurasi log PowerShell di direktori /etc/rsyslog.d menggunakan editor file teks seperti nano. Awali nama file dengan angka yang kurang dari default. Misalnya, 40-powershell.conf di mana defaultnya adalah 50-default.conf.

    sudo nano /etc/rsyslog.d/40-powershell.conf
    
  2. Tambahkan informasi berikut ke file 40-powershell.conf:

    :syslogtag, contains, "powershell[" /var/log/powershell.log
    & stop
    
  3. Verifikasi bahwa /etc/rsyslog.conf memiliki pernyataan 'include' untuk memasukkan file baru. Pernyataan umum yang mencakupnya mungkin ada, seperti:

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

    Jika tidak, Anda harus menambahkan pernyataan 'include' secara manual.

  4. Pastikan atribut dan izin diatur dengan tepat.

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

    Jika file 40-powershell.conf Anda memiliki kepemilikan atau izin yang berbeda, selesaikan langkah-langkah berikut:

    1. Atur kepemilikan ke root.

      sudo chown root:root /etc/rsyslog.d/40-powershell.conf
      
    2. Atur izin akses: root memiliki izin baca/tulis, pengguna memiliki izin baca.

      sudo chmod 644 /etc/rsyslog.d/40-powershell.conf
      
  5. Mulai ulang layanan rsyslog .

    sudo systemctl restart rsyslog.service
    
  6. Jalankan pwsh untuk menghasilkan informasi PowerShell untuk dicatat.

    pwsh
    

    Nota

    File tidak dibuat sampai layanan rsyslog dimulai ulang dan PowerShell menghasilkan informasi untuk dicatat.

  7. Lakukan kueri pada file powershell.log untuk memverifikasi apakah informasi PowerShell dicatat ke file baru.

    cat /var/log/powershell.log
    

Menampilkan data log PowerShell di macOS

PowerShell mencatat ke sistem pengelogan terpadu Apple, fitur macOS yang memungkinkan pengumpulan dan penyimpanan log sistem dan aplikasi dalam satu lokasi terpusat.

Sistem pengelogan terpadu Apple menyimpan pesan log dalam format biner. Anda harus menggunakan alat log untuk mengkueri sistem pengelogan terpadu untuk peristiwa log PowerShell. Peristiwa log PowerShell tidak muncul di aplikasi Konsol di macOS. Aplikasi konsol dirancang untuk pengelogan berbasis syslog yang lebih lama yang mendahului sistem pengelogan terpadu.

Menampilkan data log PowerShell dari baris perintah di macOS

Untuk melihat data log PowerShell dari baris perintah di macOS, gunakan perintah di Terminal atau aplikasi host shell lainnya. Perintah ini dapat dijalankan dariPowerShell , Z Shell, atau Bash.

Dalam contoh berikut, perintah log digunakan untuk menampilkan data log pada sistem Anda saat terjadi secara realtime. Parameter proses memfilter data log hanya untuk proses . Jika Anda memiliki lebih dari satu instans berjalan, parameter proses juga menerima ID proses sebagai nilainya. Parameter tingkat menunjukkan pesan di tingkat yang ditentukan dan di bawahnya.

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

Perintah log show dapat digunakan untuk mengekspor item log. Perintah log show menyediakan opsi untuk mengekspor item N terakhir, item sejak waktu tertentu, atau item dalam rentang waktu tertentu.

Misalnya, perintah berikut mengekspor item sejak 9am on April 5, 2022:

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

Untuk informasi selengkapnya, jalankan log show --help untuk melihat bantuan untuk perintah log show.

Anda juga dapat menghasilkan data log dalam format JSON, yang memungkinkan Anda mengonversi data peristiwa ke objek PowerShell. Contoh berikut menghasilkan peristiwa dalam format JSON. Cmdlet ConvertFrom-Json digunakan untuk mengonversi data JSON ke objek PowerShell disimpan dalam variabel $logRecord.

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

Anda mungkin juga ingin mempertimbangkan untuk menyimpan log ke lokasi yang lebih aman seperti Security Information and Event Management (SIEM) agregator. Dengan menggunakan Microsoft Defender for Cloud Apps, Anda dapat menyiapkan SIEM di Azure. Untuk informasi selengkapnya, lihat integrasi SIEM Generik.

Mode dan tingkat data log PowerShell di macOS

Secara default, subsistem PowerShell mencatat pesan tingkat info ke memori (mode) dan pesan tingkat default ke disk (persistensi) di macOS. Perilaku ini dapat diubah untuk mengaktifkan mode dan tingkat pengelogan yang berbeda menggunakan perintah log config.

Contoh berikut memungkinkan pengelogan dan persistensi tingkat info untuk subsistem PowerShell:

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

Gunakan parameter reset untuk mengembalikan pengaturan log ke default untuk subsistem PowerShell:

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

Lihat juga

  • Untuk syslog Linux dan informasi rsyslog.conf, lihat halaman lokal komputer Linux
  • Untuk informasi pengelogan macOS, lihat dokumentasi pengembang Apple tentang pengelogan
  • Untuk Windows, lihat tentang_Logging_Windows
  • integrasi SIEM generik