|
| 1 | +import wsgiref.simple_server |
| 2 | + |
| 3 | +from opentelemetry import metrics |
| 4 | +from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter |
| 5 | +from opentelemetry.instrumentation.sqlalchemy import SQLAlchemyInstrumentor |
| 6 | +from opentelemetry.instrumentation.wsgi import OpenTelemetryMiddleware |
| 7 | +from opentelemetry.sdk.metrics import MeterProvider |
| 8 | +from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader |
| 9 | +from opentelemetry.sdk.resources import Resource |
| 10 | +from optuna.storages import RDBStorage |
| 11 | +import optuna_dashboard |
| 12 | + |
| 13 | + |
| 14 | +SQLALCHEMY_URL = "sqlite:///db.sqlite3" |
| 15 | +OTEL_COLLECTOR_ENDPOINT = "http://127.0.0.1:4318/v1/metrics" |
| 16 | + |
| 17 | + |
| 18 | +def main() -> None: |
| 19 | + resource = Resource.create({"service.name": "optuna-dashboard"}) |
| 20 | + readers = [ |
| 21 | + PeriodicExportingMetricReader( |
| 22 | + OTLPMetricExporter(endpoint=OTEL_COLLECTOR_ENDPOINT), |
| 23 | + export_interval_millis=1000, |
| 24 | + export_timeout_millis=5000, |
| 25 | + ), |
| 26 | + ] |
| 27 | + metrics.set_meter_provider(MeterProvider(resource=resource, metric_readers=readers)) |
| 28 | + |
| 29 | + # If you want to use PrometheusMetricReader, uncomment the following lines |
| 30 | + # from prometheus_client import start_http_server |
| 31 | + # from opentelemetry.exporter.prometheus import PrometheusMetricReader |
| 32 | + # print("Metrics endpoint: http://127.0.0.1:9464/metrics") |
| 33 | + # start_http_server(port=9464, addr="127.0.0.1") |
| 34 | + # readers.append(PrometheusMetricReader("optuna_dashboard")) |
| 35 | + |
| 36 | + # If you want to see metrics in the console, uncomment the following line |
| 37 | + # from opentelemetry.sdk.metrics.export import ConsoleMetricExporter |
| 38 | + # readers.append(PeriodicExportingMetricReader(ConsoleMetricExporter())) |
| 39 | + |
| 40 | + # Enable opentelemetry-instrumentation-sqlalchemy |
| 41 | + storage = RDBStorage( |
| 42 | + SQLALCHEMY_URL, skip_compatibility_check=True, skip_table_creation=True |
| 43 | + ) |
| 44 | + SQLAlchemyInstrumentor().instrument( |
| 45 | + engine=storage.engine, |
| 46 | + meter_provider=metrics.get_meter_provider(), |
| 47 | + ) |
| 48 | + |
| 49 | + # Enable opentelemetry-instrumentation-wsgi |
| 50 | + app = optuna_dashboard.wsgi(storage=storage) |
| 51 | + app = OpenTelemetryMiddleware(app, meter_provider=metrics.get_meter_provider()) |
| 52 | + |
| 53 | + # Start Optuna Dashboard |
| 54 | + with wsgiref.simple_server.make_server("127.0.0.1", 8080, app) as httpd: |
| 55 | + httpd.serve_forever() |
| 56 | + |
| 57 | + |
| 58 | +if __name__ == "__main__": |
| 59 | + main() |
0 commit comments