Log

RouterOS 按主题将系统事件写入日志;/system/logging 中的规则会把事件发送到内存、磁盘、控制台、syslog 服务器(UDP、TCP 或 TLS;syslog 或 CEF 格式)、电子邮件或脚本。使用 /log/print 读取日志。

日志

RouterOS 会把事件写入系统日志:登录和登录失败、配置更改及操作者、接口启用和停用、DHCP 租约、协议状态变化和错误。每条记录都包含时间、一个或多个说明来源和重要程度的主题(例如 dhcp,info 或 system,error,critical),以及一条消息。

有两个菜单决定保留哪些记录以及发送到哪里:

  • /system/logging 中的规则按主题选择记录,并将其传递给某个动作。
  • /system/logging/action 中的动作将记录存储到内存或磁盘文件、打印到控制台、发送到 syslog 服务器或通过电子邮件发送,或运行脚本。

默认配置有四条规则:

主题动作结果
infomemory保存在 RAM 中。
errormemory保存在 RAM 中。
warningmemory保存在 RAM 中。
criticalecho打印到已打开的终端;没有打开的终端时,在下次登录时打印。

memory 动作保留最新的 1000 条记录,路由器重启后这些记录会丢失。默认不会记录调试消息。要在重启后保留日志,请记录到磁盘或 syslog 服务器。

视频介绍请参阅 日志记录基础。

读取日志

/log/print 显示内存中保留的记录,最早的在前。使用 where 过滤:topics~ 按主题匹配模式,message~ 按消息文本匹配。

[admin@MikroTik] > /log/print where topics~"interface|dhcp"
 2026-10-02 17:34:34 interface,info lo link up
 2026-10-02 17:34:42 interface,info ether2 link up (speed 1G, full duplex)
 2026-10-02 17:34:47 dhcp,info bridge on bridge got IP address 192.168.88.36

要实时查看新记录,请添加 follow(先打印现有记录)或 follow-only(仅显示新记录)。按 <kbd>Space</kbd> 打印分隔线,按 <kbd>Control</kbd>+<kbd>C</kbd> 停止。例如,要监视失败的登录:

[admin@MikroTik] > /log/print follow-only where topics~"critical"
 = = =   = = =   = = =      = = =   = = =   = = =      = = =   = = =   = = =
 2026-10-02 17:35:45 system,error,critical login failure for user admin from 192.168.88.17 via ssh
 2026-10-02 17:35:45 system,error,critical login failure for user root from 192.168.88.17 via ssh
-- Ctrl-C to quit. Space prints separator. New entries will appear at bottom.

登录和防火墙记录带有额外字段,例如用户、服务和源地址。with-extra-info 会把它们添加到行中:

[admin@MikroTik] > /log/print with-extra-info where message~"login failure"
 2026-10-02 17:35:45 system,error,critical login failure for user admin from 192.168.88.17 via ssh app=ssh duser=admin outcome=failure src=192.168.88.17
 2026-10-02 17:35:45 system,error,critical login failure for user root from 192.168.88.17 via ssh app=ssh duser=root outcome=failure src=192.168.88.17

/log/print 还会列出其他内存动作的缓冲区以及磁盘动作的最新记录,因此如果一条记录被多个动作存储,每个动作都会显示一次。添加 where buffer=memory 可仅查看默认缓冲区。

要将打印的记录保存到文件,请添加 file=:/log/print file=log-before-upgrade 会写入 log-before-upgrade.txt。

查找特定时间发生的事件

将 time 与日期和时间比较,可以查看某个时段的记录,例如一晚:

/log/print where time>"2026-10-02 01:00:00" and time<"2026-10-02 06:00:00"

上行链路中断通常表现为 WAN 接口的 interface,info ether1 link down 和 link up 记录,以及 DHCP 客户端或 PPP 记录。如果上行链路保持启用但运营商停止转发流量,则不会记录任何内容;可使用 Netwatch 记录此类中断。默认缓冲区 1000 条记录能追溯多久取决于路由器的日志量。要保留更多记录,请记录到磁盘或 syslog 服务器。

查明谁更改了配置

每次配置更改都会以 system,info 主题记录,包括操作者(哪个用户以及如何连接,或调度器条目)和命令:

[admin@MikroTik] > /log/print where topics~"system" and message~" by "
 2026-10-02 17:33:27 system,info static dns entry added by scheduler:add-nas-dns (*2 = /ip dns static add address=192.168.88.20 name=nas.lan)

写入自定义记录

