{ "info": { "author": "Lin Chen", "author_email": "linchen04@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "# py-grpc-prometheus\n\nInstrument library to provide prometheus metrics similar to:\n\n- https://github.com/grpc-ecosystem/java-grpc-prometheus\n- https://github.com/grpc-ecosystem/go-grpc-prometheus\n\n\n## Status\nCurrently, the library has the parity metrics with the Java and Go library.\n\n### Server side:\n- grpc_server_started_total\n- grpc_server_handled_total\n- grpc_server_handled_latency_seconds\n- grpc_server_msg_received_total\n- grpc_server_msg_sent_total\n\n### Client side:\n- grpc_client_started_total\n- grpc_client_completed\n- grpc_client_completed_latency_seconds\n- grpc_client_msg_sent_total\n- grpc_client_msg_received_total\n\n## How to use\n\n```\npip install py-grpc-prometheus\n```\n\n## Client side:\nClient metrics monitoring is done by intercepting the gPRC channel.\n\n```python\nimport grpc\nfrom py_grpc_prometheus.prometheus_client_interceptor import PromClientInterceptor\n\nchannel = grpc.intercept_channel(grpc.insecure_channel('server:6565'),\n PromClientInterceptor()) \n# Start an end point to expose metrics.\nstart_http_server(metrics_port)\n```\n\n## Server side:\nServer metrics are exposed by adding the interceptor when the gRPC server is started. Take a look at\n`tests/integration/hello_world/hello_world_client.py` for the complete example.\n\n```python\nimport grpc\nfrom concurrent import futures\nfrom py_grpc_prometheus.prometheus_server_interceptor import PromServerInterceptor\nfrom prometheus_client import start_http_server\n```\n\nStart the gRPC server with the interceptor, take a look at\n`tests/integration/hello_world/hello_world_server.py` for the complete example.\n\n```python\nserver = grpc.server(futures.ThreadPoolExecutor(max_workers=10),\n interceptors=(PromServerInterceptor(),))\n# Start an end point to expose metrics.\nstart_http_server(metrics_port)\n```\n\n## How to run and test\n1. Run the testing server\n\n```bash\npython -m tests.integration.hello_world.hello_world_sever\n```\n\n2. Run the testing client\n```bash\npython -m tests.integration.hello_world.hello_world_client\n```\n\n3. Open http://localhost:50052 for the server side metrics\n4. Open http://localhost:50053 for the client side metrics\n\n## TODO:\n- Unit test with https://github.com/census-instrumentation/opencensus-python/blob/master/tests/unit/trace/ext/grpc/test_server_interceptor.py\n\n## Reference\n- https://grpc.io/grpc/python/grpc.html\n- https://github.com/census-instrumentation/opencensus-python/blob/master/opencensus/trace/ext/grpc/utils.py\n- https://github.com/opentracing-contrib/python-grpc/blob/b4bdc7ce81fa75ede00f7c6bcf5dab8fae47332a/grpc_opentracing/grpcext/grpc_interceptor/server_interceptor.py\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/lchenn/py-grpc-prometheus", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "py-grpc-prometheus", "package_url": "https://pypi.org/project/py-grpc-prometheus/", "platform": "", "project_url": "https://pypi.org/project/py-grpc-prometheus/", "project_urls": { "Homepage": "https://github.com/lchenn/py-grpc-prometheus" }, "release_url": "https://pypi.org/project/py-grpc-prometheus/0.1.2/", "requires_dist": [ "setuptools (==39.0.1)", "grpcio (>=1.10.0)", "prometheus-client (==0.3.0)" ], "requires_python": "", "summary": "Python gRPC Prometheus Interceptors", "version": "0.1.2" }, "last_serial": 4603751, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "0986af8f4c7bb9090c2bfcc795a61e71", "sha256": "43b91a02015e6780643860e0b02a448decc7828a8a4b9b87e93e7936aa068b26" }, "downloads": -1, "filename": "py_grpc_prometheus-0.0.1.tar.gz", "has_sig": false, "md5_digest": "0986af8f4c7bb9090c2bfcc795a61e71", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1931, "upload_time": "2018-07-16T19:22:36", "url": "https://files.pythonhosted.org/packages/01/38/d07e4cf6e200ca10c2153819225627989a34668eb9252c6a97c5060a25ba/py_grpc_prometheus-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "1f0175cae7115d72b1700697ca9357cb", "sha256": "3aa0bab3a09b842411391bf5c493047dfd412c72baa0fd9aec7787732e93eeec" }, "downloads": -1, "filename": "py_grpc_prometheus-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "1f0175cae7115d72b1700697ca9357cb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9027, "upload_time": "2018-12-15T09:52:18", "url": "https://files.pythonhosted.org/packages/87/af/741df66e061b0a3077f0a30182f2ed7b65ed2d0fadbf5515b60d60390740/py_grpc_prometheus-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c0c458f8bee48d1e2a5e79cca67e0cf1", "sha256": "5c69593666e228bd51e7fa81ca215337a19357311498849f2fbe7197622769e0" }, "downloads": -1, "filename": "py_grpc_prometheus-0.0.2.tar.gz", "has_sig": false, "md5_digest": "c0c458f8bee48d1e2a5e79cca67e0cf1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3316, "upload_time": "2018-12-15T09:52:19", "url": "https://files.pythonhosted.org/packages/14/cb/327dad3158c276dfb1492a88782d8c962d030de8f4dbb729996830ddf92b/py_grpc_prometheus-0.0.2.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "c1acff40d9f3fd4e2d018c8a70c8f486", "sha256": "2a3a580c66d2ca98f794a365aac07fc6057c1939c4c1a006086f79b9eb852667" }, "downloads": -1, "filename": "py_grpc_prometheus-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "c1acff40d9f3fd4e2d018c8a70c8f486", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10607, "upload_time": "2018-12-15T21:57:39", "url": "https://files.pythonhosted.org/packages/a5/a0/31c33d3a936aa353515aa1face909603af851063cdd18caa49f04b8c0929/py_grpc_prometheus-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6f300832732823c66935563565e30c1c", "sha256": "dfb2f443decd08c929b9b4d746bb2b3b42be3b8968b51e70e6be8a8f6e4e3585" }, "downloads": -1, "filename": "py_grpc_prometheus-0.1.2.tar.gz", "has_sig": false, "md5_digest": "6f300832732823c66935563565e30c1c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4406, "upload_time": "2018-12-15T21:57:40", "url": "https://files.pythonhosted.org/packages/7a/1f/479f540448cb2955b3ec0238e97238f4c80b4198068eaf2d51c00fa01b72/py_grpc_prometheus-0.1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c1acff40d9f3fd4e2d018c8a70c8f486", "sha256": "2a3a580c66d2ca98f794a365aac07fc6057c1939c4c1a006086f79b9eb852667" }, "downloads": -1, "filename": "py_grpc_prometheus-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "c1acff40d9f3fd4e2d018c8a70c8f486", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10607, "upload_time": "2018-12-15T21:57:39", "url": "https://files.pythonhosted.org/packages/a5/a0/31c33d3a936aa353515aa1face909603af851063cdd18caa49f04b8c0929/py_grpc_prometheus-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6f300832732823c66935563565e30c1c", "sha256": "dfb2f443decd08c929b9b4d746bb2b3b42be3b8968b51e70e6be8a8f6e4e3585" }, "downloads": -1, "filename": "py_grpc_prometheus-0.1.2.tar.gz", "has_sig": false, "md5_digest": "6f300832732823c66935563565e30c1c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4406, "upload_time": "2018-12-15T21:57:40", "url": "https://files.pythonhosted.org/packages/7a/1f/479f540448cb2955b3ec0238e97238f4c80b4198068eaf2d51c00fa01b72/py_grpc_prometheus-0.1.2.tar.gz" } ] }