OpenSearch Index Templates

To support Jaeger traces using OpenSearch, you must configure required index templates. This template defines the mapping and settings for your Jaeger indices in OpenSearch. This document describes the index template for OpenSearch when it functions as a log server for Jaeger traces.

To manage index, the OpenSearch uses plugin Index State Management (ISM). The following section provides index templates for both the cases where ISM is installed or if it is not installed.

Jaeger Service Trace Index Template without Index State Management

{
    "priority": 5,
    "index_patterns":
    [
        "*jaeger-service-*"
    ],
    "template":
    {
        "aliases":
        {
            "jaeger-service-read":
            {}
        },
        "settings":
        {
            "index.number_of_shards": 6,
            "index.number_of_replicas": 1,
            "index.mapping.nested_fields.limit": 50,
            "index.requests.cache.enable": true
        },
        "mappings":
        {
            "dynamic_templates":
            [
                {
                    "span_tags_map":
                    {
                        "mapping":
                        {
                            "type": "keyword",
                            "ignore_above": 256
                        },
                        "path_match": "tag.*"
                    }
                },
                {
                    "process_tags_map":
                    {
                        "mapping":
                        {
                            "type": "keyword",
                            "ignore_above": 256
                        },
                        "path_match": "process.tag.*"
                    }
                }
            ],
            "properties":
            {
                "serviceName":
                {
                    "type": "keyword",
                    "ignore_above": 256
                },
                "operationName":
                {
                    "type": "keyword",
                    "ignore_above": 256
                }
            }
        }
    }
}

Jaeger Span Trace Index Template without Index State Management

{
    "priority": 3,
    "index_patterns":
    [
        "*jaeger-span-*"
    ],
    "template":
    {
        "aliases":
        {
            "jaeger-span-read":
            {}
        },
        "settings":
        {
            "index.number_of_shards": 6,
            "index.number_of_replicas": 1,
            "index.mapping.nested_fields.limit": 50,
            "index.requests.cache.enable": true
        },
        "mappings":
        {
            "dynamic_templates":
            [
                {
                    "span_tags_map":
                    {
                        "mapping":
                        {
                            "type": "keyword",
                            "ignore_above": 256
                        },
                        "path_match": "tag.*"
                    }
                },
                {
                    "process_tags_map":
                    {
                        "mapping":
                        {
                            "type": "keyword",
                            "ignore_above": 256
                        },
                        "path_match": "process.tag.*"
                    }
                }
            ],
            "properties":
            {
                "traceID":
                {
                    "type": "keyword",
                    "ignore_above": 256
                },
                "parentSpanID":
                {
                    "type": "keyword",
                    "ignore_above": 256
                },
                "spanID":
                {
                    "type": "keyword",
                    "ignore_above": 256
                },
                "operationName":
                {
                    "type": "keyword",
                    "ignore_above": 256
                },
                "startTime":
                {
                    "type": "long"
                },
                "startTimeMillis":
                {
                    "type": "date",
                    "format": "epoch_millis"
                },
                "duration":
                {
                    "type": "long"
                },
                "flags":
                {
                    "type": "integer"
                },
                "logs":
                {
                    "type": "nested",
                    "dynamic": false,
                    "properties":
                    {
                        "timestamp":
                        {
                            "type": "long"
                        },
                        "fields":
                        {
                            "type": "nested",
                            "dynamic": false,
                            "properties":
                            {
                                "key":
                                {
                                    "type": "keyword",
                                    "ignore_above": 256
                                },
                                "value":
                                {
                                    "type": "keyword",
                                    "ignore_above": 256
                                },
                                "tagType":
                                {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        }
                    }
                },
                "process":
                {
                    "properties":
                    {
                        "serviceName":
                        {
                            "type": "keyword",
                            "ignore_above": 256
                        },
                        "tag":
                        {
                            "type": "object"
                        },
                        "tags":
                        {
                            "type": "nested",
                            "dynamic": false,
                            "properties":
                            {
                                "key":
                                {
                                    "type": "keyword",
                                    "ignore_above": 256
                                },
                                "value":
                                {
                                    "type": "keyword",
                                    "ignore_above": 256
                                },
                                "tagType":
                                {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        }
                    }
                },
                "references":
                {
                    "type": "nested",
                    "dynamic": false,
                    "properties":
                    {
                        "refType":
                        {
                            "type": "keyword",
                            "ignore_above": 256
                        },
                        "traceID":
                        {
                            "type": "keyword",
                            "ignore_above": 256
                        },
                        "spanID":
                        {
                            "type": "keyword",
                            "ignore_above": 256
                        }
                    }
                },
                "tag":
                {
                    "type": "object"
                },
                "tags":
                {
                    "type": "nested",
                    "dynamic": false,
                    "properties":
                    {
                        "key":
                        {
                            "type": "keyword",
                            "ignore_above": 256
                        },
                        "value":
                        {
                            "type": "keyword",
                            "ignore_above": 256
                        },
                        "tagType":
                        {
                            "type": "keyword",
                            "ignore_above": 256
                        }
                    }
                }
            }
        }
    }
}

Lifecycle Policy for Jaeger Index Template

You must have ISM installed to use this policy.

{
    "policy":
    {
        "description": "this will be used for traces",
        "default_state": "hot",
        "states":
        [
            {
                "name": "hot",
                "actions":
                [
                    {
                        "rollover":
                        {
                            "min_size": "2gb",
                            "min_index_age": "7d"
                        }
                    }
                ],
                "transitions":
                [
                    {
                        "state_name": "warm",
                        "conditions":
                        {
                            "min_index_age": "10d"
                        }
                    }
                ]
            },
            {
                "name": "warm",
                "actions":
                [
                    {
                        "force_merge": {
                            "max_num_segments": 1
                        }
                    }
                ],
                "transitions":
                [
                    {
                        "state_name": "delete",
                        "conditions":
                        {
                            "min_index_age": "30d"
                        }
                    }
                ]
            },
            {
                "name": "delete",
                "actions":
                [
                    {
                        "delete":
                        {}
                    }
                ]
            }
        ],
        "ism_template":
        {
            "index_patterns":
            [
                "*jaeger-service-*",
                "*jaeger-span-*"
            ],
            "priority": 100
        }
    }
}

Jaeger Service Trace Index Template with Index State Management

In this template, jaeger-policy is the policy name created using above Lifecycle Policy template.

{
    "priority": 5,
    "index_patterns":
    [
        "*jaeger-service-*"
    ],
    "template":
    {
        "aliases":
        {
            "jaeger-service-read":
            {}
        },
        "settings":
        {
            "index.number_of_shards": 6,
            "index.number_of_replicas": 1,
            "index.mapping.nested_fields.limit": 50,
            "index.requests.cache.enable": true,
            "opendistro.index_state_management.policy_id": "jaeger-policy"
        },
        "mappings":
        {
            "dynamic_templates":
            [
                {
                    "span_tags_map":
                    {
                        "mapping":
                        {
                            "type": "keyword",
                            "ignore_above": 256
                        },
                        "path_match": "tag.*"
                    }
                },
                {
                    "process_tags_map":
                    {
                        "mapping":
                        {
                            "type": "keyword",
                            "ignore_above": 256
                        },
                        "path_match": "process.tag.*"
                    }
                }
            ],
            "properties":
            {
                "serviceName":
                {
                    "type": "keyword",
                    "ignore_above": 256
                },
                "operationName":
                {
                    "type": "keyword",
                    "ignore_above": 256
                }
            }
        }
    }
}

Jaeger Span Trace Index Template with Index State Management

{
    "priority": 3,
    "index_patterns":
    [
        "*jaeger-span-*"
    ],
    "template":
    {
        "aliases":
        {
            "jaeger-span-read":
            {}
        },
        "settings":
        {
            "index.number_of_shards": 6,
            "index.number_of_replicas": 1,
            "index.mapping.nested_fields.limit": 50,
            "index.requests.cache.enable": true,
            "opendistro.index_state_management.policy_id": "jaeger-policy"
        },
        "mappings":
        {
            "dynamic_templates":
            [
                {
                    "span_tags_map":
                    {
                        "mapping":
                        {
                            "type": "keyword",
                            "ignore_above": 256
                        },
                        "path_match": "tag.*"
                    }
                },
                {
                    "process_tags_map":
                    {
                        "mapping":
                        {
                            "type": "keyword",
                            "ignore_above": 256
                        },
                        "path_match": "process.tag.*"
                    }
                }
            ],
            "properties":
            {
                "traceID":
                {
                    "type": "keyword",
                    "ignore_above": 256
                },
                "parentSpanID":
                {
                    "type": "keyword",
                    "ignore_above": 256
                },
                "spanID":
                {
                    "type": "keyword",
                    "ignore_above": 256
                },
                "operationName":
                {
                    "type": "keyword",
                    "ignore_above": 256
                },
                "startTime":
                {
                    "type": "long"
                },
                "startTimeMillis":
                {
                    "type": "date",
                    "format": "epoch_millis"
                },
                "duration":
                {
                    "type": "long"
                },
                "flags":
                {
                    "type": "integer"
                },
                "logs":
                {
                    "type": "nested",
                    "dynamic": false,
                    "properties":
                    {
                        "timestamp":
                        {
                            "type": "long"
                        },
                        "fields":
                        {
                            "type": "nested",
                            "dynamic": false,
                            "properties":
                            {
                                "key":
                                {
                                    "type": "keyword",
                                    "ignore_above": 256
                                },
                                "value":
                                {
                                    "type": "keyword",
                                    "ignore_above": 256
                                },
                                "tagType":
                                {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        }
                    }
                },
                "process":
                {
                    "properties":
                    {
                        "serviceName":
                        {
                            "type": "keyword",
                            "ignore_above": 256
                        },
                        "tag":
                        {
                            "type": "object"
                        },
                        "tags":
                        {
                            "type": "nested",
                            "dynamic": false,
                            "properties":
                            {
                                "key":
                                {
                                    "type": "keyword",
                                    "ignore_above": 256
                                },
                                "value":
                                {
                                    "type": "keyword",
                                    "ignore_above": 256
                                },
                                "tagType":
                                {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        }
                    }
                },
                "references":
                {
                    "type": "nested",
                    "dynamic": false,
                    "properties":
                    {
                        "refType":
                        {
                            "type": "keyword",
                            "ignore_above": 256
                        },
                        "traceID":
                        {
                            "type": "keyword",
                            "ignore_above": 256
                        },
                        "spanID":
                        {
                            "type": "keyword",
                            "ignore_above": 256
                        }
                    }
                },
                "tag":
                {
                    "type": "object"
                },
                "tags":
                {
                    "type": "nested",
                    "dynamic": false,
                    "properties":
                    {
                        "key":
                        {
                            "type": "keyword",
                            "ignore_above": 256
                        },
                        "value":
                        {
                            "type": "keyword",
                            "ignore_above": 256
                        },
                        "tagType":
                        {
                            "type": "keyword",
                            "ignore_above": 256
                        }
                    }
                }
            }
        }
    }
}