使用 Azure Monitor 代理收集 Syslog 事件

注意

本文引用了 CentOS,这是一个接近生命周期结束 (EOL) 状态的 Linux 发行版。 请相应地考虑你的使用和规划。 有关详细信息,请参阅 CentOS 生命周期结束指南

Syslog 是普遍适用于 Linux 的事件日志记录协议。 可以使用内置于 Linux 设备的 Syslog 守护程序和设备来收集指定类型的本地事件。 然后,可以让它将这些事件发送到 Log Analytics 工作区。 应用程序将发送可能存储在本地计算机或传递到 Syslog 收集器的消息。

安装适用于 Linux 的 Azure Monitor 代理后,它会将本地 Syslog 守护程序配置为在数据收集规则 (DCR) 中启用 Syslog 收集时将消息转发到代理。 然后,Azure Monitor 代理将消息发送到 Azure Monitor 或 Log Analytics 工作区,其中会在 Syslog 表中创建相应的 Syslog 记录。

显示 Syslog 收集的示意图。

显示 Syslog 守护程序和 Azure Monitor 代理通信的示意图。

Syslog 收集器支持以下功能:

  • Kern
  • user
  • mail
  • daemon
  • auth
  • syslog
  • lpr
  • news
  • uucp
  • ftp
  • ntp
  • 审核
  • 警报
  • mark
  • local0
  • local1
  • local2
  • local3
  • local4
  • local5
  • local6
  • local7

对于一些不允许在本地安装 Azure Monitor 代理的设备类型,可以改为在基于 Linux 的专用日志转发器上安装代理。 必须将发起设备配置为将 Syslog 事件发送到此转发器上的 Syslog 守护程序,而不是本地守护程序。 有关详细信息,请参阅 Sentinel 教程

配置 Syslog

适用于 Linux 的 Azure Monitor 代理将仅收集在其配置中指定的设施和严重级别的事件。 通过 Azure 门户或通过管理 Linux 代理的配置文件来配置 Syslog。

在 Azure 门户中配置 Syslog

从 Azure Monitor 的“数据收集规则”菜单中配置 Syslog。 此配置将传递到每个 Linux 代理上的配置文件。

  1. 选择“添加数据源”。
  2. 对于“数据源类型”,选择“Linux syslog”。

可以为每个设施收集具有不同日志级别的 Syslog 事件。 默认情况下,将收集所有 Syslog 设施类型。 如果不想收集某个类型,例如 auth 类型的事件,请选择最低日志级别列表框中的 NONE 以选择 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 Monitor 日志
    订阅 选择适当的订阅
    帐户或命名空间 选择适当的 Log Analytics 工作区
  3. 选择“添加数据源”。

  4. 在完成时选择“下一步: 查看 + 创建”。

创建规则

  1. 选择“创建”。
  2. 请等待 20 分钟,然后进行下一个部分。

如果 VM 未安装 Azure Monitor 代理,DCR 部署会触发在 VM 上安装代理。

在 Linux 代理上配置 Syslog

在 Linux 计算机上安装 Azure Monitor 代理时,它会安装默认的 Syslog 配置文件,该文件定义设施以及在 DCR 中启用 Syslog 时收集的消息的严重级别。 此配置文件视客户端已安装的 Syslog 守护程序而异。

Rsyslog

在许多 Linux 发行版中,rsyslogd 守护程序负责使用、存储和路由使用 Linux Syslog API 发送的日志消息。 Azure Monitor 代理使用 rsyslog 中的 TCP 转发输出模块 (omfwd) 将日志消息转发到 Azure Monitor 代理。

Azure Monitor 代理安装包括放置在以下目录下的默认配置文件:/etc/opt/microsoft/azuremonitoragent/syslog/rsyslogconf/

将 Syslog 添加到 DCR 后,这些配置文件将安装在 etc/rsyslog.d 系统目录下,rsyslog 将自动重启,使更改生效。 Rsyslog 使用这些文件来加载输出模块,并使用定义的规则将事件转发到 Azure Monitor 代理守护程序。

其默认内容如下例所示。 本示例会收集针对全部设施和所有日志严重级别的从本地代理发送的 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")

在某些旧系统 (如 CentOS 7.3) 上,当使用传统转发格式将 Syslog 事件发送到 Azure Monitor 代理时,会出现 Syslog 日志格式设置问题。 对于这些系统,Azure Monitor 代理会自动放置旧版转发器模板:

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-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);
};

注意

当 rsyslog 为默认守护程序时,Azure Monitor 支持 rsyslog 或 syslog-ng 发送的消息集合。 Syslog 事件收集不支持 Red Hat Enterprise Linux、CentOS 和 Oracle Linux 版本 (sysklog) 版本 5 上的默认 Syslog 守护程序。 要从这些发行版的此版本中收集 Syslog 数据,应安装并配置 rsyslog 守护程序以替换 sysklog。

如果编辑 Syslog 配置,必须重启 Syslog 守护程序才能使更改生效。

先决条件

需要:

Syslog 记录属性

Syslog 记录的类型为“Syslog”,并且具有下表中的属性。

属性 说明
Computer 从中收集事件的计算机。
设施 定义生成消息的系统部分。
HostIP 发送消息的系统的 IP 地址。
HostName 发送消息的系统的名称。
SeverityLevel 事件的严重级别。
SyslogMessage 消息的文本。
ProcessID 生成消息的进程 ID。
EventTime 生成事件的日期和时间。

具有 Syslog 记录的日志查询

下表提供了检索 Syslog 记录的不同日志查询示例。

查询 说明
Syslog 所有 Syslog
Syslog | where SeverityLevel == "error 严重级别为“错误”的所有 Syslog 记录
Syslog | Facility ==“auth”时 具有身份验证设施类型的所有 Syslog 记录
Syslog | summarize AggregatedValue = count() by Facility 按设施计算的 Syslog 记录数目

后续步骤

了解有关以下方面的详细信息: