Linux日志管理篇

合集下载

Linux日志文件管理——限制大小

Linux日志文件管理——限制大小

Linux⽇志⽂件管理——限制⼤⼩设计思路: 1 ⽤⼀个INI配置⽂件管理⽇志⽬录,⽇志⽂件限制的⼤⼩,特殊的⽇志名,特殊⽇志的⼤⼩限制。

2 读取INI⽂件中的所有信息:每⼀个⽇志⽬录对应的⼤⼩限制,每⼀个特殊⽇志对应的⼤⼩限制。

如特殊⽇志在既定的⽇志⽬录中需去除。

3 按设置的⼤⼩循环检测并清理每⼀个⽇志⽂件。

4 监听有名管道的信号,如读取到了修改了INI⽂件的信号,则重新开始读取,循环。

代码:LogSizeLimit.h#ifndef LOGSIZELIMIT_H_#define LOGSIZELIMIT_H_#include <map>#include <vector>#include <string.h>#include "GlobDefine.h"#include "Mutex.h"static const INT8 *IniFileName = "/LogService/LogSizeManage.ini";//static const UINT32 LogFileSizeDefault = 2 * 1024 * 1024;static const INT8 * LogFileSizeDefault = "2M";static const INT8 *LogPipeName = "/LogService/LOGSIZE.fifo";static const INT8 *ChangedStr = "changed";static const UINT32 CleanInterval = 4;static const UINT32 LogFilePathMaxLen = 64;static const UINT32 LogFileAttrMaxLen = 8;class LogSizeLimit {// static Mutex mutex;public:LogSizeLimit(const string iniFile);~LogSizeLimit();bool start();bool getChangeFlag() {return changeFlag;}void setChangeFlag(bool status) {changeFlag = status;}private:string _iniFile;map<string, string> _catelogAttr;map<string, string> _specialFileAttr;map<string, vector<string> > _logFiles;bool changeFlag;static void *run(void *args);static void *listenChanged(void*args);bool readConfig();bool limitLogFile();bool readFileList(const INT8 *mapStrPath, const INT8 *basePath);bool checkAndCleanLog(string logName, INT32 size);INT32 transSizeToBytes(const INT8 * size);bool readPipeMsg();};#endif /* LOGSIZELIMIT_H_ */LogSizeLimit.cpp#include <pthread.h>#include <unistd.h>#include <dirent.h>#include <sys/stat.h>#include <sys/types.h>#include <errno.h>#include <fcntl.h>#include "LogSizeLimit.h"#include "IniConfigFile.h"#include "FileOperation.h"using namespace FrameWork;LogSizeLimit::LogSizeLimit(const string iniFile) :_iniFile(iniFile), changeFlag(true) {}LogSizeLimit::~LogSizeLimit() {}bool LogSizeLimit::start() {pthread_t tid, changetid;pthread_create(&tid, NULL, run, (void*) this);pthread_create(&changetid, NULL, listenChanged, (void*) this);return true;}bool LogSizeLimit::readConfig() {//Clean map varsmap<string, string>::iterator iter_tmp = _catelogAttr.begin();while (iter_tmp != _catelogAttr.end()) {_catelogAttr.erase(iter_tmp);iter_tmp++;}//Clean map varsiter_tmp = _specialFileAttr.begin();while (iter_tmp != _specialFileAttr.end()) {_specialFileAttr.erase(iter_tmp);iter_tmp++;}//Clean map varsmap<string, vector<string> >::iterator mvIter_tmp = _logFiles.begin(); while (mvIter_tmp != _logFiles.end()) {_logFiles.erase(mvIter_tmp);mvIter_tmp++;}if (!FileOperation::isExistFile(_iniFile)) {Logger::GetInstance().Fatal("Can not find ini file : %s !",_iniFile.c_str());return false;}//Create ini file handling var.IniConfigFile iniSet(_iniFile.c_str());INT8 logPath[LogFilePathMaxLen] = { 0 };INT8 logFileAttr[LogFileAttrMaxLen] = { 0 };INT8 specialFile_1[LogFilePathMaxLen] = { 0 };INT8 specialFileAttr_1[LogFileAttrMaxLen] = { 0 };const INT8 *catelogBase = "catelog_";const INT8 *limitBase = "logSizeLimit_";const INT8 *specialFileBase = "specialFile_";const INT8 *specialLimitBase = "specialFileSizeLimit_";INT8 catelogCnt = '1';bool isExist = true;INT8 catelogIndex[32] = { 0 };INT8 logSizeIndex[32] = { 0 };while (isExist) {memset(catelogIndex, 0, 32);memset(logSizeIndex, 0, 32);memset(logPath, 0, LogFilePathMaxLen);memset(logFileAttr, 0, LogFileAttrMaxLen);memcpy(catelogIndex, catelogBase, strlen(catelogBase));memcpy(catelogIndex + strlen(catelogBase), &catelogCnt, 1);memcpy(logSizeIndex, limitBase, strlen(limitBase));memcpy(logSizeIndex + strlen(limitBase), &catelogCnt, 1);//section key valuedo {if (iniSet.readIniConfFile("LogSizeManage", catelogIndex, logPath, LogFilePathMaxLen) != true) {Logger::GetInstance().Error("Can not locate %s !",catelogIndex);isExist = false;break;Logger::GetInstance().Info("Get a catelog %s=%s !",catelogIndex, logPath);if (iniSet.readIniConfFile("LogSizeManage", logSizeIndex,logFileAttr, LogFilePathMaxLen) != true) {Logger::GetInstance().Error("Can not get size %s, using default size %s !",logSizeIndex, LogFileSizeDefault);memcpy(logFileAttr, LogFileSizeDefault,strlen(LogFileSizeDefault));} elseLogger::GetInstance().Info("Get a log size attr %s !",logFileAttr);_catelogAttr[logPath] = logFileAttr;isExist = true;map<string, string>::iterator iter;iter = _catelogAttr.begin();for (UINT32 i = 1; i < _catelogAttr.size(); i++)iter++;cout << "_catelogAttr_size : " << _catelogAttr.size() << " begin : "<< iter->first << " end : " << iter->second << endl;} while (0); // read the normal catelogsmemset(catelogIndex, 0, 32);memset(logSizeIndex, 0, 32);memset(logPath, 0, LogFilePathMaxLen);memset(logFileAttr, 0, LogFileAttrMaxLen);memcpy(catelogIndex, specialFileBase, strlen(specialFileBase));memcpy(catelogIndex + strlen(specialFileBase), &catelogCnt, 1);memcpy(logSizeIndex, specialLimitBase, strlen(specialLimitBase));memcpy(logSizeIndex + strlen(specialLimitBase), &catelogCnt, 1);do {if (iniSet.readIniConfFile("LogSizeManage", catelogIndex, logPath,LogFilePathMaxLen) != true) {Logger::GetInstance().Error("Can not locate a special log %s !",catelogIndex);break;} elseLogger::GetInstance().Info("Get a special log %s=%s !",catelogIndex, logPath);if (iniSet.readIniConfFile("LogSizeManage", logSizeIndex,logFileAttr, LogFilePathMaxLen) != true) {Logger::GetInstance().Error("Can not get log size %s, using default size %s !",logFileAttr, LogFileSizeDefault);memcpy(logFileAttr, LogFileSizeDefault,strlen(LogFileSizeDefault));// break;} elseLogger::GetInstance().Info("Get a special log size %s !",logFileAttr);if (!isExist)isExist = true;_specialFileAttr[logPath] = logFileAttr;map<string, string>::iterator iter;iter = _specialFileAttr.begin();cout << "_specialFileAttr_size : " << _specialFileAttr.size()<< " begin : " << iter->first << " end : " << iter->second<< endl;} while (0); // read the special log filescatelogCnt++;} //whilereturn true;}//struct dirent//{// long d_ino; /* inode number 索引节点号 */// off_t d_off; /* offset to this dirent 在⽬录⽂件中的偏移 */// unsigned short d_reclen; /* length of this d_name ⽂件名长 */// unsigned char d_type; /* the type of d_name ⽂件类型 */其中d_type表明该⽂件的类型:⽂件(8)、⽬录(4)、链接⽂件(10)等。

linux下syslog-ng日志集中管理服务部署记录

linux下syslog-ng日志集中管理服务部署记录

linux下syslog-ng⽇志集中管理服务部署记录syslog是Linux系统默认的⽇志守护进程,默认的syslog配置⽂件是/etc/syslog.conf⽂件。

syslog守护进程是可配置的,它允许⼈们为每⼀种类型的系统信息精确地指定⼀个存放地点。

⽐较 syslog ,syslog-ng 具有众多⾼级的功能:更好的⽹络⽀持,更加⽅便的配置,集中式的⽹络⽇志存储,并且更具有弹性。

⽐如,使⽤syslogd时,所有的iptables⽇志与其他内核⽇志⼀起全部存储到了kern.log⽂件⾥。

Syslog-ng则可以让你有选择性的将iptables部分分出到另外的⽇志⽂件中。

Syslogd仅能使⽤UDP协议,Syslog-ng 可以使⽤UDP和TCP协议。

所以我们可以在加密的⽹络隧道中传输⽇志到集中⽇志服务器。

syslog-ng的⼀个设计原则就是建⽴更好的消息过滤粒度。

syslog-ng能够进⾏基于内容和优先权/facility的过滤。

另⼀个设计原则是更容易进⾏不同防⽕墙⽹段的信息转发,它⽀持主机链,即使⽇志消息经过了许多计算机的转发,也可以找出原发主机地址和整个转发链。

最后的⼀个设计原则就是尽量使配置⽂件强⼤和简洁。

syslog-ng作为syslog的替代⼯具,可以完全替代syslog的服务,并且通过定义规则,实现更好的过滤功能。

之前介绍了,下⾯简单介绍下syslog-ng⽇志集中管理服务部署记录:下⾯部署实例⽬的:实现接收远程客户端服务⽇志(nginx、mysql、php、apache)保存在本地⼀台⽇志服务器上提供查看。

即远程客户机采⽤syslog-ng将其⽇志通过管道pipe传送到本地的⽇志服务器上进⾏查看。

⼀、syslog-ng安装(服务端和客户端都要安装)[root@syslog-ng ~]# wget /pub/epel/epel-release-latest-6.noarch.rpm[root@syslog-ng ~]# rpm -ivh epel-release-latest-6.noarch.rpm --force[root@syslog-ng ~]# yum install syslog-ng -y==============================================================================================温馨提⽰:由于⽇志集中管理服务syslog-ng采⽤的是C/S架构,所以客户端也需要安装syslog-ng。

高级Linux命令技巧使用journalctl进行系统日志管理

高级Linux命令技巧使用journalctl进行系统日志管理

高级Linux命令技巧使用journalctl进行系统日志管理Linux系统是一种广泛使用的操作系统,它的操作方式相对于其他操作系统来说更为灵活,也具备更多高级的功能。

而在Linux系统中,系统日志的管理是一个非常重要的任务之一。

本文将介绍如何使用journalctl命令来进行高级Linux命令技巧的系统日志管理。

一、journalctl命令简介journalctl是Linux系统中用于管理系统日志的命令。

它可以查看系统日志文件、过滤日志信息、对日志进行排序以及进行其他一些高级的操作。

使用journalctl命令,我们可以方便地进行系统日志的管理和排查。

二、查看系统日志使用journalctl命令最常见的用途就是查看系统日志。

下面是一些常用的journalctl命令及其用法:1. 查看全部日志信息:$ journalctl2. 查看最新的日志信息:$ journalctl -n3. 查看指定行数的日志信息:$ journalctl -n <行数>其中,-n参数用于指定输出的日志行数,默认为10行。

我们可以根据实际需要进行调整。

三、过滤日志信息在实际的系统日志管理中,我们可能只对某些特定的日志信息感兴趣。

journalctl命令提供了多种过滤选项,可以根据条件过滤需要的日志信息。

下面是一些常见的过滤选项及其用法:1. 根据时间过滤:$ journalctl --since="yyyy-mm-dd" --until="yyyy-mm-dd"该命令用于根据时间范围过滤日志信息。

--since参数用于指定起始时间,--until参数用于指定结束时间。

其中时间的格式为yyyy-mm-dd。

2. 根据服务过滤:$ journalctl -u <服务名称>该命令用于过滤特定服务的日志信息。

我们只需将<服务名称>替换为实际的服务名称即可。

理解Linux的日志管理和审计

理解Linux的日志管理和审计

理解Linux的日志管理和审计在Linux系统中,日志管理和审计是非常重要的任务。

Linux系统产生了大量的日志,包括系统日志、应用程序日志、安全日志等,通过对这些日志的管理和审计,可以帮助系统管理员了解系统的状态、排查问题、发现安全威胁。

本文将详细介绍Linux的日志管理和审计。

一、日志管理1. 日志的概念和作用日志是系统记录事件的一种重要方式,Linux系统生成的各种日志可以帮助系统管理员了解系统的运行情况、故障排查和性能分析。

通过对日志的管理,可以及时发现和解决系统中的问题。

2. 系统日志系统日志是Linux系统默认生成的日志,主要包括内核日志(kernel log)和系统守护进程日志(system daemon log)。

内核日志记录了内核的运行状态、硬件故障等信息,而系统守护进程日志记录了系统服务的启动、停止以及错误信息。

3. 应用程序日志除了系统日志外,应用程序也会生成日志文件。

应用程序日志可以帮助了解应用程序的运行情况,包括程序的调试信息、错误日志等。

常见的应用程序日志有Apache的访问日志、MySQL的查询日志等。

4. 日志文件的位置和格式Linux系统的日志文件一般位于/var/log目录下,不同的日志文件有不同的命名规则和存放位置。

例如,系统日志文件/var/log/messages,内核日志文件/var/log/kern.log。

5. 日志的轮转与清理为了防止日志文件过大占用过多磁盘空间,需要对日志文件进行轮转和清理。

轮转可以保留一定数量的日志文件,清理可以删除过旧的日志文件。

常用的日志轮转工具有logrotate等。

二、日志审计1. 审计的概念和意义日志审计是指对系统产生的各种日志进行分析和审核,以发现系统安全漏洞、异常行为和内部威胁,以及判断是否符合合规要求。

通过日志审计,可以提高系统的安全性,预防和发现安全事件。

2. 安全审计框架在Linux系统中,常用的安全审计框架有SELinux(Security Enhanced Linux)和Auditd(Linux Audit)等。

使用Linux终端命令进行系统日志查看和管理

使用Linux终端命令进行系统日志查看和管理

使用Linux终端命令进行系统日志查看和管理Linux系统日志是记录系统运行状态和事件的重要工具,它可以帮助我们快速定位和解决问题。

本文将介绍如何使用Linux终端命令来查看和管理系统日志。

一、查看系统日志1. dmesg命令dmesg命令用于查看内核和设备驱动程序输出的系统日志信息。

在终端中输入以下命令即可查看系统启动时的日志信息:```shelldmesg```2. journalctl命令journalctl命令是Systemd服务管理器的日志查看工具,可以查看系统服务和事件的详细日志信息。

在终端中输入以下命令即可查看系统日志:```shelljournalctl```如果只想查看最近的日志内容,可以使用`-n`参数指定行数,例如:```shelljournalctl -n 100```3. tail命令tail命令用于显示文件末尾的内容,我们可以利用它来实时查看系统日志。

在终端中输入以下命令即可实时输出系统日志:```shelltail -f /var/log/syslog```二、管理系统日志1. 日志文件路径Linux系统的日志文件通常存储在`/var/log`目录下,常见的日志文件包括`syslog`、`messages`和`auth.log`等。

我们可以通过查看这些文件来了解系统的运行情况。

2. 清除日志文件在某些情况下,我们可能需要清除日志文件以释放磁盘空间。

可以使用以下命令清空日志文件:```shellsudo truncate -s 0 /var/log/syslog```此命令将清空`/var/log/syslog`文件的内容,但不会删除文件本身。

3. 日志旋转为了避免日志文件过大,Linux系统会自动进行日志文件的旋转。

旋转过后,原始日志文件会被重命名为`filename.1`、`filename.2`等,并且会创建一个新的空日志文件。

参数`/etc/logrotate.conf`配置文件定义了系统默认的日志旋转策略。

linux系统日志内容

linux系统日志内容

linux系统日志内容摘要:1.Linux 系统日志概述2.Linux 系统日志的作用3.Linux 系统日志的存放位置4.Linux 系统日志的查看方法5.Linux 系统日志的分析与处理6.Linux 系统日志的安全策略正文:Linux 系统日志概述Linux 系统日志是记录系统运行过程中发生的事件和错误的文本文件。

它详细记录了系统的各种操作和用户的行为,对于系统管理和故障排除具有重要的参考价值。

Linux 系统日志的作用系统日志主要有以下几个作用:1.帮助用户了解系统运行状况2.方便故障排查和恢复3.提供安全审计线索4.收集系统性能数据Linux 系统日志的存放位置Linux 系统日志主要存放于以下几个位置:1./var/log 目录:这是系统日志默认的存放目录,包含了各种服务的日志文件。

2./var/log/audit:安全审计日志目录,记录了系统的访问控制信息。

3./var/log/messages:系统消息日志,记录了系统产生的各种消息。

Linux 系统日志的查看方法1.使用命令行查看:使用`cat`、`tail`、`grep`等命令可以查看日志文件的内容。

2.使用日志查看工具:例如`journalctl`、`logwatch`等,可以方便地查看、搜索和过滤日志内容。

3.在图形界面中查看:有些Linux 发行版提供了图形界面的日志查看工具,如Ubuntu 的“系统监视器”。

Linux 系统日志的分析与处理1.分析日志:通过`grep`、`awk`等命令,可以对日志进行关键词搜索和统计分析。

2.处理日志:可以使用`logrotate`工具对日志文件进行轮转、压缩和删除操作,以保证日志文件不会过大。

Linux 系统日志的安全策略1.限制日志访问权限:将日志文件的权限设置为只有root 用户可读,防止未经授权的用户查看日志。

2.隐藏敏感信息:通过配置,使日志文件不记录敏感信息,如密码等。

3.定期备份日志:定期将日志文件备份到安全的地方,以防数据丢失。

使用logrotate命令进行日志文件管理

使用logrotate命令进行日志文件管理

使用logrotate命令进行日志文件管理作为系统管理员或者开发人员,我们经常需要管理服务器上的日志文件。

随着时间的推移,日志文件会越来越大,占用宝贵的磁盘空间。

此外,过多的日志文件也可能导致系统性能下降。

因此,对日志文件进行适当的管理是非常重要的。

在Linux系统中,我们可以使用logrotate命令来管理日志文件。

logrotate是一个常用的日志文件管理工具,它可以轮转、压缩和删除旧的日志文件,同时还可以通知服务进程刷新日志文件的句柄,以便记录新的日志。

下面是logrotate命令的一些常用选项:1. -d, --debug:调试模式,输出调试信息,但不进行实际操作;2. -f, --force:强制轮转日志文件,即使它们看起来不需要轮转;3. -s, --state <statefile>:指定状态文件的路径,默认为/var/lib/logrotate.status;4. -v, --verbose:详细输出轮转日志文件的操作信息;5. -c, --config <configfile>:指定使用的配置文件,默认为/etc/logrotate.conf。

下面是一个简单的logrotate配置文件示例:```/path/to/log/file {dailyrotate 7missingoknotifemptycompressdelaycompresssharedscriptspostrotate/bin/kill -HUP `cat /var/run/service.pid 2>/dev/null` 2>/dev/null || trueendscript}```在这个配置文件中,我们指定了一个需要进行日志轮转的日志文件路径。

接下来是一系列选项,以下是各个选项的解释:1. daily:每天轮转一次;2. rotate 7:保留7个旧的日志文件;3. missingok:如果日志文件不存在,继续进行后续的操作,而不是报错;4. notifempty:当日志文件为空时,不进行轮转;5. compress:轮转后的日志文件进行压缩(即添加.gz后缀);6. delaycompress:延迟压缩,下一次轮转时才压缩上一次轮转的日志文件;7. sharedscripts:在轮转之前和之后,执行共享脚本;8. postrotate和endscript:在轮转之后,执行指定的脚本。

Linux命令行使用技巧如何查看和管理系统日志

Linux命令行使用技巧如何查看和管理系统日志

Linux命令行使用技巧如何查看和管理系统日志Linux系统日志被存储在/var/log目录下,确切地说,不同的日志类型被存储在不同的文件中。

通过在命令行中使用一些简单而强大的命令,可以查看和管理系统日志。

本文将介绍如何通过命令行查看和管理Linux系统日志,并提供一些有用的技巧。

一、查看日志文件1. dmesg:该命令用于显示内核环缓冲区的内容,包含了系统启动时的信息和内核加载的驱动程序信息。

例如:dmesg | less2. journalctl:该命令用于查看systemd日志,默认情况下,它会显示所有的系统日志。

例如:journalctl | less3. tail:该命令用于显示文件的末尾内容,默认情况下,它会显示文件的最后10行。

例如:tail /var/log/syslog如果想实时监视文件的变化,可以使用-f选项。

例如:tail -f /var/log/syslog二、过滤日志内容1. grep:该命令用于在文本文件中搜索指定的字符串。

例如:grep "error" /var/log/syslog2. awk:该命令用于提取和处理文本数据。

例如:cat /var/log/syslog | awk '/error/ {print $0}'上述命令将显示包含"error"的行。

三、管理日志文件1. cp:该命令用于复制文件。

例如:cp /var/log/syslog /tmp/syslog_backup上述命令将/var/log/syslog文件复制到/tmp/syslog_backup目录。

2. mv:该命令用于移动文件。

例如:mv /var/log/syslog /var/log/syslog.old上述命令将/var/log/syslog文件移动到/var/log/syslog.old。

3. rm:该命令用于删除文件。

例如:rm /var/log/syslog.old上述命令将删除/var/log/syslog.old文件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Linux日志管理篇操作系统的日志主要具有审计与监测的功能,通过对日志信息的分析,可以检查错误发生的原因,监测追踪入侵者及受到攻击时留下的痕迹,甚至还能实时的进行系统状态的监控。

有效利用日志信息并对其进行分析与实时的监控管理,对于系统的安全性具有极为重要的作用。

对于日志信息的管理通常采用两种方法,一种方法是不同服务器的日志信息都存放在各自系统内,系统管理员对各服务器进行分散管理。

另一种方法则是使用日志主机系统,这是一个从其他主机收集日志,并将它们存放在同一个地方的系统,很容易使来自多个主机的日志条目关联起来,对其进行统一管理、分析,甚至配合自动化工具进行实时的监控,有效提高管理的效率。

第一种方法往往是大多数系统管理员的常用的方法,这种传统的管理方法在服务器数量较少时还能勉强应付,但在处理多主机状况时却并非一种有效的方法。

本文主要讲述二种日志管理方法,探寻一种提高系统管理效率的途径。

一、日志主机系统的部署日志主机系统包括日志主机及各主机系统两个部分,其中日志主机相当于服务器端,而各主机系统相当于客户端,将日志信息实时的传送到日志主机上来。

