Skip to content
This repository was archived by the owner on Dec 14, 2022. It is now read-only.

Commit d4d6631

Browse files
author
Chris Wiechmann
committed
[skip ci] Error-Handling for Logstash processing issues
1 parent 0bcf325 commit d4d6631

File tree

4 files changed

+26
-3
lines changed

4 files changed

+26
-3
lines changed

elk-traffic-monitor-api/flows/trafficMonitorApi-search.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@
134134
{
135135
"name": "code",
136136
"type": "string",
137-
"value": "\"var result = {};\\n result.processId = \\\"\\\";\\n result.data = [];\\n data.hits.map(function(entry) {\\n var dataObject = {};\\n var _source = entry._source;\\n dataObject.correlationId = _source.correlationId;\\n dataObject.timestamp = Date.parse(_source['@timestamp']);\\n if(_source.transactionSummary && _source.transactionSummary.serviceContext) {\\n dataObject.serviceName = _source.transactionSummary.serviceContext.service;\\n dataObject.operation = _source.transactionSummary.serviceContext.method;\\n }\\n processInitialTransactionElement(dataObject, _source);\\n result.data.push(dataObject);\\n });\\n \\n function processInitialTransactionElement(dataObject, _source) {\\n if(_source.transactionElements && _source.transactionElements.leg0) {\\n dataObject.statustext = _source.transactionElements.leg0.protocolInfo.http.statusText;\\n dataObject.method = _source.transactionElements.leg0.protocolInfo.http.method;\\n dataObject.status = _source.transactionElements.leg0.protocolInfo.http.status;\\n dataObject.wafStatus = _source.transactionElements.leg0.protocolInfo.http.wafStatus;\\n dataObject.subject = _source.transactionElements.leg0.protocolInfo.http.authSubjectId;\\n dataObject.localPort = _source.transactionElements.leg0.protocolInfo.http.localPort;\\n dataObject.uri = _source.transactionElements.leg0.protocolInfo.http.uri;\\n dataObject.duration = _source.transactionElements.leg0.duration;\\n dataObject.type = getProtocolType(_source.transactionElements.leg0.protocolInfo);\\n dataObject.finalStatus = _source.transactionElements.leg0.finalStatus;\\n }\\n }\\n \\n function getProtocolType(protocolInfo) {\\n if(protocolInfo.hasOwnProperty('http')) {\\n return 'http';\\n }\\n }\\n \\n return result;\"",
137+
"value": "\"var result = {};\\n result.processId = \\\"\\\";\\n result.data = [];\\n data.hits.map(function(entry) {\\n var dataObject = {};\\n var _source = entry._source;\\n dataObject.correlationId = _source.correlationId;\\n dataObject.timestamp = Date.parse(_source['@timestamp']);\\n if(_source.transactionSummary && _source.transactionSummary.serviceContext) {\\n dataObject.serviceName = _source.transactionSummary.serviceContext.service;\\n dataObject.operation = _source.transactionSummary.serviceContext.method;\\n }\\n processInitialTransactionElement(dataObject, _source);\\n result.data.push(dataObject);\\n });\\n \\n function processInitialTransactionElement(dataObject, _source) {\\n if(_source.transactionElements && _source.transactionElements.leg0) {\\n dataObject.statustext = _source.transactionElements.leg0.protocolInfo.http.statusText;\\n dataObject.method = _source.transactionElements.leg0.protocolInfo.http.method;\\n dataObject.status = _source.transactionElements.leg0.protocolInfo.http.status;\\n dataObject.wafStatus = _source.transactionElements.leg0.protocolInfo.http.wafStatus;\\n dataObject.subject = _source.transactionElements.leg0.protocolInfo.http.authSubjectId;\\n dataObject.localPort = _source.transactionElements.leg0.protocolInfo.http.localPort;\\n dataObject.uri = _source.transactionElements.leg0.protocolInfo.http.uri;\\n dataObject.vhost = _source.transactionElements.leg0.protocolInfo.http.vhost;\\n dataObject.duration = _source.transactionElements.leg0.duration;\\n dataObject.type = getProtocolType(_source.transactionElements.leg0.protocolInfo);\\n dataObject.finalStatus = _source.transactionElements.leg0.finalStatus;\\n }\\n }\\n \\n function getProtocolType(protocolInfo) {\\n if(protocolInfo.hasOwnProperty('http')) {\\n return 'http';\\n }\\n }\\n \\n return result;\"",
138138
"metaName": "code",
139139
"metaDescription": "A JavaScript function body. Supports `await` and returning promises."
140140
}
@@ -321,7 +321,7 @@
321321
{
322322
"name": "code",
323323
"type": "string",
324-
"value": "\"let index = 'apigw-traffic-details*';\\n if(data.config.testElasticIndex) {\\n index = data.config.testElasticIndex;\\n }\\n return index;\"",
324+
"value": "\"// Overview screen (Traffic-Details table) \\n // should also include the apigw-traffic-errors documents\\n let index = 'apigw-traffic-*';\\n if(data.config.testElasticIndex) {\\n index = data.config.testElasticIndex;\\n }\\n return index;\"",
325325
"metaName": "code",
326326
"metaDescription": "A JavaScript function body. Supports `await` and returning promises."
327327
}

elk-traffic-monitor-api/test/asAdmin/test_search_endpoint_AsAdmin.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -581,6 +581,26 @@ describe('Endpoints', function () {
581581
expect(body.data[0].uri).to.equals('/petstore/v2/pet/findByStatus');
582582
});
583583
});
584+
it.only('[Endpoint-0023] Should include the V-Host value', () => {
585+
const auth = {
586+
user: server.apibuilder.config.apikey || 'test',
587+
password: ''
588+
};
589+
return requestAsync({
590+
method: 'GET',
591+
uri: `http://localhost:${server.apibuilder.port}/api/elk/v1/api/router/service/instance-1/ops/search?field=correlationId&value=7a240f5f0e21555d2d343482`,
592+
headers: {
593+
'cookie': 'VIDUSR=Search-0022-DAVID-1597468226-Z+qdRW4rGZnwzQ==',
594+
'csrf-token': '04F9F07E59F588CDE469FC367A12ED3A4B845FDA9A9AE2D9A77686823067CDDC'
595+
},
596+
auth: auth,
597+
json: true
598+
}).then(({ response, body }) => {
599+
expect(response.statusCode).to.equal(200);
600+
expect(body).to.be.an('Object');
601+
expect(body.data[0].vhost).to.equal('api.customer.com:443', 'V-Host is not part of the result');
602+
});
603+
});
584604
});
585605
});
586606

elk-traffic-monitor-api/test/documents/basic/search_test_documents.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ module.exports = [
7676
"bytesReceived": 747,
7777
"localPort": "8065",
7878
"method": "GET",
79+
"vhost": "api.customer.com:443",
7980
"statusText": "Not Found",
8081
"remotePort": "59641",
8182
"bytesSent": 834,

logstash/pipeline/pipeline.conf

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ filter {
8080
clone {
8181
clones => ['errorEvent']
8282
}
83+
# Fill the URI based on the given path to have it shown in Traffic-Monitor
84+
mutate { add_field => { "[transactionElements][leg0][protocolInfo][http][uri]" => "%{[transactionSummary][path]}" } }
8385
mutate { replace => { "[transactionElements][leg0][protocolInfo][http][status]" => "XXX" } }
8486
mutate { replace => { "[transactionElements][leg0][protocolInfo][http][statusText]" => "ERROR" } }
8587
mutate { replace => { "[transactionElements][leg0][protocolInfo][http][authSubjectId]" => "ID: %{[correlationId]}" } }
@@ -127,7 +129,7 @@ output {
127129
} else if [type] == 'errorEvent' {
128130
elasticsearch {
129131
hosts => "elasticsearch1:9200"
130-
index => "apigw-traffic-details-err-%{+YYYY}"
132+
index => "apigw-traffic-errors-%{+YYYY}"
131133
template => "${HOME}/config/traffic_details_index_template.json"
132134
template_overwrite => true
133135
document_id => "%{correlationId}"

0 commit comments

Comments
 (0)