Mediauppspelning stöds inte på den här enheten
Spanjoren blev den enda mannen att vinna tre gånger hittills den här säsongen.
Han körde ett kontrollerat lopp och stannade tillräckligt långt före sina förföljare för att behålla ledningen.
Bra strategi kallar från laget att hålla mig framåt genom depån stopp. Jag visste att det skulle bli en lång tävling till slutet
Knappen klättrade upp från sjätte på rutnätet för att passera Vettel vid den andra depån stopp men åter passerades med två varv kvar.
Men engelsmannen befordrades till andra plats efter att race förvaltare gav Vettel ett 20-sekunders straff för hans omkörning av Button på näst sista varv.
Lewis Hamilton drog sig tillbaka med växellådsskador efter att ha sprungit långt ner på fältet efter en tidig punktering. Men han kommer inte att drabbas av något straff för en växellåda förändring på grund av sin pensionering.
Resultatet utökar Alonsos mästerskap leder till 34 poäng före Red Bulls Mark Webber som hade en lågmäld tävling till åttonde plats, aldrig visar någon riktig takt.
Alonso sade: " Det var tufft, inte lätt. Kanske var vi inte de snabbaste i torra förhållanden men vi var konkurrenskraftiga och det räckte för att behålla ledningen.
"Bra strategi kallar från laget att hålla mig framåt genom depån stopp. Jag visste att det skulle bli en lång tävling till slutet, med Jenson sätta press.
"Men bilen mådde bra på toppfart och dragkraft och det var tillräckligt för att hålla ledningen i Turn 6, och efter det omkörning är inte så lätt."
Mediauppspelning stöds inte på den här enheten
Den enda trösten för Hamilton med anledning av hans 100: e grand prix var att McLaren visade uppmuntrande takt efter en större prestanda uppgradering.
Vid ett tillfälle drog Hamilton upp sig själv på Vettel - men inte Alonso - eftersom han förgäves försökte återhämta sig från sin tidiga återvändo. Ett drag som retade dubbelvärldsmästaren.
Alonso var aldrig mycket långt framför men kunde alltid stanna precis tillräckligt långt före först Vettel och sedan Button för att se till att de inte kunde använda sin DRS overtaking hjälpmedel för att passera honom in i hårnålen på Turn 6.
Det ledde till en spänd grand prix där vinnarens identitet alltid tvivlade tills Alonso tog den checkade flaggan.
Ferrari gjorde en blixt start från stolpe position och även om Vettel snabbt stängde upp den ursprungliga gapet Alonso hade byggt på det första varvet, Spaniard kunde dra klart innan deras första depåstopp för att säkerställa att han höll ledningen i den andra stint.
Under tiden, Button kämpade förbi Hulkenberg och sedan Schumacher, för att flytta lugnt till tredje plats.
Vettel dök upp från sitt första stopp fem sekunder före Button men McLaren stängde obevekligt på Red Bull och passerade tysken genom att göra sitt andra stopp ett varv tidigare.
Vettel dök upp från groparna för att hitta Button på utsidan på flykten till Turn 2, och McLaren tog lätt positionen.
Knappen var sällan mer än en sekund bakom Alonso från då till slutet av loppet men Ferrari föraren var alltid i kontroll och i de avslutande varv han sträckte bort som Button började tappa greppet i sina bakdäck.
I stället för att försöka ta ledningen var Button tvungen att tillbringa de avslutande varven med att kämpa mot en sen utmaning från Vettel, som passerade honom vid Turn 6 hårnålen på det näst sista knät.
Vettel sade: "Takten var där men det var oerhört svårt när jag var nära Fernando och Jenson verkade vi förlora en hel del och inte kunna hålla sig tillräckligt nära för att försöka något under bromsning.
"Jag är inte helt nöjd, det kunde ha varit lite bättre om det var ren luft större delen av loppet men så var inte fallet. Andra plats var det bästa vi kunde få idag och jag är nöjd med det."
Button sade: " Det var ett nära lopp, och jag kunde inte riktigt få tag på Fernando i slutet.
"När du är i mitten av tre du verkligen måste slåss och jag tryckte lite mer i början av stinten, medan när du är framför kan du kust lite i bitar där du inte behöver trycka.
"Det var nära men Fernando vet som vi alla gör var att använda Kers för att hålla någon bakom dig. Jag fick slut på ånga i slutet av den raka och gapet var lite för stort för att komma tillbaka.
"Men det var ett roligt lopp och det är skönt att vara på podiet igen. Jag har haft min känsla tillbaka de två senaste loppen men tempot har inte varit där [i bilen], men idag var det. Vi är där eller där omkring på framsidan, fortfarande ett litet sätt att gå."
Raikkonen gav några spännande racing när han flyttade upp från 10: e på nätet.
På vägen deltog Raikkonen i förstklassig racing med Mercedes förare Michael Schumacher och Force Indias i Nico Hulkenberg och Paul di Resta.
Schumacher slutade sjunde bakom Sauber förare Kamui Kobayashi och Sergio Perez. Hulkenberg och Di Resta tog de sista punkterna positioner i nionde och tionde.
Ferrari's Fernando Alonso slog Red Bulls Sebastian Vettel och McLaren's Jenson Button i en nära kamp för att vinna tyska Grand Prix.