diff --git a/bentoml/serve.py b/bentoml/serve.py index 380ef8f6d2c..12f4d1604d1 100644 --- a/bentoml/serve.py +++ b/bentoml/serve.py @@ -31,7 +31,7 @@ logger = logging.getLogger(__name__) -PROMETHEUS_MESSAGE = "Prometheus metrics for {server_type} BentoServer from {bento_identifier} can be accessed at {addr}" +PROMETHEUS_MESSAGE = "Prometheus metrics for {server_type} BentoServer of '{bento_identifier}' can be accessed at '{addr}'." SCRIPT_RUNNER = "bentoml_cli.server.runner" SCRIPT_API_SERVER = "bentoml_cli.server.http_api_server" @@ -109,6 +109,27 @@ def create_watcher( ) +def log_grpcui_message(port: int) -> None: + message = "To use gRPC UI, run the following command: 'docker run -it --rm {network_args} fullstorydev/grpcui -plaintext {platform_deps}:{port}', followed by opening 'http://0.0.0.0:8080' in your browser of choice." + + if psutil.WINDOWS or psutil.MACOS: + logger.info( + message.format( + platform_deps="host.docker.internal", + port=port, + network_args="-p 8080:8080", + ) + ) + else: + logger.info( + message.format( + platform_deps="localhost", + port=port, + network_args="--network=host", + ) + ) + + @inject def serve_development( bento_identifier: str, @@ -193,6 +214,9 @@ def serve_development( singleton=True, ) ) + + log_grpcui_message(port) + logger.info( PROMETHEUS_MESSAGE.format( bento_identifier=bento_identifier, @@ -532,6 +556,8 @@ def serve_production( ) ) + log_grpcui_message(port) + if BentoMLContainer.api_server_config.metrics.enabled.get(): metrics_host = BentoMLContainer.grpc.metrics_host.get() metrics_port = BentoMLContainer.grpc.metrics_port.get() @@ -600,6 +626,7 @@ def serve_production( numprocesses=api_workers or math.ceil(CpuResource.from_system()), ) ) + logger.info( PROMETHEUS_MESSAGE.format( bento_identifier=bento_identifier,