如何在windows服务器中使用syslog功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在windows服务器中使用syslog功能相关的知识,希望对你有一定的参考价值。

方法/步骤:

1. 首先根据自己的windows系统的版本(32/64位),在网上下载相应的版本。我的系统为64位版本,因此下载64位版本;

2. 然后将下载后的软件内的两个文件evtsys.dll和evtsys.exe,拷贝到系统内c:\\windows\\system32目录下;

3. 这一步找到命令提示符,右击选择以管理员身份运行。详细操作如下图所示;

4. 在操作窗口内,首先输入cd c:\\windows\\system32 命令进入 c:\\windows\\system32目录下,然后执行命令evtsys –i –h 192.168.2.104 。下面详细介绍evtsys命令参数意思。

-i 表示安装成系统服务

-h 指定log服务器的IP地址

如要设置端口,在IP地址后加上自己要设置的端口就可以了。ip地址与端口之间要有空格隔开。默认不写端口为514端口。

执行完以上命令后,evtsys已经安装成功,且已经成功注册到服务列表。

5. 在开始->运行 输入 gpedit.msc。进入windows本地组策略编辑器,在该窗口内,选择Windows设置->安全设置。打开你需要记录的windows日志。evtsys会实时的判断是否有新的windows日志产生,然后把新产生的日志转换成syslogd可识别的格式,通过UDP 514端口发送给syslogd服务器;

6. 启动服务。在以管理员身份运行的命令提示符窗口内,执行命令:net start evtsys即可启动服务。接下来进行测试是否发送成功;

7. 打开syslogwatcher进行相应的设置,设置端口为514端口,接受字符码为:UTF-8码。然后点击listen。进行监听514端口。查看是否有windows日志发出。

为测试效果明显,可以重启安装evtsys的机器。(本次安装syslogwatcher与evtsys不在同一台机器,便于测试)。

如重启安装evtsys的机器仍未看到日志。则通过以下几点进行排除。

1.确认接收日志端的系统防火墙已经关闭。

2.确认安装evtsys的机器,是否已经启动该服务,如未启动,在服务列表点击启动。

参考技术A 无论是Unix、Linux、FreeBSD、Ubuntu,还是路由器、交换机,都会产生大量的日志,而这些,一般会以syslog的形式存在。在RFC 3164中定义了syslog是一种日志协议,syslog数据包的大小为1024字节,包含Facility, Severity, Hostname, Timestamp和Message信息。syslog服务器默认使用UDP 514号端口。简单的说,syslog可以告诉管理员:谁(Facility),什么时间(Timestamp),什么地方(Hostname)做了什么事情(Message),以及这个事情的重要性(Severity)。
Syslog中的Facility就是谁,它可以是操作系统的内核,邮件服务,Web服务器,打印机等等。RFC 3164 定义用数字来表示不同的Facility,其中16-18可为自定义的(比如Cisco就用local4发送PIX防火墙的syslog,用local7发送3000VPN集中器的syslog),具体如下:
Integer Facility
0 Kernel messages
1 User-level messages
2 Mail system
3 System daemons
4 Security/authorization messages
5 Messages generated internally by Syslogd
6 Line printer subsystem
7 Network news subsystem
8 UUCP subsystem
9 Clock daemon
10 Security/authorization messages
11 FTP daemon
12 NTP subsystem
13 Log audit
14 Log alert
15 Clock daemon
16 Local use 0 (local0)
17 Local use 1 (local1)
18 Local use 2 (local2)
19 Local use 3 (local3)
20 Local use 4 (local4)
21 Local use 5 (local5)
22 Local use 6 (local6)
23 Local use 7 (local7)
Syslog中的Severity表示事情的重要性,具体如下。
Integer Severity
0 Emergency: System is unusable.
1 Alert: Action must be taken immediately.
2 Critical: Critical conditions.
3 Error: Error conditions.
4 Warning: Warning conditions.
5 Notice: Normal but significant condition.
6 Informational: Informational messages.
7 Debug: Debug-level messages.
Windows有自己的日志协议,称为Event Log。为什么不建立一台中心Syslog服务器来接受所有的Windows,Linux,网络设备等等发送来的日志呢?这样你可以轻松地在一台日志服务器上管理所有的日志。
Windows操作系统本身是可以产生很多日志的,如每次插拔U盘、服务的重启等,都会产生日志,这些信息会记录在操作系统中,如果我们想集中管理,怎么办?Windows操作系统本身并不支持把日志发送到SYSLOG服务器去,但是我们就没办法了?
Evtsys是用C写的程序,提供发送Windows日志到syslog服务器的一种方式。它支持Windows Vista和Server 2008,并且编译后支持32和64位环境。它被设计用于高负载的服务器,Evtsys快速、轻量、高效率。并可以作为Windows服务存在。
http://code.google.com/p/eventlog-to-syslog/ 查看并获取最新更新。值得称道的是,程序仅仅有几十KB大小!
下载Evtsys后,将其复制到系统目录,XP下是Windows\system32目录。然后在CMD下执行:
evtsys.exe -i -h 192.168.1.101 -p 514
这个是标准格式,亦可精简为:
evtsys -i -h 192.168.1.101
参数说明:
i是安装成Window服务;
h是syslog服务器地址;
p是syslog服务器的接收端口。
默认下,端口可以省略,默认是514.
启动Evtsys服务,命令是:
net start evtsys
查看Windows的“服务”,发现在原本Event Log服务下面增加了一个“Eventlog to Syslog”,并且已经启动.
打开windows组策略编辑器 (开始->运行 输入 gpedit.msc)
在windows设置-> 安全设置 -> 本地策略 ->审核策略 中,打开你需要记录的windows日志。evtsys会实时的判断是否有新的windows日志产生,然后把新产生的日志转换成syslogd可识别的格式,通过UDP 3072端口发送给syslogd服务器。
另外一个工具是SNARE,SNARE for Windows是一款让你很容易的把Windows(NT/2000/XP/2003等,亦支持64位系统)事件日志实时转发到SYSLOG服务器的程序,并且无论是32位还是64位系统,只有一个安装包,也可以配置静默安装模式,当然这个需要您自己去看文档了。
SNARE支持安全日志、应用日志、系统日志,同时支持DNS、文件复制服务、活动目录(Active Directory)日志等。
下载: http://sourceforge.net/projects/snare/files/Snare%20for%20Windows/
配置: 下载下来的文件是SnareForWindows-4.x.x.x-MultiArch.exe这样的,基本上只需要Next就可以安装完毕。然后开始菜单中InterSect Alliance下面有三个子项:
Disable Remote Access to Snare for Windows:禁止Snare的远程管理
Restore Remote Access to Snare for Windows:恢复Snare的远程管理
Snare for Windows:程序配置界面,选择后在浏览器打开http://localhost:6161/地址,然后选择左侧菜单的Network Configuration选项
Free WhatsUp Syslog Server – 免费 Syslog Server 何处寻? 在这里!!
Syslog daemon for Windows Eventlog
参考技术B 去网上找找教程吧,这方面应该很多的。

