我们需要在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());
}
}
}