Junos Syslog Engine for Salt
瞻博网络支持使用 Salt 管理运行 Junos OS 的设备。Salt 安装包括 Junos 系统日志引擎 (用于 Salt),该引擎侦听来自托管设备的 Junos OS 系统日志消息,并在 Salt 事件总线上发布这些消息。Junos 系统日志引擎与现有反应器或自定义反应器结合使用,使您能够使用 Salt 对运行 Junos OS 的设备进行基于事件的状态管理。
以下部分讨论 Junos 系统日志引擎的工作原理、如何配置和启用它、如何配置要发送和订阅的事件,以及如何在事件总线上查看这些事件。
了解 Junos 系统日志引擎
Junos OS 生成系统日志消息(也称为 系统日志 消息)来记录设备上发生的事件,包括日常作事件、故障和错误情况以及紧急或关键情况。系统日志消息可以包含以下信息:
生成消息的 Junos OS 进程
生成消息的日期和时间
事件的严重性
唯一标识事件的标记
提供有关事件的信息的字符串
例如,以下系统日志消息记录了在路由器 1 上成功完成提交作:
Sep 3 11:52:22 router1 mgd[83498]: UI_COMMIT_COMPLETED: commit complete
Salt 引擎是由 Salt 监控并利用 Salt 的外部系统进程。Salt 引擎可以在 Salt 事件总线上导出或导入事件。Salt 安装包括 Junos 系统日志引擎,该引擎可以监控发送到 Salt 服务器的 Junos OS 系统日志消息,并将其发布到 Salt 事件总线上。 图 1 展示了包含 Junos 系统日志引擎的 Salt 设置。启用后,Junos 系统日志引擎将在指定端口上侦听运行Junos OS的托管设备的系统日志事件。
当 Junos 系统日志引擎收到事件时,它会提取事件信息,将其转换为 Salt 格式,并在 Salt 事件总线上发布。以下输出表示在 Salt 事件总线上显示的同一提交完成事件:
jnpr/syslog/router1/UI_COMMIT_COMPLETED {
"_stamp": "2019-09-03T18:52:11.279878",
"daemon": "mgd",
"event": "UI_COMMIT_COMPLETED",
"facility": 23,
"hostip": "198.51.100.2",
"hostname": "router1",
"message": "commit complete",
"pid": "83498",
"priority": 188,
"raw": "<188>Sep 3 11:52:22 router1 mgd[83498]: UI_COMMIT_COMPLETED: commit complete",
"severity": 4,
"timestamp": "2019-09-03 18:52:11"
}
Salt 事件都使用相同的基本数据结构,该结构由事件标记和正文组成。事件标记只是事件的高级描述,正文是包含事件详细信息的字典。在前面的示例中,事件标记为 jnpr/syslog/router1/UI_COMMIT_COMPLETED。
如何启用 Junos 系统日志引擎
Junos 系统日志引擎要求在运行引擎的服务器上安装pyparsing和 twisted Python 模块。本文档假定 Junos 系统日志引擎在 Salt 主机上运行。有关安装必备组件和启用 Junos 系统日志引擎的详细说明,请参阅《Salt for Junos OS 快速入门指南中的配置 Junos Syslog 引擎。
要使用 Junos 系统日志引擎,必须将运行 Junos OS 的设备配置为将其系统日志消息发送到 Salt 主机上的指定端口。您可以将设备配置为发送所有事件,或仅发送与特定设施或消息严重性级别相对应的事件。
要发送所有事件,请配置 any any 为指示所有设施和所有消息严重性级别。
[edit] saltuser@router1# set system syslog host salt-server port 9999 any any saltuser@router1# commit
例如,要仅发送严重性级别为 info 或更高的安全事件,请配置 security info。
[edit] saltuser@router1# set system syslog host salt-server port 9999 security info saltuser@router1# commit
有关系统日志记录工具和消息严重性级别的详细信息,请参阅 系统日志记录工具和消息严重性级别。
要启用 Junos 系统日志引擎,必须在 Salt 主配置文件中的密钥下 engines 配置引擎,并指定在运行 Junos OS 的设备上配置的相同端口。
engines:
- junos_syslog:
port: 9999
要应用配置,您必须重新启动 Salt Master,这会自动启动 Junos 系统日志引擎进程。然后,Junos 系统日志引擎侦听指定端口上的 Junos OS 系统日志消息,提取事件信息,并以 Salt 格式在 Salt 事件总线上发布。要创建和配置在发生特定事件时自动采取行动的反应堆,请参阅 为 Junos OS 事件配置 Salt 反应堆。
如何配置事件标记
发布到 Salt 事件总线的事件有两个组成部分:事件标记和数据。Junos OS 事件使用以下默认事件标记(或事件主题)语法:
jnpr/syslog/hostname/event
Junos OS 事件的事件标记必须始终以 jnpr/syslog开头,但您可以通过在引擎配置中定义 topic 参数并指定要包含的字段来自定义其余字段。例如,以下配置将生成事件标记,其中包括设备的 IP 地址、生成消息的进程和事件:
engines:
- junos_syslog:
port: 9999
topic: jnpr/syslog/hostip/daemon/event
配置此语法时,已完成的提交作事件的标记可能是:
jnpr/syslog/198.51.100.2/mgd/UI_COMMIT_COMPLETED
事件标记字段可以包含以下字段的 jnpr/syslog/任意组合:
daemoneventhostiphostnamemessagepidpriorityraw (the raw event data forwarded from the device)severitytimestamp
如何订阅特定 Junos OS 进程的事件
如 如何启用 Junos 系统日志引擎中所述,您可以配置运行 Junos OS 的设备将哪些系统日志事件发送到 Junos 系统日志引擎。默认情况下,Junos 系统日志引擎会在 Salt 事件总线上发布所有已接收事件的事件数据。您还可以通过在引擎配置中配置 daemon 参数,将 Junos 系统日志引擎自定义为仅订阅特定进程。配置此参数时,Junos 系统日志引擎只会发布与 Salt 事件总线上的这些进程相关的事件。
以下 Salt 引擎配置使 Junos 系统日志引擎订阅管理进程 (mgd) 和路由协议进程 (rpd) 中的事件:
engines:
- junos_syslog:
port: 9999
topic: jnpr/syslog/hostname/event
daemon:
- mgd
- rpd
重新启动 salt-master 进程以应用配置后,Junos 系统日志引擎只会在 Salt 事件总线上发布来自这两个进程的事件。
jnpr/syslog/router1/UI_DBASE_LOGIN_EVENT {
"_stamp": "2019-08-28T22:16:42.612723",
"daemon": "mgd",
"event": "UI_DBASE_LOGIN_EVENT",
"facility": 23,
"hostip": "198.51.100.2",
"hostname": "router1",
"message": "User 'saltuser' entering configuration mode",
"pid": "52764",
"priority": 189,
"raw": "<189>Aug 28 15:17:00 router1 mgd[52764]: UI_DBASE_LOGIN_EVENT: User 'saltuser' entering configuration mode",
"severity": 5,
"timestamp": "2019-08-28 22:16:42"
}
如何在 Salt Event Bus 上查看事件
Salt 运行器在 Salt 主节点上执行模块,而不是在节点上执行模块。您可以使用 salt-run 命令执行运行器。要实时查看 Salt 主事件总线上的事件,请执行以下命令,该命令在终端中显示事件:
saltuser@salt-master~$ sudo salt-run state.event pretty=True
jnpr/syslog/router1/UI_COMMIT_COMPLETED {
"_stamp": "2019-07-24T17:17:30.390374",
"daemon": "mgd",
"event": "UI_COMMIT_COMPLETED",
"facility": 23,
"hostip": "198.51.100.2",
"hostname": "router1",
"message": "commit complete",
"pid": "5795",
"priority": 188,
"raw": "<188>Jul 24 10:17:38 router1 mgd[5795]: UI_COMMIT_COMPLETED: commit complete",
"severity": 4,
"timestamp": "2019-07-24 17:17:30"
如果要快速触发事件,可以 ping 工作节点,如以下示例所示:
saltuser@salt-master~$ sudo salt 'router1' test.ping
相应的事件总线输出显示 Salt 作业和工作节点的响应。
20190626185606864697 {
"_stamp": "2019-06-26T18:56:06.865972",
"minions": [
"router1"
]
}
salt/job/20190626185606864697/new {
"_stamp": "2019-06-26T18:56:06.867352",
"arg": [],
"fun": "test.ping",
"jid": "20190626185606864697",
"minions": [
"router1"
],
"missing": [],
"tgt": "router1",
"tgt_type": "glob",
"user": "sudo_saltuser"
}
salt/job/20190626185606864697/ret/router1 {
"_stamp": "2019-06-26T18:56:06.968557",
"cmd": "_return",
"fun": "test.ping",
"fun_args": [],
"id": "router1",
"jid": "20190626185606864697",
"retcode": 0,
"return": true,
"success": true
}
要测试 Junos 系统日志引擎配置,可以在运行 Junos OS 的设备上执行作。设备必须配置为以该作的设施和该严重性级别向 Junos 系统日志引擎发送消息。此外,引擎必须订阅来自该进程(或所有进程,这是默认设置)的消息。执行该作时,Junos 系统日志引擎会将事件发布到 Salt 事件总线。