如何知道 syslog 的某个功能是不是调用成功?

【中文标题】如何知道 syslog 的某个功能是不是调用成功?【英文标题】:how to know if a function of syslog called successfully?如何知道 syslog 的某个功能是否调用成功? 【发布时间】:2018-01-16 02:15:42 【问题描述】:

在linux命令行中使用man 3 syslog命令,我们可以看到功能介绍如下:

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

我们可以发现这些函数的返回值都是'void',所以 如何知道“syslog(...)”之类的函数是否被成功调用? 如果在centos上停止rsyslog服务,也可以正常运行以下程序:

#include <syslog.h>   

int main(int argc, char *argv[])   
   
    openlog("testsyslog", LOG_CONS | LOG_PID, LOG_LOCAL3);   
    syslog(LOG_USER | LOG_INFO, "syslog test message generated in program %s(=======from test!) \n", argv[0]);   
    closelog();   
    return 0;   

【问题讨论】:

使用perror()perror("syslog") 但是如果我停止rsyslog的服务,我会从perror得到success 【参考方案1】:

按照说明书,

openlog() 的选项参数是以下任何一个的 OR:

LOG_CONS 如果出现错误,则直接写入系统控制台 发送到系统记录器。 ...

因此,如果您指定 LOG_CONS 并且输出出现在控制台上,则意味着该消息无法记录在 syslog 中。

【讨论】:

我知道消息记录在哪里,但我想知道消息是否真正记录在我的代码中。当我在我的centos中尝试时,我无法判断消息是通过errno还是perror()记录的。【参考方案2】:

你不知道那些 syslog 函数调用是否成功。原因是syslog 调用只是将单个网络数据包发送到syslogd(或与syslogd 兼容的rsyslogd),它既是Unix 域套接字又是UDP 套接字服务器。 syslogd 守护进程没有响应。因此,如果出现丢包等故障,您不知道。我相信这是设计使日志机制尽可能简单以避免不必要的日志记录开销。

【讨论】:

以上是关于如何在windows服务器中使用syslog功能的主要内容,如果未能解决你的问题,请参考以下文章

如何将windows日志转成syslog格式

如何使用 SYSLOG 和 TLS 从 Windows 服务发送日志?

如何在 syslog4j syslog 服务器中解析 syslog 消息

syslog-ng中loacl5怎么配置

Syslog:在我的 PHP 应用程序中使用 syslog 记录错误的配置是啥

利用Syslog Watcher在windows下部署syslog日志服务器