ప్రోహోస్టర్ > బ్లాగ్ > పరిపాలన > నిజ సమయంలో PHP స్క్రిప్ట్ల గణాంకాలు మరియు పర్యవేక్షణ. క్లిక్హౌస్ మరియు గ్రాఫానా పిన్బాకు సహాయానికి వెళ్తాయి
నిజ సమయంలో PHP స్క్రిప్ట్ల గణాంకాలు మరియు పర్యవేక్షణ. క్లిక్హౌస్ మరియు గ్రాఫానా పిన్బాకు సహాయానికి వెళ్తాయి
పిన్బా_ఇంజిన్ మరియు పిన్బోర్డ్కు బదులుగా క్లిక్హౌస్ మరియు గ్రాఫానాతో పిన్బాను ఎలా ఉపయోగించాలో ఈ కథనంలో నేను మీకు చెప్తాను.
PHP ప్రాజెక్ట్లో, పనితీరుతో ఏమి జరుగుతుందో అర్థం చేసుకోవడానికి పిన్బా మాత్రమే నమ్మదగిన మార్గం. నిజమే, పిన్బా సాధారణంగా సమస్యలను ఇప్పటికే గమనించినప్పుడు మరియు "ఎక్కడ తవ్వాలి" అనేది స్పష్టంగా తెలియనప్పుడు మాత్రమే అమలు చేయబడుతుంది.
ఈ లేదా ఆ స్క్రిప్ట్ని సెకను/నిమిషానికి ఎన్నిసార్లు పిలుస్తారో తరచుగా ఎవరికీ తెలియదు మరియు వారు మరింత లాజికల్గా అనిపించే ప్రదేశాల నుండి ప్రారంభించి "టచ్ ద్వారా" ఆప్టిమైజ్ చేయడం ప్రారంభిస్తారు.
కొందరు nginx లాగ్లను విశ్లేషిస్తారు, మరికొందరు స్లో డేటాబేస్ ప్రశ్నలను విశ్లేషిస్తారు.
వాస్తవానికి, పిన్బా నిరుపయోగంగా ఉండదు, కానీ ప్రతి ప్రాజెక్ట్కి అది ఉండకపోవడానికి అనేక కారణాలు ఉన్నాయి.
మరియు మొదటి కారణం సంస్థాపన.
Pinba అమలు నుండి ఎక్కువ లేదా తక్కువ రకమైన "ఎగ్జాస్ట్" పొందడానికి, చివరి నిమిషాల్లో మాత్రమే కాకుండా, చాలా కాలం పాటు (రోజుల నుండి నెలల వరకు) కొలమానాలను చూడటం చాలా అవసరం.
దీన్ని చేయడానికి, మీకు ఇది అవసరం:
php కోసం పొడిగింపును ఇన్స్టాల్ చేయండి (మరియు మీరు nginx కోసం మాడ్యూల్ని కోరుకోవచ్చు)
mysql కోసం పొడిగింపును కంపైల్ చేయండి
పిన్బోర్డ్ను ఇన్స్టాల్ చేయండి మరియు క్రాన్ను కాన్ఫిగర్ చేయండి
Pinba గురించిన సమాచారం యొక్క చిన్న మొత్తం కారణంగా, ఇది PHP5లో మాత్రమే పని చేసిందని మరియు చాలా కాలంగా గతానికి సంబంధించినదిగా ఉందని చాలా మంది అభిప్రాయాన్ని కలిగి ఉన్నారు, కానీ మనం తరువాత చూస్తాము, ఇది అలా కాదు.
మొదటి దశ సరళమైనది, మీరు చేయవలసిందల్లా ఆదేశాన్ని అమలు చేయడం:
apt install php-pinba
ఈ పొడిగింపు php 7.3 వరకు రిపోజిటరీలలో అందుబాటులో ఉంది మరియు మీరు దేనినీ కంపైల్ చేయవలసిన అవసరం లేదు.
ఇన్స్టాలేషన్ కమాండ్ని అమలు చేసిన తర్వాత, ఫార్మాట్లోని ప్రతి స్క్రిప్ట్ (రన్నింగ్ టైమ్, మెమరీ మొదలైనవి) కోసం కొలమానాలను సేకరించి పంపే వర్కింగ్ ఎక్స్టెన్షన్ను మేము వెంటనే అందుకుంటాము. ప్రోటోబుఫ్ udp ద్వారా 127.0.0.1:30002 వరకు.
ఇప్పటివరకు ఈ UDP ప్యాకెట్లను ఎవరూ పట్టుకోలేదు లేదా ప్రాసెస్ చేయలేదు, అయితే ఇది మీ PHP స్క్రిప్ట్ల వేగం లేదా స్థిరత్వాన్ని ఏ విధంగానూ ప్రతికూలంగా ప్రభావితం చేయదు.
ఇటీవలి వరకు, ఈ UDP ప్యాకెట్లను క్యాచ్ చేయగల మరియు ప్రాసెస్ చేయగల ఏకైక అప్లికేషన్ పిన్బా_ఇంజిన్. వివరణ "సాధారణ మరియు సంక్షిప్త"ఇన్స్టాలేషన్ ఎప్పుడైనా చదవాలనే కోరికను నిరుత్సాహపరుస్తుంది మరియు దానిని మళ్లీ లోతుగా పరిశోధిస్తుంది. డిపెండెన్సీల కిలోమీటర్-పొడవు జాబితాలు ప్యాకేజీల పేర్లు మరియు ప్రోగ్రామ్ల పేర్లు మరియు వాటి ఇన్స్టాలేషన్తో వ్యక్తిగత పేజీలకు లింక్లు రెండింటినీ కలిగి ఉంటాయి మరియు అవి ఇతర డిపెండెన్సీలకు వాటి స్వంత లింక్లను కలిగి ఉంటాయి. ఈ చెత్తతో వ్యవహరించడానికి ఎవరికీ సమయం లేదా కోరిక లేదు.
బహుశా ఏదో ఒక రోజు ఒకటి లేదా రెండు ఆదేశాలతో pinba10ని ఇన్స్టాల్ చేయడం సాధ్యమవుతుంది మరియు దీన్ని ఎలా చేయాలో అర్థం చేసుకోవడానికి కొంత మెటీరియల్ని చదవాల్సిన అవసరం లేదు, కానీ ప్రస్తుతానికి ఇది అలా కాదు.
మీరు pinba_engineని ఇన్స్టాల్ చేస్తే, ఇది సగం యుద్ధం మాత్రమే. అన్ని తరువాత, లేకుండా పిన్బోర్డ్ మీరు గత కొన్ని నిమిషాల నుండి డేటాకు మిమ్మల్ని మీరు పరిమితం చేసుకోవాలి లేదా మీరు డేటాను సమగ్రపరచాలి, నిల్వ చేయాలి మరియు దృశ్యమానం చేయాలి. పిన్బోర్డ్ ఉపయోగించడం చాలా సులభం కావడం మంచిది సంస్థాపన.
php నుండి అన్ని కొలమానాలు ఇప్పటికే ప్రోటోబఫ్ ఫార్మాట్లో udp పోర్ట్కి పంపబడితే మరియు మీకు కావలసిందల్లా వాటిని పట్టుకుని వాటిని ఒక రకమైన నిల్వలో ఉంచే అప్లికేషన్ను వ్రాయడం మాత్రమే అయితే అలాంటి బాధ ఎందుకు అనిపిస్తుంది? స్పష్టంగా, ఈ ఆలోచనతో వచ్చిన డెవలపర్లు వెంటనే వారి స్వంత ఆలోచనలను వ్రాయడానికి కూర్చున్నారు, వాటిలో కొన్ని GitHubలో ముగిశాయి.
కిందిది నిల్వలో కొలమానాలను సేవ్ చేసే నాలుగు ఓపెన్ సోర్స్ ప్రాజెక్ట్ల యొక్క అవలోకనం, దీని నుండి ఈ డేటాను సులభంగా తిరిగి పొందవచ్చు మరియు దృశ్యమానం చేయవచ్చు, ఉదాహరణకు, గ్రాఫానాను ఉపయోగించడం.
udp సర్వర్ ప్రయాణంలో ఉంది, ఇది OpenTSDBకి కొలమానాలను సేవ్ చేస్తుంది. బహుశా మీరు ఇప్పటికే మీ ప్రాజెక్ట్లో ఓపెన్టిఎస్డిబిని ఉపయోగిస్తుంటే, ఈ పరిష్కారం మీకు సరిపోతుంది, లేకుంటే దాన్ని దాటమని నేను సిఫార్సు చేస్తున్నాను.
udp సర్వర్ ఆన్ గో, అదే నుండి habrowser, ఇది ఈసారి ఇన్ఫ్లక్స్డిబిలో కొలమానాలను నిల్వ చేస్తుంది. అనేక ప్రాజెక్ట్లు ఇప్పటికే పర్యవేక్షణ కోసం InfluxDBని ఉపయోగిస్తున్నాయి, కాబట్టి ఈ పరిష్కారం వారికి సరైనది కావచ్చు.
ప్రోస్:
InfluxDB ఇది అనుమతిస్తుంది అందుకున్న కొలమానాలను సమగ్రపరచండి మరియు నిర్దిష్ట సమయం తర్వాత అసలైనదాన్ని తొలగించండి.
udp సర్వర్ ప్రయాణంలో ఉంది, ఇది క్లిక్హౌస్లో కొలమానాలను సేవ్ చేస్తుంది. ఇది నా స్నేహితుడి పరిష్కారం. దానితో పరిచయం ఏర్పడిన తర్వాత, పిన్బు మరియు క్లిక్హౌస్లను తీసుకోవడానికి ఇది సమయం అని నేను నిర్ణయించుకున్నాను.
ప్రోస్:
క్లిక్హౌస్ అటువంటి పనులకు అనువైనది; ఇది డేటాను చాలా వరకు కుదించడానికి మిమ్మల్ని అనుమతిస్తుంది, తద్వారా మీరు అగ్రిగేషన్లు లేకుండా మొత్తం ముడి డేటాను నిల్వ చేయవచ్చు.
అవసరమైతే, మీరు ఫలిత కొలమానాలను సులభంగా సమగ్రపరచవచ్చు
మీరు డేటాబేస్ మరియు పట్టికల పేరు, సర్వర్ యొక్క చిరునామా మరియు పోర్ట్ను కాన్ఫిగర్ చేయగల కాన్ఫిగర్ ఏదీ లేదు.
ముడి డేటాను నిల్వ చేస్తున్నప్పుడు, పేజీ మరియు డొమైన్ చిరునామాలను నిల్వ చేయడానికి సహాయక నిఘంటువు పట్టిక ఉపయోగించబడుతుంది, ఇది తదుపరి ప్రశ్నలను క్లిష్టతరం చేస్తుంది
phpలో udp సర్వర్, ఇది క్లిక్హౌస్లో మెట్రిక్లను సేవ్ చేస్తుంది. ఇది నా పరిష్కారం, ఇది పిన్బా, క్లిక్హౌస్ మరియు ప్రోటోబఫ్లను తెలుసుకోవడం వల్ల వచ్చిన ఫలితం. నేను ఈ మొత్తం సమూహాన్ని క్రమబద్ధీకరిస్తున్నప్పుడు, నేను "కాన్సెప్ట్ యొక్క రుజువు" వ్రాసాను, ఇది నాకు ఊహించని విధంగా, ముఖ్యమైన వనరులను వినియోగించలేదు (30 MB RAM మరియు ఎనిమిది ప్రాసెసర్ కోర్లలో ఒకదానిలో 1% కంటే తక్కువ), కాబట్టి నేను ప్రజలతో పంచుకోవాలని నిర్ణయించారు.
ప్రయోజనాలు మునుపటి పరిష్కారం వలె ఉంటాయి, నేను అసలైన pinba_engine నుండి సాధారణ పేర్లను కూడా ఉపయోగించాను. వివిధ టేబుల్లలో కొలమానాలను సేవ్ చేయడానికి ఒకేసారి అనేక పిన్బేస్ సర్వర్ ఇన్స్టాన్స్లను లాంచ్ చేయడానికి మిమ్మల్ని అనుమతించే కాన్ఫిగర్ను కూడా నేను జోడించాను - మీరు php నుండి మాత్రమే కాకుండా nginx నుండి కూడా డేటాను సేకరించాలనుకుంటే ఇది ఉపయోగపడుతుంది.
ప్రతికూలతలు - “ప్రాణాంతక లోపం” మరియు మీకు వ్యక్తిగతంగా సరిపోని చిన్న విషయాలు, కానీ నా పరిష్కారం “స్లిప్పర్ లాగా సింపుల్” మరియు కేవలం 100 లైన్ల కోడ్ను మాత్రమే కలిగి ఉంటుంది, కాబట్టి ఏ PHP డెవలపర్ అయినా తనకు నచ్చని వాటిని మార్చుకోవచ్చు రెండు నిమిషాలలో.
ఇది ఎలా పనిచేస్తుంది
UDP పోర్ట్ 30002 వినబడుతుంది. అన్ని ఇన్కమింగ్ ప్యాకెట్లు ప్రోటోబఫ్ స్కీమ్ ప్రకారం డీకోడ్ చేయబడతాయి మరియు సమగ్రంగా ఉంటాయి. నిమిషానికి ఒకసారి, ఒక ప్యాకెట్ క్లిక్హౌస్లో pinba.requests పట్టికలోకి చొప్పించబడుతుంది. (అన్ని పారామితులు కాన్ఫిగర్ చేయబడ్డాయి config)
క్లిక్హౌస్ గురించి కొంచెం
క్లిక్హౌస్ విభిన్న డేటా నిల్వ ఇంజిన్లకు మద్దతు ఇస్తుంది. అత్యంత సాధారణంగా ఉపయోగించే ఒకటి MergeTree.
మీరు ఎప్పుడైనా సమగ్ర డేటాను నిల్వ చేయాలని నిర్ణయించుకుంటే మరియు చివరిసారి మాత్రమే ముడి డేటాను నిల్వ చేయాలని నిర్ణయించుకుంటే, మీరు సమూహీకరణతో మెటీరియలైజ్డ్ వీక్షణను సృష్టించవచ్చు మరియు క్రమానుగతంగా ప్రధాన pinba.requests పట్టికను శుభ్రం చేయవచ్చు, అయితే మొత్తం డేటా ఇందులోనే ఉంటుంది. సాకారమైన వీక్షణ. అంతేకాకుండా, pinba.requests పట్టికను సృష్టిస్తున్నప్పుడు, మీరు “ఇంజిన్ = శూన్య” అని పేర్కొనవచ్చు, ఆపై ముడి డేటా డిస్క్లో అస్సలు సేవ్ చేయబడదు మరియు అదే సమయంలో అది ఇప్పటికీ మెటీరియలైజ్డ్ వీక్షణలో ముగుస్తుంది మరియు సమగ్రంగా సేవ్ చేయబడుతుంది. . నేను nginx మెట్రిక్ల కోసం ఈ పథకాన్ని ఉపయోగిస్తాను, ఎందుకంటే nginxలో నాకు php కంటే 50 రెట్లు ఎక్కువ అభ్యర్థనలు ఉన్నాయి.
కాబట్టి, మీరు చాలా దూరం వచ్చారు మరియు నేను మిమ్మల్ని సగానికి వదిలివేయడానికి ఇష్టపడను, కాబట్టి నా సొల్యూషన్ యొక్క ఇన్స్టాలేషన్ మరియు కాన్ఫిగరేషన్ మరియు మీకు కావలసిందల్లా ఒక వివరణాత్మక వర్ణన, అలాగే ఒకటి కంటే ఎక్కువ ఓడలకు కారణమైన ఆపదలు క్రాష్ చేయడానికి. Ubuntu 18.04 LTS మరియు Centos 7 కోసం మొత్తం ఇన్స్టాలేషన్ ప్రక్రియ వివరించబడింది; ఇతర పంపిణీలు మరియు సంస్కరణల్లో ప్రక్రియ కొద్దిగా భిన్నంగా ఉండవచ్చు.
సెట్టింగ్
నేను అవసరమైన అన్ని ఆదేశాలను ఉంచాను Dockerfile సూచనల పునరుత్పత్తిని సులభతరం చేయడానికి. ఆపదలు మాత్రమే క్రింద వివరించబడతాయి.
php-pinba
ఇన్స్టాలేషన్ తర్వాత, /etc/php/7.2/fpm/conf.d/20-pinba.ini ఫైల్లో మీరు అన్ని ఎంపికలను అన్కామెంట్ చేశారని నిర్ధారించుకోండి. కొన్ని పంపిణీలపై (ఉదా. సెంటోస్) వాటిని వ్యాఖ్యానించవచ్చు.
ఇన్స్టాలేషన్ సమయంలో, డిఫాల్ట్ వినియోగదారు కోసం పాస్వర్డ్ను సెట్ చేయమని క్లిక్హౌస్ మిమ్మల్ని అడుగుతుంది. డిఫాల్ట్గా, ఈ వినియోగదారు అన్ని IPల నుండి ప్రాప్యత చేయగలరు, కాబట్టి మీ సర్వర్లో మీకు ఫైర్వాల్ లేకపోతే, దాని కోసం పాస్వర్డ్ను సెట్ చేయాలని నిర్ధారించుకోండి. ఇది /etc/clickhouse-server/users.xml ఫైల్లో ఇన్స్టాలేషన్ తర్వాత కూడా చేయవచ్చు.
క్లిక్హౌస్ 9000తో సహా అనేక పోర్ట్లను ఉపయోగిస్తుందని కూడా గమనించాలి. ఈ పోర్ట్ కొన్ని పంపిణీలలో (ఉదాహరణకు, సెంటోస్) php-fpm కోసం కూడా ఉపయోగించబడుతుంది. మీరు ఇప్పటికే ఈ పోర్ట్ని ఉపయోగిస్తుంటే, మీరు దీన్ని /etc/clickhouse-server/config.xml ఫైల్లో మరొకదానికి మార్చవచ్చు.
క్లిక్హౌస్ ప్లగ్ఇన్తో గ్రాఫానా
గ్రాఫానాను ఇన్స్టాల్ చేసిన తర్వాత, లాగిన్ అడ్మిన్ మరియు పాస్వర్డ్ అడ్మిన్ని ఉపయోగించండి. మీరు మొదటిసారి లాగిన్ అయినప్పుడు, గ్రాఫానా మిమ్మల్ని కొత్త పాస్వర్డ్ని సెట్ చేయమని అడుగుతుంది.
తరువాత, “+” -> దిగుమతి మెనుకి వెళ్లి, దిగుమతి కోసం డాష్బోర్డ్ సంఖ్యను సూచించండి 10011. నేను ఈ డ్యాష్బోర్డ్ని సిద్ధం చేసి, అప్లోడ్ చేసాను, తద్వారా మీరు దీన్ని మళ్లీ చేయనవసరం లేదు.
థర్డ్-పార్టీ ప్లగ్ఇన్ ద్వారా క్లిక్హౌస్తో పనిచేయడానికి గ్రాఫానా మద్దతు ఇస్తుంది, అయితే గ్రాఫానాకు థర్డ్-పార్టీ ప్లగిన్ల కోసం హెచ్చరికలు లేవు (దీనికి చాలా సంవత్సరాలుగా టికెట్ ఉంది).
పిన్బా-సర్వర్
ప్రోటోబఫ్ మరియు లిబెవెంట్లను ఇన్స్టాల్ చేయడం ఐచ్ఛికం, కానీ పిన్బా-సర్వర్ పనితీరును మెరుగుపరుస్తుంది. మీరు /opt కాకుండా వేరే ఫోల్డర్లో pinba-serverని ఇన్స్టాల్ చేస్తే, మీరు కూడా సరిచేయవలసి ఉంటుంది systemd స్క్రిప్ట్ ఫైల్.
nginx కోసం pinba మాడ్యూల్
మాడ్యూల్ను కంపైల్ చేయడానికి, మీకు మీ సర్వర్లో ఇప్పటికే ఇన్స్టాల్ చేయబడిన nginx యొక్క అదే వెర్షన్ యొక్క సోర్స్ కోడ్లు, అలాగే అదే సంకలన ఎంపికలు అవసరం, లేకపోతే బిల్డ్ విజయవంతమవుతుంది, కానీ మాడ్యూల్ను కనెక్ట్ చేసేటప్పుడు, లోపం విసిరివేయబడుతుంది "మాడ్యూల్ బైనరీ అనుకూలమైనది కాదు." nginx -V కమాండ్ ఉపయోగించి కంపైలేషన్ ఎంపికలను చూడవచ్చు
లైఫ్ హక్స్
నా సైట్లన్నీ httpsలో మాత్రమే పని చేస్తాయి. స్కీమా ఫీల్డ్ అర్థరహితంగా మారుతుంది, కాబట్టి నేను దానిని వెబ్/కన్సోల్ని వేరు చేయడానికి ఉపయోగిస్తాను.
నేను ఉపయోగించే వెబ్ నుండి యాక్సెస్ చేయగల స్క్రిప్ట్లలో:
if (ini_get('pinba.enabled')) {
pinba_schema_set('web');
}
మరియు కన్సోల్ స్క్రిప్ట్లలో (ఉదాహరణకు, క్రాన్ స్క్రిప్ట్లు):
if (ini_get('pinba.enabled')) {
pinba_schema_set('console');
}
గ్రాఫానాలోని నా డాష్బోర్డ్లో గణాంకాలను విడిగా వీక్షించడానికి వెబ్/కన్సోల్ స్విచ్ ఉంది.
మీరు మీ ట్యాగ్లను Pinbaకి కూడా పంపవచ్చు, ఉదాహరణకు:
pinba_tag_set('country', $countryCode);
అంతే.
దయచేసి కథనం క్రింద ఉన్న పోల్లకు సమాధానం ఇవ్వండి.
ఎప్పటిలాగే, నేను Habr మరియు సోషల్ నెట్వర్క్లలో వ్యక్తిగత సందేశాల ద్వారా సలహా లేదా సహాయం చేయనని మిమ్మల్ని హెచ్చరిస్తున్నాను.