`
jiagou
  • 浏览: 2536324 次
文章分类
社区版块
存档分类
最新评论

syslog 详细解释及编程接口

 
阅读更多

Syslog

Syslog已被许多日志函数采纳,它用在许多保护措施中——任何程序都可以通过syslog 纪录事件。Syslog可以纪录系统事件,可以写到一个文件或设备中,或给用户发送一个信息。它能纪录本地事件或通过网络纪录另一个主机上的事件。
Syslog设备依据两个重要的文件:/etc/syslogd(守护进程)和/etc/syslog.conf配置文件,习惯上,多数syslog信息被写到/var/adm或/var/log目录下的信息文件中(messages.*)。一个典型的syslog纪录包括生成程序的名字和一个文本信息。它还包括一个设备和一个优先级范围(但不在日之中出现)。
每个syslog消息被赋予下面的主要设备之一:
LOG_AUTH——认证系统:login、su、getty等
LOG_AUTHPRIV——同LOG_AUTH,但只登录到所选择的单个用户可读的文件中
LOG_CRON——cron守护进程
LOG_DAEMON——其他系统守护进程,如routed
LOG_FTP——文件传输协议:ftpd、tftpd
LOG_KERN——内核产生的消息
LOG_LPR——系统打印机缓冲池:lpr、lpd
LOG_MAIL——电子邮件系统
LOG_NEWS——网络新闻系统
LOG_SYSLOG——由syslogd(8)产生的内部消息
LOG_USER——随机用户进程产生的消息
LOG_UUCP——UUCP子系统
LOG_LOCAL0~LOG_LOCAL7——为本地使用保留
Syslog为每个事件赋予几个不同的优先级:
LOG_EMERG——紧急情况
LOG_ALERT——应该被立即改正的问题,如系统数据库破坏
LOG_CRIT——重要情况,如硬盘错误
LOG_ERR——错误
LOG_WARNING——警告信息
LOG_NOTICE——不是错误情况,但是可能需要处理
LOG_INFO——情报信息
LOG_DEBUG——包含情报的信息,通常旨在调试一个程序时使用

syslog.conf文件指明syslogd程序纪录日志的行为,该程序在启动时查询配置文件。该文件由不同程序或消息分类的单个条目组成,每个占一行。对每类消息提供一个选择域和一个动作域。这些域由tab隔开:选择域指明消息的类型和优先级;动作域指明syslogd接收到一个与选择标准相匹配的消息时所执行的动作。每个选项是由设备和优先级组成。当指明一个优先级时,syslogd将纪录一个拥有相同或更高优先级的消息。所以如果指明"crit",那所有标为crit、alert和emerg的消息将被纪录。每行的行动域指明当选择域选择了一个给定消息后应该把他发送到哪儿。

例如,如果想把所有邮件消息纪录到一个文件中,如下:
#Log all the mail messages in one place
mail.* /var/log/maillog
其他设备也有自己的日志。UUCP和news设备能产生许多外部消息。它把这些消息存到自己的日志(/var/log/spooler)中并把级别限为"err"或更高。例如:
# Save mail and news errors of level err and higher in aspecial file.
uucp,news.crit /var/log/spooler
当一个紧急消息到来时,可能想让所有的用户都得到。也可能想让自己的日志接收并保存。
#Everybody gets emergency messages, plus log them on anther machine
*.emerg *
*.emerg @linuxaid.com.cn
alert消息应该写到root和tiger的个人账号中:
#Root and Tiger get alert and higher messages
*.alert root,tiger
有时syslogd将产生大量的消息。例如内核("kern"设备)可能很冗长。用户可能想把内核消息纪录到/dev/console中。下面的例子表明内核日志纪录被注释掉了:
#Log all kernel messages to the console
#Logging much else clutters up the screen
#kern.* /dev/console
用户可以在一行中指明所有的设备。下面的例子把info或更高级别的消息送到/var/log/messages,除了mail以外。级别"none"禁止一个设备:
#Log anything(except mail)of level info or higher
#Don't log private authentication messages!
*.info:mail.none;authpriv.none /var/log/messages
在有些情况下,可以把日志送到打印机,这样网络入侵者怎么修改日志都没有用了。通常要广泛纪录日志。Syslog设备是一个攻击者的显著目标。一个为其他主机维护日志的系统对于防范服务器攻击特别脆弱,因此要特别注意。
有个小命令logger为syslog(3)系统日志文件提供一个shell命令接口,使用户能创建日志文件中的条目。用法:logger 例如:logger This is a test!
它将产生一个如下的syslog纪录:Aug 19 22:22:34 tiger: This is a test!
注意不要完全相信日志,因为攻击者很容易修改它的。


三个函数的原型和说明:

void openlog( char *ident, int option, int facility)
void syslog( int priority, char *format, ...)
void closelog( void )

priority是facility及level的组合,其後参数的用法类似printf。

例: #include
void main(void)
{
if (fork()==0) {
for (;;) {
syslog(LOG_USER|LOG_INFO,"syslog programming test/n");
sleep(10);
}
}
}

检验:
#tail -f /var/log/messages
Mar 22 01:42:51 foxman log: syslog programming test
Mar 22 01:43:31 foxman last message repeated 4 times
Mar 22 01:44:31 foxman last message repeated 6 times
Mar 22 01:45:31 foxman last message repeated 6 times
Mar 22 01:46:21 foxman last message repeated 5 times
--------------------------------------------------------------------------------
option
用于openlog()的option参数可以是以下几个的组合:
LOG_CONS : 如果送到system logger时发生问题,直接写入系统console。
LOG_NDELAY : 立即开启连接(通常,连接是在第一次写入讯息时才打开的)。
LOG_PERROR : 将讯息也同时送到stderr
LOG_PID : 将PID含入所有讯息中
facility
该参数用来指定何种程式在记录讯息,这可让设定档来设定何种讯息如何处理。
LOG_AUTH : 安全/授权讯息(别用这个,请改用LOG_AUTHPRIV)
LOG_AUTHPRIV : 安全/授权讯息
LOG_CRON : 时间守护神专用(cron及at)
LOG_DAEMON : 其它系统守护神
LOG_KERN : 核心讯息
LOG_LOCAL0到LOG_LOCAL7 : 保留
LOG_LPR : line printer次系统
LOG_MAIL : mail次系统
LOG_NEWS : USENET news次系统
LOG_SYSLOG : syslogd内部所产生的讯息
LOG_USER(default) : 一般使用者等级讯息
LOG_UUCP : UUCP次系统
level
决定讯息的重要性. 以下的等级重要性逐次递减:
LOG_EMERG : 系统无法使用
LOG_ALERT : 必须要立即采取反应行动
LOG_CRIT : 重要状况发生
LOG_ERR : 错误状况发生
LOG_WARNING : 警告状况发生
LOG_NOTICE : 一般状况,但也是重要状况
LOG_INFO : 资讯讯息
LOG_DEBUG : 除错讯息


如果没有改配置文件的话,默认的会写到 /var/log/messages 中。

可以看看你的syslog 配置文件 /etc/syslog.conf,比如我的是:
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages

# The authpriv file has restricted access.
authpriv.* /var/log/secure

# Log all the mail messages in one place.
mail.* /var/log/maillog

# Log cron stuff
cron.* /var/log/cron

# Everybody gets emergency messages
*.emerg *

# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler

# Save boot messages also to boot.log
local7.* /var/log/boot.log

该文件的格式为 facility.priority action,这些字段的定义如下:

facility
指定产生消息的子系统。facility 有效的关键字有 auth、authpriv、cron、daemon、kern、lpr、mail、news、syslog、user、uucp 以及 local0 到 local7。

priority
指定消息的最低严重性,即此优先级和高于此优先级的消息将由这个规则匹配。priority 的有效关键字有 debug、info、notice、warning、err、crit、alert 和 emerg。

action
action 字段可以是文件名、tty(如 /dev/console)、以 @ 为前缀的远程机器、以逗号分隔的用户列表,或是 * 以表明向所有登录用户发送消息。最常见的操作是一个简单的文件名。

注意看着一行:*.info;mail.none;authpriv.none;cron.none /var/log/messages
因此所有比 LOG_INFO 级别高的讯息(当然包括LOG_ERR 了)都会写到 /var/log/messages中。

syslog.conf由syslogd读取。
syslogd接受用户空间发送来的日志信息。
用户空间程序通过调用和syslog相关的api发送日志,接口上面的帖子已经有了。
消息通过本地UNIX套接字发送给syslogd,由syslogd根据配置文件中的配置进行处理。
内核消息不是直接发送给syslogd的,而是由klogd读取/proc/kmesg文件,将其中读取的内核日志信息再转发给syslogd。

本身syslog的api没有什么复杂的,我建议你可以看看syslogd和klogd的源代码,也不大,总共不到5000行。

<tcp/ip进行网际互联 第三卷 linux/posix套接字版>

最后的附录里介绍的很清楚。。先看这个。。

unix环境高级编程里也有一些,,还设计到内核的log,后参考这个。。。

函数常用的就着么几个openlig syslog closelog

man syslog

分享到:
评论

相关推荐

    SYSLOG日志数据采集实现

    syslog 使用UDP 作为传输协议,通过目的端口514(也可以是其他定义的端口 号),将所有安全设备的日志管理配置发送到安装了syslog 软件系统的日志服务器,syslog 日志服务器自动接收日志数据并写到日志文件中。

    syslog receiver syslog接收测试工具

    syslog receiver syslog接收测试工具 MegaLogSyslogTestReceiverV2.zip

    syslog工具(win10可以用)

    syslog工具(win10可以用)syslog工具(win10可以用)syslog工具(win10可以用)syslog工具(win10可以用)syslog工具(win10可以用)syslog工具(win10可以用)syslog工具(win10可以用)syslog工具(win10可以用)syslog工具(win10...

    syslog-ng安装包及安装步骤

    syslog-ng安装包及安装步骤(syslog-ng_3.3.5.tar.gz,eventlog_0.2.12.tar.gz,syslog-ng安装步骤.txt)

    kiwi syslog server 9.5

    Kiwi Syslog Server安装教程: 1. 运行Kiwi_Syslog_Server_9.5.0.setup.exe安装程序 2. 安装完成退出程序 3. 拷贝SolarWinds.Licensing.Framework.dll和ufmod.dll两个文件到软件安装目录,选择覆盖目的文件 4. 运行...

    MT_Syslog.exe中文版 MT_Syslog中文版

    MT_Syslog MT_Syslog.exe MT_Syslog中文版 ros日志远程记录 ros日志 网上找了好久也没有找到个中文版的,很是郁闷,最后干脆我自己做个汉化要点分不好意思啊,花了我半天的时间翻译,编译的,一点辛苦,有的地方,不...

    kiwisyslog 免费版

    kiwisyslog server 免费版本,可收集展示syslog日志统计报表

    SysLog日志工具1

    SysLog日志工具术语SYSLOG:系统日志协议SYSLOG功能功能启/停用参数配置,包括使用协议、服务器地址、服务器端口、字符编码SYSLOG预置数据使用已

    SyslogWatcher

    Syslog Watcher is a Windows-based syslog server for corporate networks. The syslog server collects, stores, parses, displays and explains syslog information to both new and professional network ...

    windows syslog server测试工具

    windows syslog测试工具

    Syslog Watcher 2.zip

    通过专用的syslog服务器和syslog协议将来自整个网络的事件记录整合到一个中央存储库中,对于网络安全具有重大意义,syslog日志服务器可收集,解析,存储,分析和解释系统日志消息给专业网络安全管理员,有助于提高...

    redhat syslog 配置 笔记

    redhat syslog 配置 笔记 介绍syslog.conf的配置文件格式和配置实例

    安全设备的Syslog发送测试软件

    软件用易语言编写,整理了主流安全厂商的syslog格式,可模拟发送安全厂商的syslog到指定的syslog服务器,服务器支持自定义端口与IP,编码格式为UTF-8

    syslog_win32.lib

    windows系统下,按照syslog协议,将客户端日志上传到服务器 步骤: 1..准备工作,从syslog-win32网站上下载源代码压缩包(syslog-win32-0.3.tar.bz2)。解压缩后,把客户端所使用的两个文件添加到使用syslog的项目中...

    Syslog配置及使用简介

    syslog体系结构,syslog模糊了发送方、接收方,设备、中继以及收集器的区别,一台设备可以同时是某种日志信息的中继、也可以是另外某种信息的收集器,同时可以作为发送者发送日志

    SYSLOG发送小程序

    非常轻便的SYSLOG日志发送及日志测试软件,windows平台上使用,可测试windows、linux日志发送。

    Kiwi Syslog Server 9.6.2官方免费版本

    软件介绍: Kiwi Syslog ...Kiwi-Syslog-Server是一款应用于WINDOWS系统的系统日志守护进程,能够接收并记录系统日志,各种设备的SYSLOG消息,内置丰富的日志记录选项,能详细记录各种防火墙日志,并进行筛选分析。

    syslog syslog4j syslogd linuxsyslog4j

    syslog syslog4j syslogd linuxsyslog4j

    python实现syslog模拟器

    模拟发送syslog的过程,向指定ip的514(默认syslog)端口发送文本信息,实现syslog模拟,代码可以帮你理解标准syslog信息的构成,理解facility和level信息以什么样的格式包含在报文内。更详细内容可查看...

    syslog日志服务

    这个是一个syslog日志服务器,这个是简易版的,在过一段时间的整理后我会上传一个以java为编程语言的syslog日志服务器,在这里也是做了预告,使用了syslog4j的jar包,可能是要看这个帖子的回复量来决定是否要上传...

Global site tag (gtag.js) - Google Analytics