SysLog簡介和java操作實例


這次為大家分享一項日志技術,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。這樣兼容中文日志。


可以通過ListenStop控制是否開啟監聽

 

這樣就開啟了服務端,下面編寫客戶端程序:

java客戶端開發需要引入:syslog4j.jar包。

下載地址:http://pan.baidu.com/s/1qW6qYo0

下載以后引入到項目中,編寫代碼實例如下:

[java] view plain copy
  1. import java.net.URLDecoder;  
  2. import java.util.Date;  
  3.   
  4. import org.productivity.java.syslog4j.Syslog;  
  5. import org.productivity.java.syslog4j.SyslogIF;  
  6.   
  7. /** 
  8.  * SysLog發送數據 
  9.  * @author lish 
  10.  * date 2014年8月1日 上午11:02:06 
  11.  * class name SyslogTest2 
  12.  */  
  13. public class SyslogTest2 {  
  14.   
  15.     public static void main(String[] args){  
  16.         try {  
  17.             //獲取syslog的操作類,使用udp協議。syslog支持"udp", "tcp", "unix_syslog", "unix_socket"協議  
  18.             SyslogIF syslog = Syslog.getInstance("udp");   
  19.             //設置syslog服務器端地址  
  20.             syslog.getConfig().setHost("127.0.0.1");  
  21.             //設置syslog接收端口,默認514  
  22.             syslog.getConfig().setPort(514);  
  23.             //拼接syslog日志,這個日志是自己定義的,通常我們定義成符合公司規范的格式就行,方便查詢。例如 操作時間:2014年8月1日  操作者ID:張三 等。信息就是一個字符串。  
  24.             StringBuffer buffer = new StringBuffer();  
  25.             buffer.append("操作時間:" + new Date().toString().substring(4, 20) + ";");  
  26.             buffer.append("操作者ID:" + "張三" + ";");  
  27.             buffer.append("操作時間:" + new Date()+ ";");  
  28.             buffer.append("日志類別:" + "22"+ ";");  
  29.             buffer.append("執行動作:" + "動作" + ";");  
  30.             buffer.append("備注:" + "備注");  
  31.             /*  發送信息到服務器,2表示日志級別 范圍為0~7的數字編碼,表示了事件的嚴重程度。0最高,7最低 
  32.              *  syslog為每個事件賦予幾個不同的優先級: 
  33.                 LOG_EMERG:緊急情況,需要立即通知技術人員。 
  34.                 LOG_ALERT:應該被立即改正的問題,如系統數據庫被破壞,ISP連接丟失。 
  35.                 LOG_CRIT:重要情況,如硬盤錯誤,備用連接丟失。 
  36.                 LOG_ERR:錯誤,不是非常緊急,在一定時間內修復即可。 
  37.                 LOG_WARNING:警告信息,不是錯誤,比如系統磁盤使用了85%等。 
  38.                 LOG_NOTICE:不是錯誤情況,也不需要立即處理。 
  39.                 LOG_INFO:情報信息,正常的系統消息,比如騷擾報告,帶寬數據等,不需要處理。 
  40.                 LOG_DEBUG:包含詳細的開發情報的信息,通常只在調試一個程序時使用。 
  41.              */  
  42.             syslog.log(0, URLDecoder.decode(buffer.toString(),"utf-8"));  
  43.         } catch (Exception e) {  
  44.         }  
  45.     }  
  46. }  

 

服務器記錄信息如圖:

 

這樣,只要要求所有的系統都向服務器發送日志信息,管理員就可以通過syslog服務器查詢所有的日志信息。而且可以通過日志信息的級別來確定具體的應對措施。syslog服務器還可以制作一些報表,直觀的查看日志信息





到這里,你就初步掌握了syslog的應用方法了,syslog還可以監控Linuxunixwindow等服務器的日志信息,這樣通過syslog還可以實時的得到服務器運行狀況。如果有興趣的還可以深入了解。總之,這么簡單就能統一日志管理,何樂而不為呢?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM