linux服务日志配置分析

1 Linux 系统的syslog

syslog 用于记录系统和应用程序的运行信息。所有要求都写入一个syslog.h头文件。不仅收集来自操作系统的日志,也可以接收来自各种应用程序和服务的日志。为了便于管理和筛选这些日志,syslog 使用了不同的日志等级和设施(facilities)。

Syslog 设施(Facilities)

Syslog 设施是用于区分日志消息来源的一种机制。常见的设施包括:

  • LOG_AUTH, LOG_AUTHPRIV: 认证和安全相关的消息
  • LOG_CRON: 计划任务(cron)相关的消息
  • LOG_DAEMON: 各种系统守护进程的消息
  • LOG_KERN: 内核生成的消息
  • LOG_LOCAL0LOG_LOCAL7: 这些为本地使用保留的设施,通常被软件开发商用于自定义日志记录
  • LOG_MAIL: 邮件系统相关的消息
  • LOG_SYSLOG: syslog 自身生成的消息
  • LOG_USER: 一般用户级别的消息
  • LOG_UUCP: UUCP 子系统的消息

每个服务或应用程序可以选择一个合适的设施来记录其日志,以便日志信息可以根据来源被正确分类和管理。

如何使用 Syslog

在程序中,可以通过调用 syslog 函数来发送日志消息到 syslog 服务。这通常在 C 或 C++ 程序中使用标准的 syslog API,但许多其他语言(包括 Python、Perl、PHP 等)也提供了访问 syslog 的接口。

在 C 语言中,使用 syslog 的基本方式如下:

#include <syslog.h>
int main() {
    // 打开日志连接
    openlog("myapp", LOG_PID|LOG_CONS, LOG_USER);
    // 写入日志
    syslog(LOG_INFO, "This is a test message.");
    // 关闭日志
    closelog();
    return 0;
}

在这个例子中,openlog 函数用于打开与 syslog 的连接,并设置了日志标识符(“myapp”)、选项(LOG_PIDLOG_CONS)以及设施(LOG_USER)。然后,syslog 函数用于实际发送日志消息。

自定义和配置

开发者在选择设施时,应根据应用程序的性质和用途选择最合适的设施。例如,邮件相关的服务通常使用 LOG_MAIL。使用标准设施可以使得系统管理员更容易地通过配置文件(例如 rsyslog 的 /etc/rsyslog.conf ),来筛选和管理日志。

2 /etc/rsyslog.conf解析

/etc/rsyslog.conf用于配置 rsyslog 服务,该服务负责处理和记录系统日志。将syslog记录的日志按要求写入不同的文件。
`### 文件头部

# /etc/rsyslog.conf configuration file for rsyslog
#
# For more information install rsyslog-doc and see
# /usr/share/doc/rsyslog-doc/html/configuration/index.html
#
# Default logging rules can be found in /etc/rsyslog.d/50-default.conf

这些注释提供了一些基本信息,如配置文件的用途、查看详细文档的位置以及默认日志规则的位置。

模块加载

#################
#### MODULES ####
#################

module(load="imuxsock") # provides support for local system logging
#module(load="immark")  # provides --MARK-- message capability

# provides UDP syslog reception
#module(load="imudp")
#input(type="imudp" port="514")

# provides TCP syslog reception
#module(load="imtcp")
#input(type="imtcp" port="514")

# provides kernel logging support and enable non-kernel klog messages
module(load="imklog" permitnonkernelfacility="on")

这些行加载了不同的 rsyslog 模块:

  • imuxsock:支持本地系统日志记录,通常用于记录由本地系统进程生成的日志。
  • immark:提供 --MARK-- 消息功能(被注释掉了)。
  • imudp:提供 UDP 协议的 syslog 接收功能(被注释掉了)。
  • imtcp:提供 TCP 协议的 syslog 接收功能(被注释掉了)。
  • imklog:提供内核日志支持,并启用非内核 klog 消息。

全局指令

###########################
#### GLOBAL DIRECTIVES ####
###########################

#
# Use traditional timestamp format.
# To enable high precision timestamps, comment out the following line.
#
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

这些指令设置了全局配置:

  • $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat:使用传统的时间戳格式。如果要启用高精度时间戳,可以注释掉这一行。
# Filter duplicated messages
$RepeatedMsgReduction on
  • $RepeatedMsgReduction on:启用重复消息过滤。
#
# Set the default permissions for all log files.
#
$FileOwner syslog
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$PrivDropToUser syslog
$PrivDropToGroup syslog

这些指令设置了日志文件的默认权限和所有权:

  • $FileOwner syslog:日志文件的所有者是 syslog 用户。
  • $FileGroup adm:日志文件的组是 adm
  • $FileCreateMode 0640:日志文件的创建模式是 0640
  • $DirCreateMode 0755:目录的创建模式是 0755
  • $Umask 0022:umask 设置为 0022
  • $PrivDropToUser syslog$PrivDropToGroup syslog:将权限降级到 syslog 用户和组。
#
# Where to place spool and state files
#
$WorkDirectory /var/spool/rsyslog
  • $WorkDirectory /var/spool/rsyslog:设置工作目录,存放缓存和状态文件。
#
# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf
  • $IncludeConfig /etc/rsyslog.d/*.conf:包含 /etc/rsyslog.d/ 目录中的所有配置文件。这样可以分离配置,提高可维护性。

日志记录规则

*.err;kern.debug;daemon.notice /var/log/messages

这行配置了一条日志记录规则:

  • *.err:记录所有设施的错误级别日志。
  • kern.debug:记录内核的调试级别日志。
  • daemon.notice:记录守护进程的通知级别日志。
  • /var/log/messages:将上述日志记录到 /var/log/messages 文件中。

3 Python应用服务输出日志到/var/log/syslog

Python 应用作为一个服务(例如通过 systemd 启动)运行时,它的输出通常会被系统的日志管理器接管。这里涉及到几个关键的组件和概念:

  1. Systemd 和服务管理:Systemd 是一个系统和服务管理器,用于控制哪些程序在系统启动时自动运行。当你通过 systemd 启动一个服务时,它会启动指定的程序,并管理这个程序的运行。

  2. 标准输出和标准错误:程序运行时产生的输出通常分为标准输出(stdout)和标准错误(stderr)。在交互式运行程序时,这些输出通常显示在终端上。

  3. 日志重定向:当通过 systemd 启动服务时,这些服务的 stdout 和 stderr 不是直接显示在终端,而是被 systemd 重定向。Systemd 提供了多种日志处理方式,包括将输出发送到系统的日志系统(如 syslog)、仅保留在 systemd 的日志缓存中(journal),或者重定向到其他文件或设备。

  4. Syslog:Syslog 是一个标准的日志协议和应用,用于接收和存储系统日志信息。在 Linux 中,/var/log/syslog 文件是一个通用日志文件,用于存储从不同来源(包括多数系统服务)收集的日志。

  5. 配置文件影响:Systemd 服务的配置文件(通常是一个位于 /etc/systemd/system/.service 文件)可以指定服务的日志去向。例如,StandardOutputStandardError 属性可以被设置为将输出重定向到 syslog、journal 或其他目标。

例如,如果 Python 应用是作为一个 systemd 服务运行,它的配置文件可能看起来如下:

[Unit]
Description=My Python Application

[Service]
ExecStart=/usr/bin/python3 /path/to/your_script.py
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=my_python_app

[Install]
WantedBy=multi-user.target

在这个例子中,StandardOutputStandardError 都设置为 syslog,这意味着所有的标准输出和错误都会被发送到系统的 syslog 服务,并最终写入 /var/log/syslog 文件。同时,SyslogIdentifier 设置一个标识符,使得来自这个服务的日志可以在 syslog 文件中容易被识别。

  • 34
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值