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

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

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

圖表顯示了 Syslog 集合。

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

下列設備支援 Syslog 收集器:

  • auth
  • authpriv
  • Cron
  • daemon
  • mark
  • 核心
  • lpr
  • mail
  • news
  • syslog
  • user
  • uucp
  • local0-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 選取[無],然後儲存變更。 如果您需要變更 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

在 Linux 電腦上安裝 Azure 監視器代理程式時,它會安裝預設的 Syslog 組態檔,以定義 DCR 中啟用 Syslog 時所收集之訊息的功能和嚴重性。 組態檔會根據用戶端已安裝的 Syslog 精靈而有所不同。

Rsyslog

在許多 Linux 發行版本中,rsyslogd 精靈負責使用 Linux Syslog API 傳送的取用、儲存和路由記錄訊息。 Azure 監視器代理程式會使用 rsyslog 中的 UNIX 網域通訊端輸出模組 (omuxsock) ,將記錄訊息轉送至 Azure 監視器代理程式。

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

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

無法多次載入內 omuxsock 建模組。 因此,使用對應轉送格式範本載入模組和轉送事件的組態會分割成兩個不同的檔案。 其預設內容如以下範例所示。 此範例會收集從本機代理程式傳送給所有記錄層級之設施的 Syslog 訊息。

$ 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-ng 的組態檔安裝在 /etc/opt/microsoft/azuremonitoragent/syslog/syslog-ngconf/azuremonitoragent.conf 。 將 Syslog 集合新增至 DCR 時,此組態檔會放在系統目錄下 /etc/syslog-ng/conf.d/azuremonitoragent.conf ,並會自動重新開機 syslog-ng,讓變更生效。

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

$ 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,並具有下表所示屬性。

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

含有 Syslog 記錄的記錄查詢

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

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

下一步

深入了解: