Loki - Prometheus ප්‍රවේශය භාවිතයෙන් ලොග් එකතු කිරීම

ආචාර කරන්න, Khabrovsk පදිංචිකරුවන්! පාඨමාලාව සඳහා නව බඳවා ගැනීමක් ආරම්භ කිරීමට ආසන්නයේ "DevOps භාවිතයන් සහ මෙවලම්" අපි ඔබ සඳහා රසවත් ද්රව්ය පරිවර්තනයක් සූදානම් කර ඇත.

මෙම ලිපිය Loki පිළිබඳ කෙටි හැඳින්වීමකි. ව්යාපෘතිය Loki ග්‍රැෆානා විසින් සහාය දක්වන ලදී සහ මධ්‍යගත ලඝු-සටහන් එකතුව (සේවාදායක හෝ බහාලුම් වලින්) ඉලක්ක කර ඇත.

Loki සඳහා ප්රධාන ආශ්වාදය විය Prometheus ලොග් කළමනාකරණය සඳහා ඔහුගේ ප්‍රවේශයන් යෙදීමේ අදහසින්:

  • දත්ත ගබඩා කිරීම සඳහා ලේබල් භාවිතා කිරීම
  • සම්පත් කිහිපයක් පරිභෝජනය

අපි Prometheus ක්‍රියා කරන ආකාරය වෙත නැවත පැමිණ Kubernetes හි සන්දර්භය තුළ එහි භාවිතය පිළිබඳ උදාහරණ කිහිපයක් ලබා දෙන්නෙමු.

Prometheus ගැන වචන කිහිපයක්

Loki ක්‍රියා කරන ආකාරය සම්පූර්ණයෙන් තේරුම් ගැනීමට, පියවරක් පසුපසට ගෙන ප්‍රොමිතියස් ගැන ටිකක් මතක තබා ගැනීම වැදගත්ය.

Prometheus හි එක් සුවිශේෂී ලක්ෂණයක් වන්නේ එකතු කිරීමේ ස්ථානවලින් (අපනයන කරන්නන් හරහා) ප්‍රමිතික නිස්සාරණය කර ඒවා ලේබල් ආකාරයෙන් පාර-දත්ත එකතු කිරීමත් සමඟ TSDB (Time Series Data Base) තුළ ගබඩා කිරීමයි.

එය අවශ්‍ය වන්නේ ඇයි

මෑතකදී, Prometheus බහාලුම් සහ Kubernetes ලෝකයේ තථ්‍ය ප්‍රමිතිය බවට පත්ව ඇත: එහි ස්ථාපනය ඉතා සරල වන අතර, Kubernetes පොකුර Prometheus සඳහා ස්වදේශීය අන්ත ලක්ෂ්‍යයක් සමඟ පැමිණේ. Prometheus හට විශේෂිත ලේබල ගබඩා කරන අතරතුර කන්ටේනරයක යොදවා ඇති යෙදුම් වලින් මිතික ලබා ගත හැක. එබැවින්, යෙදුම් අධීක්ෂණය ක්රියාත්මක කිරීම ඉතා පහසුය.

අවාසනාවකට, ලොග් කළමනාකරණය සඳහා තවමත් පිරිවැටුම් විසඳුමක් නොමැති අතර, ඔබ විසින්ම විසඳුමක් සොයාගත යුතුය:

  • ලොග් මධ්‍යගත කිරීම සඳහා කළමනාකරණය කළ වලාකුළු සේවාව (AWS, Azure හෝ Google)
  • අධීක්ෂණ සේවාව "සේවාවක් ලෙස අධීක්ෂණය" (උදාහරණයක් ලෙස, Datadog)
  • ඔබේම ලොග් එකතු කිරීමේ සේවාවක් නිර්මාණය කිරීම.

තුන්වන විකල්පය සඳහා, මම සම්ප්‍රදායිකව Elasticsearch භාවිතා කළෙමි, මම එය සැමවිටම සතුටු නොවූවත් (විශේෂයෙන් එහි බර සහ වින්‍යාසයේ සංකීර්ණත්වය).

Loki පහත සඳහන් මූලධර්ම අනුව ක්රියාත්මක කිරීම සරල කිරීමට සැලසුම් කර ඇත:

  • ආරම්භ කිරීමට සරල විය යුතුය
  • සම්පත් ස්වල්පයක් පරිභෝජනය කරයි
  • විශේෂ නඩත්තුවකින් තොරව ස්වාධීනව වැඩ කරන්න
  • දෝෂ විමර්ශන සඳහා උපකාර කිරීම සඳහා Prometheus ට එකතු කිරීමක් ලෙස සේවය කරයි

කෙසේ වෙතත්, මෙම සරල බව සමහර සම්මුතීන්ගේ වියදමින් පැමිණේ. ඒවායින් එකක් වන්නේ අන්තර්ගතය සුචිගත නොකිරීමයි. එබැවින්, පෙළ සෙවීම ඉතා කාර්යක්ෂම හෝ පොහොසත් නොවන අතර පෙළෙහි අන්තර්ගතය පිළිබඳ සංඛ්යා ලේඛනවලට ඉඩ නොදේ. නමුත් Loki ට grep ට සමාන වීමට සහ Prometheus ට අනුපූරක වීමට අවශ්‍ය නිසා මෙය අවාසියක් නොවේ.

සිදුවීම් විමර්ශනය

Loki හට සුචිගත කිරීම අවශ්‍ය නොවන්නේ මන්දැයි වඩා හොඳින් අවබෝධ කර ගැනීමට, Loki සංවර්ධකයින් භාවිතා කළ සිදුවීම් විමර්ශන ක්‍රමය වෙත ආපසු යමු:

Loki - Prometheus ප්‍රවේශය භාවිතයෙන් ලොග් එකතු කිරීම
1 ඇඟවීම් → 2 උපකරණ පුවරුව → 3 Adhoc විමසුම → 4 ලොග් එකතු කිරීම → 5 බෙදා හරින ලද ලුහුබැඳීම → 6 නිවැරදි කරන්න!
(1 අවවාදයයි → 2 උපකරණ පුවරුව → 3 Adhoc විමසුම → 4 ලඝු එකතු කිරීම → 5 බෙදා හරින ලද ලුහුබැඳීම → 6 සවි කිරීම!)

අදහස නම් අපට යම් ආකාරයක ඇඟවීමක් (Slack Notification, SMS, ආදිය) ලැබෙන අතර ඉන් පසුව:

  • Grafana dashboards බලන්න
  • සේවා ප්‍රමිතික බලන්න (උදාහරණයක් ලෙස, Prometheus හි)
  • ලොග් සටහන් බලන්න (උදාහරණයක් ලෙස, Elasticsearch හි)
  • සමහර විට බෙදා හරින ලද අංශු (Jaeger, Zipkin, ආදිය) දෙස බලන්න.
  • සහ අවසානයේ මුල් ගැටලුව නිවැරදි කිරීම.

මෙහිදී, Grafana + Prometheus + Elasticsearch + Zipkin තොගයේ දී, ඔබට විවිධ මෙවලම් හතරක් භාවිතා කිරීමට සිදුවනු ඇත. කාලය අඩු කිරීම සඳහා, එක් මෙවලමක් භාවිතයෙන් මෙම සියලු පියවරයන් සිදු කිරීමට හැකි නම් හොඳයි: Grafana. පර්යේෂණ සඳහා මෙම ප්‍රවේශය ග්‍රැෆානා හි 6 අනුවාදයේ සිට ක්‍රියාත්මක කර ඇති බව සඳහන් කිරීම වටී. මේ අනුව, ග්‍රැෆානා වෙතින් ප්‍රොමිතියස් දත්ත වෙත ප්‍රවේශ වීමට හැකි වේ.

