What you're describing is a workload model, a model of the measured or expected load on a system.
Be wary about being fixated on the number of users, often a more useful metric to understand is the number of business transactions or the number of page/individual requests. Knowing how many users are on a system does not describe the load on the system, only the concurrency. For example; you could have 2000 users who log in over an hour and do nothing (2,000 total page requests), or you could have 50 users hitting a page each every second (180,000 total page requests).
The other part of a workload model is what business transactions you include or not include. Having all of your users visit the homepage of a website, when primarily they'll be buying and searching for products isn't very realistic. Aim to cover the transactions with the highest expected volume, those which are architecturally significant (e.g. are known to put a lot of load on the system), or are known to have prior performance issues. You cannot load test all the functionality of any non-trivial system. Here's an example of a basic workload model which used expected transactional throughput and converted that into the "transactions per thread per minute" required by a JMeter Thread Group:

Because you have an existing system you are at an advantage; there should be existing recorded information about the workload that you can work from. This might be reviewing access logs, speaking to key business stakeholders, whatever is required.
The second part of the problem is how do you apply that workload model to your JMeter scripts? It's not intuitive, but without any fancy add-ons I've developed the following approach:

The "Pacing" object is just a user action which contains a Constant Throughput Timer and a Uniform Random Timer:

The Target Throughput for the Constant Throughput Timer I've set to a variable called ${pacing} which I set at the Test Plan level.
The Random Delay Maximum (in milliseconds) field in the Uniform Random Timer I set to:
${__javaScript(1000 * (3600 / '${pacing}' / 60),maximum_delay)}
... which calculates the maximum delay for +/-50% variability (a good target for pacing) on the figure you set pacing to. The Constant Delay Offset (in milliseconds) field in the Uniform Random Timer I set to:
${__javaScript(-('${maximum_delay}' / 2))}
This then randomises the pacing +/- 50% based on the the value calculated for maximim_delay. The weird part of how this works is that the constant delay is calculated and then the random delay is applied on top of that at runtime - it's not particularly logical to read it but it does work!
So going back to the workload model, for the "Browser" thread group I would set the pacing variable to have the value 0.22 times per minute (13.2 times per hour). The maximum_delay would be 272727 milliseconds (4 minutes 32 seconds). The Constant Delay Offset would they calculate -136363 milliseconds. What this means is that the pacing will be randomised between 272 - 136 seconds, and 272 + 136 seconds, or between 136 and 408 seconds.