Основи спостережуваності
Що таке спостережуваність?
Спостережуваність дозволяє вам зрозуміти систему ззовні, дозволяючи ставити питання про цю систему, не знаючи її внутрішніх механізмів. Крім того, вона дозволяє легко усувати неполадки та розвʼязувати нові проблеми, тобто “невідомі невідомості”. Вона також допомагає відповісти на питання “Чому це відбувається?”
Щоб ставити ці питання про вашу систему, ваш застосунок повинен бути належним чином інструментований. Тобто, код застосунку повинен генерувати сигнали, такі як трейси, метрики та логи. Застосунок належним чином інструментований, коли розробникам не потрібно додавати більше інструментів для усунення несправностей, оскільки у них є вся необхідна інформація.
OpenTelemetry є механізмом, за допомогою якого код застосунку інструментується для забезпечення спостережуваності системи.
Надійність та метрики
Телеметрія належить до даних, що генеруються системою та її поведінкою. Дані можуть бути у вигляді трейсів, метрик та логів.
Надійність відповідає на питання: “Чи виконує сервіс те, що очікують від нього користувачі?” Система може працювати 100% часу, але якщо, коли користувач натискає “Додати до кошика”, щоб додати чорні туфлі до свого кошика, система не завжди додає чорні туфлі, то система може бути ненадійною.
Метрики є агрегатами за певний період часу числових даних про вашу інфраструктуру або застосунок. Приклади включають: рівень помилок системи, використання ЦП та рівень запитів для певного сервісу. Для отримання додаткової інформації про метрики та їх звʼязок з OpenTelemetry, дивіться Метрики.
SLI, або Індикатор Рівня Сервісу (Service Level Indicator), представляє вимірювання поведінки сервісу. Хороший SLI вимірює ваш сервіс з погляду ваших користувачів. Прикладом SLI може бути швидкість завантаження вебсторінки.
SLO, або Цільовий Рівень Сервісу (Service Level Objective), представляє засіб, за допомогою якого надійність передається організації/іншим командам. Це досягається шляхом привʼязки одного або декількох SLI до бізнес-цінності.
Розуміння розподіленого трасування
Розподілене трасування дозволяє спостерігати за запитами, коли вони проходять через складні, розподілені системи. Розподілене трасування покращує видимість вашого застосунку або системи та дозволяє налагоджувати поведінку, яку важко відтворити локально. Це необхідно для розподілених систем, які зазвичай мають недетерміновані проблеми або занадто складні для відтворення локально.
Щоб зрозуміти розподілене трасування, вам потрібно зрозуміти роль кожного з його компонентів: логи, відрізки та трейси.
Логи
Лог — це повідомлення з міткою часу, яке генерується сервісами або іншими компонентами. На відміну від трейсів, вони не обовʼязково повʼязані з будь-яким конкретним користувацьким запитом або транзакцією. Ви можете знайти логи майже всюди в програмному забезпеченні. Логи широко використовувалися в минулому як розробниками, так і операторами для розуміння поведінки системи.
Приклад логу:
I, [2021-02-23T13:26:23.505892 #22473] INFO -- : [6459ffe1-ea53-4044-aaa3-bf902868f730] Started GET "/" for ::1 at 2021-02-23 13:26:23 -0800
Логи недостатні для відстеження виконання коду, оскільки зазвичай їм не вистачає контекстної інформації, такої як місце виклику.
Вони стають набагато кориснішими, коли вони включені як частина відрізку, або коли вони корелюються з трейсом та відрізком.
Для отримання додаткової інформації про логи та їх звʼязок з OpenTelemetry, дивіться Логи.
Відрізки
Відрізок (span) представляє одиницю роботи або операцію. Відрізки відстежують конкретні операції, які виконує запит, створюючи картину того, що сталося під час виконання цієї операції.
Відрізок містить назву, дані, повʼязані з часом, структуровані повідомлення логів та інші метадані (тобто Атрибути), щоб надати інформацію про операцію, яку він відстежує.
Атрибути відрізка
Атрибути відрізка — це метадані, прикріплені до відрізка.
Наступна таблиця містить приклади атрибутів відрізка:
| Ключ | Значення |
|---|---|
http.request.method | "GET" |
network.protocol.version | "1.1" |
url.path | "/webshop/articles/4" |
url.query | "?s=1" |
server.address | "example.com" |
server.port | 8080 |
url.scheme | "https" |
http.route | "/webshop/articles/:article_id" |
http.response.status_code | 200 |
client.address | "192.0.2.4" |
client.socket.address | "192.0.2.5" (клієнт проходить через проксі) |
user_agent.original | "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0" |
Для отримання додаткової інформації про відрізки та їх звʼязок з OpenTelemetry, дивіться Відрізки.
Розподілені трейси
Розподілений трейс, більш відомий як трейс, записує шляхи, які проходять окремі запити (зроблені застосунком або кінцевим користувачем), коли вони проходять через кілька сервісів в архітектурах, таких як мікросервіси або безсерверних застосунках.
Трейс складається з одного або більше відрізків. Перший відрізок є кореневим. Кожен кореневий відрізок представляє запит від початку до кінця. Відрізки під кореневим відрізком надають більш детальний контекст того, що відбувається під час запиту (або які кроки складають запит).
Наприклад, коли користувач завантажує вебсторінку, початковий HTTP-запит може пройти через API шлюзу, бекенд-сервіс і базу даних. Кожен з цих етапів представлений відрізком, і разом вони утворюють єдине трасування, яке показує весь шлях запиту від початку до кінця.
Без трасування знайти корінь проблеми продуктивності в розподіленій системі може бути складно. Трасування робить налагодження та розуміння розподілених систем менш складним, розбиваючи те, що відбувається в межах запиту, коли він проходить через розподілену систему.
Багато бекендів спостережуваності візуалізують трейси у вигляді діаграм водоспаду, які виглядають так:
Діаграми водоспаду показують відношення батько-дитина між кореневим відрізком та його відрізками-нащадками. Коли відрізок охоплює інший відрізок, це також представляє вкладене відношення.
Для отримання додаткової інформації про трейси та їх звʼязок з OpenTelemetry, дивіться Трейси.
Відгук
Чи це було корисним?
Дякуємо. Ми цінуємо ваші відгуки!
Будь ласка, дайте нам знати як ми можемо покращити цю сторінку. Ми цінуємо ваші відгуки!