脚本使用 :log info、:log warning、:log error 和 :log debug 写入日志。在命令行中,/log/info、/log/warning、/log/error 和 /log/debug 具有相同作用。这些记录会获得 script,info、script,warning 等主题。请参阅脚本。

为单个功能记录调试消息

许多功能会写入调试消息,只有规则选择它们时才会被记录。要排查某个功能,请将其 debug 消息记录到单独的内存缓冲区,以免把其他记录挤出默认缓冲区。例如,当客户端无法从 DHCP 服务器获取地址时:

/system/logging/action/add name=dhcpdebug target=memory \
    memory-lines=2000
/system/logging/add topics=dhcp,debug action=dhcpdebug

读取该缓冲区,并在每次测试之间清空它:

/log/print where buffer=dhcpdebug
/system/logging/action/clear action=dhcpdebug

规则只匹配包含其全部主题的记录,因此 topics=dhcp,debug 只选择 DHCP 调试消息。要排除某些功能添加的数据包转储,请使用 ! 排除主题,例如 topics=ntp,debug,!packet。

完成后,将缓冲区保存到文件,然后移除规则和动作。移除规则会清空缓冲区:

/log/print where buffer=dhcpdebug file=dhcp-debug
/system/logging/remove [find action=dhcpdebug]
/system/logging/action/remove dhcpdebug

警告

调试消息可能包含机密信息。例如,ssh,debug 会记录会话加密密钥,ssh,debug,packet 会记录会话内容。请将调试消息保存在本地缓冲区中,不要发送到 syslog 服务器或通过电子邮件发送。

在重启后保留日志

默认的 disk 动作会写入路由器存储上的文件。为每个要保留的主题添加一条规则:

/system/logging/add topics=info action=disk
/system/logging/add topics=warning action=disk
/system/logging/add topics=error action=disk
/system/logging/add topics=critical action=disk

该动作会写入 log.0.txt,直到达到 disk-lines-per-file 行(默认 1000 行)。随后文件重命名为 log.1.txt,并新建 log.0.txt。该动作保留 disk-file-count 个文件(默认 2 个),并删除最旧的文件。这些文件位于 /file 中:

[admin@MikroTik] > /file/print where name~"^log"
Columns: NAME, TYPE, SIZE, LAST-MODIFIED
# NAME       TYPE       SIZE  LAST-MODIFIED
0 log.0.txt  .txt file  1956  2026-10-02 17:32:13

最新记录也会以动作名称显示在 /log/print 中,因此每条记录会在那里显示两次;请添加 where buffer=memory 或 where buffer=disk。重启后,当前文件的记录会再次显示在 buffer=disk 下。要读取较早的文件,可以打印其内容,或从 /file 下载:

:put [/file/get log.1.txt contents]

要保留更多历史记录,请提高这两个值。要写入 USB 驱动器或其他磁盘,请在文件名前加上磁盘的文件夹;该文件夹必须存在:

/system/logging/action/set disk disk-file-name=usb1/log \
    disk-lines-per-file=5000 disk-file-count=5

为减少对内部闪存的写入,请只将需要的主题记录到磁盘,或使用外部磁盘。

将日志发送到 syslog 服务器

默认的 remote 动作通过 UDP 端口 514 将记录发送到 syslog 服务器。它没有服务器地址(remote=0.0.0.0),也没有默认规则使用它。请设置服务器和格式,并为每个主题添加规则:

/system/logging/action/set remote remote=192.0.2.10 \
    remote-log-format=syslog
/system/logging/add topics=info action=remote
/system/logging/add topics=warning action=remote
/system/logging/add topics=error action=remote
/system/logging/add topics=critical action=remote

请使用单独的规则:包含 topics=info,warning,error 的规则只匹配同时具有这三个主题的记录,而这样的记录不存在。要仅发送登录和注销记录,请使用 topics=account;失败的登录具有 system,error,critical 主题,因此会随 error 或 critical 一起发送。

要检查服务器是否收到记录,请自行写入一条:

/log/warning "syslog test"

remote-log-format 选择服务器接收的内容(示例见技术细节):

  • default - 主题和消息,不包含时间和主机名。
  • syslog - BSD syslog(RFC 3164),这是大多数 syslog 服务器通过 UDP 期望的格式:消息前包含优先级、时间和路由器标识(/system/identity)。facility 为 daemon,severity 来自主题;可设置 syslog-facility 和 syslog-severity 更改它们。主题不会被发送;设置 add-topics-string=yes 可将它们添加到消息前,以便服务器区分 DHCP 和防火墙等记录。不支持 RFC 5424。
  • cef - Common Event Format,适用于安全信息和事件管理(SIEM)系统:登录和防火墙记录的额外字段(用户、服务、地址、接口)会转换为 CEF 字段。

BSD 时间不包含年份和时区,因此服务器会使用自己的时区。当路由器和服务器位于不同时区时,请设置 syslog-time-format=iso8601(cef 也会使用该设置),并使用 NTP 保持路由器时钟准确。

通过 UDP 时,服务器不可达期间的记录会丢失。使用 remote-protocol=tcp 或 tls 时,路由器会在连接断开期间为所有 remote 动作在内存中保留最多 1000 条记录,并在连接恢复后发送;缓冲区满时,较新的记录会被丢弃,且缓冲区在重启时丢失。通过 TCP 和 TLS 时,请使用 remote-log-format=cef:CEF 记录以分隔符(cef-event-delimiter)结尾,而 default 和 syslog 记录在流中首尾相接且没有分隔符,因此大多数服务器无法判断一条记录在哪里结束。

使用 src-address 选择源地址;当服务器通过 VRF 可达时,使用 vrf。

以下指南介绍如何设置 Elasticsearch 以接收和分析 RouterOS 日志:

通过 TLS 发送日志

要加密日志,请使用 remote-protocol=tls。要检查服务器证书,请导入签署该证书的 CA 证书,并设置 check-certificate=yes。如果不设置 check-certificate=yes,路由器会加密连接但接受任何证书:

/certificate/import file-name=syslog-ca.pem name=syslog-ca \
    passphrase="" trusted=yes
/system/logging/action/add name=siem target=remote remote=192.0.2.10 \
    remote-port=6514 remote-protocol=tls remote-log-format=cef \
    check-certificate=yes
/system/logging/add topics=info action=siem
/system/logging/add topics=warning action=siem
/system/logging/add topics=error action=siem
/system/logging/add topics=critical action=siem

当证书无法验证时,路由器不会发送任何内容,会重试,并记录一条以 ssl: no trusted CA certificate found 结尾的 ssld,error 记录。

check-certificate=yes 检查服务器证书是否由受信任的证书签署。它不会比较证书中的名称与服务器地址,因此来自任何受信任 CA 的证书都会通过:请只信任日志服务器的 CA,或导入服务器自己的证书。路由器不会提供客户端证书。

发送到相同服务器地址和端口的动作会共享一个连接。请为它们设置相同的 remote-protocol 和 check-certificate。

通过电子邮件发送日志消息

email 目标会为每条记录发送一封电子邮件,主题和正文分别为主题和消息。它使用 /tool/e-mail 的服务器、端口、TLS 模式和发件人,因此请先配置该工具(参见电子邮件)。例如,要接收每条 critical 记录的电子邮件,例如登录失败、看门狗重启或时钟校正:

/system/logging/action/add name=mail target=email \
    email-to=admin@example.com
/system/logging/add topics=critical action=mail

要仅接收登录失败的电子邮件,请添加消息必须匹配的 regex;^ 表示消息以该文本开头:

/system/logging/add topics=critical regex="^login failure" action=mail

email-cc 可添加更多收件人。每封发送的电子邮件都会记录为 e-mail,info sent <topics message> to: <address>。请谨慎选择主题:每条记录都会发送一封电子邮件,因此密码猜测攻击会发送数百封。请改用防火墙阻止此类攻击(参见 SSH 暴力破解防护)。

在日志消息上运行脚本

script 目标会为其规则匹配的记录运行 /system/script 中的脚本。脚本通过两个变量获取记录:$topics(例如 system,error,critical)和 $message。脚本仍在运行时匹配到的记录会被跳过,脚本自身记录的日志不会再次触发它。

例如,将所有服务(SSH、WinBox、WebFig、API)的登录失败源地址收集到地址列表中。地址在最后一次登录失败后会保留一天:

/system/script/add name=login-failure source={
    :local at [:find $message " from "]
    :while ([:typeof [:find $message " from " $at]] = "num") do={
        :set at [:find $message " from " $at]
    }
    :local ip [:pick $message ($at + 6) [:find $message " via " $at]]
    /ip/firewall/address-list/remove [find list=login-fail address=$ip]
    /ip/firewall/address-list/add list=login-fail address=$ip timeout=1d
}
/system/logging/action/add name=loginfailure target=script \
    script=login-failure
/system/logging/add topics=critical regex="^login failure" \
    action=loginfailure

