资讯专栏INFORMATION COLUMN

Syslog服务端UDP接收日志

mingde / 3468人阅读

总体来说,如果做企业级日志管理分析,我们第一步就需要接入设备的日志,而大部分的操作系统都是支持syslog的,一般我们对日志这种敏感级别不是很高的信息通过UDP的形式从客户机发送到syslog接收服务器,syslog我们一般不会主动去采集,而是当客户机上有操作时产生的日志会自动发送到syslog接收服务器。下面是一个接收syslog的例子。

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();
        }
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64519.html

相关文章

  • 模拟Syslog客户UDP发送日志

    摘要:上一篇,我初步整理了服务端接收日志的例子,本篇主要是对客户端模拟操作的一个基本例子。 上一篇,我初步整理了Syslog服务端接收日志的例子,本篇主要是对客户端模拟操作的一个基本例子。 package com.tony.util; import java.io.*; import java.net.*; /** * UDP客户端程序,用于对服务端发送数据,并接...

    Eidesen 评论0 收藏0
  • 使用 Graylog 管理服务日志

    摘要:日志管理是一件麻烦的事情,特别是服务多的情况下出了问题需要排错分析非常困难,一般会使用,但这篇文章将会介绍另外一个同样优秀的日志聚合平台准备工作安装修改镜像仓库安装安装如果觉得麻烦可以用这个部署辅助工具自动完成进入工具目录并自动部署配置文 日志管理是一件麻烦的事情,特别是服务多的情况下出了问题需要排错、分析非常困难,一般会使用 ELK,但这篇文章将会介绍另外一个同样优秀的日志聚合平台 ...

    Fourierr 评论0 收藏0
  • 如何在 Rancher 中统一管理容器日志

    摘要:在中默认开启端口用于侦听发送过来的日志报文。至此,在中如何部署一套完整系统已经介绍完了,下面我将介绍如何将容器日志发送到中。下面我将介绍如何收集容器日志。目前日志显的杂乱无序。,现在我们再去查看发现我们的容器日志已经展示在这里了。 相信大家对于容器和 docker 这个概念并不陌生,很高兴的是 docker 为我们提供了多种log-driver。 showImg(https://se...

    whinc 评论0 收藏0

发表评论

0条评论

mingde

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<