版权声明:本文为博主原创文章,未经博主允许不得转载。
这次为大家分享一项日志技术,syslog日志技术。微信公众分享号:lshaids6688
什么是SysLog
syslog协议属于一种主从式协议:syslog发送端会传送出一个小的文字讯息(小于1024字节)到syslog接收端。接收端通常名为“syslogd”、“syslog daemon”或syslog服务器。系统日志讯息可以被以UDP协议及╱或TCP协议来传送。这些资料是以明码型态被传送。不过由于SSL加密外套(例如Stunnel、sslio或sslwrap等)并非syslog协议本身的一部分,因此可以被用来透过SSL/TLS方式提供一层加密。
syslog通常被用于资讯系统管理及资安稽核。虽然它有不少缺陷,但仍获得相当多的装置及各种平台的接收端支援。因此syslog能被用来将来自许多不同类型系统的日志记录整合到集中的储存库中。
syslog提供了一个便于管理员理解日志的机制,即以英文文本来记录系统消息。系统日志消息中有标准格式的消息(称为系统日志消息、系统错误消息或简单系统消息),也有从调试命令输出的消息。这些消息是在网络运作过程中生成的,旨在指明网络问题的类型和严重程度,或者帮助读者用户检测路由器的活动,比如配置的变更。
Cisco设备会根据网络事件导致的结果,来生成系统日志消息。每个syslog消息中都包含一个严重级别和一个特性。很多网络设备都支持syslog其中包括路由器、交换机、应用服务器、防火墙和其他网络设备。
Syslog 常被称为系统日志或系统记录,是一种用来在互联网协议(TCP/IP)的网络中传递记录档讯息的标准。这个词汇常用来指实际的syslog 协议,或者那些送出syslog讯息的应用程式或数据库。
通俗一点的讲,syslog就是日志发送和接受的一种协议,你可以使用syslog协议实现自己的应用,将日志通过syslog协议从日志生产者发送到日志消费者,消费者保存日志信息,提供日志查询和管理。
SysLog的作用
首先和大家解释一下,为什么要使用syslog。或许大家有这样的疑问,我们平时做的每一个系统不都有自己的日志模块吗?我们登录自己的日志模块,可以很方便的查看自己的日志信息。那么为什么还要使用syslog呢?
答案是这样的,如果只是针对一个系统,我们一般是没有必要使用syslog的,如果一个企业部署了很多系统,每个系统都有自己的日志模块,每个系统都是独立的。那么管理员要想通过日志获取到系统的运行信息或者审计日志,那么工作量是相当大的。这个时候,只有要求所有的系统都将日志传输到syslog服务器上,通过syslog服务器统一管理日志,就会方便很多。
当然这些系统包括所有的硬件,软件系统,他们都会源源不断的发来信息,由syslog服务器将信息分类,分级别记录。
Java如何连接开发SysLog应用
java开发syslog,一般都是开发客户端,服务器都是使用的第三方应用。它们已经给我们做好了syslog收集日志的部分,我们只需要安装就可以了。
开发前准备工作:
安装一个syslog服务器:syslogwatcher
下载地址:http://pan.baidu.com/s/1dDlEEvJ
下载完成以后,直接运行exe就行。
启动以后,托盘中就会有一个图标,单击进入syslogwatcher。第一次使用的时候,需要设置编码为utf-8。这样兼容中文日志。
可以通过Listen和Stop控制是否开启监听
这样就开启了服务端,下面编写客户端程序:
java客户端开发需要引入:syslog4j.jar包。
下载地址:http://pan.baidu.com/s/1qW6qYo0
下载以后引入到项目中,编写代码实例如下:
[java] view plain copy
- import java.net.URLDecoder;
- import java.util.Date;
- import org.productivity.java.syslog4j.Syslog;
- import org.productivity.java.syslog4j.SyslogIF;
- /**
- * SysLog发送数据
- * @author lish
- * date 2014年8月1日 上午11:02:06
- * class name SyslogTest2
- */
- public class SyslogTest2 {
- public static void main(String[] args){
- try {
- //获取syslog的操作类,使用udp协议。syslog支持"udp", "tcp", "unix_syslog", "unix_socket"协议
- SyslogIF syslog = Syslog.getInstance("udp");
- //设置syslog服务器端地址
- syslog.getConfig().setHost("127.0.0.1");
- //设置syslog接收端口,默认514
- syslog.getConfig().setPort(514);
- //拼接syslog日志,这个日志是自己定义的,通常我们定义成符合公司规范的格式就行,方便查询。例如 操作时间:2014年8月1日 操作者ID:张三 等。信息就是一个字符串。
- StringBuffer buffer = new StringBuffer();
- buffer.append("操作时间:" + new Date().toString().substring(4, 20) + ";");
- buffer.append("操作者ID:" + "张三" + ";");
- buffer.append("操作时间:" + new Date()+ ";");
- buffer.append("日志类别:" + "22"+ ";");
- buffer.append("执行动作:" + "动作" + ";");
- buffer.append("备注:" + "备注");
- /* 发送信息到服务器,2表示日志级别 范围为0~7的数字编码,表示了事件的严重程度。0最高,7最低
- * syslog为每个事件赋予几个不同的优先级:
- LOG_EMERG:紧急情况,需要立即通知技术人员。
- LOG_ALERT:应该被立即改正的问题,如系统数据库被破坏,ISP连接丢失。
- LOG_CRIT:重要情况,如硬盘错误,备用连接丢失。
- LOG_ERR:错误,不是非常紧急,在一定时间内修复即可。
- LOG_WARNING:警告信息,不是错误,比如系统磁盘使用了85%等。
- LOG_NOTICE:不是错误情况,也不需要立即处理。
- LOG_INFO:情报信息,正常的系统消息,比如骚扰报告,带宽数据等,不需要处理。
- LOG_DEBUG:包含详细的开发情报的信息,通常只在调试一个程序时使用。
- */
- syslog.log(0, URLDecoder.decode(buffer.toString(),"utf-8"));
- } catch (Exception e) {
- }
- }
- }
服务器记录信息如图:
这样,只要要求所有的系统都向服务器发送日志信息,管理员就可以通过syslog服务器查询所有的日志信息。而且可以通过日志信息的级别来确定具体的应对措施。syslog服务器还可以制作一些报表,直观的查看日志信息
到这里,你就初步掌握了syslog的应用方法了,syslog还可以监控Linux,unix,window等服务器的日志信息,这样通过syslog还可以实时的得到服务器运行状况。如果有兴趣的还可以深入了解。总之,这么简单就能统一日志管理,何乐而不为呢?