    def export_data(
        self,
        datas: t.Dict[str, collections.deque[JSONSerializable]],
    ) -> None:
        """
        Export data. This method should be called after all data is logged.
        """
        if self.data_logger is None:
            self._init_logger()
            assert self.data_logger is not None

        extra_columns: dict[str, t.Any] = {
            self.COLUMN_TIME: datetime.datetime.now().timestamp(),
            self.COLUMN_RID: str(trace_context.request_id),
            self.COLUMN_TID: str(trace_context.trace_id),
        }

        if self._will_export_schema or random.random() < self.meta_sample_rate:
            extra_columns[self.COLUMN_META] = {
                "bento_name": server_context.bento_name,
                "bento_version": server_context.bento_version,
                "monitor_name": self.name,
                "schema": self._schema,
            }

            self._will_export_schema = False

        while True:
            try:
                record = {k: v.popleft() for k, v in datas.items()}
                record.update(extra_columns)  # type: ignore  # pyright can not resolve backward reference correctly for JSONSerializable
                self.data_logger.info(record)
            except IndexError:
                break
Export data. This method should be called after all data is logged.
src/bentoml/_internal/monitoring/otlp.py