如何在 Ubuntu 20.04 上使用 Rsyslog 設置中央日誌服務器

系統日誌 是一個用於日誌處理的開源實用程序。 它允許在中央存儲庫中記錄來自不同類型系統的數據。 Rsyslog 是一種 Syslog 協議,具有更多擴展、功能和優點。

是什麼讓 rsyslog 如此強大? 當應用有限的處理時,Rsyslog 每秒可以向本地目的地傳送超過一百萬條消息。

在本教程中,我們學習如何安裝和配置 日誌Ubuntu 20.04.

Rsyslog 功能

系統日誌 2004 年出現。它擴展了 syslog 協議,具有新功能:

  • RELP 協議支持
  • 緩衝操作支持
  • 偵聽 TCP/UDP 連接(帶限制端口、IP)
  • 支持加載大量模塊(對於 example 模塊支持 RELP 協議)
  • 支持丟棄包含特殊配置規則的消息

在 Rsyslog 中,配置文件與 Syslog 相同。 這只是意味著您可以將 syslog.conf 文件直接複製到 rsyslog.conf 中,它會起作用。

什麼是日誌和系統日誌?

在我們進入配置過程本身之前,讓我們先看看日誌是用來做什麼的? 日誌信息確實可以幫助您了解系統上究竟發生了什麼,或者幕後到底發生了什麼。

讓我給你一個 example:如果您的電腦突然出現毛躁或崩潰甚至系統停機,以及更多有用的信息,您在錯誤消息顯示時無法以通常的方式看到這些信息。

如果您知道如何正確使用日誌,它們可以為您提供有關係統本身的診斷信息的許多功能和好處。

默認情況下,Linux 使用 syslog 守護程序記錄有關係統運行方式的日誌,然後將這些日誌放入中央存儲庫: /var/日誌 我們可以在那裡檢查和調查它們。
簡單來說,從內核事件到用戶操作的所有內容都由 Linux 記錄,讓您幾乎可以看到在您的 PC 或服務器上執行的任何操作。

在 Linux 文件系統中,有一個專門用來存放日誌的目錄,叫做 /var/日誌. 該目錄包含來自操作系統本身的所有日誌,例如:服務或系統上運行的各種應用程序。

讓我們看看在全新的 Linux ubuntu 20.04 上日誌的目錄和結構是什麼樣的。

列表/var/日誌

存儲不同類型日誌的目錄是:

/變量/日誌/系統日誌 – 存儲所有啟動消息、應用程序啟動消息等。實際上存儲所有全局系統日誌。
/var/log/cron – Cron 作業基本上是在系統中創建的計劃和自動化任務,定期和重複運行。 您可以看到此日誌目錄將存儲什麼。
/var/log/kern.log – 它存儲內核日誌。 不管它們是什麼日誌。 事件日誌、錯誤或警告日誌。
/var/log/auth.log – 身份驗證日誌
/var/log.boot.log – 系統啟動日誌
/var/log/mysql.d – Mysql 日誌
/var/log/httpd —— Apache 日誌目錄
/var/log/maillog – 郵件服務器日誌

在 Ubuntu 20.04 上設置 Rsyslog 集中式日誌服務器

在簡要概述了什麼是日誌、Syslog 以及 rsyslog 的位置之後,讓我們繼續進行配置過程本身。

先決條件

  • 兩台運行 Ubuntu 20.04 的服務器
  • 靜態 IP 地址: example 需要在Rsyslog服務器機器上配置192.168.0.101,在Rsyslog客戶端機器上配置192.168.0.102

Ubuntu 20.04 系統已安裝 rsyslog 默認情況下 它帶有標準系統包。

您可以檢查它是否正在運行:

$ sudo systemctl status rsyslog
● rsyslog.service - System Logging Service
Loaded: loaded (/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2021-03-22 21:16:34 UTC; 12h ago
TriggeredBy: ● syslog.socket
Docs: man:rsyslogd(8)
https://www.rsyslog.com/doc/
Main PID: 566 (rsyslogd)
Tasks: 4 (limit: 2281)
Memory: 2.7M
CGroup: /system.slice/rsyslog.service
└─566 /usr/sbin/rsyslogd -n -iNONE

運行以下命令檢查當前安裝的 Rsyslog 版本:

$ rsyslogd -v

輸出:

rsyslogd 8.2001.0(又名 2020.01)編譯為:平台:x86_64-pc-linux-gnu 平台(lsb_release -d):FEATURE_REGEXP:是 GSSAPI Kerberos 5 支持:是 FEATURE_DEBUG(調試構建,支持慢速代碼 2 位): : 是 支持 64 位原子操作: 是內存分配器: 系統默認運行時檢測(慢代碼): 無 uuid 支持: 是 systemd 支持: 是 配置文件: /etc/rsyslog.conf PID 文件: /run/rsyslogd.pid 位數在 RainerScript 整數中:64

如果未安裝或運行,請使用以下命令安裝 rsyslog:

$ sudo apt-get 更新
$ sudo apt-get 安裝 rsyslog

現在是時候去 配置文件 文件,取消註釋並更改一些行以在服務器模式下運行 rsyslog 服務:

$ sudo nano /etc/rsyslog.conf

取消註釋這四行啟用 udp 和 tcp 端口綁定:

# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")

# provides TCP syslog reception
module(load="imtcp")
input(type="imtcp" port="514")

我們需要添加的下一步是創建一個新模板。 我們需要創建一個新的模板來接收遠程消息。 模板將向 rsyslog 服務器提供有關如何存儲傳入 syslog 消息的說明。

筆記: 在之前添加模板 全球指令 部分:

$template remote-incoming-logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?remote-incoming-logs
& ~

上面一行表示接收到的日誌將被處理並存儲在目錄 /var/log/ 中。 您可以在 /etc/rsyslog.conf 文件中定義 rsyslog 日誌的位置。

文件名包含 %HOSTNAME% 和 %PROGRAMNAME% 變量代表生成日誌消息的客戶端機器和客戶端程序名稱。

Rsyslog 的配置文件 Rsyslog 的配置文件

Save 這比重新啟動 rsyslog 服務:

$ sudo systemctl restart rsyslog

確認 rsyslog 服務正在偵聽配置的端口:

$ ss -tunelp | grep 514
udp UNCONN 0 0 0.0.0.0:514 0.0.0.0:* ino:33591 sk:1 <->
udp UNCONN 0 0 [::]:514 [::]:* ino:33592 sk:4 v6only:1 <->
tcp LISTEN 0 25 0.0.0.0:514 0.0.0.0:* ino:33595 sk:7 <->
tcp LISTEN 0 25 [::]:514 [::]:* ino:33596 sk:9 v6only:1 <->

如果您可能有 ufw 防火牆服務,則需要允許 rsyslog 防火牆端口規則:

sudo ufw allow 514/tcp
sudo ufw allow 514/udp

驗證配置, 運行以下命令:

sudo rsyslogd -N1 -f /etc/rsyslog.conf

在客戶端配置 Rsyslog

完成 rsyslog 服務器的此配置後,下一步是將您的 rsyslog 客戶端機器配置為 將日誌發送到遠程 rsyslog 服務器。

當我們在遠程服務器上使用 rsyslog.conf 文件時,同樣會在客戶端使用您喜歡的編輯器打開此文件並編輯一些更改:

sudo nano /etc/rsyslog.conf

並允許保留 FQDN:或者,讓 rsyslog 使用完全限定的域名(FQDN,例如 system1.txt)發送。example.com) 而不是簡單的主機名 (system1),使用指令:

$PreserveFQDN on

最後添加配置的遠程 rsyslog 服務器。

@192.168.0.101:514

或者您可以啟用通過 UDP 發送日誌。 對於 TCP 使用 @@ ,而不是一個

*.* @@192.168.0.101:514

最後添加以下變量,以防 rsyslog 服務器宕機:

$ActionQueueFileName queue
$ActionQueueMaxDiskSpace 1g
$ActionQueueSaveOnShutdown on
$ActionQueueType LinkedList
$ActionResumeRetryCount -1

然後重啟rsyslog服務:

sudo systemctl restart rsyslog

驗證日誌

在客戶端機器上完成配置後,我們要驗證一切是否順利。

轉到您的 Rsyslog 服務器以驗證來自您的客戶端機器的日誌:

$ ls /var/log/

你會發現這樣的事情:

列出 var/log 文件和目錄列表/var/日誌

在我的例子中,名為 obrad 的目錄是我當前使用的客戶端機器的名稱。 我們將進入這個目錄,看到如下內容:

var/log/hostname 文件列表列出變量/日誌/主機名

您應該會看到 Rsyslog 生成的所有日誌文件。

您可以使用以下命令檢查這些日誌中的任何一個:讓我們為 example 檢查 系統日誌.

$ tail -f /var/log/obrad/systemd.log

你會看到這樣的事情:

2021-03-25T11:31:59+00:00 obrad systemd[1206]: Started VTE child process 42166 launched by gnome-terminal-server process 3186.
2021-03-25T11:32:28+00:00 obrad systemd[1206]: Created slice dbusx2d:1.2x2dorg.gnome.gedit.slice.
2021-03-25T11:32:28+00:00 obrad systemd[1206]: Started dbus-:[email protected].
2021-03-25T11:32:31+00:00 obrad systemd[1206]: dbus-:[email protected]: Succeeded.

如您所見,我在客戶端計算機上啟動了終端和 gedit 文本編輯,並生成了 Rsyslog 並將其顯示在輸出中。

結論

在本教程中,我們學習瞭如何在 Ubuntu 20.04 上使用客戶端-服務器模型為 rsyslog 配置基本參數。 syslog-ng、FluentD、Logstash、GreyLog2 和 Logagent、Filebeat 是 Rsyslog 的其他替代方案。