📰 Laman Utama 🔒 Log Masuk Admin
Jul 8, 2026 ⏰ 8 min read

📊 Pengurusan Log Linux: Menguasai rsyslog, logrotate & Logging Berpusat

Setiap sysadmin telah berada di sana. Pelayan mati pada pukul 3 pagi. Anda SSH masuk, dan naluri pertama anda adalah untuk menyemak log. Tetapi di mana anda bermula? Jika pengurusan log anda kucar-kacir — fail bertaburan di mana-mana, gigabait log tidak diputar memakan ruang cakera dan tiada pandangan terpusat — anda menjadi buta.

Pengurusan log ialah salah satu kemahiran asas yang memisahkan sysadmin purata daripada yang hebat. Apabila dilakukan dengan betul, ia mengubah penyelesaian masalah daripada pemburuan yang terburu-buru kepada penyiasatan berkaedah. Dalam panduan ini, saya akan melalui tiga tonggak pengurusan log Linux: mengkonfigurasi rsyslog untuk pengelogan berstruktur, menjinakkan penggunaan cakera dengan logrotate dan menyediakan pelayan log berpusat untuk persekitaran berbilang hos.

Mengapa Pengurusan Log Penting

Sebelum menyelam ke dalam konfigurasi, mari kita bincangkan mengapa ini patut diberi perhatian anda. Persediaan pembalakan yang diselenggara dengan baik:

  • Menjimatkan masa semasa kejadian — log berstruktur dengan cap masa yang konsisten bermakna anda menghabiskan beberapa minit mencari punca dan bukannya berjam-jam
  • Menghalang kecemasan penuh cakera — log tidak diputar ialah salah satu punca paling biasa kegagalan "Tiada ruang tersisa pada peranti" pada pelayan pengeluaran
  • Mendayakan pemantauan proaktif — log terpusat membolehkan anda melihat corak (kegagalan SSH berulang, kebocoran memori secara beransur-ansur) sebelum ia menjadi terputus
  • Menyokong pematuhan — jejak audit, log akses dan dasar pengekalan tidak boleh dirundingkan untuk SOC 2, PCI-DSS dan ISO 27001

Pelaburan dalam menetapkan ini sekali membayar dividen setiap kali sesuatu pecah.

Bahagian 1: Menguasai Konfigurasi rsyslog

Rsyslog ialah daemon pengelogan lalai pada kebanyakan pengedaran Linux moden (RHEL 7+, Ubuntu 16.04+, Debian 8+). Ia merupakan peningkatan ketara berbanding syslogd lama — menyokong TCP, TLS, pengelogan berstruktur, penapisan lanjutan dan prestasi pemprosesan tinggi.

Memahami Struktur Konfigurasi

Fail konfigurasi utama ialah `/etc/rsyslog.conf`, tetapi amalan terbaik ialah menggugurkan peraturan tersuai ke dalam `/etc/rsyslog.d/`. Berikut ialah anatomi peraturan:

```
facility.priority /var/log/target.log
```

Kemudahan mengkategorikan sumber: `auth`, `authpriv`, `cron`, `daemon`, `kern`, `lpr`, `mail`, `news`, `syslog`, `user`, `uucp`, `local0` melalui `local7`.

Keutamaan mengawal keterukan: `nyahpepijat`, `maklumat`, `notis`, `amaran`, `err`, `crit`, `alert`, `emerg`.

Titik (`.`) bermaksud "keutamaan ini dan ke atas". Tanda sama (`.=`) bermaksud "keutamaan ini".

Peraturan rsyslog praktikal

Berikut ialah peraturan yang saya gunakan pada setiap pelayan pengeluaran:

```bash

/etc/rsyslog.d/10-apps.conf

Log pengesahan berasingan (SSH, sudo, percubaan log masuk)

authpriv.* /var/log/auth.log

Log cron berasingan

cron.* /var/log/cron.log

Tangkap mesej kernel

kern.* /var/log/kern.log

Segala-galanya pergi ke syslog

.;authpriv,cron,kern.none /var/log/syslog ```

Untuk pelayan web trafik tinggi, memisahkan log akses Apache dan Nginx melalui rsyslog juga bernilai:

```bash

/etc/rsyslog.d/20-web.conf

Jika nginx atau apache log melalui syslog

jika $programname == 'nginx' maka /var/log/nginx/error.log & berhenti jika $programname == 'httpd' maka /var/log/httpd/error.log & berhenti ```

Arahan `& stop` memberitahu rsyslog untuk menghentikan pemprosesan selepas menulis, menghalang mesej daripada juga pergi ke syslog.

Mendayakan Pengelogan Jauh (Penerima)

Untuk menjadikan pelayan anda sebagai pengumpul log berpusat:

```bash

/etc/rsyslog.d/30-remote-receiver.conf

Dengar pada port TCP 514

modul(load="imtcp") input(type="imtcp" port="514")

Simpan log jauh mengikut nama hos

$template RemoteLogs,"/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log" . ?Log Jauh ```

Kemudian mulakan semula rsyslog:

```bash
systemctl mulakan semula rsyslog
```

Jangan lupa untuk membuka port firewall:

```bash
firewall-cmd --permanent --add-port=514/tcp
firewall-cmd --reload
```

Menghantar Log ke Pelayan Pusat (Penghantar)

Pada setiap mesin pelanggan, tambahkan:

```bash

/etc/rsyslog.d/40-send-to-central.conf

Gunakan @ untuk UDP, @@ untuk TCP

. @@192.168.1.100:514 ```

Gantikan `192.168.1.100` dengan IP pelayan log pusat anda. `@` berganda (`@@`) bermaksud TCP, yang lebih dipercayai daripada UDP untuk penghantaran log.

Bahagian 2: Menjinakkan Pertumbuhan Log dengan logrotate

Balak tumbuh. Tidak ditandai, mereka menggunakan semua ruang cakera yang ada. Logrotate ialah alat yang memastikan mereka terkawal.

Anatomi Konfigurasi logrotate

Konfigurasi utama: `/etc/logrotate.conf`. Peraturan tersuai dimasukkan ke dalam `/etc/logrotate.d/`.

Berikut ialah konfigurasi standard saya untuk log aplikasi:

```bash

/etc/logrotate.d/custom-apps

/var/log/app/*.log {
setiap hari
berputar 14
memampatkan
delaycompress
missingok
notifempty
buat 0640 www-data www-data
skrip kongsi
postrotate
systemctl reload rsyslog > /dev/null 2>&1 || benar
skrip akhir
}
```

Izinkan saya memecahkan setiap arahan:

ArahanApa yang dilakukannya
`harian`Putar sekali sehari (alternatif: `mingguan`, `bulanan`, `saiz 100M`)
`putar 14`Simpan 14 fail yang diputar (sejarah 14 hari)
`mampat`Gzip log lama untuk menjimatkan ruang
`delaycompress`Langkau pemampatan pada fail paling terkini yang diputar (berguna untuk tailing)
`missingok`Jangan ralat jika fail log tidak wujud
`notifempty`Langkau putaran jika log kosong
`buat`Cipta semula fail log dengan kebenaran yang ditetapkan
`skrip kongsi`Jalankan postrotate sekali, bukan sekali bagi setiap fail log
`postrotate`Perintah untuk dijalankan selepas putaran

Putaran Berasaskan Saiz

Untuk log volum tinggi yang berkembang dengan cepat, gunakan putaran berasaskan saiz dan bukannya berasaskan masa:

```bash
/var/log/nginx/access.log {
saiz 100M
putar 20
memampatkan
delaycompress
missingok
notifempty
buat 0640 www-data adm
postrotate
systemctl muat semula nginx > /dev/null 2>&1 || benar
skrip akhir
}
```

Ini berputar setiap kali fail mencapai 100 MB, mengekalkan 20 putaran tanpa mengira kalendar. Untuk tapak e-dagang yang sibuk semasa musim puncak, ini menghalang trafik sehari daripada mengisi /var.

Menguji logrotate Tanpa Menunggu

Logrotate biasanya berjalan setiap hari melalui cron (`/etc/cron.daily/logrotate`), tetapi anda boleh menguji dengan segera:

```bash

Larian kering — menunjukkan apa yang akan berlaku


logrotate -d /etc/logrotate.d/custom-apps

Lari paksa

logrotate -f /etc/logrotate.d/custom-apps

Paksa dengan keluaran verbose

logrotate -vf /etc/logrotate.d/custom-apps ```

Sentiasa jalankan larian kering (`-d`) dahulu pada konfigurasi baharu untuk menangkap ralat sintaks sebelum ia memecahkan putaran pengeluaran.

Menyahpepijat Isu logrotate

Jika log tidak berputar, semak:

```bash

Semak status putaran terakhir


cat /var/lib/logrotate/logrotate.status | apl tersuai grep

Jalankan logrotate dalam mod nyahpepijat

logrotate -d /etc/logrotate.d/custom-apps 2>&1 | ralat grep -i

Sahkan sintaks konfigurasi

logrotate -d /etc/logrotate.d/custom-apps > /dev/null 2>&1 && echo "Config OK" || echo "Ralat Konfigurasi" ```

Isu biasa: laluan fail yang salah, direktori hilang, ralat kebenaran pada arahan `create` atau skrip postrotate yang keluar bukan sifar.

Bahagian 3: Membina Seni Bina Pembalakan Berpusat

Pengelogan berpusat menyelesaikan masalah asas: apabila anda mempunyai 10, 20 atau 100 pelayan, SSHing ke setiap satu untuk menyemak log tidak boleh berskala. Berikut ialah cara membina persediaan pembalakan terpusat yang praktikal.

Gambaran Keseluruhan Seni Bina

```
[Pelayan Web] ──TCP 514──┐
[Pelayan DB] ──TCP 514──┤──> [Pengumpul Log] ──> /var/log/remote/{hostname}/{program}.log
[Pelayan Apl] ──TCP 514──┘
```

Pengumpul log menerima log daripada semua pelanggan melalui rsyslog TCP, menyimpannya disusun mengikut nama hos dan program, dan memutarkannya dengan logrotate.

Konfigurasi Pengumpul Log (Penuh)

Pada pelayan log pusat:

```bash

/etc/rsyslog.conf (bahagian yang berkaitan)

Dayakan penerimaan TCP

modul(load="imtcp") input(type="imtcp" port="514")

Templat untuk log jauh — disusun mengikut nama hos dan program

$template RemoteLogs,"/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log"

Gunakan templat pada semua mesej jauh, tetapi kecualikan log setempat

:source, !isequal, "127.0.0.1" ?RemoteLogs :source, !isequal, "localhost" ?RemoteLogs & berhenti ```

Putar Log untuk Log Jauh

```bash

/etc/logrotate.d/remote-logs

/var/log/remote//.log {
setiap hari
putar 30
memampatkan
delaycompress
missingok
notifempty
skrip kongsi
postrotate
systemctl reload rsyslog > /dev/null 2>&1 || benar
skrip akhir
}
```

Pertimbangan Keselamatan

Beberapa pelajaran yang dipelajari dengan susah payah:

  1. Gunakan TCP, bukan UDP — UDP menjatuhkan paket di bawah beban. TCP menjamin penghantaran pada kos overhed yang lebih tinggi sedikit.
  1. Firewall port log — Hanya benarkan sumber log (julat IP dalaman anda). 514/TCP terbuka di internet awam meminta masalah.
  1. Pantau volum log — Penurunan mendadak dalam volum log biasanya bermakna pelanggan telah kehilangan sambungan. Lonjakan secara tiba-tiba boleh bermakna ada sesuatu yang rosak atau diserang.
  1. Sulitkan dalam transit — Untuk persekitaran pengeluaran, gunakan rsyslog yang disulitkan TLS:

```bash

Pada pelayan (penerima)


modul(load="imtcp")
input(type="imtcp" port="6514" TLSCertFile="/etc/ssl/log-server.crt" TLSKeyFile="/etc/ssl/log-server.key")

Pada klien (penghantar)

. @@log-collector.example.com:6514 ```

Menyatukan Semuanya: Senarai Semak Permulaan Pantas

Berikut ialah senarai semak praktikal untuk menyediakan pengurusan log pada pelayan baharu:

  1. Pasang rsyslog — `apt install rsyslog` atau `yum install rsyslog`
  2. Konfigurasikan pemisahan log — cipta peraturan `/etc/rsyslog.d/` untuk auth, cron, kernel
  3. Konfigurasikan logrotate — tambahkan entri `/etc/logrotate.d/` untuk log aplikasi anda
  4. Uji logrotate — jalankan `logrotate -d` untuk mengesahkan konfigurasi anda
  5. Sediakan pengelogan pusat — konfigurasikan pelayan pengumpul dan arahkan pelanggan kepadanya
  6. Firewall port log — hadkan TCP 514 kepada julat IP yang dipercayai
  7. Pantau ruang cakera — tambah tugas cron yang memberi amaran apabila /var/log melebihi 80%
  8. Dasar pengekalan dokumen — tahu berapa lama anda menyimpan log (14 hari? 30? 90?)

Kesimpulan

Pengurusan log yang baik tidak berlaku secara tidak sengaja — ia memerlukan persediaan yang disengajakan dan perhatian berterusan. Tetapi usaha adalah minimum berbanding dengan hasil. Persediaan rsyslog dan logrotate yang dikonfigurasikan dengan baik bermakna anda tidak akan lagi menghadapi kecemasan tengah malam yang tertanya-tanya fail log mana yang mengandungi jawapannya, dan anda tidak akan pernah menerangkan kepada pengurus anda mengapa /var kehabisan ruang kerana log Apache yang berusia empat bulan.

Mulakan dengan asas: asingkan log anda mengikut kemudahan, putarkannya setiap hari, simpan sejarah 14 hari, dan jika anda mengurus lebih daripada segelintir pelayan, sediakan pengelogan berpusat. Diri masa depan anda — yang menyahpepijat insiden pada 3 PG — akan berterima kasih kepada anda.

Sysadmin yang bijak membuat keputusan termaklum sebelum keadaan rosak.

Infografik: Panduan Pengurusan Log Linux

Infografik: Panduan Pengurusan Log Linux

← Back to Homepage

💬 0 Comments

☕ Support Eismar Tech Hub

🌎 International

Beli kopi

Credit Card / PayPal accepted

💳 Local (Malaysia)

Touch N Go QR

Touch 'n Go / DuitNow QR