کار با معیارهای OpenTelemetry – جامعه dev

من برای متحد کردن معیارها ، سیاهههای مربوط و آثار ، شروع به پذیرش OpenTelemetry در کارگاه خود کردم. این پست توضیح می دهد که چرا-و چگونه-من اولین قدم را برداشتم.
تعریف اصلی کار من طراحی و اجرای برنامه های رایانه ای است. با این حال ، بخش مهمی از کار من شامل مدیریت سیستم و فعالیت های DevOps است.
با گذشت سالها ، من چند استراتژی را برای کمک به خودم به کار اصلی خود در ضمن شرکت در استقرار ، نظارت و نگهداری سیستمهایی که با آنها کار می کنم ، تدوین کرده ام.
یکی از این استراتژی ها جلوگیری از راه حل های خاص است. از خودم دو سوال زیر می پرسم:
- آیا این راه حل فراگیر است؟
- آیا می توانم از این راه حل هم در محل کار و هم در خانه استفاده کنم؟
سوال اول مهم است زیرا من انتظار دارم که راه حل چندین کاربرد در کارگاه من باشد. سوال دوم فقط یک اکتشافی است که به من کمک می کند تا تعیین کنم که آیا راه حل کاربرد گسترده تری دارد یا خیر.
به همین دلیل من پس از تصمیم گیری برای رها کردن هجوم از پشته ، به گرافانا برای تجسم و هشدار تغییر دادم. من مدتهاست که گرافانا را در همه جا می بینم ، و می توانم تصور کنم که خودم از آن در تنظیمات مختلف مانند خانه ، محل کار یا در کارگاه های خود مشتری هایم استفاده می کنم.
با این حال ، من تلاش کردم تا جایگزین خوبی برای هجوم داده های هجوم ، تداوم و پرس و جو در مورد داده های هجوم بیابم. پروتکل خط آن بسیار ساده و آسان برای استفاده است. داده ها در یک پایگاه داده سری زمانی ادامه دارند که هرگز مرا ناکام گذاشت. هنگامی که در پایگاه داده قرار می گیرند ، داده ها برای پرس و جو بلافاصله در دسترس است.
از طرف دیگر ، روش گرافانا برای انجام کارها این است که نگران نحوه مصرف داده ها و جایی که ذخیره می شود نگران نباشید. بنابراین تصمیم گرفتم بهترین ابزارها را برای نوع داده هایی که با آنها کار می کنم انتخاب کنم.
به عنوان مثال ، Prometheus-مانند Grafana-همه گیر است ، و آن را به عنوان کاندیدای خوبی برای مصرف و ذخیره همان نوع داده هایی که من از آن استفاده می کردم استفاده می کند. لوکی برای سیاهههای مربوط ، سرعت آثار و غیره وجود دارد.
یک چیز هنوز من را آزار داد: فقدان یک تصویر بزرگ. من به کار با مشخصات ، پروتکل ها و استانداردها عادت کردم ، از این خلاء راضی نبودم.
سپس من به Opentelemetry افتادم. این پروژه ای است که هدف آن ارائه یک روش یکپارچه برای جمع آوری ، پردازش و صادرات داده های تله متری است. از صد هزار پا ، به نظر می رسد که آنها می دانند که چه کاری انجام می دهند: تعاریف و پروتکل های استاندارد داده شده ، کنوانسیون های معنایی و غیره. برای من ، این مانند یک قانون برای داده های تله متری است -چیزی که من اطمینان می دهم که به آن اعتماد کنم.
جذاب ترین ویژگی Opentelemetry برای من این است که فروشنده-آگنوستیک است. چند راه حل نرم افزاری مناسب ، رایگان و منبع باز وجود دارد که می تواند داده های OpenTelemetry را مصرف و تولید کند. حتی اگر نتوانم یک فروشنده را برای استفاده از خانه و کار انتخاب کنم ، هنوز هم می توانم به OpenTelemetry بچسبم و از فروشندگان مختلف استفاده کنم.
نقشه راه تصویب OpenTelemetry من به:
- معیارها را به عنوان داده های OpenTelemetry جمع آوری کرده و آنها را به پرومتئوس صادر کنید ،
- توابع ورود به سیستم کلاسیک را در برنامه های من با ردپای و دهانه های OpenTelemetry جایگزین کنید ، و آنها را به عنوان چنین ضبط و ذخیره کنید.
- سیاهههای مربوط به منابع مختلف ، آنها را به سیاهههای مربوط به OpenTelementry ترسیم کرده و آنها را به LOKI صادر کنید.
دو نفر دوم هنوز در کارها هستند ، اما من قبلاً اولین مورد را فهمیدم. اگرچه پشته من کمی متفاوت است ، در اینجا چگونه می توانید جمع آوری معیارها را به عنوان داده های OpenTelemetry آزمایش کرده و آنها را به پرومتئوس صادر کنید.
ما از Docker Compose استفاده خواهیم کرد:
services:
otel-collector:
image: ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-contrib:0.125.0
ports:
- 127.0.0.1:4317:4317 # OTLP gRPC receiver
- 127.0.0.1:4318:4318 # OTLP http receiver
volumes:
- ./otel-collector-config.yaml:/etc/otelcol-contrib/config.yaml:ro
prometheus:
image: prom/prometheus:v3.3.1
volumes:
- ./prometheus.yaml:/etc/prometheus/prometheus.yml:ro
ports:
- "127.0.0.1:9090:9090" # Prometheus UI
در این تنظیم ، ما جمع آوری OpenTelemetry را با پرونده پیکربندی راه اندازی می کنیم otel-collector-config.yaml
و قرار گرفتن درگاه های گیرنده GRPC و HTTP خود را در LocalHost. همچنین ، ما در حال راه اندازی پرومتئوس با پرونده پیکربندی هستیم prometheus.yaml
و در معرض UI خود در LocalHost.
پرونده پیکربندی otel-collector-config.yaml
برای جمع کننده OpenTelemetry به شرح زیر است:
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
exporters:
prometheus:
endpoint: 0.0.0.0:8889
debug:
verbosity: detailed
service:
pipelines:
metrics:
receivers: [otlp]
exporters: [prometheus, debug]
این پیکربندی به جمع کننده OpenTelemetry می گوید تا داده های معیارهای ورودی را در پورت های GRPC و HTTP گوش دهد (4317
وت 4318
به ترتیب) و صادر کردن داده ها به پرومتئوس در بندر 8889
بشر در debug
از صادرکننده برای ورود داده های دریافت شده به کنسول برای اهداف اشکال زدایی استفاده می شود. در service
بخش جایی است که ما گیرنده ها و صادرکنندگان را به معیارها خط لوله
پرونده پیکربندی prometheus.yaml
برای پرومتئوس به شرح زیر است:
global:
scrape_interval: 10s
scrape_configs:
- job_name: "otel-collector"
static_configs:
- targets:
- otel-collector:8889
این پیکربندی ساده به پرومتئوس می گوید که معیارهای موجود از جمع کننده OpenTelemetry را در پورت خراش دهد 8889
هر 10 ثانیه
هنگامی که Docker Compose پشته به پایان رسید و در حال اجرا است ، می توانید با استفاده از GRPC یا HTTP ، معیارهایی را به جمع کننده OpenTelemetry ارسال کنید. این احتمالاً سخت ترین قسمت برای شروع است: حتی یک متریک ساده توسط یک لقمه JSON نشان داده شده است. هیچ مشتری CLI برای ارسال معیارها به جمع کننده OpenTelemetry نیز وجود ندارد. بنابراین ، من پیشنهاد می کنم Telegraf را برای ارسال معیارهای واقعی به جمع کننده OpenTelemetry ارسال کنید. می توانید از پرونده پیکربندی نمونه زیر استفاده کنید telegraf.toml
:
[global_tags]
[agent]
interval = "10s"
round_interval = true
metric_batch_size = 1000
metric_buffer_limit = 10000
collection_jitter = "0s"
flush_interval = "10s"
flush_jitter = "0s"
precision = "0s"
[[inputs.cpu]]
percpu = true
totalcpu = true
collect_cpu_time = false
report_active = false
core_tags = false
[[inputs.disk]]
ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]
[[inputs.mem]]
[[outputs.opentelemetry]]
… و آن را با:
telegraf --config telegraf.conf
اگر از NIX استفاده می کنید ، می توانید از دستور زیر برای اجرای Telegraf استفاده کنید:
nix-shell --packages telegraf --command "telegraf --config telegraf.toml"
Telegraf معیارهای استفاده از CPU ، حافظه و دیسک را جمع آوری کرده و آنها را با استفاده از پروتکل OpenTelemetry به جمع کننده OpenTelemetry ارسال می کند. سپس ، می توانید ui prometheus خود را در http: // localhost: 9090 بررسی کنید و معیارها را از جمع کننده OpenTelemetry مشاهده کنید. به عنوان مثال ، می توانید معیارهای استفاده از حافظه یا معیارهای استفاده از دیسک را مشاهده کنید.
اتخاذ OpenTelemetry به من کمک کرده است تا در کارگاه خود رویکرد قابل حمل تری برای مشاهده داشته باشم. شروع با معیارها یک نقطه ورود عملی به من داد و ابزاری مانند Telegraf ، Collector OpenTelemetry و Prometheus ادغام را ساده کردند. در حالی که من از Tinker با اثری و سیاهههای مربوط هیجان زده ام ، هنوز کارهای بیشتری در سمت معیارها انجام می شود.