1.Linux系统中系统日志服务器的安装对管理员来说,日志非常有用,但大量的日志又很麻烦。

当一些事件运行错误时,日志可以对故障排除起到至关重要的作用,特别是在安全性相关问题上。

但是如果攻击者危害到你的主机,日志将会告诉你,对于主机来说这很有用;你需要给数据中心发信息。

保护日志非常重要,一个中央日志服务器会更容易管理、分析和查找它们。

针对这一点,我将向你展示如何把多个主机的系统日志集中收集到一个主机上来管理,即Linux上的中央系统日志服务器。

首先,所有集中的系统日志服务器都应该建成一个安全和硬化的主机。

在主机上没有一点关于保护和集中化你们日志方面。

其次,你怎样能从你的主机上获得日志呢?让我们开始安装中央系统日志服务器。

我将举例说明如果使用rSyslog,实际的标准Linux系统日志。

Ubuntu和红帽常使用它,并且通过文件/etc/rsyslog.conf进行管理。

文件中包含许多指定的特殊系统日志:有的是控制台方面的,有的是文件方面或其它主机的。

首先,我们需要载入合适的TCP和UDP插件以支持接收系统日志。

把下面的代码添加到rsyslog.conf的头部:$modload imtcp$modload imudp$InputTCPServerRun 10514$UDPServerRun 514载入的这两个模块能支持监听TCP和UDP的端口,并且指定哪个端口来接受事件,在这种情况下,使用TCP的10514端口和UDP的514端口。

你需要确认一下本地防火墙(在你的主机和中央系统日志服务器之间的防火墙)下面我们需要指定一些规则来告诉rSyslog在哪放输入事件。

如果你不添加任何规则,输入事件将按照本地的规则进行处理,并且与本地主机的事件交织在一起。

我们需要在上面添加节之后和本地处理系统日志之前来正确的指定这个规则,例如:if $fromhost-ip isequal '192.168.0.2' then /var/log/192.168.0.2.log& ~这里我们说的每一个来自于192.168.0.2的系统日志都应该保存在/var/log/192.168.0.2.log文件中。

&~这个符号是非常重要的,因为它告诉rSyslog将停止处理消息。

如果你把它忘写了,消息将越过下一个规则,并且继续处理。

在这一规则中还有其他的变量。

例如:if $fromhost-ip startswith '192.168.' then /var/log/192.168.log& ~这里我们用192.168.*替代了以这个为开始的所有IP地址,写入到/var/log/192.168.log文件中。

你还可以看到一些其它的过滤。

你将需要重启这个rsyslog服务来激活我们所做的新的配置:$ sudo service rsyslog restart现在,对于发送方的主机,我们还需要对文件rsyslog.conf进行一些更改,在文件的头部,添加下面这行:*.* @@192.168.0.1:10514这是发送的所有事件,来自于所有源代码和所有重要级别(用*.*),通过TCP协议传给IP地址为192.168.0.1的10514端口。

你可是用你所在环境的地址来替换这个IP地址。

要启用此配置,你将需要重启主机上的rSyslog。

你可以通过SSL/TLS更进一步地发送你的系统日志。

如果你在互联网上或其它网络间传输系统日志,这也没什么坏处,你可能会发现这个的简单说明。

现在,如果给你的配置管理系统(如果不使用这个,你可以试一试Puppet或Cfengine 工具)添加这个配置,然后,您可以用适当的系统日志来有效地配置每台主机,以确保你的日志将被发送到中央系统日志服务器。

2.日志主机的部署日志主机采用一台RHEL 5的服务器(假设其主机名为loghost),日志收集软件采用Linux 平台上的Syslog,Syslog一般都随Linux系统安装时已经安装,对于我们部署整个系统提供了极大的便利性,因此在此不对其安装步骤进行阐述,仅讲述其配置方法。

Syslog既可作为客户端,也可作为服务器端,并且支持远程的日志收集。

其配置文件为/etc/sysconfig/syslog,要配置其作为服务器端,需对此配置文件相应部分改为如下所示:SYSLOGD_OPTIONS=“-r-m 0”,“-r”选项表示使syslog接收客户端的远程日志信息。

接下来重启Syslog服务器端使配置生效:#service syslogd restart由于Syslog采用514端口监听来自各客户端的日志信息,因此需要在日志主机的防火墙上开放514端口,以iptables为例,对特定网段开放514端口: /sbin/iptables -A INPUT -i eth0 -p tcp -s 192.168.0.0/16 -dport 514 -syn -j ACCEPT3.客户端的部署3.1 Linux平台下客户端的部署在Linux平台下依然选择syslog作为客户端进行部署,此时此配置文件为/etc/syslog.conf,其默认配置为(仅以/var/log/message日志为例):*.info;mail.none;authpriv.none;cron.none /var/log/messages/var/log/message即Sysolg存放系统日志的绝对路径,将此值替换为日志主机名即可。

例子如下:*.info;mail.none;authpriv.none;cron.none @loghost根据上述配置,当Syslog重启使用配置生效后,客户端服务器的日志信息将会实时的传送到日志主机的/var/log/message文件里,对各服务器的日志信息进行统一的管理。

使用如下命令重启Syslog服务使配置生效:#service syslogd restart依上述方法将其他系统日志信息(如/var/log/secure)导入到日志主机上。

笔者建议,采用添加配置而非修改的方法,同时在本地及日志主机上保存系统日志。

3.2 Windows平台下客户端的部署在Windows平台下采用软件evtsys进行客户端的部署,其下载链接为:/ECN/Resources/Documents/UNIX/evtsys/evtsys_exe .zip解开后得到两个文件:evtsys.ext和evtsys.dll。

将这两个文件放到C:\WINDOWS\system32目录下,在命令行状态下运行如下命令进行安装: %systemroot%\system32\evtsys –i-h loghost当安装成功后,可查看服务列表看到相应的信息,如图1所示。

卸载evtsys的命令为:%systemroot%\system32\evtsys-u更改日志主机名的命令为:Net stop evtsys //停止 evtsysevtsys-u //卸载 evtsysevtsys-l-h newloghost //指定新的日志主机名net start evtsys //启动 evtsys二、日志主机的自动日志分析与监控当整个系统部署好后,可以从日志主机里验证各服务器是否将日志信息发送到了日志主机上。

以/var/log/message为例,打开此文件,当看到具有不同主机名字的日志信息标志着日志主机已经正常工作,节选部分日志如下:Jan 9 08:39:38 dog crond(pam_unix)[4528]:ses-sion opened for user root by (uid=0) Jan 9 08:39:36 dog crond(pam_unix)[4528]:session closed for user rootJan 9 08:39:40 panda crond(pam_unix)[20296]:ses-sion opened for user root by(uid=0) Jan 9 08:39:40 panda crond(pam_unix)[20296]:ses-sion closed for user rootJan 9 08:39:53 app last message repeated 8 timesJan 9 08:40:11 apple net-snmp[657]:Connection from udp:92.168.1.11:4298Jan 9 08:40:11apple net-snmp[657]:Received SNMP packet(s) fromudp:159.226.2.144:42988Jan 9 08:41:15orangesshd(pam_unix)[28389]:ses-sion opened for user tomby(uid=2011)Jan 9 08:41:28 orange sshd(pam_unix)[28389]:ses-sion opened for user tom by (uid=2011)Jan 9 08:41:28 orange 1月9 08:41:28 su` (pam_unix)[28425]:session opened for user root by tom (uid=2011)对于如此庞大的日志信息,大部分并没多大的用处,但在跟踪某一具体问题或者安全漏洞时却可能很有用。

那么我们如何对其进行有效地分析与监测,发挥其真正作用呢?在此推荐两款比较常用的日志分析与监控软件,对这些日志信息进行自动地分析与监控。

相关文档
最新文档