Loki - Prometheus ප්‍රවේශය භාවිතයෙන් ලොග් එකතු කිරීම
Explorer තිරය Prometheus සහ Loki අතර බෙදී ගියේය

මෙම තිරයෙන් ඔබට Split screen සංකල්පය භාවිතයෙන් Prometheus metrics හා සම්බන්ධ Loki logs නැරඹිය හැක. 6.5 අනුවාදයේ සිට, ඔබගේ ප්‍රියතම බෙදා හරින ලද ලුහුබැඳීමේ මෙවලම් (ජේගර්) වෙත සබැඳි අනුගමනය කිරීමට Loki ලොග් ඇතුළත් කිරීම් තුළ ඇති ලුහුබැඳීමේ හැඳුනුම්පත විග්‍රහ කිරීමට Grafana ඔබට ඉඩ සලසයි.

දේශීය Loki පරීක්ෂණය

Loki දේශීයව පරීක්ෂා කිරීමට ඇති පහසුම ක්‍රමය නම් ඩොකර්-රචනය භාවිතා කිරීමයි. Docker-compose ගොනුව Loki ගබඩාවේ පිහිටා ඇත. පහත දැක්වෙන විධානය භාවිතයෙන් ඔබට ගබඩාව ලබා ගත හැක git:

$ git clone https://github.com/grafana/loki.git

එවිට ඔබ නිෂ්පාදන නාමාවලිය වෙත යා යුතුය:

$ cd production

මෙයින් පසු ඔබට ඩොකර් පින්තූරවල නවතම අනුවාදය ලබා ගත හැකිය:

$ docker-compose pull

අවසාන වශයෙන්, Loki stack පහත විධානය සමඟ දියත් කෙරේ:

$ docker-compose up

Loki ගෘහ නිර්මාණ ශිල්පය

Loki ගෘහ නිර්මාණ ශිල්පය සමඟ කුඩා රූප සටහනක් මෙන්න:

Loki - Prometheus ප්‍රවේශය භාවිතයෙන් ලොග් එකතු කිරීම
Loki ගෘහ නිර්මාණ ශිල්පීය මූලධර්ම

වෙබ් සේවාදායකයා සේවාදායකයේ යෙදුම් ධාවනය කරයි, Promtail ලඝු-සටහන් එකතු කර Loki වෙත යවයි, වෙබ් සේවාදායකයා Loki වෙත පාර-දත්ත යවයි. Loki සියල්ල එකතු කර එය Grafana වෙත සම්ප්‍රේෂණය කරයි.
Loki දියත් කර ඇත. පවතින සංරචක බැලීමට, පහත විධානය ක්‍රියාත්මක කරන්න:

$ docker ps

අලුතින් ස්ථාපිත Docker එකක නම්, විධානය මඟින් පහත ප්‍රතිඵලය ලබා දිය යුතුය:

IMAGE               PORTS                  NAMES
grafana/promtail:                          production_promtail_1
grafana/grafana: m  0.0.0.0:3000->3000/tcp production_grafana_1
grafana/loki: late  80/tcp,0.0.0.0:3100... production_loki_1

අපි පහත සඳහන් සංරචක දකිමු:

  • Promtail: ලඝු-සටහන් මධ්‍යගත කිරීම සඳහා වගකිව යුතු නියෝජිතයා
  • Grafana: ප්‍රසිද්ධ උපකරණ පුවරු මෙවලමක්
  • Loki: Data Centralization Daemon

සම්භාව්‍ය යටිතල ව්‍යුහයක කොටසක් ලෙස (උදාහරණයක් ලෙස, අතථ්‍ය යන්ත්‍ර මත පදනම්ව), Promtail නියෝජිතයා එක් එක් යන්ත්‍රය මත යෙදවිය යුතුය. Grafana සහ Loki එකම යන්ත්රයේ ස්ථාපනය කළ හැකිය.

Kubernetes වෙත යෙදවීම

Kubernetes මත Loki සංරචක ස්ථාපනය කිරීම පහත පරිදි වේ:

  • සේවාදායක පොකුරේ ඇති සෑම යන්ත්‍රයකම Promtail නියෝජිතයා යෙදවීම සඳහා daemonSet
  • යෙදවීම Loki
  • සහ අවසාන එක තමයි Grafana යෙදවීම.

වාසනාවකට මෙන්, Loki හෙල්ම් පැකේජයක් ලෙස ලබා ගත හැකි අතර, එය යෙදවීම පහසු කරයි.

Heml හරහා ස්ථාපනය කිරීම

ඔබ දැනටමත් Heml ස්ථාපනය කර තිබිය යුතුය. එය ව්‍යාපෘතියේ GitHub ගබඩාවෙන් බාගත කළ හැක. එය ස්ථාපනය කර ඇත්තේ ඔබගේ ගෘහ නිර්මාණ ශිල්පයට අනුරූප වන සංරක්ෂිතය ඉවත් කර හෙල්ම් එක එකතු කිරීමෙනි. $PATH.

සටහන: Helm හි 3.0.0 අනුවාදය මෑතකදී නිකුත් කරන ලදී. එහි බොහෝ වෙනස්කම් ඇති බැවින්, එය භාවිතා කිරීමට පෙර ටිකක් රැඳී සිටින ලෙස පාඨකයාට උපදෙස් දෙනු ලැබේ..

හෙල්ම් සඳහා මූලාශ්රයක් එකතු කිරීම

පළමු පියවර වන්නේ පහත දැක්වෙන විධානය භාවිතා කර "loki" ගබඩාව එකතු කිරීමයි:

$ helm add loki https://grafana.github.io/loki/charts

මෙයින් පසු, ඔබට "loki" නම් පැකේජ සෙවිය හැක:

$ helm search loki

ප්රතිඵලය:

loki/loki       0.17.2 v0.4.0 Loki: like Prometheus, but for logs.
loki/loki-stack 0.19.1 v0.4.0 Loki: like Prometheus, but for logs.
loki/fluent-bit 0.0.2  v0.0.1 Uses fluent-bit Loki go plugin for...
loki/promtail   0.13.1 v0.4.0 Responsible for gathering logs and...

මෙම පැකේජ පහත විශේෂාංග ඇත:

  • පැකේජය loki/loki Loki සේවාදායකයට පමණක් ගැලපේ
  • පැකේජය loki/fluent-bit Promtail වෙනුවට ලඝු-සටහන් එකතු කිරීම සඳහා fluent-bin භාවිතයෙන් DaemonSet යෙදවීමට ඔබට ඉඩ සලසයි.
  • පැකේජය loki/promtail ලොග් ගොනු එකතු කිරීමේ නියෝජිතයෙකු අඩංගු වේ
  • පැකේජය loki/loki-stack, Promtail සමඟ එක්ව Loki වහාම යෙදවීමට ඔබට ඉඩ සලසයි.

Loki ස්ථාපනය කිරීම

Loki Kubernetes වෙත යෙදවීමට, "අධීක්ෂණ" නාම අවකාශයේ පහත විධානය ක්‍රියාත්මක කරන්න:

$ helm upgrade --install loki loki/loki-stack --namespace monitoring

තැටියට සුරැකීමට, පරාමිතිය එක් කරන්න --set loki.persistence.enabled = true:

$ helm upgrade --install loki loki/loki-stack 
              --namespace monitoring 
              --set loki.persistence.enabled=true

සටහන: ඔබට එකවර Grafana යෙදවීමට අවශ්‍ය නම්, පරාමිතිය එක් කරන්න --set grafana.enabled = true

ඔබ මෙම විධානය ක්‍රියාත්මක කරන විට ඔබට පහත ප්‍රතිදානය ලබා ගත යුතුය:

LAST DEPLOYED: Tue Nov 19 15:56:54 2019
NAMESPACE: monitoring
STATUS: DEPLOYED
RESOURCES:
==> v1/ClusterRole
NAME AGE
loki-promtail-clusterrole 189d
…
NOTES:
The Loki stack has been deployed to your cluster. Loki can now be added as a datasource in Grafana.
See <a href="http://docs.grafana.org/features/datasources/loki/">http://docs.grafana.org/features/datasources/loki/</a> for more details.

"අධීක්ෂණ" නාම අවකාශයේ කරල් වල තත්වය දෙස බලන විට, සියල්ල යොදවා ඇති බව අපට පෙනේ:

$ kubectl -n monitoring get pods -l release=loki

ප්රතිඵලය:

NAME                 READY  STATUS   RESTARTS  AGE
loki-0               1/1    Running  0         147m
loki-promtail-9zjvc  1/1    Running  0         3h25m
loki-promtail-f6brf  1/1    Running  0         11h
loki-promtail-hdcj7  1/1    Running  0         3h23m
loki-promtail-jbqhc  1/1    Running  0         11h
loki-promtail-mj642  1/1    Running  0         62m
loki-promtail-nm64g  1/1    Running  0         24m

සියලුම කරල් ධාවනය වේ. දැන් පරීක්ෂණ කිහිපයක් කිරීමට කාලයයි!

Grafana වෙත සම්බන්ධ වෙමින්

Kubernetes යටතේ Grafana වෙත සම්බන්ධ වීමට, ඔබ එහි පොඩ් එකට උමගක් විවෘත කළ යුතුය. පහත දැක්වෙන්නේ ග්‍රැෆානා පොඩ් සඳහා වරාය 3000 විවෘත කිරීමේ විධානයයි.

$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80

තවත් වැදගත් කරුණක් වන්නේ Grafana පරිපාලක මුරපදය නැවත ලබා ගැනීමේ අවශ්යතාවයයි. මුරපදය රහසිගතව තබා ඇත loki-grafana ක්ෂේත්රයේ .data.admin-user base64 ආකෘතියෙන්.

එය යථා තත්වයට පත් කිරීම සඳහා, ඔබ පහත විධානය ක්‍රියාත්මක කළ යුතුය:

$ kubectl -n monitoring get secret loki-grafana 
 --template '{{index .data "admin-password" | base64decode}}'; echo

පෙරනිමි පරිපාලක ගිණුම (පරිපාලක) සමඟ ඒකාබද්ධව මෙම මුරපදය භාවිතා කරන්න.

Grafana හි Loki දත්ත මූලාශ්‍රයක් නිර්වචනය කිරීම

පළමුවෙන්ම, Loki දත්ත මූලාශ්රය නිර්මාණය කර ඇති බවට වග බලා ගන්න (Configuration/Datasource).
මෙන්න උදාහරණයක්:

Loki - Prometheus ප්‍රවේශය භාවිතයෙන් ලොග් එකතු කිරීම
Loki සඳහා දත්ත මූලාශ්‍රයක් පිහිටුවීමේ උදාහරණය

"ටෙස්ට්" මත ක්ලික් කිරීමෙන් ඔබට Loki සමඟ සම්බන්ධතාවය පරීක්ෂා කළ හැකිය.

ලොකීට ඉල්ලීම් කරනවා

දැන් "ගවේෂණය" කොටස වෙත Grafana වෙත යන්න. බහාලුම් වලින් ලඝු-සටහන් ලැබෙන විට, Loki Kubernetes වෙතින් පාර-දත්ත එක් කරයි. මේ අනුව, විශේෂිත බහාලුම්වල ලඝු-සටහන් බැලීමට හැකි වේ.

උදාහරණයක් ලෙස, promtail බහාලුම් ලොග තේරීමට, ඔබට පහත විමසුම භාවිතා කළ හැක: {container_name = "promtail"}.
මෙහිදී Loki දත්ත මූලාශ්‍රය තෝරා ගැනීමට ද මතක තබා ගන්න.

මෙම විමසුම පහත පරිදි බහාලුම් ක්‍රියාකාරකම් ලබා දෙනු ඇත:

