To me, you must take three elements into account when asking for a raise. The case of promotions is a bit different, and is very company specific in my opinion, so I will voluntarily not talk about them in this answer.
1. How much money does your role generally get, at your level of experience ?
The sources of information that you can get on the topic are your colleagues, your relations, and the publicly available information (Example : Glassdoor). Be mindful - depending on your country, this could be a taboo subject. In some countries, people are strongly reluctant to disclose their actual income.
2. How much is your company able to offer?
Not all companies are able to raise you by significant amounts on a yearly basis. I know a company, for instance, that refuses to recruit top-school students, because they just ask for too much and the company policy cannot make them happy.
If your company doesn't have transparent guidelines on the salary policy, you may get that kind of information by comparing the salaries of the company to the market average. If your average JoeJunior, JoeSenior, and JoeBoss are all paid 10% less than their respective markets, the company just pays 10% less than the market and you can calculate how much your company is willing to pay for your role.
You indeed want to look at the financial situation of the company. Did they stop recruiting ? Are some top-management people leaving ? What are the business news for your company compared to your market ? A company which faces difficulties is often going to freeze their salary policy.
3. If you want more than the average, why would the company give it to you ?
Let's go through point 1 and 2 with a fictional example. You are working in SectorX in a big city, with 3 years XP, and the market for that level of experience is 60,000/year. Your company pays 5% more than the market for SectorX positions, so you can expect 60,000*1.05 = 63,000/year.
If you ask for 70,000, you need to justify that you're more valuable than what the company would normally give at that level. Do you have a special skill ? Do you have a key position ? Are you objectively better than most people in the job ?
On the other hand, you might currently be at 56,000. That means you are underpaid compared to your company's willingness to pay for that kind of job. Are you good enough to justify the average income the company can offer ? The question is harsh, but half people are better than average and half are worse, and you need to consider if you're actually in the top half.
In conclusion
Once you have determined how much your job is worth on the market, how much the company actually pays for that job, and how much you actually deserve, you can find a reasonable raise.