برنامه نویسی

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

من برای متحد کردن معیارها ، سیاهههای مربوط و آثار ، شروع به پذیرش OpenTelemetry در کارگاه خود کردم. این پست توضیح می دهد که چرا-و چگونه-من اولین قدم را برداشتم.

تعریف اصلی کار من طراحی و اجرای برنامه های رایانه ای است. با این حال ، بخش مهمی از کار من شامل مدیریت سیستم و فعالیت های DevOps است.

با گذشت سالها ، من چند استراتژی را برای کمک به خودم به کار اصلی خود در ضمن شرکت در استقرار ، نظارت و نگهداری سیستمهایی که با آنها کار می کنم ، تدوین کرده ام.

یکی از این استراتژی ها جلوگیری از راه حل های خاص است. از خودم دو سوال زیر می پرسم:

  1. آیا این راه حل فراگیر است؟
  2. آیا می توانم از این راه حل هم در محل کار و هم در خانه استفاده کنم؟

سوال اول مهم است زیرا من انتظار دارم که راه حل چندین کاربرد در کارگاه من باشد. سوال دوم فقط یک اکتشافی است که به من کمک می کند تا تعیین کنم که آیا راه حل کاربرد گسترده تری دارد یا خیر.

به همین دلیل من پس از تصمیم گیری برای رها کردن هجوم از پشته ، به گرافانا برای تجسم و هشدار تغییر دادم. من مدتهاست که گرافانا را در همه جا می بینم ، و می توانم تصور کنم که خودم از آن در تنظیمات مختلف مانند خانه ، محل کار یا در کارگاه های خود مشتری هایم استفاده می کنم.

با این حال ، من تلاش کردم تا جایگزین خوبی برای هجوم داده های هجوم ، تداوم و پرس و جو در مورد داده های هجوم بیابم. پروتکل خط آن بسیار ساده و آسان برای استفاده است. داده ها در یک پایگاه داده سری زمانی ادامه دارند که هرگز مرا ناکام گذاشت. هنگامی که در پایگاه داده قرار می گیرند ، داده ها برای پرس و جو بلافاصله در دسترس است.

از طرف دیگر ، روش گرافانا برای انجام کارها این است که نگران نحوه مصرف داده ها و جایی که ذخیره می شود نگران نباشید. بنابراین تصمیم گرفتم بهترین ابزارها را برای نوع داده هایی که با آنها کار می کنم انتخاب کنم.

به عنوان مثال ، Prometheus-مانند Grafana-همه گیر است ، و آن را به عنوان کاندیدای خوبی برای مصرف و ذخیره همان نوع داده هایی که من از آن استفاده می کردم استفاده می کند. لوکی برای سیاهههای مربوط ، سرعت آثار و غیره وجود دارد.

یک چیز هنوز من را آزار داد: فقدان یک تصویر بزرگ. من به کار با مشخصات ، پروتکل ها و استانداردها عادت کردم ، از این خلاء راضی نبودم.

سپس من به Opentelemetry افتادم. این پروژه ای است که هدف آن ارائه یک روش یکپارچه برای جمع آوری ، پردازش و صادرات داده های تله متری است. از صد هزار پا ، به نظر می رسد که آنها می دانند که چه کاری انجام می دهند: تعاریف و پروتکل های استاندارد داده شده ، کنوانسیون های معنایی و غیره. برای من ، این مانند یک قانون برای داده های تله متری است -چیزی که من اطمینان می دهم که به آن اعتماد کنم.

جذاب ترین ویژگی Opentelemetry برای من این است که فروشنده-آگنوستیک است. چند راه حل نرم افزاری مناسب ، رایگان و منبع باز وجود دارد که می تواند داده های OpenTelemetry را مصرف و تولید کند. حتی اگر نتوانم یک فروشنده را برای استفاده از خانه و کار انتخاب کنم ، هنوز هم می توانم به OpenTelemetry بچسبم و از فروشندگان مختلف استفاده کنم.

نقشه راه تصویب OpenTelemetry من به:

  1. معیارها را به عنوان داده های OpenTelemetry جمع آوری کرده و آنها را به پرومتئوس صادر کنید ،
  2. توابع ورود به سیستم کلاسیک را در برنامه های من با ردپای و دهانه های OpenTelemetry جایگزین کنید ، و آنها را به عنوان چنین ضبط و ذخیره کنید.
  3. سیاهههای مربوط به منابع مختلف ، آنها را به سیاهههای مربوط به 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 با اثری و سیاهههای مربوط هیجان زده ام ، هنوز کارهای بیشتری در سمت معیارها انجام می شود.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا