几乎所有的网络设备都可以通过syslog协议,将日志信息以UDP的形式传送给远端服务器,远端接收日志服务器必须通过syslogd监听UDP端口514,并根据 syslog.conf 配置文件张的配置处理。配置文件 /etc/rsyslog.conf 中规定了syslogd如何根据设备和信息的重要级别来报告信息。

CentOS6.5之前,配置文件为/etc/syslog.conf,从CentOS6.5之后,配置文件名变更为/etc/rsyslog.conf 。

syslog支持日志分类输出到特定文件中,但是有几个限制:

1、syslog日志输出支持分类,但不支持每个进程单独输出到某个文件(因为syslog并不是作为一套完整的日志库而产生的);

2、syslog输出的日志文件位置并不是任意的,默认仅仅限于【/var/log/】目录下,如果指定到其他位置,视为无效;

配置文件的格式:

【服务.优先级 <tab> action字段】。

其中,【服务.优先级】一起统称为选择条件。条件选择是对服务进行了分类,便于syslog对日志的输出管理。同时一行的配置中,允许出现多个选择条件,多个选择条件使用 ; 隔开。

服务(facility),用来指定syslog的功能,主要包括:

 kern        内核信息,首先通过 klogd 传递;
user 用户进程;
mail 邮件;
daemon 后台进程;
authpriv 授权信息;
syslog 系统日志;
lpr 打印信息;
news 新闻组信息;
uucp 由uucp生成的信息
cron 计划和任务信息。
mark syslog 内部功能用于生成时间戳
local0---local7 与自定义程序使用,例如使用 local5 做为 ssh 功能
* 通配符代表除了 mark 以外的所有功能

优先级(level),指定了syslog的优先级,从高到底依次为:

 emerg 或 panic  该系统不可用(最紧急消息)
alert 需要立即被修改的条件(紧急消息)
crit 阻止某些工具或子系统功能实现的错误条件(重要消息)
err 阻止工具或某些子系统部分功能实现的错误条件(出错消息)
warning 预警信息(警告消息)
notice 具有重要性的普通条件(普通但重要的消息)
info 提供信息的消息(通知性消息)
debug 不包含函数条件或问题的其他信息(调试级-信息量最多)
none 没有重要级,通常用于排错(不记录任何日志消息)
* 所有级别,除了none

action:

 /var/log/lastlog : 记录登录系统的用户上次登录系统的时间. 可用/usr/bin/lastlog 指令读取.
/var/run/utmp : 记录每个用户登录系统的时间, who, users, finger 等指令会查这个档案.
/var/log/wtmp : 记录每个用户登录及登出的时间, 用last命令查看. 也记录 shutdown 及 reboot 的动作.
/var/log/secure : 登录系统的信息
/var/log/maillog : 记录 sendmail 及 pop 等相关信息.
/var/log/cron : 记录 crontab 的相关信息 ,定时器的信息
/var/log/dmesg : /bin/dmesg 会将这个档案显示出来, 它是开机时的画面信息.
/var/log/xferlog : 记录那些位址来 ftp 拿取那些档案.
/var/log/messages : 系统大部份的信息皆记录在此, 包括 login, check password , failed login, ftp, su 等.
/var/log/xferlog的各个字段解析
Thu Dec 1 17:40:46 2016 8 10.11.40.147 32035942 /home/chb/1.txt b _ o r dxpanalysis ftp 0 * c
字段 含义
Thu Dec 1 17:40:46 2016 日期和时间
8 下载文件所花费的秒数
10.11.40.147 远程系统
320359 文件大小
/home/chb/1.txt 本地路径名
b 传输类型(a:ASCII,b:二进制)
_ 与压缩相关的标志或tar,或”_”(如果没有压缩的话)
o 传输方向(相对于服务器而言:i代表进,o代表出)
r 访问模式(a:匿名,g:输入口令,r:真实用户)
dxpanalysis 用户名
ftp 服务名(通常是ftp)
0 认证方法(l:RFC931,或 0)
* 认证用户的ID或”“, 为未获取到
c 传输状态; c表示传输完成

调用syslog的守护进程:

syslog也是一个守护进程,准确的说应该是rsyslog,位于/etc/rc.d/init.d/rsyslog,这是syslog的启动脚本。当我们修改了启动交而不能文件中的内容之后,需要使用【service rsyslog restart】命令重启该服务。

syslog不仅仅用来记录本机文件的日志信息,更多的是作为一个日志服务器,用来接收远程系统的信息。对该服务的启动,有两个常用选项:

-r:将当前主机作为日志服务器,监听514端口上进来的UDP包,接收远程系统的信息。没有该选项,将不会接收来自远程系统的信息。

-h:使得当前日志服务器能够传送日志信息,


如何配置一个中央日志服务器:

1、编辑/etc/sysconfig/rsyslog(CentOS6.5之前的版本该文件叫做syslog),该文件中可以声明,启动该服务的时的启动选项。

-r:上面提到过,表示允许接收外来日志消息;

-m **:将默认的时间戳标记信息出现频率变为自己指定的值【eg: -m240,表示每240分钟在日志文件中增加一行时间戳消息】;

-x:表示不希望让中央日志服务器解析其他机器的FQDN(完全合格域名,指的是主机名+全路径);

SYSLOGD_OPTIONS="-r -x -m 240 -c 5"

2、重启rsyslog服务

service rsyslog restart

3、关闭防火墙(iptables),允许514号端口上的连接通过;

4、对客户机进行配置syslog

方法一:在客户机上syslog的配置文件中,对有关配置行的操作动作部分用“@”字符指向中央日志服务器,而不用指向本机的 /var/log/.....

# Log all the mail messages in one place.

mail.*     @192.168.3.24

方法二:在DNS中定义一个机器,命名随意,这里以“loghost”为例,然后将客户机的配置文件改为如下形式。这样就可以避免以后如果发生日志服务器更换的情况,不用再一个一个修改客户机的syslog配置文件。

# Log all the mail messages in one place.

mail.*     @loghost

对客户机配置完毕之后,以及需要进行重启。


syslog的函数接口:

#include <syslog.h>
void openlog(const char *ident, int option, int facil- ity);
# ident:对哪个进程进行日志记录,为进程名
# option常用选项:
LOG_CONS:
LOG_PID:打印的每一条日志信息包含当前进程的PID
# facil-ity常用选项:
LOG_USER:打印的每一条日志信息包含当前用户的等级信息
void syslog(int priority, const char *format, ...);
# format:输出日志信息的参数列表,用法类同printf
void closelog(void);

测试用例:

#include <stdio.h>
#include <syslog.h>
int main(int argc,char* argv[])
{
openlog(argv[],LOG_CONS | LOG_PID, LOG_USER);
int count = ;
while(count < )
{
syslog(LOG_INFO, "%d, log info test ...", count);
count++;
}
closelog();
return ;
}

为了同时测试配置文件,在syslog的配置文件中添加一行内容如下:

user.*     /var/log/0.1     # 该文件默认只能在/var/log下,放在其它目录下无效

重启rsyslog服务;

执行原程序,就可以在/var/log/看到0.log文件,打开文件,内容如下:

[root@www ~]# cat /var/log/0.log

Apr   :: www ./test_log[]: , log info test ...

Apr   :: www ./test_log[]: , log info test ...

Apr   :: www ./test_log[]: , log info test ...

简单的例子看到这里就够了,我看到网上很多人都在讨论如何使用syslog针对特定的某一进程输出日志文件,但都没有很好的解决方案。尽管在配置文件中提供了local0~local7自定义服务,但也并不是万能的,很多情况下并不能真正实现我们的目的。

这里我想说的是,Linux下的syslog,它出现的目的并不是为了提供用户每个进程的日志输出,syslog只是用来作为对于服务管理的整套机制,它针对的是一类服务,用来做日志服务器,实现对整个系统网络中日志的维护(对日志的维护,实际上就是对整个计算机群的维护)。同时,真正的工程中,并不会使用syslog作为全套的日志管理工具,在Linux下有提供了很多完整的日志库工具,比如log4cplus、zlog等。

linux日志守护进程 syslog的更多相关文章

  1. 六十一、linux 编程—— 守护进程

    61.1 介绍 守护进程(daemon)是生存期长的一种进程.它们常常在系统引导装入时启动,在系统关闭时终止 守护进程也称为后台进程 所有守护进程都以超级用户(用户 ID 为0)的优先权运行. 守护进 ...

  2. linux C守护进程编写

    linux编程-守护进程编写 守护进程(Daemon)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待 处理某些发生的事件.守护进程是一种很有用的进程. Linux的大多数服 ...

  3. 【Linux】- 守护进程的启动方法

    转自:Linux 守护进程的启动方法 Linux中"守护进程"(daemon)就是一直在后台运行的进程(daemon). 本文介绍如何将一个 Web 应用,启动为守护进程. 一.问 ...

  4. python实现Linux启动守护进程

    python实现Linux启动守护进程 DaemonClass.py代码: #/usr/bin/env python # -*- coding: utf-8 -*- import sys import ...

  5. linux 创建守护进程的相关知识

    linux 创建守护进程的相关知识 http://www.114390.com/article/46410.htm linux 创建守护进程的相关知识,这篇文章主要介绍了linux 创建守护进程的相关 ...

  6. asp.net core2.0 部署centos7/linux系统 --守护进程supervisor(二)

    原文:asp.net core2.0 部署centos7/linux系统 --守护进程supervisor(二) 续上一篇文章:asp.net core2.0 部署centos7/linux系统 -- ...

  7. 深入理解Linux操作系统守护进程的意义

    Linux服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台的守护进程(daemons)来执行的.守护进程 ...

  8. linux创建守护进程

    守护进程deamon 是一个后台进程,无需用户输入就能运行,用来在系统后台提供某种服务. 常见的守护进程有Wbe服务器.邮件服务器以及数据库服务器等等.守护进程不能控制终端,所以任何的输入和输出都需要 ...

  9. Linux Supervisor 守护进程基本配置

    supervisor:C/S架构的进程控制系统,可使用户在类UNIX系统中监控.管理进程.常用于管理与某个用户或项目相关的进程. 组成部分supervisord:服务守护进程supervisorctl ...

随机推荐

  1. python中的yield关键字

    yield关键字一直困扰了我很久,一直也没有弄明白,现在将暂时理解的yield记录如下,供参考: 关键词:可迭代对象,生成器,迭代器 一.可迭代对象: 可迭代对象:可迭代对象是一个泛称,只要可以用fo ...

  2. uva1160 易爆物

    #include<iostream>#include<cstdio>#include<algorithm>#include<cstdlib>using ...

  3. UnityShader实例15:屏幕特效之Bloom

    http://blog.csdn.net/u011047171/article/details/48522073 Bloom特效       概述        Bloom,又称“全屏泛光”,是游戏中 ...

  4. 使用Visual Studio进行单元测试-Part4

    本文主要介绍Visual Studio(2012+)单元测试框架的一些技巧: 如何模拟类的构造函数 优化代码,便于测试 一.如何模拟类的构造函数 1.1 被测代码 基础代码,IShape分别有Rect ...

  5. 编译Python出现Tab,空格的问题

    我们编译python代码时, 经常出现各种因为tab和空格的问题, 例如: IndentationError: unindent does not match any outer indentatio ...

  6. POJ 1503 Integer Inquiry(大数相加)

    一.Description One of the first users of BIT's new supercomputer was Chip Diller. He extended his exp ...

  7. Puppet master nginx 扩展提升性能(puppet自动化系列4)

    puppet使用SSL(https)协议来进行通讯,默认情况下,puppet server端使用基于Ruby的WEBRick HTTP服务器.由于WEBRick HTTP服务器在处理agent端的性能 ...

  8. 初识Luajit

    转自:http://www.cppblog.com/pwq1989/archive/2013/11/28/204487.html 大家可以从官网下载到源码(http://luajit.org/),也可 ...

  9. vue.js解决刷新404找不到页面问题

    1.将包解压到ROOT目录后创建WEB-INF目录 mkdir WEB-INF 2.进入WEB-INF目录,创建web.xml文件 cd WEB-INF touch web.xml 3.编辑web.x ...

  10. Windchill 查询功能

    一.使用SearchCondition 查询语句中用容器中的containerReference.key.id名称来代替数据库中的字段idA3containerReference /**      * ...