Log

本节概述 MikroTik RouterOS 的日志记录功能,涵盖如何使用 /log 菜单实时查看和过滤日志消息,以及通过 /system/logging 将日志转发到外部系统的详细配置选项。

Log

本节涵盖日志导出和集成示例。使用它可以将 RouterOS 日志转发到 Elasticsearch 等外部系统。

RouterOS 能够记录各种系统事件和状态信息。日志可以保存在路由器内存(RAM)、磁盘、文件中,通过电子邮件发送,甚至发送到远程 syslog 服务器。

视频:日志记录基础

日志消息

Sub-menu: /log

存储在路由器本地内存中的所有消息都可以从 /log 菜单打印。每个条目包含事件发生的时间和日期、此消息所属的主题以及消息本身。

[admin@MikroTik] /log> print 
1970-01-02 02:00:09 system,info router rebooted 
sep/15 09:54:33 system,info,account user admin logged in from 10.1.101.212 via winbox 
sep/15 12:33:18 system,info item added by admin 
sep/15 12:34:26 system,info mangle rule added by admin 
sep/15 12:34:29 system,info mangle rule moved by admin 
sep/15 12:35:34 system,info mangle rule changed by admin 
sep/15 12:42:14 system,info,account user admin logged in from 10.1.101.212 via telnet 
sep/15 12:42:55 system,info,account user admin logged out from 10.1.101.212 via telnet 
01:01:58 firewall,info input: in:ether1 out:(none), src-mac 00:21:29:6d:82:07, proto UDP, 
10.1.101.1:520->10.1.101.255:520, len 452

如果日志打印时的日期与添加日志条目时的日期相同,则只显示时间。在上面的示例中,你可以看到第二条消息是在本年度的 sep/15 添加的(未添加年份),而最后一条消息是今天添加的,因此只显示时间。

Print 命令接受多个参数,可用于检测新的日志条目、仅打印必要的消息等。

例如,以下命令将打印其中一个主题为 info 的所有日志消息,并检测新的日志条目,直到按下 <kbd>Control</kbd>+<kbd>C</kbd>。

[admin@MikroTik] /log > print follow where topics~".info"
12:52:24 script,info hello from script
-- Ctrl-C to quit.

在此示例中,它只打印 dhcp 信息消息:

[admin@MikroTik] /log/print where topics~"dhcp.info"
11:42:32 dhcp,info defconf deassigned 192.168.88.37 for B0:E4:5C:27:EF:F2 Samsung
11:42:32 dhcp,info defconf assigned 192.168.88.37 for B0:E4:5C:27:EF:F2 Samsung

如果 print 处于 follow 模式,你可以按键盘上的空格键插入分隔符:

[admin@MikroTik] /log > print follow where topics~".info"
12:52:24 script,info hello from script

= = = = = = = = = = = = = = = = = = = = = = = = = = =

-- Ctrl-C to quit.

日志配置

Sub-menu: /system/logging

属性描述
action (name;默认:memory)指定系统默认操作之一或 actions 菜单中列出的用户自定义操作。
prefix (string;默认:none)添加在日志消息开头的前缀。
regex (string;默认:none)用于匹配日志消息的正则表达式。如果正则表达式不匹配,则不执行该操作,即使该主题已配置为记录日志。
topics (account, acme-client, amt, async, backup, bfd, bgp, bridge, calc, caps, certificate, clock, container, critical, ddns, debug, dhcp, discover, disk, dns, dot1x, dude, e-mail, error, event, evpn, fetch, firewall, gps, gsm, health, hotspot, igmp-proxy, info, interface, ipsec, iscsi, isdn, isis, kvm, l2tp, lora, ldp, lte, manager, mme, mpls, mqtt, mvrp, natpmp, netwatch, ntp, ospf, ovpn, packet, pim, poe-in, poe-out, ppp, pppoe, pptp, ptp, queue, radvd, radius, raw, read, rip, route, rpki, rproxy, rsvp, script, sertcp, simulator, smb, snmp, socksify, ssh, ssld, sstp, state, store, stp, system, telephony, tftp, timer, tr069, update, upnp, ups, vpls, vrrp, warning, watchdog, web-proxy, wiliot, wireguard, wireless, write, zerotier;默认:info)记录所有匹配指定主题或主题列表的消息。在主题前使用 ! 字符可排除匹配的消息。例如,要记录不带数据包详细信息的 NTP debug 消息:/system/logging/add topics=ntp,debug,!packet

操作

Sub-menu: /system/logging/action

