Skip to content

Commit

Permalink
adding serviceMap dashboards related Integration (opensearch-project#…
Browse files Browse the repository at this point in the history
…1494)

Signed-off-by: YANGDB <yang.db.dev@gmail.com>
  • Loading branch information
YANG-DB authored and derek-ho committed May 2, 2023
1 parent cd331d3 commit 7619217
Show file tree
Hide file tree
Showing 12 changed files with 954 additions and 0 deletions.
266 changes: 266 additions & 0 deletions integrations/service-map/assets/display/services-dashboard.ndjson

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
{
"index_patterns": [
"otel-v1-apm-service-map"
],
"mappings": {
"dynamic_templates": [
{
"strings_as_keyword": {
"match_mapping_type": "string",
"mapping": {
"ignore_above": 1024,
"type": "keyword"
}
}
}
],
"date_detection": false,
"properties": {
"destination": {
"properties": {
"domain": {
"type": "keyword",
"ignore_above": 1024
},
"resource": {
"type": "keyword",
"ignore_above": 1024
}
}
},
"hashId": {
"type": "keyword",
"ignore_above": 1024
},
"kind": {
"type": "keyword",
"ignore_above": 1024
},
"serviceName": {
"type": "keyword",
"ignore_above": 1024
},
"target": {
"properties": {
"domain": {
"type": "keyword",
"ignore_above": 1024
},
"resource": {
"type": "keyword",
"ignore_above": 1024
}
}
},
"traceGroupName": {
"type": "keyword",
"ignore_above": 1024
}
}
},
"version": 1
}
157 changes: 157 additions & 0 deletions integrations/service-map/assets/mapping/data-prepper-traces.mapping
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
{
"index_patterns": [
"otel-v1-apm-span-*"
],
"data_stream": {},
"template": {
"mappings": {
"dynamic_templates": [
{
"resource_attributes_map": {
"path_match": "resource.attributes.*",
"mapping": {
"type": "keyword"
}
}
},
{
"span_attributes_map": {
"path_match": "span.attributes.*",
"mapping": {
"type": "keyword"
}
}
}
],
"date_detection": false,
"properties": {
"droppedAttributesCount": {
"type": "long"
},
"droppedEventsCount": {
"type": "long"
},
"droppedLinksCount": {
"type": "long"
},
"durationInNanos": {
"type": "long"
},
"endTime": {
"type": "date_nanos"
},
"events": {
"type": "nested",
"properties": {
"attributes": {
"properties": {
"time": {
"type": "date_nanos"
}
}
},
"droppedAttributesCount": {
"type": "long"
},
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"time": {
"type": "date_nanos"
}
}
},
"kind": {
"type": "keyword",
"ignore_above": 128
},
"links": {
"type": "nested"
},
"name": {
"type": "keyword",
"ignore_above": 1024
},
"parentSpanId": {
"type": "keyword",
"ignore_above": 256
},
"resource": {
"properties": {
"attributes": {
"properties": {
"service@name": {
"type": "keyword"
}
}
}
}
},
"serviceName": {
"type": "keyword"
},
"span": {
"properties": {
"attributes": {
"properties": {}
}
}
},
"spanId": {
"type": "keyword",
"ignore_above": 256
},
"startTime": {
"type": "date_nanos"
},
"status": {
"properties": {
"code": {
"type": "integer"
},
"message": {
"type": "keyword"
}
}
},
"traceGroup": {
"type": "keyword",
"ignore_above": 1024
},
"traceGroupFields": {
"properties": {
"durationInNanos": {
"type": "long"
},
"endTime": {
"type": "date_nanos"
},
"statusCode": {
"type": "integer"
}
}
},
"traceId": {
"type": "keyword",
"ignore_above": 256
},
"traceState": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
},
"version": 1
}
47 changes: 47 additions & 0 deletions integrations/service-map/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
{
"name": "data-prepper",
"version": {
"integ": "0.1.0",
"schema": "1.0.0",
"resource": "^2.6.0"
},
"description": "Data-Prepper Service Map and Tracing correlations Integration",
"catalog": "observability",
"components": [
"traces,traceGroups,metrics"
],
"collection":[
{
"traces": [{
"info": "traces signals",
"input_type":"traces",
"dataset":"spans",
"labels" :["traceGroups","traces"],
"fields-mapping" : [
{"alias":"attributes.serviceName","field":"serviceName"} ,
{"alias":"events.@timestamp","field":"events.time"}
]
}]
},
{
"services": [{
"info": "service map",
"input_type": "services",
"dataset": "service",
"labels": ["services"]
}]
},
{
"metrics": [{
"info": "status metrics",
"input_type":"metrics",
"dataset":"metrics",
"labels" :["metrics"]
}]
}
],
"repo": {
"github": "https://github.com/opensearch-project/observability/tree/main/integrarions/service-map"
}
}

107 changes: 107 additions & 0 deletions integrations/service-map/info/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
![data-prepper](dataPrepper.svg)

# What is Data Prepper

[Data Prepper](https://github.com/opensearch-project/data-prepper/blob/main/docs/overview.md) is an open source utility service. Data Prepper is a server side data collector with abilities to filter, enrich, transform, normalize and aggregate data for downstream analytics and visualization. The broader vision for Data Prepper is to enable an end-to-end data analysis life cycle from gathering raw logs to facilitating sophisticated and actionable interactive ad-hoc analyses on the data.

# What is Data Prepper Integration

Data Prepper integration is concerned with the following aspects

- Allow simple and automatic generation of all schematic structured
- traces ( including specific fields mapping to map to SS4O schema)
- services ( adding support for specific service mapping category)
- metrics (using the standard SS4O schema)

- Add Dashboard Assets for correlation between traces-services-metrics

- Add correlation queries to investigate traces based metrics

# Data - Prepper Trace Fields
Data Prepper uses the following [Traces](https://github.com/opensearch-project/data-prepper/blob/main/docs/schemas/trace-analytics/otel-v1-apm-span-index-template.md) mapping file
The next fields are used:
```text
- traceId - A unique identifier for a trace. All spans from the same trace share the same traceId.
- spanId - A unique identifier for a span within a trace, assigned when the span is created.
- traceState - Conveys information about request position in multiple distributed tracing graphs.
- parentSpanId - The spanId of this span's parent span. If this is a root span, then this field must be empty.
- name - A description of the span's operation.
- kind - The type of span. See OpenTelemetry - SpanKind.
- startTime - The start time of the span.
- endTime - The end time of the span.
- durationInNanos - Difference in nanoseconds between startTime and endTime.
- serviceName - Currently derived from the opentelemetry.proto.resource.v1.Resource associated with the span, the resource from the span originates.
- events - A list of events. See OpenTelemetry - Events.
- links - A list of linked spans. See OpenTelemetry - Links.
- droppedAttributesCount - The number of attributes that were discarded.
- droppedEventsCount - The number of events that were discarded.
- droppedLinksCount - The number of links that were dropped.
- span.attributes.* - All span attributes are split into a list of keywords.
- resource.attributes.* - All resource attributes are split into a list of keywords.
- status.code - The status of the span. See OpenTelemetry - Status.
```
These fields have a high overlap with the [`sso_traces`](../../../schema/observability/traces/README.md) fields from the observability catalog

There are some additional `trace.group` related fields which are not part of the [OTEL spec](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/api.md) for traces
```text
- traceGroup - A derived field, the name of the trace's root span.
- traceGroupFields.endTime - A derived field, the endTime of the trace's root span.
- traceGroupFields.statusCode - A derived field, the status.code of the trace's root span.
- traceGroupFields.durationInNanos - A derived field, the durationInNanos of the trace's root span.
```

# Data - Prepper Trace Fields Mapping to SSO Trace Schema
To compensate for the minor differences in fields naming between the [Data-Prepper-Trace mapping](https://github.com/opensearch-project/data-prepper/blob/main/docs/schemas/trace-analytics/otel-v1-apm-span-index-template.md) and [SSO Traces mapping](../../../schema/observability/traces/traces.mapping)
We will define the next mapping alias that will be part of the [config.json](../config.json) for this integration

```json5
...
"fields-mapping" : [
{"alias":"attributes.serviceName","field":"serviceName"} ,
{"alias":"events.@timestamp","field":"events.time"}
]
...
```


To address this difference, the `trace` signal can be augmented with additional trace-component - in this case it will be the [traceGroup](../../../schema/observability/traces/traceGroup).

## Service dashboard
Service will have a dashboard comprised of the following visualizations:
- Latency per service with traces / metrics links
- Latency per trace-group with traces / metrics links
- Error rate per service with traces / metrics links
- Error rate per trace-group with traces / metrics links
- Throughput rate per service with traces / metrics links
- Throughput rate per trace-group with traces / metrics links

- Services view including error rate, latency, throughput, connected-services, traces, metrics

```text
+--------------------------------+--------------------------------+
| | |
| Latency per service | Latency per trace-group |
| with traces/metrics links | with traces/metrics links |
| | |
+--------------------------------+--------------------------------+
| | |
| Error rate per service | Error rate per trace-group |
| with traces/metrics links | with traces/metrics links |
| | |
+--------------------------------+--------------------------------+
| | |
| Throughput rate per service | Throughput rate per trace-group|
| with traces/metrics links | with traces/metrics links |
| | |
+--------------------------------+--------------------------------+
| |
| Services view with error rate, latency, |
| throughput, connected-services, traces, |
| and metrics |
| |
+--------------------------------------------------------+
```
8 changes: 8 additions & 0 deletions integrations/service-map/info/dataPrepper.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 7 additions & 0 deletions integrations/service-map/samples/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Samples
The sample folder contains any type of sampled data that explains and demonstrates the expected input signals.

Specifically this folder contains two inner folder
- **preloaded** containing a ready-made signals with detailed instructions on how to load them into the appropriate opensearch data-streams.

Any other internal folder can be added that represents additional aspects of this integration expected ingesting content.
Loading

0 comments on commit 7619217

Please sign in to comment.