To correct this you need first a long, non stretched image which will cover the right part of your texture.
Here from left to right :
- Left : more or less the problem you have
- Middle : with a corrected the UV map
- Right : the needed texture with a rusty part all along

The principle is to stretch your UV map part along the texture so that the corresponding parts of the mesh are no more stretched in the 3D view :

The idea beyond that, is to have a proportionality between the mesh shape and the UV shape.
Around this idea, you can setup the different square part of your current UV in several manner :
- Overlay them all (as I did in the gif)
- Or just take each of them and stretch along V the way you whish
But the starting point is the texture : it needs to cover the surface you want and be proportional to the final result.
When you let Blender unwrap by itself, Blender does keep the proportionality. But sometimes, that guides to have too small part so moving the UV manually is needed.