属性描述
add-topics-string (yes|no;默认:no)
cef-event-delimiter (string;默认:\r\n)此选项帮助远程 syslog 区分已发送批次中的各个事件
check-certificate (yes|no;默认:no)在对远程操作使用 TLS 类型的日志记录时,是否检查服务器证书。
disk-file-count (integer [1..65535];默认:2)指定用于存储日志消息的文件数量,仅当 action=disk 时适用
disk-file-name (string;默认:log)用于存储日志消息的文件名称,仅当 action=disk 时适用
disk-lines-per-file (integer [1..65535];默认:100)以行数指定文件的最大大小,仅当 action=disk 时适用
disk-stop-on-full (yes|no;默认:no)在达到指定的 disk-lines-per-file 和 disk-file-count 数量后是否停止将日志消息保存到磁盘,仅当 action=disk 时适用
email-cc (string;默认:)日志作为 CC 发送到的电子邮件地址,仅当 action=email 时适用
email-start-tls (yes | no;默认:no)发送电子邮件时是否使用 tls,仅当 action=email 时适用
email-to (string;默认:)日志发送到的电子邮件地址,仅当 action=email 时适用
memory-lines (integer [1..65535];默认:1000)本地内存缓冲区中的记录数量,仅当 action=memory 时适用
memory-stop-on-full (yes|no;默认:no)在达到指定的 memory-lines 数量后是否停止将日志消息保存到本地缓冲区
name (string;默认:)操作的名称。当 target=memory 时,此名称还用作特定内存缓冲区的标识符。可以创建多个 target=memory 的操作,每个操作将日志存储在自己的独立缓冲区中。
remember (yes|no;默认:)是否保留尚未在控制台中显示的日志消息,当 action=echo 时适用
remote-log-format (cef, default, syslog;默认:default)发送到远程实例的日志格式:cef - 日志以 CEF 格式发送;default - 日志按原样发送;syslog - 日志以 BSD-syslog 格式发送
remote-port (integer [1..65535];默认:514)远程日志服务器的 UDP 端口(地址通过 remote 属性配置)。
remote-protocol (tcp / udp / tls;默认:udp)远程日志消息的协议,TCP 和 TLS 仅适用于 CEF remote-log-format,对于 syslog 它将始终使用 UDP,即使设置了 TCP / TLS
script
src-address (IP address;默认:0.0.0.0)向远程服务器发送数据包时使用的源地址
syslog-facility (auth, authpriv, cron, daemon, ftp, kern, local0, local1, local2, local3, local4, local5, local6, local7, lpr, mail, news, ntp, syslog, user, uucp;默认:daemon)
syslog-severity (alert, auto, critical, debug, emergency, error, info, notice, warning;默认:auto)RFC 3164 中定义的严重性级别指示符:Emergency:系统不可用Alert:必须立即采取措施Critical:严重状况Error:错误状况Warning:警告状况Notice:正常但重要的情况Informational:信息性消息Debug:调试级消息
syslog-time-format (bsd-syslog, iso8601;默认:bsd-syslog)消息的时间日志格式
target (disk, echo, email, memory, remote, script;默认:memory)日志消息的存储设施或目标disk - 日志保存到硬盘echo - 日志显示在控制台屏幕上email - 日志通过电子邮件发送memory - 日志存储在本地内存缓冲区或多个独立缓冲区(RAM 文件)中。 remote - 日志发送到远程主机script - 当日志消息匹配规则时执行 /system/script/ 中的脚本。该脚本接收两个变量:topics(日志主题字符串)和 message(日志消息内容)。
vrf (name;默认:main)设置远程日志建立出站连接所使用的 VRF,仅当 target=remote 时适用。此设置自 RouterOS 7.19 版本起可用。

创建独立的内存日志缓冲区

就像为不同笔记使用不同文本文件一样,这些独立的内存缓冲区允许你将特定类型的日志消息(基于主题)导向内存中不同的存储区域。

  • 隔离: 发送到 buffer_A 的日志与发送到 buffer_B 的日志完全分离。
  • 独立查看: 你可以使用 /log/print where buffer=buffer_name 一次只查看一个缓冲区的内容。
  • 针对性清除: 你可以使用 /system/logging/action/clear action=buffer_name 清除某个特定缓冲区的内容,而不影响存储在任何其他内存缓冲区中的日志。

这为存储在内存中的日志提供了更好的组织和管理,特别适用于调试或监控,而无需将它们全部混入单一的默认内存日志中。

Sub-menu: /system/logging/action/clear

从 7.20_ab244 起,可以使用命令清除内存日志(target=memory):/system/logging/action/clear action=<logging action name>

主题

每个日志条目都有一个描述日志消息来源的主题。可以为日志消息分配多个主题。例如,OSPF debug 日志有四个不同的主题:route、ospf、debug 和 raw。

11:11:43 route,ospf,debug SEND: Hello Packet 10.255.255.1 -> 224.0.0.5 on lo0 
11:11:43 route,ospf,debug,raw PACKET: 
11:11:43 route,ospf,debug,raw 02 01 00 2C 0A FF FF 03 00 00 00 00 E7 9B 00 00 
11:11:43 route,ospf,debug,raw 00 00 00 00 00 00 00 00 FF FF FF FF 00 0A 02 01 
11:11:43 route,ospf,debug,raw 00 00 00 28 0A FF FF 01 00 00 00 00 

设施无关主题列表

