UI Icons attached to gameobjects, use Canvas or Panels or ?

I have a UI overlay with some info in it.
I want icons attached to my moving non-UI gameobject/sprite characters.
Should I use UI objects and update their position to match the characters’ positions
or
Attach more 2D gameobject sprites to the characters and just treat them as non-UI elements?

What would be better for performance?

The problem I am having at the moment is that I am using UI elements but parenting them to gameobject characters and they UI elements wont show up, I guess because they need to be inside a Canvas object, but that means I’d have to have a canvas for every group of icons that is attached to a character?

I dont think having a separate canvas for each gameobject will be a problem. I’ve used a method like that for enemy health bars and have quite a few active in the scene at once with no visible performance hit. If you are worried about performance try to stress test both methods and see if there are any hiccups in your framerate.