Сначала ознакомьтесь с нашим документом по мониторингу для получения обзора того, что Baserow предлагает для самомониторинга.
Этот документ объясняет, как:
.env
и установите:HONEYCOMB_API_KEY=YOUR_KEY
BASEROW_ENABLE_OTEL=true
./dev.sh restart
Посмотрите логи вашего otel-collector для начала:
docker logs baserow-otel-collector-1
docker-compose.dev.yml
также запускает
службу Open Telemetry Collector с конфигурацией из файла deploy/otel/otel-collector-config.yaml
.BASEROW_ENABLE_OTEL=true
, контейнеры разработки
настраиваются с помощью OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4318
в docker-compose.dev.yml
для отправки телеметрии этому локальному коллекционеру.HONEYCOMB_API_KEY
, где вы можете
наконец просмотреть все.Чтобы записать что-то в лог, просто:
from loguru import logger
def application_code():
logger.info('что-то')
См. документацию Loguru для получения дополнительной информации, она имеет множество отличных функций.
По состоянию на февраль 2023 года Baserow не логирует много информации. Теперь у нас есть более удобная система логирования loguru
и способ отправки и хранения логов с использованием OTEL, поэтому мы должны логировать гораздо больше.
Сначала прочитайте это для понимания, что такое трассировка и трассировка и почему мы хотим их использовать.
Вы можете использовать вспомогательный декоратор baserow_trace
для обертывания функции
в трассировку, чтобы отслеживать время ее выполнения и другие атрибуты:
from opentelemetry import trace
tracer = trace.get_tracer(__name__)
class SomeClass:
@baserow_trace(tracer)
def my_func(
self
):
# выполните дорогостоящую операцию, которую мы хотим отслеживать
pass
@baserow_trace
будет:
Вместо того, чтобы аннотировать каждый метод в классе с @baserow_trace
, вы можете
использовать функцию baserow_trace_methods
, которая генерирует метакласс, делающий это за вас. По умолчанию, он будет трассировать все методы в классе, не начинающиеся с _
.
baserow_trace_methods
также поддерживает параметры only
и exclude
, которые
позволяют ограничивать, какие именно методы трассировать.
from opentelemetry import trace
tracer = trace.get_tracer(__name__)
class SomeClass(metaclass=baserow_trace_methods(tracer)):
def a(self):
pass
def b(self):
pass
def c(self):
pass
def d(self):
pass
Это очень полезно при работе с классом, имеющим абстрактные методы, которые будут реализованы многими подклассами (что мы часто делаем в Baserow).
См. ниже пример того, как можно трассировать каждую реализацию метода .do
для абстрактного базового класса!
import abc
from opentelemetry import trace
tracer = trace.get_tracer(__name__)
class ActionType(metaclass=baserow_trace_methods(tracer, abc=True, only='do')):
@abc.abstractmethod
def do(self):
# Каждый подкласс ActionType будет иметь свой метод `do` трассированным!
pass
def b(self):
pass
def c(self):
pass
def d(self):
pass
Часто очень полезно добавлять атрибуты к текущей трассировке, чтобы фильтровать и запрашивать их позже при просмотре телеметрии. У нас есть простая вспомогательная функция, которая позволяет это сделать:
add_baserow_trace_attrs(
attr_you_want_on_the_span=value_you_want,
other_attr=other_value
)
Или вы можете использовать стандартные методы OTEL:
span = get_current_span()
span.set_attribute(f"baserow.my_span_attr", value)
Помните, что вы также можете использовать API OTEL Python напрямую. Вспомогательные функции, показанные выше, просто помогают вам.
Вы также можете отслеживать различные числовые и статистические метрики с использованием Open Telemetry. Мы не предоставляем никаких вспомогательных методов, так как функции OTEL достаточно просты. Прочитайте это для ознакомления со всеми доступными типами метрик, которые вы можете использовать, но ниже приведен простой пример:
Важно: Любые атрибуты, которые вы добавите к метрике, приведут к отправке нового события при каждом периодическом отправке метрик для конкретной комбинации метрики и атрибутов. Вы должны убедиться, что любые добавленные атрибуты имеют только постоянное количество возможных значений и небольшое количество таких значений. Это необходимо для предотвращения бесконечного увеличения количества отправляемых метрических событий.
Например, если мы вызовем
counter.add(1, {"table_id":table.id})
, OTEL будет отправлять метрическую точку данных для каждой таблицы, которую он видел при каждом синхронизации, что приведет к бесконечному увеличению количества отправляемых метрических событий. Однако, если вместо этого атрибутом будет что-то вроде "bulk_created": True или False, это нормально, так как возможных значений всего два.
from opentelemetry import metrics
meter = metrics.get_meter(__name__)
rows_created_counter = meter.create_counter(
"baserow.rows_created",
unit="1",
description="Количество созданных строк в пользовательских таблицах.",
)
def create_row(table):
# создайте некоторую строку
# отслеживайте количество созданных строк!
rows_created_counter.add(
1
)
Если вы установили сэмплер трассировщика с помощью traceidratio
, то не каждый запрос будет иметь полную трассировку.
OTEL_TRACES_SAMPLER_ARG: "0.1"
OTEL_TRACES_SAMPLER: "traceidratio"
Это может затруднить отладку конкретного запроса. Поэтому мы реализовали параметр запроса, который позволяет принудительно выполнить полную трассировку. Вы можете добавить ?force_full_otel_trace=true
к любому запросу на бэкенд, чтобы получить полную трассировку.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )