Splunk与Oozie整合

问题描述 投票:1回答:0

我们需要在Splunk-HTTP事件收集器中捕获Oozie工作流失败事件(示例。)。https:/qa.splunk.organization.comservicescollector。).

为了实现这个目标,我们创建了一个单独的Oozie Java动作,将故障事件记录到Splunk。这种方法的问题是,我们有100多个ozie工作流,为Splunk添加一个新的工作流动作是不可行的。

有没有更好的方法在Splunk HTTP事件收集器中捕获Oozie工作流失败?

工作流程.xml

    <start to="Input_Check" />
    <decision name="Input_Check">
        <switch>
            <case to="Input_Move"> ${fs:dirSize(source_hdfs_path) gt 0} </case>
            <default to="end"/>
        </switch>
    </decision>

    <action name="Input_Move">
        <java>
            <main-class>com.org.FileMove</main-class>
            <arg>${source_hdfs_path}/</arg>
            <arg>${destination_hdfs_path}</arg>
        </java>
        <ok to="Process_File" />
        <error to="Splunk_Log" />
    </action>

    <action name="Process_File">
        <java>
            <main-class>com.org.FileProcessor</main-class>
            <arg>inputPath=${destination_hdfs_path}/</arg>
            <arg>outputPath=${output_hdfs_path}/</arg>
        </java>
        <ok to="end" />
        <error to="Splunk_Log" />
    </action>

    <action name="Splunk_Log">
        <java>
            <main-class>com.org.SplunkLog</main-class>
            <arg>https://qa.splunk.organization.com/services/collector</arg>
            <arg>auth-token</arg>
            <arg>Workflow Failed</arg>
        </java>
        <ok to="fail"/>
        <error to="fail"/>
    </action>

    <kill name="fail">
        <message>Test Splunk Workflow failed</message>
    </kill>
    <end name="end" />
</workflow-app>

Java类

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;

public class SplunkLog {

    public static void main(String[] args) throws Exception {

        if(args.length!=3){
            System.exit(-1);
        }

        String URL = args[0];
        String authToken = args[1];
        String data = args[2];

        String jsonData = "{\"event\": \"" + data + "\", \"sourcetype\": \"manual\"}";

        URL url = new URL (URL);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoOutput(true);
        connection.setDoInput(true);
        connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");

        connection.setRequestProperty  ("Authorization", "Splunk " + authToken);
        connection.setRequestMethod("POST");
        connection.connect();

        OutputStream outputStream = connection.getOutputStream();
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
        writer.write(jsonData);
        writer.close();
        outputStream.close();

        if (connection.getResponseCode()==HttpURLConnection.HTTP_OK) {
            System.out.println("SUCCESS");
        }else{
            System.out.println("data : " + jsonData + "token : " + authToken);
            System.out.println("ERROR : " + connection.getResponseMessage());
        }

    }
}
oozie splunk
© www.soinside.com 2019 - 2024. All rights reserved.