- 浏览: 599562 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
oldrat:
还给出了 给出“对于多条A记录是采用什么策略返回IP”的结论, ...
【转载】关于java dns cache (域名缓存时间) -
snowing0427:
特地登录来感谢一下楼主~!!!
nginx里的break和last -
夏日小草:
403禁止了。
User Agent信息大全 -
uag:
比如从请求头里的$HOST变量里获取。(针对nginx,需要加 ...
nginx替换apache中的一个跳转问题 -
thinktothings:
修改Makefile文件 在哪,怎么修改?
使用sz,rz命令来上传和下载文件
========================================
syslog已被许多日志函数采纳,它用在许多保护措施中,任何程序都可以通过syslog记录事件。syslog可以记录系统事件,可以写到一个文件或设备中,或给用户发送一个信息。它能记录本地事件或通过网络记录另一个主机上的事件。
1、syslog简介
syslog是一种工业标准的协议,可用来记录设备的日志。在UNIX系统,路由器、交换机等网络设备中,系统日志(System Log)记录系统中任何时间发生的大小事件。管理者可以通过查看系统记录,随时掌握系统状况。UNIX的系统日志是通过syslogd这个进程记录系统有关事件记录,也可以记录应用程序运作事件。通过适当的配置,我们还可以实现运行syslog协议的机器间通信,通过分析这些网络行为日志,藉以追踪掌握与设备和网络有关的状况。
2、syslog配置文件
syslog设备依据两个重要的文件:/etc/syslogd守护进程和/etc/syslog.conf配置文件。通常情况下,多数syslog信息被写到/var/adm或/var/log目录下的信息文件中(messages.*)。一个典型的syslog记录包括生成程序的名字和一个文本信息。它还包括一个设备和一个优先级范围。
通过使用syslog.conf文件,可以对生成的日志的位置及其相关信息进行灵活的配置。该配置文件指明了syslogd守护程序记录日志的行为,该程序在启动时查询配置文件。该文件由不同程序或消息分类的单个条目组成,每个占一行。对每类消息提供一个选择域和一个动作域。这些域由tab隔开:
选择域指明消息的类型和优先级;
动作域指明syslogd接收到一个与选择标准相匹配的消息时所执行的动作。
syslog.conf行的基本语法是:
消息类型.优先级 动作域
其中,每个选择域是由消息类型和优先级组成。当指明一个优先级时,syslogd将记录一个拥有相同或更高优先级的消息。Linux中一些主要的消息类型如表2所示,表3列出了一些优先级信息:
表2 syslog消息类型
消息类型 | 消息来源 |
kern | 内核 |
User | 用户程序 |
Damon | 系统守护进程 |
电子邮件系统 | |
Auth | 与安全权限相关的命令 |
Lpr | 打印机 |
News | 新闻组信息 |
Uucp | Uucp程序 |
Cron | 记录当前登录的每个用户信息 |
wtmp | 一个用户每次登录进入和退出时间的永久记录 |
Authpriv | 授权信息 |
表3 syslog常用优先级
优先级 | 描述 |
emerg | 最高的紧急程度状态 |
alert | 紧急状态 |
Cirt | 重要信息 |
warning | 警告 |
err | 临界状态 |
notice | 出现不寻常的事情 |
info | 一般性消息 |
Debug | 调试级信息 |
None | 不记录任何日志信息 |
不同的服务类型有不同的优先级,数值较大的优先级涵盖数值较小的优先级。如果某个选择条件只给出了一个优先级而没有使用任何优先级限定符,对应于这个优先级的消息以及所有更紧急的消息类型都将包括在内。比如说,如果某个选择条件里的优先级是“warning”,它实际上将把“warning”、“err”、“crit”、“alert“和“emerg”都包括在内。
syslog允许人们使用三种限定符对优先级进行修饰:星号(*)、等号(=)和叹号(!):
星号(*)的含义是把本项服务生成的所有日志消息都发送到操作动作指定的地点。就像它在规则表达式里的作用一样,星号代表“任何东西”。在前面给出的例子里,“mail.*”将把所有优先级的消息都发送到操作动作指定的/var/log/mail文件里。使用“*”限定符与使用“debug”优先级的效果完全一样,后者也将把所有类型的消息发送到指定地点。
等号(=)的含义是只把本项服务生成的本优先级的日志消息都发送到操作动作指定的地点。比如说,可以用“=”限定符只发送调试消息而不发送其他更紧急的消息(这将为应用程序减轻很多负担)。当你只需要发送特定优先级别的消息时,就要使用等号限定符。
叹号(!)的含义是把本项服务生成的所有日志消息都发送到操作动作指定的地点,但本优先级的消息不包括在内。
所以,根据上面介绍的相关知识,我们给出如下例子作为示范:
(1)如果指明\"crit\",那所有标为crit、alert和emerg的消息将被记录。每行的行动域指明当选择域选择了一个给定消息后应该把他发送到哪儿。例如,如果想把所有邮件消息记录到一个文件中,如下所示:
#Log all the mail messages in one place
mail.* /var/log/maillog(2)其他设备也有自己的日志。UUCP和news设备能产生许多外部消息。它把这些消息存到自己的日志(/var/log/spooler)中并把级别限为\"err\"或更高。例如:
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler(3)当一个紧急消息到来时,可能想让所有的用户都得到。也可能想让自己的日志接收并保存。
#Everybody gets emergency messages, plus log them on anther machine
*.emerg *
*.emerg @linuxaid.com.cn(4)有时syslogd将产生大量的消息。例如内核(\"kern\"设备)可能很冗长,用户很难看得清楚明了,那么用户可能想把内核消息记录到/dev/console中。下面的例子表明内核日志记录被注释掉了:
#Log all kernel messages to the console
#Logging much else clutters up the screen
#kern.* /dev/console(5)用户可以在一行中指明所有的设备。下面的例子把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
syslogd守护程序是由/etc/rc.d/init.d/syslog脚本在运行级2下被调用的,缺省不使用选项。但有两个选项-r和-h很有用:
如果将要使用一个日志服务器,必须调用syslogd -r。缺省情况下syslogd不接受来自远程系统的信息。当指定-r选项,syslogd将会监听从514端口上进来的UDP包。
如果还希望日志服务器能传送日志信息,可以使用-h标志。缺省时,syslogd将忽略使其从一个远程系统传送日志信息到另一个系统的syslogd。
另外,如果需要重新启动syslog守护进程(/etc/syslog.conf的修改只有在syslog守护进程重新启动后才会生效),并且只想重新启动syslog守护进程而不是整个系统,在Red HatLinux机器上,执行以下两条命令之一即可:
/etc/rc.d/init.d/syslogstop;/etc/rc.d/init.d/syslogstart
/etc/rc.d/init.d/syslogrestart
4、灵活运用syslog调用接口
在实际的使用过程中,我们可以通过配置文件和查看相应的日志文件来使用syslog。然而,在许多应用场景下,我们往往需要通过程序产生输出信息并进行记录,也就是说要把一些信息写成日志文件,正常情况下运行程序的人不用关心日志里的内容,只有在出现问题的时候才会查看日志文件里的内容以确定问题所在。因此,下面将详细介绍如何通过syslog日志系统提供的API调用接口,来使用程序实现对syslog的使用。
1.主要的函数
在Linux中,提供了四个有关syslog日志系统的系统调用,供用户使用:
openlog:打开日志设备,以供读取和写入,与文件系统调用的open类似;
syslog:写入日志,与文件系统调用的write类似;
closelog:关闭日志设备,与文件系统调用的close类似;
vsyslog:它和syslog功能一样,负责写入日志,只是参数格式不同。
(1)openlog函数
该函数的声明如下:
void openlog(const char *ident, int option, int facility);
此函数用来打开一个到系统日志记录程序的连接,打开之后就可以用syslog或vsyslog函数向系统日志里添加信息了。而closelog函数就是用来关闭此连接的。
openlog的第一个参数ident是一个标记,ident所表示的字符串将固定地加在每行日志的前面以标识这个日志,通常就写成当前程序的名称以作标记。第二个参数option一般是下列选项值取“与”运算(使用“|”表示,如“LOG_CONS | LOG_PID”)的结果:
LOG_CONS:如果送到system logger时发生问题,直接写入系统终端;
LOG_NDELAY:立即开启连接,通常连接是在第一次写入消息时才打开的;
LOG_PERROR:将消息也同时送到stderr设备;
LOG_PID:将进程PID含入所有消息中。
第三个参数facility指明记录日志的程序的类型,它主要具有如下几类日志类型:
LOG_AUTH :安全/授权消息
LOG_AUTHPRIV:安全/授权消息
LOG_CRON:时间守护进程(cron和at)专用
LOG_DAEMON:其它系统守护进程
LOG_KERN:核心消息
LOG_LOCAL0到LOG_LOCAL7:系统保留
LOG_LPR:printer子系统
LOG_MAIL:mail子系统
LOG_NEWS:USENET新闻子系统
LOG_SYSLOG:syslogd进程内部所产生的消息
LOG_USER(缺省):一般使用者缺省使用消息
LOG_UUCP:UUCP子系统
LOG_FTP:FTP子系统使用
(2)syslog函数
syslog函数的声明如下:
void syslog(int priority, const char * message, ...);
第一个参数是消息的紧急级别priority,第二个参数是消息及其格式,之后是格式对应的参数,如同C语言里面printf输出函数一样使用,具体的格式这里就不再详述,它不是本书介绍的重点。
这里还需要详细介绍一下第一个参数priority,它是由severity level和facility组成的。Facility已经在上面介绍了,下面介绍一下severity level,也就是消息的重要级别,它主要包括:
LOG_EMERG:紧急状况
LOG_ALERT:高优先级问题,比如说数据库崩溃等,必须要立即采取反应行动
LOG_CRIT:重要状况发生,比如硬件故障
LOG_ERR:错误发生
LOG_WARNING:警告发生
LOG_NOTICE:一般状况,需要引起注意
LOG_INFO:信息状况
LOG_DEBUG:调试消息
在实际使用中,如果我们的程序要使用系统日志功能,只需要在程序启动时使用openlog函数来连接syslogd程序,后面随时用syslog函数写日志就行了。
(3)closelog函数
相对上述2个函数来说,该函数非常简单,其声明如下:
void closelog( void );
值得注意的是,虽然该函数的使用和调用情况非常简单,但是是必不可少的,因为在Linux系统中,打开的日志也是资源,如果只使用openlog函数打开日志,而忘记使用closelog关闭日志的话,当打开的日志数量累积到一定程度,便会造成内存不足,从而引起系统问题。所以,提醒用户在使用中特别注意。
2.一个实际的程序调用例子
下面给出一个使用上述几个函数写日志的例子,以供大家参考:
#include
#include
#include
int main(void)
{
int log_test;
/*打开日志*/
openlog("log_test ", LOG_PID|LOG_CONS, LOG_USER);
/*写日志*/
syslog(LOG_INFO, "PID information, pid=%d", getpid());
syslog(LOG_DEBUG,"debug message ");
/*关闭日志*/
closelog();
}
发表评论
-
ntp的客户端配置
2013-02-25 19:42 0——背景简介: ... -
installing goagent on ubuntu(12.04 LTS)
2012-12-14 23:39 4409If you want to access some bloc ... -
Fedora17-command not found-命令延时
2012-11-13 14:35 1336Fedora 17下不小心输入错误一条命令,提示command ... -
can't identify protocol问题的定位和解决
2012-10-08 19:08 13443在观摩了一个关于性能问题排查的PPT之后试着用lsof命令来列 ... -
使用nfs挂载远端主机目录到本地
2012-09-06 00:18 3187由于一个应用的需要,要使用这方面的知识。 就是两台机器,1 ... -
fedora 17继续折腾
2012-08-22 13:37 1607今天来折腾fedora17了…… 安装的64位: ... -
再谈yum配置
2012-08-18 15:13 1069配置环境永远是最重要的第一步。 在我又开始折腾虚拟机的 ... -
一个简单的监控后台需要什么?
2012-08-07 23:55 1822今晚突然想到要给之前学校的一个网站做一个监控的后台, 一些常 ... -
yum源的配置以及一个错误解决
2012-07-30 15:16 2327今天刚拿到一台新机器,系统为Red Hat Enterpris ... -
SSH建立信任关系实现免输密码登陆
2012-07-18 19:09 3824为了方便管理,在需要频繁登陆机器,特别是在机器众多的时候,免密 ... -
epoll介绍【转】
2012-07-17 16:55 2017epoll是多路复用IO(I/O Multiplexing) ... -
关于代理和反向代理
2012-07-12 16:10 1144其实简单来讲,代理和反向代理可以这么来理解: 代理: ... -
RHEL-AS4安装yum
2012-05-11 02:15 3649我的系统版本: Red Hat Enterprise Lin ... -
Ubuntu8.04安装CP-168U的串口连接问题
2012-05-05 18:26 2275毕业设计需要用到1托8的MOXA CP-168U卡做一个交换机 ... -
制作用U盘引导安装Ubuntu12.04
2012-05-02 14:04 38702由于之前刻了两次碟,均在安装完一次系统之后就损坏了。。。 所 ... -
【转载】su和sudo命令的区别与使用技巧
2012-04-12 23:21 1524一. 使用 su 命令临时切换用户身份 1、su ... -
Linux内核学习步骤
2011-11-25 10:33 2593今日在论坛中看到大牛谈如何学习Linux内核,于是摘录的 ... -
【转】什么是Linux的僵尸(zombie)进程
2011-10-08 15:55 2064可能很少 ... -
Linux中的颜色方案
2011-09-28 17:18 2926在linux下可以自定义自己的颜色方案,不管是linux命令提 ... -
取得jboss的版本信息
2011-09-26 20:44 14240由于写脚本的需要, 要获取jboss的版本信息。 大 ...
相关推荐
SysLog日志工具术语SYSLOG:系统日志协议SYSLOG功能功能启/停用参数配置,包括使用协议、服务器地址、服务器端口、字符编码SYSLOG预置数据使用已
Linux系统内核和许多程序会产生各种错误信息、警告信息和其他的提示信息,这些信息对管理员了解系统的运行状态是非常有用的,所以应该把它们写到日志文件中去。 完成这个过程的程序就是syslog。syslog可以根据日志的...
linux下syslog模块实例,有文档,有图,有代码 。C语言编写
syslog日志服务器配置在以下系统上实验成功: Linux 系统 (Redhat5.X、Cent OS 6、Fedora 6) Unix 系统 (SUN Solaris 10、AIX 6.1、HP-UNIX) Windows 系统 (Window XP/server) 网络设备 (Cisco...
运行软件: 至此,windows下syslog搭建好,接下来是Linux配置syslog服务器。 6. CentOS配置rsyslog客户端远程记录日志: 1. 安装Rsyslog守护进程: # rpm -qa " grep rsyslog # rsyslogd –v 若rsyslog守护进程没有...
syslog 使用UDP 作为传输协议,通过目的端口514(也可以是其他定义的端口 号),将所有安全设备的日志管理配置发送到安装了syslog 软件系统的日志服务器,syslog 日志服务器自动接收日志数据并写到日志文件中。
winlogd 源码 windows 事件转syslog日志winlogd 源码 windows 事件转syslog日志winlogd 源码 windows 事件转syslog日志winlogd 源码 windows 事件转syslog日志winlogd 源码 windows 事件转syslog日志
graylog-guide-syslog-linux:如何将syslog从Linux系统发送到Graylog
基于Syslog的网络信息日志管理系统,详细介绍Linux下syslog对于日志的处理
syslog4j用于实现发送syslog,此包用于解决发送过程中的中文截断问题,上传至此是因为maven仓库中没有此包
路由器交换机防火墙等网络设备的系统日志对于排错是非常重要的。虽然这些网络设备本身可以存储日志,但是系统自身存储的日志一般保存时间不超过24小时,并且仅仅以缓存的形式保存在内存里,如果设备关机又重启,之前...
该gem在纯Ruby中实现syslog协议。 使用openlog(3)syscall的Syslog模块只能打开一个工具。 SyslogRuby允许您拥有任意数量的记录器。 安装 将此行添加到您的应用程序的Gemfile中: gem 'syslog_ruby' 然后执行: ...
Parse::Syslog::Line - 简单的 syslog 行解析器 版本 版本 2.9 概要 我想要一个非常简单的日志解析器,用于基于网络的系统日志输入。 没有任何东西可以简单地取一行并返回一个全部解析出来的哈希引用。 use Parse:...
如何实现企业级有效的Syslog日志管理
利用syslog协议 ,发送网络安全设备日志。java版
Linux 下cacti+syslog-ng+snare 实现 日志集中管理
node-syslog, node 插件使用系统日志守护进程 节点 syslog节点syslog不再受支持,不能与当前的node 版本一起工作。 你可以使用其他模块,例如: https://github.com/strongloop/modern-syslog 或者 https://gith
syslog4j-0.9.46.jar ,能够解决消息内容发送不完整问题,maven官网仓库只有0.9.30版本,那个版本会出现发送的消息过长时截断问题
Kiwi Syslog Server安装教程: 1. 运行Kiwi_Syslog_Server_9.5.0.setup.exe安装程序 2. 安装完成退出程序 3. 拷贝SolarWinds.Licensing.Framework.dll和ufmod.dll两个文件到软件安装目录,选择覆盖目的文件 4. 运行...