Применить сопоставления в ElasticSearch 7

Я давно использую ElasticSearch 6, и мне удалось применить сопоставление для наиболее часто используемых полей. Недавно я создал еще один кластер (v7.7), но не могу применять те же сопоставления, поскольку default устарел. В моих сопоставлениях есть вложенные объекты. Когда я заменяю default на _doc, я могу применить сопоставление, однако все входящие запросы к ES будут отклонены и попадут в очередь недоставленных сообщений Logstash. (Я использую logstash и отправляю журналы своих приложений в ElasticSearch. Вот мое отображение json:

  "index_patterns": [
    "logstash-*"
  ],
  "settings": {
    "index": {
      "mapping": {
        "total_fields": {
          "limit": "50000"
        }
      },
      "refresh_interval": "5s"
    }
  },
  "mappings": {
    "_default_": {
      "_all": {
        "norms": false
      },
      "properties": {
        "@timestamp": {
          "type": "date"
        },
        "name": {
          "ignore_above": 64,
          "type": "keyword"
        },
        "logger": {
          "ignore_above": 64,
          "type": "keyword"
        },
        "hostname": {
          "ignore_above": 256,
          "type": "keyword"
        },
        "pid": {
          "type": "integer"
        },
        "level": {
          "type": "short"
        },
        "v": {
          "type": "short"
        },
        "env": {
          "ignore_above": 64,
          "type": "keyword"
        },
        "service": {
          "ignore_above": 256,
          "type": "keyword"
        },
        "message": {
          "type": "text"
        },
        "module": {
          "type": "keyword"
        },
        "subModule": {
          "type": "keyword"
        },
        "docker": {
          "properties": {
            "container_id": {
              "ignore_above": 512,
              "type": "keyword"
            },
            "container_name": {
              "ignore_above": 512,
              "type": "keyword"
            },
            "image_id": {
              "ignore_above": 512,
              "type": "keyword"
            },
            "image_name": {
              "ignore_above": 512,
              "type": "keyword"
            },
            "command": {
              "ignore_above": 512,
              "type": "keyword"
            },
            "tag": {
              "ignore_above": 512,
              "type": "keyword"
            },
            "created": {
              "type": "date"
            }
          }
        },
        "data": {
          "type": "text"
        },
        "context": {
          "properties": {
            "trade": {
              "properties": {
                "id": {
                  "ignore_above": 64,
                  "type": "keyword"
                }
              }
            },
            "trader": {
              "properties": {
                "id": {
                  "ignore_above": 64,
                  "type": "keyword"
                },
                "email": {
                  "ignore_above": 1024,
                  "type": "keyword"
                }
              }
            },
            "payment": {
              "properties": {
                "id": {
                  "ignore_above": 64,
                  "type": "keyword"
                }
              }
            },
            "err": {
              "properties": {
                "message": {
                  "type": "text"
                },
                "name": {
                  "ignore_above": 256,
                  "type": "keyword"
                },
                "stack": {
                  "type": "text"
                },
                "code": {
                  "ignore_above": 256,
                  "type": "keyword"
                },
                "file": {
                  "ignore_above": 256,
                  "type": "keyword"
                },
                "line": {
                  "type": "integer"
                },
                "cause": {
                  "properties": {
                    "message": {
                      "type": "text"
                    },
                    "name": {
                      "ignore_above": 256,
                      "type": "keyword"
                    },
                    "stack": {
                      "type": "text"
                    },
                    "code": {
                      "ignore_above": 256,
                      "type": "keyword"
                    },
                    "file": {
                      "ignore_above": 256,
                      "type": "keyword"
                    },
                    "line": {
                      "type": "integer"
                    },
                    "cause": {
                      "properties": {
                        "message": {
                          "type": "text"
                        },
                        "name": {
                          "ignore_above": 256,
                          "type": "keyword"
                        },
                        "stack": {
                          "type": "text"
                        },
                        "code": {
                          "ignore_above": 256,
                          "type": "keyword"
                        },
                        "file": {
                          "ignore_above": 256,
                          "type": "keyword"
                        },
                        "line": {
                          "type": "integer"
                        }
                      }
                    }
                  }
                }
              }
            },
            "req": {
              "properties": {
                "id": {
                  "ignore_above": 64,
                  "type": "keyword"
                },
                "remoteAddress": {
                  "type": "ip"
                },
                "remotePort": {
                  "type": "integer"
                },
                "method": {
                  "ignore_above": 32,
                  "type": "keyword"
                },
                "path": {
                  "type": "text"
                },
                "body": {
                  "type": "text"
                },
                "bodyLength": {
                  "type": "integer"
                },
                "headers": {
                  "type": "text"
                }
              }
            },
            "res": {
              "properties": {
                "statusCode": {
                  "type": "short"
                },
                "body": {
                  "type": "text"
                },
                "bodyLength": {
                  "type": "integer"
                },
                "headers": {
                  "type": "text"
                },
                "latency": {
                  "type": "integer"
                }
              }
            },
            "event": {
              "properties": {
                "eventName": {
                  "ignore_above": 256,
                  "type": "keyword"
                },
                "context": {
                  "type": "text"
                },
                "uuid": {
                  "ignore_above": 64,
                  "type": "keyword"
                },
                "time": {
                  "type": "long"
                },
                "attempts": {
                  "type": "short"
                }
              }
            },
            "task": {
              "properties": {
                "taskName": {
                  "ignore_above": 256,
                  "type": "keyword"
                },
                "context": {
                  "type": "text"
                },
                "uuid": {
                  "ignore_above": 64,
                  "type": "keyword"
                },
                "time": {
                  "type": "long"
                },
                "attempts": {
                  "type": "short"
                },
                "origin": {
                  "ignore_above": 128,
                  "type": "keyword"
                }
              }
            }
          }
        },
        "dlq": {
          "properties": {
            "eventFields": {
              "type": "text"
            },
            "reason": {
              "type": "text"
            }
          }
        },
        "tags": {
          "ignore_above": 1024,
          "type": "keyword"
        },
        "type": {
          "ignore_above": 1024,
          "type": "keyword"
        }
      }
    }
  }
}

Мне интересно, как я могу применить это к elasticSearch7?

Вот ошибка ElasticSearch:

[o.e.a.a.i.m.p.TransportPutMappingAction] [0c85334cb2d41154383d0174502e13f2] failed to put mappings on indices [[[__PATH__]]], type [logs]
java.lang.IllegalArgumentException: Rejecting mapping update to [logstash-2020.10.02] as the final mapping would have more than 1 type: [_doc, logs]

person ahmokhtari    schedule 02.10.2020    source источник


Ответы (3)


Ответ, данный @YLR, почти правильный, но в предоставленном им сопоставлении есть некоторые ошибки синтаксического анализа.

_all field устарело в версии 6.0.

_all больше нельзя включить для индексов, созданных в 6.0+, используйте настраиваемое поле и параметр сопоставления copy_to

См. Эту документацию по Elasticsearch, чтобы узнать больше об этом.

Индексы, созданные в Elasticsearch 7.0.0 или более поздней версии, больше не принимают сопоставление по умолчанию. Индексы, созданные в 6.x, будут продолжать работать, как и раньше, в Elasticsearch 6.x. Типы объявлены устаревшими в API версии 7.0, с критическими изменениями в создании индекса, размещении сопоставления, получении сопоставления, размещении шаблона, получении шаблона и API сопоставления полей.

Модифицированное отображение:

{
  "index_patterns": [
    "logstash-*"
  ],
  "settings": {
    "index": {
      "mapping": {
        "total_fields": {
          "limit": "50000"
        }
      },
      "refresh_interval": "5s"
    }
  },
  "mappings": {
    "properties": {
      "@timestamp": {
        "type": "date"
      },
      "name": {
        "ignore_above": 64,
        "type": "keyword"
      },
      "logger": {
        "ignore_above": 64,
        "type": "keyword"
      },
      "hostname": {
        "ignore_above": 256,
        "type": "keyword"
      },
      "pid": {
        "type": "integer"
      },
      "level": {
        "type": "short"
      },
      "v": {
        "type": "short"
      },
      "env": {
        "ignore_above": 64,
        "type": "keyword"
      },
      "service": {
        "ignore_above": 256,
        "type": "keyword"
      },
      "message": {
        "type": "text"
      },
      "module": {
        "type": "keyword"
      },
      "subModule": {
        "type": "keyword"
      },
      "docker": {
        "properties": {
          "container_id": {
            "ignore_above": 512,
            "type": "keyword"
          },
          "container_name": {
            "ignore_above": 512,
            "type": "keyword"
          },
          "image_id": {
            "ignore_above": 512,
            "type": "keyword"
          },
          "image_name": {
            "ignore_above": 512,
            "type": "keyword"
          },
          "command": {
            "ignore_above": 512,
            "type": "keyword"
          },
          "tag": {
            "ignore_above": 512,
            "type": "keyword"
          },
          "created": {
            "type": "date"
          }
        }
      },
      "data": {
        "type": "text"
      },
      "context": {
        "properties": {
          "trade": {
            "properties": {
              "id": {
                "ignore_above": 64,
                "type": "keyword"
              }
            }
          },
          "trader": {
            "properties": {
              "id": {
                "ignore_above": 64,
                "type": "keyword"
              },
              "email": {
                "ignore_above": 1024,
                "type": "keyword"
              }
            }
          },
          "payment": {
            "properties": {
              "id": {
                "ignore_above": 64,
                "type": "keyword"
              }
            }
          },
          "err": {
            "properties": {
              "message": {
                "type": "text"
              },
              "name": {
                "ignore_above": 256,
                "type": "keyword"
              },
              "stack": {
                "type": "text"
              },
              "code": {
                "ignore_above": 256,
                "type": "keyword"
              },
              "file": {
                "ignore_above": 256,
                "type": "keyword"
              },
              "line": {
                "type": "integer"
              },
              "cause": {
                "properties": {
                  "message": {
                    "type": "text"
                  },
                  "name": {
                    "ignore_above": 256,
                    "type": "keyword"
                  },
                  "stack": {
                    "type": "text"
                  },
                  "code": {
                    "ignore_above": 256,
                    "type": "keyword"
                  },
                  "file": {
                    "ignore_above": 256,
                    "type": "keyword"
                  },
                  "line": {
                    "type": "integer"
                  },
                  "cause": {
                    "properties": {
                      "message": {
                        "type": "text"
                      },
                      "name": {
                        "ignore_above": 256,
                        "type": "keyword"
                      },
                      "stack": {
                        "type": "text"
                      },
                      "code": {
                        "ignore_above": 256,
                        "type": "keyword"
                      },
                      "file": {
                        "ignore_above": 256,
                        "type": "keyword"
                      },
                      "line": {
                        "type": "integer"
                      }
                    }
                  }
                }
              }
            }
          },
          "req": {
            "properties": {
              "id": {
                "ignore_above": 64,
                "type": "keyword"
              },
              "remoteAddress": {
                "type": "ip"
              },
              "remotePort": {
                "type": "integer"
              },
              "method": {
                "ignore_above": 32,
                "type": "keyword"
              },
              "path": {
                "type": "text"
              },
              "body": {
                "type": "text"
              },
              "bodyLength": {
                "type": "integer"
              },
              "headers": {
                "type": "text"
              }
            }
          },
          "res": {
            "properties": {
              "statusCode": {
                "type": "short"
              },
              "body": {
                "type": "text"
              },
              "bodyLength": {
                "type": "integer"
              },
              "headers": {
                "type": "text"
              },
              "latency": {
                "type": "integer"
              }
            }
          },
          "event": {
            "properties": {
              "eventName": {
                "ignore_above": 256,
                "type": "keyword"
              },
              "context": {
                "type": "text"
              },
              "uuid": {
                "ignore_above": 64,
                "type": "keyword"
              },
              "time": {
                "type": "long"
              },
              "attempts": {
                "type": "short"
              }
            }
          },
          "task": {
            "properties": {
              "taskName": {
                "ignore_above": 256,
                "type": "keyword"
              },
              "context": {
                "type": "text"
              },
              "uuid": {
                "ignore_above": 64,
                "type": "keyword"
              },
              "time": {
                "type": "long"
              },
              "attempts": {
                "type": "short"
              },
              "origin": {
                "ignore_above": 128,
                "type": "keyword"
              }
            }
          }
        }
      },
      "dlq": {
        "properties": {
          "eventFields": {
            "type": "text"
          },
          "reason": {
            "type": "text"
          }
        }
      },
      "tags": {
        "ignore_above": 1024,
        "type": "keyword"
      },
      "type": {
        "ignore_above": 1024,
        "type": "keyword"
      }
    }
  }
}
person ESCoder    schedule 02.10.2020
comment
@ahmokhtari, какие поля вложены в ваше отображение, о котором вы упомянули в вопросе? - person ESCoder; 02.10.2020
comment
Спасибо @Bhavya, но, как я уже упоминал, я уже безуспешно пытался удалить default. Как вы можете видеть в шаблоне, есть и другие типы, такие как докеры, события, задачи, и я не уверен, что мне с ними делать? - person ahmokhtari; 02.10.2020
comment
@ahmokhtari Поля docker, event, task относятся к вложенному типу? Я имею в виду, хотите ли вы, чтобы эти поля были вложенного типа, о которых вы говорили в своем вопросе? - person ESCoder; 02.10.2020
comment
Ну, они не вложены, но я могу сказать, что это наиболее часто используемые поля. У меня вопрос, как я могу изменить их, чтобы этот шаблон работал? - person ahmokhtari; 02.10.2020
comment
Я уже применил предоставленный вами шаблон @Bhavya, но он не проходит, что означает, что ElasticSearch отклоняет все входящие запросы. - person ahmokhtari; 02.10.2020
comment
@ahmokhtari Поскольку elasticsearch отклоняет входящий запрос, не могли бы вы также поделиться журналами elasticsearch? - person ESCoder; 02.10.2020

Я нашел ответ!

Logstash отправляет журналы в ElasticSearch с типом журналы. Замена по умолчанию на журналы устранила проблему. Однако для применения сопоставлений в версии 7 необходимо использовать PUT /_template/template_1?include_type_name=true

person ahmokhtari    schedule 02.10.2020

Вы должны обновить некоторые поля, которые не поддерживаются в v7.

Этот запрос является примером с неподдерживаемым полем remove / update:

PUT _index_template/template_1 
{
 "index_patterns": [
    "logstash-*"
  ],
    "template": {

  "settings": {
    "index": {
      "mapping": {
        "total_fields": {
          "limit": "50000"
        }
      },
      "refresh_interval": "5s"
    }
  },
  "mappings": {

      "properties": {
        "@timestamp": {
          "type": "date"
        },
        "name": {
          "ignore_above": 64,
          "type": "keyword"
        },
        "logger": {
          "ignore_above": 64,
          "type": "keyword"
        },
        "hostname": {
          "ignore_above": 256,
          "type": "keyword"
        },
        "pid": {
          "type": "integer"
        },
        "level": {
          "type": "short"
        },
        "v": {
          "type": "short"
        },
        "env": {
          "ignore_above": 64,
          "type": "keyword"
        },
        "service": {
          "ignore_above": 256,
          "type": "keyword"
        },
        "message": {
          "type": "text"
        },
        "module": {
          "type": "keyword"
        },
        "subModule": {
          "type": "keyword"
        },
        "docker": {
          "properties": {
            "container_id": {
              "ignore_above": 512,
              "type": "keyword"
            },
            "container_name": {
              "ignore_above": 512,
              "type": "keyword"
            },
            "image_id": {
              "ignore_above": 512,
              "type": "keyword"
            },
            "image_name": {
              "ignore_above": 512,
              "type": "keyword"
            },
            "command": {
              "ignore_above": 512,
              "type": "keyword"
            },
            "tag": {
              "ignore_above": 512,
              "type": "keyword"
            },
            "created": {
              "type": "date"
            }
          }
        },
        "data": {
          "type": "text"
        },
        "context": {
          "properties": {
            "trade": {
              "properties": {
                "id": {
                  "ignore_above": 64,
                  "type": "keyword"
                }
              }
            },
            "trader": {
              "properties": {
                "id": {
                  "ignore_above": 64,
                  "type": "keyword"
                },
                "email": {
                  "ignore_above": 1024,
                  "type": "keyword"
                }
              }
            },
            "payment": {
              "properties": {
                "id": {
                  "ignore_above": 64,
                  "type": "keyword"
                }
              }
            },
            "err": {
              "properties": {
                "message": {
                  "type": "text"
                },
                "name": {
                  "ignore_above": 256,
                  "type": "keyword"
                },
                "stack": {
                  "type": "text"
                },
                "code": {
                  "ignore_above": 256,
                  "type": "keyword"
                },
                "file": {
                  "ignore_above": 256,
                  "type": "keyword"
                },
                "line": {
                  "type": "integer"
                },
                "cause": {
                  "properties": {
                    "message": {
                      "type": "text"
                    },
                    "name": {
                      "ignore_above": 256,
                      "type": "keyword"
                    },
                    "stack": {
                      "type": "text"
                    },
                    "code": {
                      "ignore_above": 256,
                      "type": "keyword"
                    },
                    "file": {
                      "ignore_above": 256,
                      "type": "keyword"
                    },
                    "line": {
                      "type": "integer"
                    },
                    "cause": {
                      "properties": {
                        "message": {
                          "type": "text"
                        },
                        "name": {
                          "ignore_above": 256,
                          "type": "keyword"
                        },
                        "stack": {
                          "type": "text"
                        },
                        "code": {
                          "ignore_above": 256,
                          "type": "keyword"
                        },
                        "file": {
                          "ignore_above": 256,
                          "type": "keyword"
                        },
                        "line": {
                          "type": "integer"
                        }
                      }
                    }
                  }
                }
              }
            },
            "req": {
              "properties": {
                "id": {
                  "ignore_above": 64,
                  "type": "keyword"
                },
                "remoteAddress": {
                  "type": "ip"
                },
                "remotePort": {
                  "type": "integer"
                },
                "method": {
                  "ignore_above": 32,
                  "type": "keyword"
                },
                "path": {
                  "type": "text"
                },
                "body": {
                  "type": "text"
                },
                "bodyLength": {
                  "type": "integer"
                },
                "headers": {
                  "type": "text"
                }
              }
            },
            "res": {
              "properties": {
                "statusCode": {
                  "type": "short"
                },
                "body": {
                  "type": "text"
                },
                "bodyLength": {
                  "type": "integer"
                },
                "headers": {
                  "type": "text"
                },
                "latency": {
                  "type": "integer"
                }
              }
            },
            "event": {
              "properties": {
                "eventName": {
                  "ignore_above": 256,
                  "type": "keyword"
                },
                "context": {
                  "type": "text"
                },
                "uuid": {
                  "ignore_above": 64,
                  "type": "keyword"
                },
                "time": {
                  "type": "long"
                },
                "attempts": {
                  "type": "short"
                }
              }
            },
            "task": {
              "properties": {
                "taskName": {
                  "ignore_above": 256,
                  "type": "keyword"
                },
                "context": {
                  "type": "text"
                },
                "uuid": {
                  "ignore_above": 64,
                  "type": "keyword"
                },
                "time": {
                  "type": "long"
                },
                "attempts": {
                  "type": "short"
                },
                "origin": {
                  "ignore_above": 128,
                  "type": "keyword"
                }
              }
            }
          }
        },
        "dlq": {
          "properties": {
            "eventFields": {
              "type": "text"
            },
            "reason": {
              "type": "text"
            }
          }
        },
        "tags": {
          "ignore_above": 1024,
          "type": "keyword"
        },
        "type": {
          "ignore_above": 1024,
          "type": "keyword"
        }
      }
  }
    }
}
}
person YLR    schedule 02.10.2020
comment
Спасибо, YLR, но, как я уже упоминал, я уже безуспешно пытался удалить default. Как вы можете видеть в шаблоне, есть и другие типы, такие как докеры, события, задачи, и я не уверен, что мне с ними делать? - person ahmokhtari; 02.10.2020
comment
Я предполагаю, что одним из решений может быть установка 1 индекса для объекта, такого как docker / event / task, он выглядит функционально правильно, но это зависит от ваших вариантов использования. - person YLR; 02.10.2020