To be “canny” means being prudent or knowing about something. It originated in Scottish and in northern English dialects as a modification of the word “can,” as in “able to.” The word entered literary English in the 1600s and at first tended to be applied to Scots themselves. The common stereotype of Scottish people even back then was that they were clever and thrifty, and “canny” pretty much adapted to that preconception. Over the centuries “canny” has stayed pretty stable in its meaning, and today its emphasis is on “shrewd” more than “thrifty.”
“Uncanny,” on the other hand, does not mean quite the opposite of “canny”, even though it seems like it ought to. It also originated in Scotland, and it did at first mean the opposite of “canny” — at least the opposite of one sense of the word. In Scotland, “canny” also meant “trustworthy,” and “uncanny” tended to mean untrustworthy. By the 1700s the reasons for being untrustworthy had come into play, and “uncanny” came to mean untrustworthy for an unusual reason: because of some connection to the supernatural. It’s not clear where that association came from, but “uncanny” now has retained the “supernatural” association even though it’s pretty much lost its “untrustworthy” implication, and so it really isn’t the opposite of “canny” any more.
It’s a common trick employed by English to use a prefix that usually means negation (like “un-“ or “dis-“), but to sometimes use it not for negation but as an intensifier. It’s just not fair, is what it isn’t, and it’s enough to make anyone who’s trying to learn the language disgruntled (hold that thought). In the case of uncanny and canny, of course, the “un” does mean negation, but the words have evolved since their formation so that they’re not opposites any more.
In the case of “disgruntled,” we’ve got two confusing things going on. First of all the “dis” in “disgruntled” is an intensifier; it means “even more gruntled than just plain gruntled.” Second, “gruntle” is an old form called a “frequentative” — the “le” on the end means something is being repeated. “Gruntle” means “grunting repeatedly.” There are other “-le” words that are frequentatives, including “gamble” (from game) and “sparkle” (from spark). The word “gruntle” was first used in the 1400s, and within a century its meaning changed from grunting to complaining. Add the “dis-” as an intensifier and you have somebody who was complaining intensely and repeatedly — disgruntled. You know, like anybody trying to learn this confusing language.
(the title quote is, I think, from Natasha of the Rocky and Bullwinkle show.)