linux日志守护进程 syslog
几乎所有的网络设备都可以通过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的更多相关文章
- 六十一、linux 编程—— 守护进程
61.1 介绍 守护进程(daemon)是生存期长的一种进程.它们常常在系统引导装入时启动,在系统关闭时终止 守护进程也称为后台进程 所有守护进程都以超级用户(用户 ID 为0)的优先权运行. 守护进 ...
- linux C守护进程编写
linux编程-守护进程编写 守护进程(Daemon)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待 处理某些发生的事件.守护进程是一种很有用的进程. Linux的大多数服 ...
- 【Linux】- 守护进程的启动方法
转自:Linux 守护进程的启动方法 Linux中"守护进程"(daemon)就是一直在后台运行的进程(daemon). 本文介绍如何将一个 Web 应用,启动为守护进程. 一.问 ...
- python实现Linux启动守护进程
python实现Linux启动守护进程 DaemonClass.py代码: #/usr/bin/env python # -*- coding: utf-8 -*- import sys import ...
- linux 创建守护进程的相关知识
linux 创建守护进程的相关知识 http://www.114390.com/article/46410.htm linux 创建守护进程的相关知识,这篇文章主要介绍了linux 创建守护进程的相关 ...
- asp.net core2.0 部署centos7/linux系统 --守护进程supervisor(二)
原文:asp.net core2.0 部署centos7/linux系统 --守护进程supervisor(二) 续上一篇文章:asp.net core2.0 部署centos7/linux系统 -- ...
- 深入理解Linux操作系统守护进程的意义
Linux服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台的守护进程(daemons)来执行的.守护进程 ...
- linux创建守护进程
守护进程deamon 是一个后台进程,无需用户输入就能运行,用来在系统后台提供某种服务. 常见的守护进程有Wbe服务器.邮件服务器以及数据库服务器等等.守护进程不能控制终端,所以任何的输入和输出都需要 ...
- Linux Supervisor 守护进程基本配置
supervisor:C/S架构的进程控制系统,可使用户在类UNIX系统中监控.管理进程.常用于管理与某个用户或项目相关的进程. 组成部分supervisord:服务守护进程supervisorctl ...
随机推荐
- pyget-资源与标签(Sprite、Label、Font)
Sprite精灵,是游戏中对具有动画作用功能的图片的爱称. 精灵,图标和字体等资源是不能够处理事件的,因为它们并不是继承自EventDispatcher.但是可以包含一个能够EventDispatch ...
- 股神小L
题解 贪心 若当前手中还持有股,则一定会卖出去. 否则,考虑之前卖出的最便宜的股,若售价比当前的股高,就买下这个股,否则我们就把之前卖出的最便宜的股改为买入,这样一定会有股,然后再把这个股卖出即可. ...
- 洛谷P2878 [USACO07JAN]保护花朵Protecting the Flowers
题目描述 Farmer John went to cut some wood and left N (2 ≤ N ≤ 100,000) cows eating the grass, as usual. ...
- Swift中数组和字典都是值类型
在 Swift 中,所有的基本类型:整数(Integer).浮点数(floating-point).布尔值(Boolean).字符串(string).数组(array)和字典(dictionary), ...
- [转]javascript单元测试
1. 什么是单元测试 在计算机编程中,单元测试(又称为模块测试)是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作.程序单元是应用的最小可测试部件.在过程化编程中,一个单元就是单 ...
- 如何调整chm文字字体大小
chm文档是使用用层叠样式表来控制字符大小的,通过IE的改变“文字大小”是没效果的,那我们是不是就没有办法改变它的大小了呢?显然不是的. 工具/原料 chm文件 方法/步骤 首先打开chm ...
- C#某月的第一天和最后一天
1.本月的第一天===>DateTime.Now.AddDays(1 - DateTime.Now.Day);//当前日期减去当前日期和本月一号相差天数 2.本月的最后一天===>Date ...
- JS---script的位置
都可以,但各有千秋.放在head中:统一管理,方便维护:但浏览器会首先加载js文件,如果js文件过大,会造成页面在加载js的时候“无反应”时间过长,影响用户体验.放在body中(或放在body后):浏 ...
- uva 512
1. 问题 不知道怎么存储操作 看代码注释,else if等 2. 代码 #include <iostream> #include <stdio.h> #include < ...
- 树莓派 Learning 002 装机后的必要操作 --- 05 给树莓派搭建“x86 + pi”环境 -- 安装**32位运行库** -- 解决`E:未发现软件包 xxx` 问题
树莓派 装机后的必要操作 - 给树莓派搭建"x86 + pi"环境 – 安装32位运行库 – 解决E:未发现软件包 xxx 问题 我的树莓派型号:Raspberry Pi 2 Mo ...