规则的 regex 将脚本限制为 login failure for user admin from 192.168.88.17 via ssh 这类记录。消息中的用户名来自客户端,可能包含空格和单词 from,因此脚本取最后一个 from 之后的地址,该部分由路由器自己写入。该列表本身不会执行任何操作:请在防火墙规则中使用它(参见地址列表),并排除您自己的管理地址,以免输错密码导致自己无法登录。

规则如何匹配记录

当以下条件全部成立时,规则会将记录传递给其动作:

  • 记录包含 topics 中列出的每个主题,并且不包含通过 ! 列出的任何主题。topics=script,warning 匹配 script,warning 记录,不会匹配所有 script 记录和所有 warning 记录。
  • 如果规则设置了 regex,则消息必须匹配该正则表达式。正则表达式也会看到消息之后的记录额外字段,因此 $ 不会匹配登录记录消息的结尾。
  • 规则已启用。

没有 topics 的规则会匹配所有记录,包括调试消息。

每条匹配的规则都会传递自己的副本,因此一条记录可以同时进入内存、磁盘和 syslog 服务器。当两条规则将同一条记录传递给同一个动作时,该动作只存储一次。

prefix 会为该规则的动作在消息前添加文本:prefix=core1 会存储并发送 core1: <message>。可用它在共享 syslog 服务器上区分不同路由器。

当您更改或禁用使用某个内存动作的唯一规则时,该动作的缓冲区会被清空。更改动作本身,或更改使用它的多条规则中的一条,会保留记录。

主题

每条记录都有一个或多个主题。通常一个主题说明写入记录的功能,另一个主题说明重要程度,某些功能还会添加更多主题。登录失败具有 system,error,critical 主题;SSH 调试消息具有 ssh,debug,其数据包转储具有 ssh,debug,packet。

重要程度主题

主题记录
critical需要关注的事件,例如登录失败、看门狗重启和时钟校正。默认规则会将它们打印到控制台。
error错误。
warning警告。
info信息性记录,例如登录、配置更改和链路状态变化。
debug用于故障排除的详细消息,仅在规则要求时记录。
packet已发送或接收数据包的内容,经过解码。
raw原始内容,例如以十六进制表示的数据包,或与 LTE 调制解调器交换的 AT 命令。

功能主题

主题记录
account用户的登录和注销。
acme-client获取证书的 ACME 客户端。
asyncLTE 调制解调器的命令通道。
backup创建备份。
bfdBFD。
bgpBGP。
bridge网桥。
calc路由计算。
capsCAPsMAN 和 CAP。
certificate证书。
clock时钟更改,例如由 NTP 或 IP Cloud 引起。
container容器。
ddns动态 DNS。
dhcpDHCP 客户端、服务器和中继。
discover邻居发现。
disk磁盘。
dnsDNS。
dot1x802.1X 身份验证。
dudeThe Dude。
e-mail电子邮件工具(/tool/e-mail)。
event事件,例如安装到路由表中的路由,或来自 LTE 调制解调器的消息。
evpnEVPN。
fetchfetch 工具。
firewall带有 action=log 或 log=yes 的防火墙规则,包括其 log-prefix。
gpsGPS。
gsmGSM 调制解调器和 SMS 工具。
health健康监控(电压、温度、风扇)。
hotspotHotSpot。
igmp-proxyIGMP 代理。
interface接口,例如链路启用和停用。
ipsecIPsec。
iscsiiSCSI。
isisIS-IS。
kvm虚拟机(KVM)。
l2tpL2TP 客户端和服务器。
ldpLDP。
loraLoRa。
lteLTE 和 5G 调制解调器。
managerUser Manager。
mplsMPLS。
mqttMQTT。
mvrpMVRP。
natpmpNAT-PMP。
netwatchNetwatch。
ntpNTP 客户端和服务器。
ospfOSPF。
ovpnOpenVPN。
pimPIM-SM。
poe-inPoE-In 事件,例如设备自身通过 PoE 供电时的 LLDP 功率协商。
poe-outPoE 输出。
ponPON SFP 模块。
pppPPP。
pppoePPPoE 客户端和服务器。
pptpPPTP 客户端和服务器。
ptp精确时间协议。
queue队列。
radiusRADIUS 客户端。
radvdIPv6 路由器通告。
ripRIP。
route路由。
rpkiRPKI。
rproxy反向代理。
rsvpRSVP。
script脚本(:log)以及 /log/info 等相关命令。
sertcp串口远程访问(/port/remote-access)。
smbSMB 服务器。
snmpSNMP。
socksifySocksify。
sshSSH 服务器和客户端。
ssldRouterOS 功能的 TLS 连接,例如无法验证的服务器证书。
sstpSSTP 客户端和服务器。
stp生成树。
system系统消息,例如重启和配置更改。
tftpTFTP 服务器。
timer定时器,例如 BGP keepalive 定时器。
tr069TR-069 客户端。
update软件包更新。
upnpUPnP。
upsUPS 监控。
vplsVPLS。
vrrpVRRP。
watchdog看门狗。
web-proxyWeb 代理。
wiliotWiliot。
wireguardWireGuard。
wireless无线接口。
zerotierZeroTier。

