Я ссылался и проверял документы, но не смог их найти. Эти журналы необходимо сохранять каждые 30 минут. Добавление файлов для flask api и структуры проекта
Main.py
Код: Выделить всё
import logging
from logging.handlers import TimedRotatingFileHandler
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.sdk.metrics.export import ConsoleMetricExporter
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.logs import LoggerProvider, LoggingHandler
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
from opentelemetry.instrumentation.flask import FlaskInstrumentor
from app import create_app
from app.api import api
app = create_app('config/config.yaml')
FlaskInstrumentor().instrument_app(app)
resource = Resource(attributes={SERVICE_NAME: "sample-flask-app"})
tracer_provider = TracerProvider(resource=resource)
span_processor = BatchSpanProcessor(OTLPSpanExporter())
tracer_provider.add_span_processor(span_processor)
metrics_provider = MeterProvider(resource=resource)
metrics_provider.add_metric_reader(ConsoleMetricExporter())
logging_provider = LoggerProvider(resource=resource)
logging.getLogger().addHandler(LoggingHandler(logging_provider))
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("application_logger")
trace_handler = TimedRotatingFileHandler(
app.config['logging']['traces_log_dir'] + "/traces.log", when="m", interval=app.config['logging']['log_file_interval']
)
metric_handler = TimedRotatingFileHandler(
app.config['logging']['metrics_log_dir'] + "/metrics.log", when="m", interval=app.config['logging']['log_file_interval']
)
app_handler = TimedRotatingFileHandler(
app.config['logging']['application_log_dir'] + "/app.log", when="m", interval=app.config['logging']['log_file_interval']
)
trace_handler.setLevel(logging.DEBUG)
metric_handler.setLevel(logging.DEBUG)
app_handler.setLevel(logging.INFO)
logging.getLogger("opentelemetry").addHandler(trace_handler)
logger.addHandler(app_handler)
app.register_blueprint(api, url_prefix="/api")
if __name__ == '__main__':
app.run(
host=app.config['app']['host'],
port=app.config['app']['port'],
debug=app.config['app']['debug']
)
Код: Выделить всё
from flask import Blueprint, jsonify, request
import time
api = Blueprint('api', __name__)
@api.route('/status', methods=['GET'])
def status():
return jsonify({"status": "OK", "timestamp": time.time()}), 200
@api.route('/process', methods=['POST'])
def process():
data = request.json
result = {"received_data": data, "timestamp": time.time()}
return jsonify(result), 201
Код: Выделить всё
from flask import Flask
from yaml import safe_load
def create_app(config_path):
app = Flask(__name__)
with open(config_path, 'r') as file:
config = safe_load(file)
app.config.update(config)
return app
Flask
PyYAML
opentelemetry-api
opentelemetry-sdk
opentelemetry-instrumentation -колба
Подробнее здесь: https://stackoverflow.com/questions/792 ... s-to-files
Мобильная версия