Syslog服務端UDP接收日誌

整體來講,若是作企業級日誌管理分析,咱們第一步就須要接入設備的日誌,而大部分的操做系統都是支持syslog的,通常咱們對日誌這種敏感級別不是很高的信息經過UDP的形式從客戶機發送到syslog接收服務器,syslog咱們通常不會主動去採集,而是當客戶機上有操做時產生的日誌會自動發送到syslog接收服務器。下面是一個接收syslog的例子。java

package com.tony.util;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketException;

/**
 * Copyright 2015 HP
 * All right reserved.    
 * UDP服務類.  採集syslog   
 * @version 1.0 
 * Creation date: 2015-8-18 - 下午16:32:31
 */
public class UdpServerSocket {
    private byte[] buffer = new byte[1024];
    
    private DatagramSocket ds = null;

    private DatagramPacket packet = null;

    private InetSocketAddress socketAddress = null;

    private String orgIp;

    /**
     * 構造函數,綁定主機和端口.
     * @param host 主機
     * @param port 端口
     * @throws Exception
     */
    public UdpServerSocket(String host, int port) throws Exception {
        socketAddress = new InetSocketAddress(host, port);
        ds = new DatagramSocket(socketAddress);
        System.out.println("--------------service start----------------");
    }
    
    public final String getOrgIp() {
        return orgIp;
    }

    /**
     * 設置超時時間,該方法必須在bind方法以後使用.
     * @param timeout 超時時間
     * @throws Exception
     */
    public final void setSoTimeout(int timeout) throws Exception {
        ds.setSoTimeout(timeout);
    }

    /**
     * 得到超時時間.
     * @return 返回超時時間.
     * @throws Exception
     
      - 下午10:34:36
     */
    public final int getSoTimeout() throws Exception {
        return ds.getSoTimeout();
    }

    /**
     * 綁定監聽地址和端口.
     * @param host 主機IP
     * @param port 端口
     * @throws SocketException
     
      - 下午10:36:17
     */
    public final void bind(String host, int port) throws SocketException {
        socketAddress = new InetSocketAddress(host, port);
        ds = new DatagramSocket(socketAddress);
    }


    /**
     * 接收數據包,該方法會形成線程阻塞.
     * @return 返回接收的數據串信息
     * @throws IOException
     
      - 下午10:38:24
     */
    public final String receive() throws IOException {
        packet = new DatagramPacket(buffer, buffer.length);
        ds.receive(packet);
        orgIp = packet.getAddress().getHostAddress();
        String info = new String(packet.getData(), 0, packet.getLength());
        System.out.println(info);
        //System.out.println("CONTENT="+info+":SOURCE_IP="+packet.getAddress().getHostAddress()+"SOURCE_PORT:"+packet.getPort());
        return info;
    }

    /**
     * 將響應包發送給請求端.
     * @param bytes 迴應報文
     * @throws IOException
     
      - 下午11:05:31
     */
    public final void response(String info) throws IOException {
        System.out.println("Client IP" + packet.getAddress().getHostAddress()
                + ",Port:" + packet.getPort());
        DatagramPacket dp = new DatagramPacket(buffer, buffer.length, packet
                .getAddress(), packet.getPort());
        dp.setData(info.getBytes());
        ds.send(dp);
    }

    /**
     * 設置報文的緩衝長度.
     * @param bufsize 緩衝長度
     
      - 下午10:47:49
     */
    public final void setLength(int bufsize) {
        packet.setLength(bufsize);
    }

    /**
     * 得到發送迴應的IP地址.
     * @return 返回迴應的IP地址
     
      - 下午10:48:27
     */
    public final InetAddress getResponseAddress() {
        return packet.getAddress();
    }

    /**
     * 得到迴應的主機的端口.
     * @return 返回迴應的主機的端口.
     
      - 下午10:48:56
     */
    public final int getResponsePort() {
        return packet.getPort();
    }

    /**
     * 關閉udp監聽口.
     
      - 下午10:49:23
     */
    public final void close() {
        try {
            ds.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    /**
     * 測試方法.
     * @param args
     * @throws Exception

      - 下午10:49:50
     */
    public static void main(String[] args) throws Exception {
        //這裏的IP是你本機的IP也就是syslog服務器的IP
        String serverHost = "192.168.100.188";
        int serverPort = 514;
        UdpServerSocket udpServerSocket = new UdpServerSocket(serverHost, serverPort);
        while (true) {
            udpServerSocket.receive();
        }
    }
}
相關文章
相關標籤/搜索