路由器还会列出 amt、isdn、mme、read、simulator、state、store、telephony 和 write 主题,以及安装 option 软件包后的 netinstall。

故障排除

问题原因与解决方法
syslog 服务器未收到任何内容。默认的 remote 动作为 remote=0.0.0.0;请设置服务器地址。检查是否有规则将记录传递给该动作:包含多个主题的规则需要记录同时具有这些主题。检查路由器是否能从 src-address 和 vrf 到达服务器,以及服务器是否接受该协议和端口。
TLS 日志未发送任何内容。查找 ssld,error 记录。no trusted CA certificate found 表示服务器的 CA 证书未导入或不受信任。
服务器将多条记录显示为一条。通过 TCP 和 TLS 时,default 和 syslog 记录没有分隔符;请使用 remote-log-format=cef。
记录在 /log/print 中显示多次。多个动作存储了这些记录;请使用 where buffer=memory 过滤。
重启后日志为空。内存动作无法在重启后保留;请记录到磁盘或 syslog 服务器。
内存缓冲区自行清空。使用它的唯一规则被更改或禁用。
bad disk file namedisk-file-name 中的文件夹不存在。
action name can contain only letters and numbers动作名称不能包含 -、_ 或其他字符。

技术细节

消息格式

同一条登录失败记录在每种 remote-log-format 下服务器接收到的内容(使用 syslog-time-format=bsd-syslog 和标识 MikroTik):

system,error,critical login failure for user guest from 192.168.88.17 via ssh
<27>Oct  2 17:36:35 MikroTik login failure for user guest from 192.168.88.17 via ssh
Oct  2 17:36:35 MikroTik CEF:0|MikroTik|hAP ax^2|7.25beta5|10|system,error,critical|High|dvchost=MikroTik dvc=192.168.88.36 msg=login failure for user guest from 192.168.88.17 via ssh app=ssh duser=guest outcome=failure src=192.168.88.17
  • syslog 格式不包含 tag 字段;消息紧跟在标识之后。
  • 使用 syslog-severity=auto 时,severity 来自主题:debug 7、info 6、warning 4、error 3。同时具有 error 和 critical 的记录(如示例中)会得到 3,因此针对 severity crit 的服务器过滤器会漏掉登录失败。优先级等于 facility 乘以 8 加上 severity:daemon(3)和 error(3)得到 <27>。
  • CEF 头包含板卡名称、RouterOS 版本、事件类编号、主题和 severity(info 和 debug 为 Low,warning 为 Medium,error 为 High)。dvchost 是标识,dvc 是路由器的一个地址,msg 是消息,随后是记录的额外字段。防火墙记录包含链、日志前缀、接口、地址和协议。值中的 = 和 \ 会转义为 \= 和 \\。每条 CEF 消息以 cef-event-delimiter 结尾(默认 \r\n)。

TCP 和 TLS

  • UDP 为每条记录发送一个数据报。TCP 和 TLS 为每个服务器地址和端口保持一个连接,由所有向该处发送的动作共享。
  • 当 TCP 或 TLS 服务器不可达时,路由器会为所有 remote 动作在一个缓冲区中保留记录,并重试连接。缓冲区在重启时丢失。
  • 服务器不可达期间,最多有 1000 条记录在内存中等待;缓冲区满时,较新的记录会被丢弃。
  • CEF 消息以分隔符结尾;default 和 syslog 消息在流中首尾相接且没有分隔符。
  • check-certificate=yes 会根据 /certificate 中的受信任证书检查服务器证书,不会检查其中的名称。路由器提供 TLS 1.2。

磁盘文件

文件中的每一行都以自身格式的日期开头,例如 Oct/02/2026 16:49:36,后跟主题和消息。/system/logging/action/clear 只会清空内存动作;对于磁盘动作,它会失败并显示 cleanup not supported on this target。

所有参数请参阅 /system/logging 和 /system/logging/action CLI 参考,记录相关请参阅 /log。