主题描述
critical标记为 critical 的日志条目;每次登录时这些日志条目都会打印到控制台。
debugDebug 日志条目
error错误消息
info信息性日志条目
packet显示接收/发送数据包内容的日志条目
raw显示接收/发送数据包原始内容的日志条目
warning警告消息。

各种 RouterOS 设施使用的主题

主题描述
account由 accounting 设施生成的日志消息。
async由异步设备生成的日志消息
backup由备份创建设施生成的日志消息。
bfd由 BFD 协议生成的日志消息
bgp由 BGP 协议生成的日志消息
calc路由计算日志消息。
capsCAPsMAN 无线设备管理
certificate安全证书
clock由 Clock、IP Cloud 时间变更生成的日志消息。
dns名称服务器查询相关信息
ddns由动态 DNS 工具生成的日志消息
dude与 Dude 服务器软件包和 The Dude 工具相关的消息
dhcpDHCP 客户端、服务器和中继日志消息
e-mail由电子邮件工具生成的消息。
event在路由事件时生成的日志消息。例如,路由表中已安装新路由。
firewall当防火墙规则中设置 action=log 时生成的防火墙日志消息
gsm由 GSM 设备生成的日志消息
hotspot与 Hotspot 相关的日志条目
igmp-proxy与 IGMP Proxy 相关的日志条目
ipsecIPSec 日志条目
iscsi
isdn
interface
kvm与 KVM 虚拟机功能相关的消息
l2tp由 L2TP 客户端和服务器生成的日志条目
lte与 LTE/4G 调制解调器配置相关的消息
ldp与 LDP 协议相关的消息
managerUser Manager 日志消息。
mmeMME 路由协议消息
mplsMPLS 消息
ntpsNTP 客户端生成的日志条目
ospfOSPF 路由协议消息
ovpnOpenVPN 隧道消息
pim与多播 PIM-SM 相关的消息
pppppp 设施消息
pppoe与 PPPoE 服务器/客户端相关的消息
pptp与 PPTP 服务器/客户端相关的消息
radius由 RADIUS Client 生成的日志条目
radvdIPv6 radv 守护进程日志消息。
readSMS 工具消息
ripRIP 路由协议消息
route路由设施日志条目
rsvp由 Resource Reservation Protocol 生成的消息。
script由脚本生成的日志条目
sertcp与负责 "/port remote-access" 的设施相关的日志消息
simulator
stateDHCP 客户端和路由状态消息。
store由 Store 设施生成的日志条目
smb与 SMB 文件共享系统相关的消息
snmp与 Simple network management protocol (SNMP) 配置相关的消息
system通用系统消息
telephony已废弃!以前由 IP telephony 软件包使用
tftpTFTP 服务器生成的消息
timer与 RouterOS 中使用的计时器相关的日志消息。例如 bgp keepalive 日志12:41:40 route,bgp,debug,timer KeepaliveTimer expired``12:41:40 route,bgp,debug,timer RemoteAddress=2001:470:1f09:131::1
ups由 UPS 监控工具生成的消息
vrrp由 VRRP 生成的消息
watchdogWatchdog 生成的日志条目
web-proxy由 web proxy 生成的日志消息
wireless无线日志条目。
writeSMS 工具消息。

示例

创建独立的内存日志缓冲区

创建新的内存日志缓冲区,它们将把指定的日志与默认内存日志分开存储。

/system/logging/action/add name=dhcpMemoryLog target=memory memory-lines=300
/system/logging/action/add name=wirelessLog target=memory memory-lines=500

为创建的缓冲区分配主题。此规则将所有 DHCP 日志发送到 dhcpMemoryLog,将无线日志发送到 wirelessLog 缓冲区。

/system/logging/add topics=dhcp action=dhcpMemoryLog
/system/logging/add topics=wireless action=wirelessLog
# View only DHCP related logs stored in its dedicated buffer
/log/print where buffer=dhcpMemoryLog

# View only non-info Wireless logs stored in its dedicated buffer
/log/print where buffer=wirelessLog
/system/logging/action/clear action=dhcpMemoryLog

记录到文件

要将所有内容记录到文件,添加一个新的日志操作:

/system/logging/action/add name=file target=disk disk-file-name=log

然后使用此新操作记录所有内容:

/system/logging/add action=file

你可以通过发出以下命令只将错误记录到那里:

/system/logging/add topics=error action=file 

这将记录到文件 log.0.txt 和 log.1.txt 中。

你可以通过指定 disk-lines-per-file 以行数指定文件的最大大小。<file>.0.txt 是活动文件,新日志将追加到其中,一旦其大小达到最大值,它将变为 <file>.1.txt,并创建新的空 <file>.0.txt。

你可以通过在该文件名之前指定其目录名,将日志记录到 USB 闪存盘或 MicroSD/CF(在 Routerboard 上)。例如,如果你可以在 /files 下访问作为 usb1 目录的 usb 闪存盘,则应发出以下命令:

/system/logging/action/add name=usb target=disk disk-file-name=usb1/log

警告

来自文件的日志条目将在重启后重新存储回内存。