Loki - Prometheus ප්‍රවේශය භාවිතයෙන් ලොග් එකතු කිරීම
ග්‍රැෆානා හි විමසුම් ප්‍රතිඵලය

උපකරණ පුවරුවට එක් කරන්න

Grafana 6.4 සමඟින් පටන් ගෙන, ඔබට ලොග් තොරතුරු සෘජුවම උපකරණ පුවරුව මත තැබිය හැකිය. මෙයින් පසු, පරිශීලකයාට ඔහුගේ වෙබ් අඩවියේ ඇති ඉල්ලීම් ගණන සහ යෙදුම් සලකුණු අතර ඉක්මනින් මාරු වීමට හැකි වේ.

මෙම අන්තර්ක්‍රියාව ක්‍රියාත්මක කරන උපකරණ පුවරුවක උදාහරණයක් පහත දැක්වේ:

Loki - Prometheus ප්‍රවේශය භාවිතයෙන් ලොග් එකතු කිරීම
Prometheus මෙට්‍රික්ස් සහ Loki ලොග සහිත නියැදි උපකරණ පුවරුව

ලොකිගේ අනාගතය

මම මැයි/ජුනි මාසවල 0.1 අනුවාදය සමඟ Loki නැවත භාවිතා කිරීමට පටන් ගතිමි. අද අනුවාදය 1, සහ 1.1 සහ 1.2 පවා දැනටමත් නිකුත් කර ඇත.

0.1 අනුවාදය ප්‍රමාණවත් තරම් ස්ථායී නොවූ බව පිළිගත යුතුය. නමුත් 0.3 දැනටමත් පරිණතභාවයේ සැබෑ සලකුනු පෙන්නුම් කර ඇති අතර, පසුව අනුවාද (0.4, පසුව 1.0) මෙම හැඟීම ශක්තිමත් කළේය.

1.0.0 න් පසු, මෙම අපූරු මෙවලම භාවිතා නොකිරීමට කිසිවෙකුට නිදහසට කරුණක් විය නොහැක.

තවදුරටත් වැඩිදියුණු කිරීම් Loki ගැන නොවිය යුතුය, නමුත් එය විශිෂ්ට Grafana සමඟ ඒකාබද්ධ කිරීම. ඇත්ත වශයෙන්ම, Grafana 6.4 දැනටමත් උපකරණ පුවරු සමඟ හොඳ ඒකාබද්ධතාවයක් ඇත.

මෑතකදී නිකුත් කරන ලද Grafana 6.5, JSON ආකෘතියෙන් ලොග් අන්තර්ගතය ස්වයංක්‍රීයව හඳුනා ගැනීමෙන් මෙම ඒකාබද්ධ කිරීම තවදුරටත් වැඩිදියුණු කරයි.

පහත වීඩියෝව මෙම යාන්ත්‍රණයේ කුඩා උදාහරණයක් පෙන්වයි:

Loki - Prometheus ප්‍රවේශය භාවිතයෙන් ලොග් එකතු කිරීම
Grafana හි නිරාවරණය වූ Loki නූල් භාවිතා කිරීම

JSON ක්ෂේත්‍ර වලින් එකක් භාවිතා කිරීමට හැකි වේ, උදාහරණයක් ලෙස:

  • බාහිර මෙවලම වෙත සබැඳි
  • ලොග් අන්තර්ගතය පෙරීම

උදාහරණයක් ලෙස, ඔබට Zipkin හෝ Jaeger වෙත යාමට traceId මත ක්ලික් කළ හැක.

සුපුරුදු පරිදි, අපි ඔබගේ අදහස් බලාපොරොත්තු වන අතර ඔබට ආරාධනා කරන්නෙමු විවෘත webinar, අපි 2019 තුළ DevOps කර්මාන්තය දියුණු වූ ආකාරය ගැන කතා කරන අතර 2020 සඳහා විය හැකි සංවර්ධන මාර්ග සාකච්ඡා කරමු.

මූලාශ්රය: www.habr.com