Detta är den andra delen av multi-serien How to Monitor PostgreSQL Running Inside a Docker Container. I del 1 presenterade jag en översikt över hamnarcontainrar, policyer och nätverk. I den här delen kommer vi att fortsätta med docker-konfiguration och slutligen aktivera övervakning via ClusterControl.
PostgreSQL är en gammal skolans, öppen källkodsdatabas vars popularitet fortfarande ökar, som används och accepteras i de flesta molnmiljöer idag.
När den används inuti en container kan den enkelt konfigureras och hanteras av Docker, med hjälp av olika taggar för skapandet och skickas till vilken dator som helst i världen med Docker installerat, men det här handlar om Docker.
Nu kommer vi att diskutera om PostgreSQL, och för att börja, låt oss lista deras sex huvudprocesser som körs samtidigt inuti en behållare av OS-användaren som kallas "postgres", som är en annan än "postgres"-användaren inuti databasen, den där är en superanvändare.
Kom ihåg att den blå pilen i bilderna visar kommandon som anges i en behållare.
$ ps auxww
PostgreSQL huvudprocesser Den första processen på listan är PostgreSQL-servern, och de andra startas av honom. Deras uppgifter är i grunden att analysera vad som händer på servern, att vara delprocesser som utför statistikinmatning, skriver loggar och den här typen av saker.
Vi kommer att använda ClusterControl för att övervaka aktiviteten inuti den här behållaren med PostgreSQL-servern, och för att göra det måste vi ha SSH installerat för att kunna ansluta dem på ett säkert sätt.
Secure Shell Server (SSH)
För att samla in informationen om PostgreSQL-behållaren är inget bättre än SSH. Det ger fjärråtkomst för en IP-adress till en annan, och detta är allt som ClusterControl behöver för att utföra jobbet.
SSH måste laddas ner från förvaret, och för att göra det måste vi vara inne i behållaren.
$ docker container exec -it postgres-2 bash
$ apt-get update && apt-get install -y openssh-server openssh-client
Installera SSH i behållaren "postgres-2" Efter installationen redigerar vi konfigurationen, startar tjänsten, ställer in ett lösenord för rotanvändaren och lämnar slutligen behållaren:
$ sed -i 's|^PermitRootLogin.*|PermitRootLogin yes|g' /etc/ssh/sshd_config
$ sed -i 's|^#PermitRootLogin.*|PermitRootLogin yes|g' /etc/ssh/sshd_config
$ service ssh start
$ passwd
$ exit
Konfigurera SSH i "postgres-2"-behållaren, del 1/2 Övervakning med ClusterControl
ClusterControl har ett djupgående integrationssystem som kan övervaka alla processer för PostgreSQL i realtid, och kommer också med ett bibliotek med rådgivare för att hålla data säker, spåra databasprestanda och naturligtvis ge varningar när avvikelser inträffar.
Med SSH konfigurerat kan ClusterControl övervaka OS-hårdvaruaktiviteten och ge insikter om både databasen och det yttre lagret.
Vi kommer att köra en ny behållare och publicera den till port 5000 på vår dator, så kommer vi att kunna komma åt systemet via vår webbläsare.
$ docker container run --name s9s-ccontrol --network bridge-docker -p 5000:80 -d severalnines/clustercontrol
Köra behållaren "s9s-ccontrol" för Severalnines ClusterControl När den väl har distribuerats återstår bara SSH-konfigurationen, och vi har goda nyheter, eftersom vi är i ett användardefinierat bryggnätverk kan vi använda DNS!
$ docker container exec -it s9s-ccontrol bash
$ ssh-copy-id postgres-2
Konfigurera SSH i "postgres-2"-behållaren, del 2/2 Efter att ha angett "ja" och angett lösenordet som angetts tidigare, är det möjligt att komma åt "postgres-2"-behållaren som root med SSH:
$ ssh postgres-2
Kontrollerar SSH-anslutningen framgångsrikt Denna nya färg, ljusblå, kommer att användas i det följande för att representera aktiviteten inuti databasen. I exemplet ovan har vi kommit åt "postgres-2"-behållaren från "s9s-ccontrol", men det är fortfarande root-användaren. Håll din uppmärksamhet och kritik hos mig.
Så nästa steg är att gå till webbläsaren och komma åt http://localhost:5000/clustercontrol/users/welcome/ och registrera ett konto, eller om du redan har ett, besök http://localhost:5000/clustercontrol/users/login .
Sedan "Importera befintlig server/kluster" och ange den tidigare konfigurationen. Fliken "PostgreSQL &TimescaleDB" måste väljas. I fältet "SSH User" för denna demonstration skriv bara "root". Ange sedan slutligen "Klusternamnet", och det kan vara vilket namn du vill, helt enkelt vem som kommer att hålla så många nödvändiga PostgreSQL-behållare som du vill importera och övervaka.
Importera "postgres-2"-databasen, del 1/2Nu är det dags att ange informationen om PostgreSQL-behållaren, användaren "postgres", lösenordet "5af45Q4ae3Xa3Ff4" och de önskade behållarna. Det är extremt viktigt att komma ihåg att SSH-tjänsten måste vara aktiv inuti PostgreSQL-behållaren.
Importera "postgres-2"-behållaren, del 2/2Efter att ha tryckt på "Importera"-knappen kommer ClusterControl att börja hantera PostgreSQL-behållaren "postgres-2" inuti klustret som heter "PostgreSQL", och det kommer att informera när processen för import är klar.
Logga om processen för att importera behållaren "postgres-2"När det är klart kommer systemet att visas under fliken Kluster, vårt senast skapade kluster och olika alternativ separerade i sektioner
Vårt första visualiseringssteg kommer att vara i alternativet Översikt.
PostgreSQL-kluster har importerats framgångsriktSom du kan föreställa dig är vår databas tom och vi har inget kaos här för vårt skojs skull, men grafiken fungerar fortfarande i en liten skala som innehåller statistik om SQL- och databasprocesser.
Visar statistik om SQL- och databasaktivitetenSenariosimulering i verkliga världen
För att ge lite åtgärd har jag skapat en CSV-fil med Python, och utforskat GitHub-arkivet i Socratica, som erbjuder fantastiska kurser på YouTube, och de gör dessa filer tillgängliga gratis.
Sammanfattningsvis har den skapade CSV-filen 9 miljoner, 999 tusen och 999 uppgifter om personer, var och en innehåller ID, förnamn, efternamn och födelsedag. Storleken på filen är 324 MB:
$ du -s -h persons.csv
Kontrollera storleken på CSV-filen Vi kommer att kopiera den här CSV-filen till PostgreSQL-behållaren, sedan kopiera den igen, men denna gång till databasen, och slutligen kontrollera statistiken i ClusterControl.
$ docker container cp persons.csv postgres-2:/persons.csv
$ docker container exec -it postgres-2 bash
$ du -s -h persons.csv
$ su - postgres
$ psql
Överföra CSV-filen till behållaren och gå in i databasen Ok, så vi är i databasen nu, som superanvändare "postgres", vänligen notera de olika färgerna i pilarna.
Nu måste vi skapa databasen, tabellen och fylla i den med data som finns i CSV-filen och slutligen kontrollera om allt fungerar som det ska.
$ CREATE DATABASE severalnines;
$ \c severalnines;
$ CREATE TABLE persons (id SERIAL NOT NULL, first_name VARCHAR(50), last_name VARCHAR(50), birthday DATE, CONSTRAINT persons_pkey PRIMARY KEY (id));
$ COPY persons (id, first_name, last_name, birthday) FROM '/persons.csv' DELIMITER ',' CSV HEADER;
Ansluter till den nya databasen och importerar CSV-filen Denna process tar några minuter att slutföra.
Ok, låt oss nu skriva in några frågor:
Frågor i databasen "severalnines"Om du tittar på ClusterControl nu, hände en viss rörelse i statistiken om hårdvaran:
Visar statistik om CPU:n inuti ClusterControlEn hel sektion för att övervaka frågorna är försedd med användarvänligt UI:
Visar statistik om frågorna inuti ClusterControlStatistik om PostgreSQL-databasen tjänar de bästa DBA:erna för att utföra hela sin potential på sina huvudsakliga uppgifter, och ClusterControl är ett komplett system för att analysera varje aktivitet som sker i realtid, vilket ger information baserad på all data som samlas in från databasprocesserna.
Med ClusterControl kan DBA också enkelt utöka sina färdigheter med hjälp av en komplett uppsättning verktyg för att skapa säkerhetskopior lokalt eller i molnet, replikeringar, lastbalanserare, integrationer med tjänster, LDAP, ChatOps, Prometheus och så mycket mer.
Slutsats
Genom den här artikeln har vi konfigurerat PostgreSQL inuti Docker och integrerat med ClusterControl med User-Defined Bridge Network och SSH, simulerat ett scenario som fyller databasen med en CSV-fil och sedan gjort en övergripande snabbkontroll i ClusterControls användargränssnitt .