Global variables aren't meant for stuff like Health.
In the learning process or just starting out you may find this to be a good idea, but once you start scaling the game you'll start leaning toward local variables with generic fsm communications.
When multiplayer comes into the picture you have to be much more cautious about what you use for Globals.
Personally, I don't use globals, but its only because I personally understand the patterns in using the fsm communication better and feel more secure when setting up FSMs that will be used all over the place. You could use globals in singleplayer for stuff like keys, scores, equipment, really high level stuff that might be connected to the entire level or to only one object that perhaps a whole lot of other objects need to know about. For instance setting a global string to "level_typeLava" and then having one generic AI system that changes based on what level type they're instanced into by using a string compare on that global variable when they init.
I think the general advice would be don't get too low level with them, they are indeed very useful (and ideal, sometimes), but you have to be careful about using them because of their singular nature and inherit connectivity to everything. There's good cause to control the flow of information by choosing not to use global variables. Also, refactoring will take longer if you have a lot of globals.