无法连接 Java 与 splunk 云

Unable to connect Java with splunk cloud

我想将我的 java 程序连接到 Splunk Cloud 并将日志发送到那里。

我尝试连接 Splunk Enterprise(安装在我的本地计算机上)。在这种情况下,它已成功连接,我也可以在那里看到日志。

我不知道为什么我无法将我的 java 程序连接到 Splunk Cloud。

我的代码是这样的。

    Map<String, Object> connectArgs= new HashMap<String, Object>(); 
    HttpService.setSslSecurityProtocol( SSLSecurityProtocol.TLSv1_2);
    connectArgs.put("host", "xxx.splunkcloud.com"); //this is the part of the url what I found in the url of my splunk cloud account.
    connectArgs.put("username", "un");
    connectArgs.put("password", "pswd");
    connectArgs.put("scheme", "https"); // I tried http also here
    connectArgs.put("port", 8089); // I tried 8088 too nothing works
    
    Service splunkService= Service.connect(connectArgs);
    
    Args logArgs= new Args();
    logArgs.put("sourcetype", "helloWorldSplunk");
    
    Receiver receiver= splunkService.getReceiver();
    receiver.log("main", logArgs, "Hello from java SDE program to Splunk");
    
    System.out.println("END");

执行上述代码时出现的错误=>

Exception in thread "main" java.lang.RuntimeException: Connection timed out: connect
at com.splunk.HttpService.send

此外我还有一个问题:

如何将我的 JavaEE 应用程序连接到 Splunk?我和上面的程序一样吗?或者不同的东西。

这可能是由于您网络中的防火墙问题,或者您可能 运行 在公司代理后面。你能确定你已经验证了吗?

就将您的日志传送到 splunk 实例而言,您需要将日志转发工具(如通用转发器)安装在与您的应用程序相同的环境中,以将应用程序日志转发到远程 splunk 服务器。

此外,作为最佳实践,请将日志转发与您的应用程序分离。您的应用程序应该只将日志写入文件系统。日志处理器或转发器应将其发送到远程服务器以供摄取。原因是,您以后可能会改变主意使用 logstash 或 datadog,在这种情况下,如果您不必接触您的应用程序。

如果您尝试发送到 Splunk 的 HTTP 事件收集器(根据对端口 8088 的引用推测),那么您将需要正确的 URL。确切的 URL 取决于您使用的是免费还是付费 Splunk Cloud 帐户以及该帐户的托管位置(AWS 或 Google)。

The standard form for the HEC URI in Splunk Cloud Platform free trials is as follows:

<protocol>://inputs.<host>:<port>/<endpoint>

The standard form for the HEC URI in Splunk Cloud Platform is as follows:

<protocol>://http-inputs-<host>:<port>/<endpoint>

The standard form for the HEC URI in Splunk Cloud Platform on Google Cloud is as follows:

<protocol>://http-inputs.<host>:<port>/<endpoint>

Where:

    <protocol> is either http or https
    You must add http-inputs- before the <host>
    <host> is the Splunk Cloud Platform instance that runs HEC
    <port> is the HEC port number
        8088 on Splunk Cloud Platform free trials
        443 by default on Splunk Cloud Platform instances

详情见https://docs.splunk.com/Documentation/Splunk/latest/Data/UsetheHTTPEventCollector#Send_data_to_HTTP_Event_Collector_on_Splunk_Cloud_Platform