Share via


使用 Azure 監視器代理程式收集 Syslog 事件

警告

本文參考 CentOS,這是接近生命週期結束 (EOL) 狀態的 Linux 發行版本。 請據此考慮您的使用方式和規劃。 如需詳細資訊,請參閱 CentOS 生命週期結束指導

Syslog 是 Linux 通用的事件記錄通訊協定。 您可以使用內建於 Linux 裝置和裝置中的 Syslog 精靈來收集指定類型的本機事件。 然後,您可以將這些事件傳送至 Log Analytics 工作區。 應用程式會傳送可能儲存於本機電腦上或傳遞至 Syslog 收集器的訊息。

安裝適用於 Linux 的 Azure 監視器代理程式時,這會設定本機 Syslog 精靈,以在資料收集規則 (DCR) 中啟用 Syslog 集合時,將訊息轉送至代理程式。 然後,Azure 監視器代理程式會將訊息傳送至 Azure 監視器或 Log Analytics 工作區,其中會在 Syslog 資料表中建立對應的 Syslog 記錄。

顯示 Syslog 集合的圖表。

顯示 Syslog 精靈和 Azure 監視器代理程式通訊的圖表。

注意

Azure 監視器代理程式會使用 TCP 連接埠來接收 rsyslog 或 syslog-ng 所傳送的訊息,不過,如果啟用 SELinux,我們無法使用 semanage 來新增 TCP 埠的規則,我們將使用 Unix 套接字。

下列設備支援 Syslog 收集器:

  • 科恩
  • 使用者
  • 郵件
  • daemon
  • auth
  • syslog
  • lpr
  • news
  • uucp
  • ftp
  • ntp
  • 稽核
  • 警示
  • 標記
  • local0
  • local1
  • local2
  • local3
  • local4
  • local5
  • local6
  • local7

對於某些不允許本地安裝 Azure 監視器代理程式的裝置類型,代理程式可以改為安裝在專用的 Linux 型記錄轉寄站上。 原始裝置必須設定為將 Syslog 事件傳送至此轉寄站上的 Syslog 精靈,而不是本地精靈。 如需詳細資訊,請參閱 Sentinel 教學課程

設定 Syslog

適用於 Linux 的 Azure 監視器代理程式所收集的事件僅限於其設定中所指定的設備與嚴重性。 您可以透過 Azure 入口網站,或透過在您的 Linux 代理程式上管理設定檔,來設定 Syslog。

在 Azure 入口網站中設定 Syslog

從 Azure 監視器的 [資料收集規則] 選單設定 Syslog。 此設定會傳遞至每個 Linux 代理程式上的設定檔。

  1. 選取新增資料來源
  2. 針對 [資料來源類型],選取[Linux syslog]

您可以針對每個設備收集具有不同記錄層級的 Syslog 事件。 預設會收集所有 Syslog 設備類型。 例如,如果您不想收集 auth 類型的事件,請在 auth 設施的 [最低記錄層級] 列表框中選取 [NONE],然後儲存變更。 如果您需要變更 Syslog 事件的預設記錄層級,並只收集記錄層級從 NOTICE 或優先順序較高的事件,請在 [最低記錄層級] 清單框中選取 [LOG_NOTICE]

根據預設,所有 DCR 中設定的組態變更都會自動發送給所有代理程式。

建立資料收集規則

在與 Log Analytics 工作區相同的區域中建立資料收集規則。 DCR 是 Azure 資源,可讓您定義資料擷取至工作區時應該處理資料的方式。

  1. 登入 Azure 入口網站

  2. 搜尋並開啟 [監視器]

  3. 在 [設定] 底下,選取 [資料收集規則]

  4. 選取 建立

    顯示 [數據收集規則] 窗格的螢幕快照,並已選取 [建立] 選項。

新增資源

  1. 選取 [新增資源]

  2. 使用篩選條件來尋找您要用來收集記錄的虛擬機器。

    顯示頁面以選取數據收集規則範圍的螢幕快照。

  3. 選取虛擬機器。

  4. 選取套用

  5. 選取 [下一步: 收集並傳遞]

新增資料來源

  1. 選取新增資料來源

  2. 針對 [資料來源類型],選取[Linux syslog]

    顯示頁面以選取數據源類型和最小記錄層級的螢幕快照。

  3. 針對 [最小記錄層級],保留預設值 [LOG_DEBUG]

  4. 選取 [下一步:目的地]

新增目的地

  1. 選取新增目的地

    顯示 [目的地] 索引標籤的螢幕快照,並已選取 [新增目的地] 選項。

  2. 輸入下列值:

    欄位
    目的地類型 Azure 監視器記錄
    訂用帳戶 選取適當的訂用帳戶
    帳戶或命名空間 選取適當的 Log Analytics 工作區
  3. 選取新增資料來源

  4. 完成時,選取 [下一步:檢閱 + 建立]。

建立規則

  1. 選取 建立
  2. 等候 20 分鐘,再前往下一個區段。

如果您的 VM 未安裝 Azure 監視器代理程式,DCR 部署會觸發 VM 上的代理程式安裝。

在 Linux 代理程式上設定 Syslog

如果 Syslog 在 DCR 啟用,當 Linux 機器安裝 Azure 監視器代理程式時,其會安裝預設的 Syslog 設定檔,以便定義所收集訊息的設施與嚴重性。 組態檔會根據用戶端已安裝的 Syslog 精靈而有所不同。

Rsyslog

在許多 Linux 散發套件上,rsyslogd 精靈會負責使用 Linux Syslog API 傳送的取用、儲存和路由記錄訊息。 Azure 監視器代理程式會使用 rsyslog 中的 TCP 轉送輸出模組 (omfwd),將記錄訊息轉送至 Azure 監視器代理程式。

Azure 監視器代理程式安裝包含預設組態檔,這些設定檔會放在下列目錄下:/etc/opt/microsoft/azuremonitoragent/syslog/rsyslogconf/

將 Syslog 新增至 DCR 時,這些組態檔會安裝在 etc/rsyslog.d 系統目錄下,且會自動重新啟動 rsyslog,讓變更生效。 rsyslog 會使用這些檔案來載入輸出模組,並使用定義的規則將事件轉送至 Azure 監視器代理程式精靈。

其預設內容如以下範例所示。 這個範例收集從本機代理程式傳送的 Syslog 訊息,適用所有記錄等級的設施。

$ cat /etc/rsyslog.d/10-azuremonitoragent-omfwd.conf
# Azure Monitor Agent configuration: forward logs to azuremonitoragent

template(name="AMA_RSYSLOG_TraditionalForwardFormat" type="string" string="<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg%")
# queue.workerThreads sets the maximum worker threads, it will scale back to 0 if there is no activity
# Forwarding all events through TCP port
*.* action(type="omfwd"
template="AMA_RSYSLOG_TraditionalForwardFormat"
queue.type="LinkedList"
queue.filename="omfwd-azuremonitoragent"
queue.maxFileSize="32m"
action.resumeRetryCount="-1"
action.resumeInterval="5"
action.reportSuspension="on"
action.reportSuspensionContinuation="on"
queue.size="25000"
queue.workerThreads="100"
queue.dequeueBatchSize="2048"
queue.saveonshutdown="on"
target="127.0.0.1" Port="28330" Protocol="tcp")

當您使用 SELinux,我們決定使用 Unix 套接字時,會使用下列組態。

$ cat /etc/rsyslog.d/10-azuremonitoragent.conf
# Azure Monitor Agent configuration: forward logs to azuremonitoragent
$OMUxSockSocket /run/azuremonitoragent/default_syslog.socket
template(name="AMA_RSYSLOG_TraditionalForwardFormat" type="string" string="<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg%") 
$OMUxSockDefaultTemplate AMA_RSYSLOG_TraditionalForwardFormat
# Forwarding all events through Unix Domain Socket
*.* :omuxsock: 
$ cat /etc/rsyslog.d/05-azuremonitoragent-loadomuxsock.conf
# Azure Monitor Agent configuration: load rsyslog forwarding module. 
$ModLoad omuxsock

在某些舊版系統上,例如 CentOS 7.3,我們已在傳統轉送格式用來將 Syslog 事件傳送至 Azure 監視器代理程式時看到 rsyslog 記錄格式問題。 針對這些系統,Azure 監視器代理程式會自動放置舊版轉接站範本:

template(name="AMA_RSYSLOG_TraditionalForwardFormat" type="string" string="%TIMESTAMP% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg%\n")

Syslog-ng

Syslog 的設定檔安裝於 /etc/opt/microsoft/azuremonitoragent/syslog/syslog-ngconf/azuremonitoragent-tcp.conf。 將 Syslog 系列集合新增至 DCR 時,此組態檔會放在 /etc/syslog-ng/conf.d/azuremonitoragent-tcp.conf 系統目錄下,且會自動重新啟動 syslog-ng,讓變更生效。

其預設內容如以下範例所示。 這個範例收集從本機代理程式傳送的 Syslog 訊息,適用所有設施與所有嚴重性。

$ cat /etc/syslog-ng/conf.d/azuremonitoragent-tcp.conf 
# Azure MDSD configuration: syslog forwarding config for mdsd agent
options {};

# during install time, we detect if s_src exist, if it does then we
# replace it by appropriate source name like in redhat 's_sys'
# Forwrding using tcp
destination d_azure_mdsd {
	network("127.0.0.1" 
	port(28330)
	log-fifo-size(25000));			
};

log {
	source(s_src); # will be automatically parsed from /etc/syslog-ng/syslog-ng.conf
	destination(d_azure_mdsd);
	flags(flow-control);
};

當您使用 SELinux,我們決定使用 Unix 套接字時,會使用下列組態。

$ cat /etc/syslog-ng/conf.d/azuremonitoragent.conf 
# Azure MDSD configuration: syslog forwarding config for mdsd agent options {}; 
# during install time, we detect if s_src exist, if it does then we 
# replace it by appropriate source name like in redhat 's_sys' 
# Forwrding using unix domain socket 
destination d_azure_mdsd { 
	unix-dgram("/run/azuremonitoragent/default_syslog.socket" 
	flags(no_multi_line) ); 
};
 
log {
	source(s_src); # will be automatically parsed from /etc/syslog-ng/syslog-ng.conf 
	destination(d_azure_mdsd);
}; 

注意

Azure 監視器支援收集由 rsyslog 或 syslog-ng 所傳送的訊息,其中 rsyslog 是預設精靈。 Red Hat Enterprise Linux 5 版本、CentOS 及 Oracle Linux 版本 (syslog) 的預設 Syslog 精靈不支援 Syslog 事件集合。 若要從這些版本的這些發行版本收集 Syslog 資料,應該安裝 rsyslog 精靈並設定為取代 sysklog。

若您編輯 Syslog 設定,則必須重新啟動 Syslog 精靈,變更才會生效。

必要條件

您需要:

Syslog 記錄屬性

Syslog 記錄的類型為 Syslog,並具有下表所示屬性。

屬性 說明
電腦 收集事件的來源電腦。
設施 定義產生訊息之系統的一部分。
HostIP 傳送訊息之系統的 IP 位址。
HostName 傳送訊息之系統的名稱。
SeverityLevel 事件的嚴重性層級。
SyslogMessage 訊息的文字。
ProcessID 產生訊息的處理序識別碼。
EventTime 產生事件的日期和時間。

含有 Syslog 記錄的記錄查詢

下表提供擷取 Syslog 記錄的不同記錄查詢範例。

查詢 描述
Syslog 所有 Syslog
Syslog | where SeverityLevel == "error" 所有具有錯誤嚴重性的 Syslog 記錄
Syslog | 設施位置 == "auth" 具有驗證設施類型的所有 Syslog 記錄
Syslog | summarize AggregatedValue = count() by Facility 按設施分類的 Syslog 記錄數

下一步

深入了解: