Table of Contents | ||||
---|---|---|---|---|
|
Overview
You can send single events or stream data to your Devo domain over HTTP. Generate a token for your HTTP endpoint in the Devo web application, then use that token to set up event sending from your HTTP endpoint.
...
The recommended way to send events to Devo is by using Syslog. However, there are situations where HTTP ingestion may be preferred, such as when direct TCP connections are not feasible or when clients need to integrate with systems that only support HTTP.
Devo offers two HTTP endpoints or modes for event ingestion:
Event mode - Designed to send one event per HTTP request.
Stream mode - Designed to send multiple events per HTTP request.
Note |
---|
Maximum file size Note that there’s a limit of 32 MB when you use this sending method. |
...
Rw ui steps macro | |||||||||
---|---|---|---|---|---|---|---|---|---|
Log in to your Devo domain and go to Administration → Credentials → → Authentication tokens.
Click Create token.
Enter a descriptive Name and choose the person that will use the token in the Authorized user field. This can be either yourself or a user in your domain.
Select the destination Target table/s for the events. These are the tag or tags that will be used by Devo to classify the events. You can use wildcards to send the data to multiple tables. For example, to send the events to all tables that begin with "my.app", you can specify my.app.**. See the Authentication tokens section to learn more about how to use wildcards when identifying target tables.
In the Type field, choose HTTP ingestion.
Optionally, check the Expiration date field if you want to enter an expiration date for the new token. Choose the required date in the calendar.
Click Create. The token is generated and appears in the token list below. |
...
Element | Description |
---|---|
| Use the endpoint that corresponds to the Devo Cloud region you use. |
| This can be one of the following:
|
| The name of the Devo domain where the events are being sent to. |
| The token you generated in Devo to authorize your connection. |
| Specify the required hostname. |
| The Devo tag to be applied to the events. Learn more about tags in About Devo tags. |
| The log to be sent. Note that this is only valid if you’re using the In case of a |
Here is an example of an endpoint URL:
Code Block |
---|
https://http-us.devo.io/event/myDomain/token!a5370g9e8f7d7edf9d/local1/my.app.http.js?this%20is%20a%20example%20of%20log |
...
Table of Contents | ||||
---|---|---|---|---|
|
...
Sending a single event
...
Code Block |
---|
import requests
from urllib.parse import quote
devo_endpoint="http://devoEndpoint"
domain="demoDomain"
token="example_token_1234abcd"
hostname="my_src_hostname"
devo_table="my.app.demo.send"
message = quote("test event")
url = f'{devo_endpoint}/event/{domain}/token!{token}/{hostname}/{devo_table}?{message}'
payload={}
headers = {}
requests.request("GET", url, headers=headers, data=payload) |
Python - Sending a file with events
Code Block |
---|
import requests
with open('filePath', 'rb') as f:
data = f.read()
devo_endpoint="http://devoEndpoint"
domain="demoDomain"
token="example_token_1234abcd"
hostname="my_src_hostname"
devo_table="my.app.demo.send"
url = f'{devo_endpoint}/stream/{domain}/token!{token}/{hostname}/{devo_table}'
requests.request("POST", url, data=data) |
Java
Code Block |
---|
package lt.example.http.send;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
public class Main {
// /event/<identity>/token!<signature>/<host>/<tag>?<message>
public static void main(String[] args) {
try {
final String url = generateUrl(
"http://devoEndpoint",
"demoDomain",
"example_token_1234abcd",
"my_src_hostname",
"my.app.demo.send",
encodeToHttp("example_of_log"));
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
System.out.println("Response Code : " + responseCode);
System.out.println("Response: " + con.getResponseMessage());
} catch (UnsupportedEncodingException e) {
System.err.println("Cannot encode message: " + e.getMessage());
e.printStackTrace();
} catch (IOException e) {
System.err.println(e.getMessage());
e.printStackTrace();
}
}
public static String encodeToHttp(String str)
throws UnsupportedEncodingException {
return URLEncoder.encode(str, "UTF-8").replace("+","%20");
}
public static String generateUrl(String serverPath, String domain,
String token, String hostname,
String tag, String msg) {
return new StringBuilder(serverPath)
.append("/event/")
.append(domain).append("/token!")
.append(token).append("/")
.append(hostname).append("/")
.append(tag).append("?")
.append(msg)
.toString();
}
} |
Java (POST example)
Code Block |
---|
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.DataOutputStream;
public class Main {
public static void main(String[] args) {
try{
final String url = generateUrl(
"http://devoEndpoint",
"demoDomain",
"example_token_1234abcd",
"my_src_hostname",
"my.app.demo.send");
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
con.setRequestProperty("charset", "utf-8");
con.setDoOutput(true);
String urlParameters;
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
for (int i = 0; i < 3; i++) {
urlParameters = "PostExample" + i + "\n"; // \n needed to send multiple events, otherwise the stream will be sent as a single event
wr.writeBytes(urlParameters);
}
wr.flush();
wr.close();
int responseCode = con.getResponseCode();
System.out.println("Response Code : " + responseCode);
System.out.println("Response: " + con.getResponseMessage());
} catch (UnsupportedEncodingException e) {
System.err.println("Cannot encode message: " + e.getMessage());
e.printStackTrace();
} catch (IOException e) {
System.err.println(e.getMessage());
e.printStackTrace();
}
}
public static String generateUrl(String serverPath, String domain,
String token, String hostname,
String tag) {
return new StringBuilder(serverPath)
.append("/stream/")
.append(domain).append("/token!")
.append(token).append("/")
.append(hostname).append("/")
.append(tag).append("?")
.toString();
}
}
|
HTML - jQuery
Code Block |
---|
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Devo: JQuery Example</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
var serverPath = "http://devoEndpoint";
var domain = "demoDomain";
var token = "example_token_1234abcd";
var hostname = "my_src_hostname";
var tag = "my.app.demo.send";
var msg = "this is a example of log";
function generateUrl(domain, token, hostname, tag, msg) {
return serverPath + "/event/" + domain + "/token!" + token + "/" +
hostname + "/" + tag + "?" + msg;
}
$(document).ready(function() {
$.get(generateUrl(domain, token, hostname, tag, msg),
function(data, status) {
alert("Data: " + data + "\nStatus: " + status);
});
});
</script>
</head>
<body>
<h1>JQuery Example</h1>
</body>
</html> |
HTML - JavaScript
Code Block |
---|
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Devo: JavaScript Example</title>
<script>
var serverPath = "http://devoEndpoint";
var domain = "demoDomain";
var token = "example_token_1234abcd";
var hostname = "my_src_hostname";
var tag = "my.app.demo.send";
var msg = "this is a example of log";
function generateUrl(domain, token, hostname, tag, msg) {
return serverPath + "/event/" + domain + "/token!" + token + "/" +
hostname + "/" + tag + "?" + msg;
}
var req;
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
req = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
req.open("GET", generateUrl(domain, token, hostname, tag, msg), true);
req.send(null);
</script>
</head>
<body>
<h1>JS Example</h1>
</body>
</html> |
cURL - Sending a single event
Code Block |
---|
curl -v ‘<DEVO_ENDPOINT>/event/<DOMAIN>/token!<TOKEN>/<HOSTNAME>/<TAG>?this%20is%20a%20example%20of%20log’ |
cURL - Sending a file with events
Code Block |
---|
curl -v --request POST --url '<DEVO_ENDPOINT>/stream/<DOMAIN>/token!<TOKEN>/<HOSTNAME>/<TAG>' --header 'Content-Type:application/x-www-form-urlencoded' --header 'charset:utf-8' --data-binary @<FILE_PATH> |
cURL - Sending a file with compressed events
...
Rw ui tabs macro | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Send a single event in a single HTTP request using the URL query string to encode the event message. This method uses the HTTP GET method. Anatomy of the request
ExamplesJavaScript
Python
Bash
Send a single event in a single HTTP request using the body to encode the event message. This method uses the HTTP POST method. Anatomy of the request
ExamplesJavaScript
Python
Bash
|
Sending multiple events
The stream mode sends multiple events in a single HTTP request. The events must be encoded in the body of the HTTP request using \n
as a separator between event messages.
Rw ui tabs macro | ||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Send a batch of events in a single HTTP request. Recommended when the client knows in advance the number of events to send. Anatomy of the request
ExamplesJavaScript
Python
Bash
Sending a batch of events compressed with gzip in a single HTTP request can be useful for reducing the size of the data transmitted over the network (bandwidth), especially if the events are already compressed at the source. Anatomy of the request
ExamplesJavaScript
Python
Bash
Send a stream of events in a single HTTP request. Useful when the client does not know in advance the number of events to send. This method uses chunked transfer encoding to stream events using the body of the HTTP request. Anatomy of the request
ExamplesJavaScript
Python
Bash
|
Response codes
Take into consideration the following points related to the response codes returned by the HTTP API:
...