ILM wants to manage indices by age since "rollover", since your old-style daily indices don't roll over, ILM may not be a good fit, if it's even possible.
Your logstash may be using the @timestamp found in the event as part of the output index name. If you ever encounter old or incorrect dates, you can suddenly find new indices for old dates. I once discovered winlogbeat indices for most dates over the past several years.
ILM used aliases, all some-index-00001 thru some-index-00xxx have an alias of "some-index", but only one is "is-write-index": true. Any stale dated data will always be written to your newest index.
I'd recommend a clean start for some test or non-import index. Get ILM rollover by size/age working, get an understanding of ILM, them move away from all your date based indices.
You can still use the curator package to manage your legacy indices.
If you started with Elastic before 7.8, there were templates and they had index pattern specs, all templates matching the index name were merged together, in priority order and the results used as a pattern for the new index.
Now those are called legacy templates in doc new enough to know there is a difference. If you look at non Elastic information, be careful, if using Elastic doc, note the version it applies to and when it was written.
Now there are index templates and component templates, both confusingly referred to as compostable, I find it almost better to prethend you never heard the word "compostable".
Now an index template can include multiple component templates. But, only one index template will be used at index creation, the one with highest priority. Their doc says to avoid overlapping index patterns, so I'm not sure they even know what happens when multiple index templates match having the highest priority.
I'm still not convinced that the new way isn't more work for us than the old way, but when you design a workflow and something this major forces it to change, it can cause problems.
Here's an example, we want to have a runtime field for winlog.user_data.FilePath called winlog.user_data.OurFilePath.
- I create a component template winlog.ourfilepath with this one runtime field.
- To deploy this, we're going to install winlogbeat 7.17.0, so I configure winlogbeat.yml for our environment to load the template, setup ILM and this will create the first index, winlogbeat-7.17.0-00001.
- I use Kibana to add the winlog.ourfilepath component template to the index template winlogbeat-7.17.0
- I issue a rollover for winlogbeat-7.17.0 to create a new index that now has the mapping for our runtime field.
When I again upgrade winlogbeat, I'll have to repeat the steps of configuring the runtime field.
If I don't have a component index, beats can pretty much "self update" the templates, but custom component templates seem to cause extreme compications.