查看源代码 os_sup (os_mon v2.10.1)

操作系统系统消息接口

os_sup 是一个进程,提供从操作系统到 Erlang 运行时系统中的错误日志记录器的消息传递服务。 它是 OS_Mon 应用程序的一部分,请参阅 os_mon。 可用于 Solaris 和 Windows。

从操作系统接收到的消息会导致调用用户定义的回调函数。 该函数可以执行任何必要的过滤和格式化,然后部署任何适合用户应用程序的日志记录类型。

Solaris 操作

Solaris (SunOS 5.x) 消息是从系统日志守护进程 syslogd 中检索的。

启用该服务包括需要 root 权限的操作,例如更改可执行二进制文件的所有权和文件权限,以及为 syslogd 创建配置文件的修改副本。 当 os_sup 终止时,必须禁用该服务,这意味着必须恢复原始配置。 启用/禁用可以在 os_sup 内部或外部完成。 请参阅下面的 配置

警告

此进程不能在同一硬件上运行多个实例。 如果在同一台机器上执行两个或多个 Erlang 节点,则必须配置 OS_Mon 以仅在一个节点上启动 os_sup

接收到的事件格式未定义。

Windows 操作

Windows 消息是从事件日志文件中检索的。

nteventlog 模块用于实现 os_sup。 请参阅 nteventlog。 请注意,nteventlog 的启动函数不需要使用,因为在这种情况下,该进程会自动作为 OS_Mon 监控树的一部分启动。

操作系统消息的格式为元组 {Time, Category, Facility, Severity, Message}

  • Time = {MegaSecs, Secs, MicroSecs} - 由 BIF now/0 返回的时间戳。

  • Category = string() - 通常为 "System""Application""Security" 之一。 请注意,NT 事件日志查看器对类别有另一种概念,在大多数情况下,该概念完全没有意义,因此不会导入到 Erlang 中。 这里所称的类别是普通 NT 系统中发生的三种主要事件类型之一。

  • Facility = string() - 消息的来源,通常是生成该消息的应用程序的名称。 这几乎可以是任何字符串。 当匹配来自某些应用程序的消息时,可能必须考虑应用程序的版本号。 这就是 NT 事件查看器所称的“源”。

  • Severity = string() - "Error""Warning""Informational""Audit_Success""Audit_Faulure" 之一,或者在当前未知的 Windows NT 版本的情况下,为 "Severity_Unknown"

  • Message = string() - 格式与 NT 事件日志查看器中的格式完全相同。 二进制数据不会导入到 Erlang 中。

配置

  • os_sup_mfa = {Module, Function, Args} - 要使用的回调函数。ModuleFunction 是原子,Args 是术语列表。 当收到操作系统消息 Msg 时,此函数会以 apply(Module, Function, [Msg | Args]) 的方式调用。

    默认值为 {os_sup, error_report, [Tag]},它将使用 error_logger:error_report(Tag, Msg) 将事件发送到错误日志记录器。Tagos_sup_errortag 的值,请参阅下文。

  • os_sup_errortag = atom() - 此参数定义了在使用默认回调函数将消息发送到错误日志记录器时使用的错误报告类型。 默认值为 std_error,这意味着事件由标准事件处理程序处理。

  • os_sup_enable = bool() - 仅限 Solaris。 定义服务是否应在 os_sup 内部 (true) 或外部 (false) 启用(和禁用)。 出于向后兼容的原因,默认值为 true。 建议值为 false,因为 Erlang 模拟器通常不应在需要启用该服务的 root 权限下运行。

  • os_sup_own = string() - 仅限 Solaris。 定义包含 syslogd 的备份副本和 Erlang 特定配置文件的目录,以及从 syslogd 接收消息的命名管道。 默认值为 "/etc"

  • os_sup_syslogconf = string() - 仅限 Solaris。 定义 syslogd 的配置文件的完整名称。 默认值为 "/etc/syslog.conf"

另请参阅

error_logger, os_mon

Solaris 文档中的 syslogd(1M), syslog.conf(4)

摘要

函数

禁用 os_sup 服务。 仅在 Solaris 上需要。

启用 os_sup 服务。 仅在 Solaris 上需要。

函数

-spec disable() -> ok | {error, Res} when Res :: string().

等效于 disable("/etc", "/etc/syslog.conf")

-spec disable(Dir, Conf) -> ok | {error, Res} when Dir :: string(), Conf :: string(), Res :: string().

禁用 os_sup 服务。 仅在 Solaris 上需要。

如果配置参数 os_sup_enablefalse,则此函数将由 os_sup 自动调用,使用与调用 enable/2 时相同的参数。

如果 os_sup_enabletrue,则必须在停止 OS_Mon/os_sup之后 调用此函数。Dir 定义包含 syslogd 的备份副本和 Erlang 特定配置文件的目录,以及从 syslogd 接收消息的命名管道。 默认为 "/etc"Conf 定义 syslogd 的配置文件的完整名称。 默认值为 "/etc/syslog.conf"

导致对操作系统进行调用

<PRIVDIR>/bin/mod_syslog nootp Dir Conf

其中 <PRIVDIR> 是 OS_Mon 的 priv 目录,即 code:priv_dir(os_mon)

如果这产生了预期结果 "0",则返回 ok,如果产生了其他任何结果,则返回 {error, Res}

注意

此函数需要 root 权限才能成功。

-spec enable() -> ok | {error, Res} when Res :: string().

等效于 enable("/etc", "/etc/syslog.conf")

-spec enable(Dir, Conf) -> ok | {error, Res} when Dir :: string(), Conf :: string(), Res :: string().

启用 os_sup 服务。 仅在 Solaris 上需要。

如果配置参数 os_sup_enablefalse,则此函数将由 os_sup 自动调用,使用 os_sup_ownos_sup_syslogconf 的值作为参数。

如果 os_sup_enabletrue,则必须在启动 OS_Mon/os_sup 之前 调用此函数。Dir 定义包含 syslogd 的备份副本和 Erlang 特定配置文件的目录,以及从 syslogd 接收消息的命名管道。 默认为 "/etc"Conf 定义 syslogd 的配置文件的完整名称。 默认值为 "/etc/syslog.conf"

导致对操作系统进行调用

<PRIVDIR>/bin/mod_syslog otp Dir Conf

其中 <PRIVDIR> 是 OS_Mon 的 priv 目录,即 code:priv_dir(os_mon)

如果这产生了预期结果 "0",则返回 ok,如果产生了其他任何结果,则返回 {error, Res}

注意

此函数需要 root 权限才能成功。