{ "info": { "author": "Fabio Todaro, Nicola Martino", "author_email": "fbregist@gmail.com, mroci@bruttocarattere.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3 :: Only" ], "description": "# Celery Exporter\n\n[![Travis CI](https://img.shields.io/travis/OvalMoney/celery-exporter.svg?style=flat)](https://travis-ci.org/OvalMoney/celery-exporter)\n[![Docker Hub](https://img.shields.io/docker/automated/ovalmoney/celery-exporter.svg?style=flat)](https://hub.docker.com/r/ovalmoney/celery-exporter/)\n\nCelery Exporter is a Prometheus metrics exporter for Celery 4, written in python.\n\nHere the list of exposed metrics:\n\n* `celery_tasks_total` exposes the number of tasks currently known to the queue\n labeled by `name`, `state`, `queue` and `namespace`.\n* `celery_tasks_runtime_seconds` tracks the number of seconds tasks take\n until completed as histogram labeled by `name`, `queue` and `namespace`\n* `celery_tasks_latency_seconds` exposes a histogram of task latency, i.e. the time until\n tasks are picked up by a worker\n* `celery_workers` exposes the number of currently probably alive workers\n\n---\n## Requirements\n\n\n### Dependencies\nThe project comes with `redis` lib already installed, you have to install any other dependency in case you are using other brokers. \n\n### Celery app\nCelery workers have to be configured to send task-related events:\nhttp://docs.celeryproject.org/en/latest/userguide/configuration.html#worker-send-task-events.\n\nCelery Exporter is able to enable events on your workers (see _Command Options_).\n\n---\n## Install and Run\n\n### Manual Setup\n```bash\n# Install\n$ pip install celery-exporter\n\n# Run\n$ celery-exporter\n```\n\n### Docker\n```bash\n# Download image\n$ docker pull ovalmoney/celery-exporter\n\n# Run it\n$ docker run -it --rm ovalmoney/celery-exporter\n```\n\n### Command Options\n\n```bash\n$ celery-exporter --help\nUsage: celery-exporter [OPTIONS]\n\nOptions:\n -b, --broker-url TEXT URL to the Celery broker. [env var:\n CELERY_EXPORTER_BROKER_URL; default:\n redis://redis:6379/0]\n -l, --listen-address TEXT Address the HTTPD should listen on. [env var:\n CELERY_EXPORTER_LISTEN_ADDRESS; default:\n 0.0.0.0:9540]\n -m, --max-tasks INTEGER Tasks cache size. [env var:\n CELERY_EXPORTER_MAX_TASKS; default: 10000]\n -n, --namespace TEXT Namespace for metrics. [env var:\n CELERY_EXPORTER_NAMESPACE; default: celery]\n --transport-options TEXT JSON object with additional options passed to the\n underlying transport.\n --enable-events Periodically enable Celery events.\n --tz TEXT Timezone used by the celery app.\n --verbose Enable verbose logging.\n --version Show the version and exit.\n --help Show this message and exit.\n```\n\n\nIf you then look at the exposed metrics, you should see something like this:\n```bash\n# HELP celery_workers Number of alive workers\n# TYPE celery_workers gauge\ncelery_workers{namespace=\"celery\"} 1.0\n# HELP celery_tasks_total Number of tasks per state\n# TYPE celery_tasks_total gauge\ncelery_tasks_total{name=\"my_app.tasks.calculate_something\",namespace=\"celery\",queue=\"celery\",state=\"RECEIVED\"} 0.0\ncelery_tasks_total{name=\"my_app.tasks.calculate_something\",namespace=\"celery\",queue=\"celery\",state=\"PENDING\"} 0.0\ncelery_tasks_total{name=\"my_app.tasks.calculate_something\",namespace=\"celery\",queue=\"celery\",state=\"STARTED\"} 0.0\ncelery_tasks_total{name=\"my_app.tasks.calculate_something\",namespace=\"celery\",queue=\"celery\",state=\"RETRY\"} 0.0\ncelery_tasks_total{name=\"my_app.tasks.calculate_something\",namespace=\"celery\",queue=\"celery\",state=\"FAILURE\"} 0.0\ncelery_tasks_total{name=\"my_app.tasks.calculate_something\",namespace=\"celery\",queue=\"celery\",state=\"REVOKED\"} 0.0\ncelery_tasks_total{name=\"my_app.tasks.calculate_something\",namespace=\"celery\",queue=\"celery\",state=\"SUCCESS\"} 1.0\ncelery_tasks_total{name=\"my_app.tasks.fetch_some_data\",namespace=\"celery\",queue=\"celery\",state=\"RECEIVED\"} 3.0\ncelery_tasks_total{name=\"my_app.tasks.fetch_some_data\",namespace=\"celery\",queue=\"celery\",state=\"PENDING\"} 0.0\ncelery_tasks_total{name=\"my_app.tasks.fetch_some_data\",namespace=\"celery\",queue=\"celery\",state=\"STARTED\"} 1.0\ncelery_tasks_total{name=\"my_app.tasks.fetch_some_data\",namespace=\"celery\",queue=\"celery\",state=\"RETRY\"} 2.0\ncelery_tasks_total{name=\"my_app.tasks.fetch_some_data\",namespace=\"celery\",queue=\"celery\",state=\"FAILURE\"} 1.0\ncelery_tasks_total{name=\"my_app.tasks.fetch_some_data\",namespace=\"celery\",queue=\"celery\",state=\"REVOKED\"} 0.0\ncelery_tasks_total{name=\"my_app.tasks.fetch_some_data\",namespace=\"celery\",queue=\"celery\",state=\"SUCCESS\"} 7.0\n# HELP celery_tasks_runtime_seconds Task runtime (seconds)\n# TYPE celery_tasks_runtime_seconds histogram\ncelery_tasks_runtime_seconds_bucket{le=\"0.005\",name=\"my_app.tasks.calculate_something\",namespace=\"celery\",queue=\"celery\"} 29.0\ncelery_tasks_runtime_seconds_bucket{le=\"0.01\",name=\"my_app.tasks.calculate_something\",namespace=\"celery\",queue=\"celery\"} 29.0\ncelery_tasks_runtime_seconds_bucket{le=\"0.025\",name=\"my_app.tasks.calculate_something\",namespace=\"celery\",queue=\"celery\"} 29.0\ncelery_tasks_runtime_seconds_bucket{le=\"0.05\",name=\"my_app.tasks.calculate_something\",namespace=\"celery\",queue=\"celery\"} 29.0\ncelery_tasks_runtime_seconds_bucket{le=\"0.075\",name=\"my_app.tasks.calculate_something\",namespace=\"celery\",queue=\"celery\"} 29.0\ncelery_tasks_runtime_seconds_bucket{le=\"0.1\",name=\"my_app.tasks.calculate_something\",namespace=\"celery\",queue=\"celery\"} 29.0\ncelery_tasks_runtime_seconds_bucket{le=\"0.25\",name=\"my_app.tasks.calculate_something\",namespace=\"celery\",queue=\"celery\"} 29.0\ncelery_tasks_runtime_seconds_bucket{le=\"0.5\",name=\"my_app.tasks.calculate_something\",namespace=\"celery\",queue=\"celery\"} 29.0\ncelery_tasks_runtime_seconds_bucket{le=\"0.75\",name=\"my_app.tasks.calculate_something\",namespace=\"celery\",queue=\"celery\"} 29.0\ncelery_tasks_runtime_seconds_bucket{le=\"1.0\",name=\"my_app.tasks.calculate_something\",namespace=\"celery\",queue=\"celery\"} 29.0\ncelery_tasks_runtime_seconds_bucket{le=\"2.5\",name=\"my_app.tasks.calculate_something\",namespace=\"celery\",queue=\"celery\"} 29.0\ncelery_tasks_runtime_seconds_bucket{le=\"5.0\",name=\"my_app.tasks.calculate_something\",namespace=\"celery\",queue=\"celery\"} 29.0\ncelery_tasks_runtime_seconds_bucket{le=\"7.5\",name=\"my_app.tasks.calculate_something\",namespace=\"celery\",queue=\"celery\"} 29.0\ncelery_tasks_runtime_seconds_bucket{le=\"10.0\",name=\"my_app.tasks.calculate_something\",namespace=\"celery\",queue=\"celery\"} 29.0\ncelery_tasks_runtime_seconds_bucket{le=\"+Inf\",name=\"my_app.tasks.calculate_something\",namespace=\"celery\",queue=\"celery\"} 29.0\ncelery_tasks_runtime_seconds_count{name=\"my_app.tasks.calculate_something\",namespace=\"celery\",queue=\"celery\"} 29.0\ncelery_tasks_runtime_seconds_sum{name=\"my_app.tasks.calculate_something\",namespace=\"celery\",queue=\"celery\"} 0.04020289977779612\ncelery_tasks_runtime_seconds_bucket{le=\"0.005\",name=\"my_app.tasks.fetch_some_data\",namespace=\"celery\",queue=\"celery\"} 2.0\ncelery_tasks_runtime_seconds_bucket{le=\"0.01\",name=\"my_app.tasks.fetch_some_data\",namespace=\"celery\",queue=\"celery\"} 2.0\ncelery_tasks_runtime_seconds_bucket{le=\"0.025\",name=\"my_app.tasks.fetch_some_data\",namespace=\"celery\",queue=\"celery\"} 2.0\ncelery_tasks_runtime_seconds_bucket{le=\"0.05\",name=\"my_app.tasks.fetch_some_data\",namespace=\"celery\",queue=\"celery\"} 2.0\ncelery_tasks_runtime_seconds_bucket{le=\"0.075\",name=\"my_app.tasks.fetch_some_data\",namespace=\"celery\",queue=\"celery\"} 2.0\ncelery_tasks_runtime_seconds_bucket{le=\"0.1\",name=\"my_app.tasks.fetch_some_data\",namespace=\"celery\",queue=\"celery\"} 2.0\ncelery_tasks_runtime_seconds_bucket{le=\"0.25\",name=\"my_app.tasks.fetch_some_data\",namespace=\"celery\",queue=\"celery\"} 2.0\ncelery_tasks_runtime_seconds_bucket{le=\"0.5\",name=\"my_app.tasks.fetch_some_data\",namespace=\"celery\",queue=\"celery\"} 2.0\ncelery_tasks_runtime_seconds_bucket{le=\"0.75\",name=\"my_app.tasks.fetch_some_data\",namespace=\"celery\",queue=\"celery\"} 2.0\ncelery_tasks_runtime_seconds_bucket{le=\"1.0\",name=\"my_app.tasks.fetch_some_data\",namespace=\"celery\",queue=\"celery\"} 2.0\ncelery_tasks_runtime_seconds_bucket{le=\"2.5\",name=\"my_app.tasks.fetch_some_data\",namespace=\"celery\",queue=\"celery\"} 2.0\ncelery_tasks_runtime_seconds_bucket{le=\"5.0\",name=\"my_app.tasks.fetch_some_data\",namespace=\"celery\",queue=\"celery\"} 2.0\ncelery_tasks_runtime_seconds_bucket{le=\"7.5\",name=\"my_app.tasks.fetch_some_data\",namespace=\"celery\",queue=\"celery\"} 2.0\ncelery_tasks_runtime_seconds_bucket{le=\"10.0\",name=\"my_app.tasks.fetch_some_data\",namespace=\"celery\",queue=\"celery\"} 2.0\ncelery_tasks_runtime_seconds_bucket{le=\"+Inf\",name=\"my_app.tasks.fetch_some_data\",namespace=\"celery\",queue=\"celery\"} 2.0\ncelery_tasks_runtime_seconds_count{name=\"my_app.tasks.fetch_some_data\",namespace=\"celery\",queue=\"celery\"} 2.0\ncelery_tasks_runtime_seconds_sum{name=\"my_app.tasks.fetch_some_data\",namespace=\"celery\",queue=\"celery\"} 0.00402028997777961\n# TYPE celery_tasks_runtime_seconds_created gauge\ncelery_tasks_runtime_seconds_created{name=\"my_app.tasks.calculate_something\",namespace=\"celery\",queue=\"celery\"} 1.548944949810905e+09\ncelery_tasks_runtime_seconds_created{name=\"my_app.tasks.fetch_some_data\",namespace=\"celery\",queue=\"celery\"} 1.5489449550243628e+09\n# HELP celery_tasks_latency_seconds Seconds between a task is received and started.\n# TYPE celery_tasks_latency_seconds histogram\ncelery_tasks_latency_seconds_bucket{namespace=\"celery\",name=\"my_app.tasks.fetch_some_data\",queue=\"celery\",le=\"0.005\"} 2.0\ncelery_tasks_latency_seconds_bucket{namespace=\"celery\",name=\"my_app.tasks.fetch_some_data\",queue=\"celery\",le=\"0.01\"} 3.0\ncelery_tasks_latency_seconds_bucket{namespace=\"celery\",name=\"my_app.tasks.fetch_some_data\",queue=\"celery\",le=\"0.025\"} 4.0\ncelery_tasks_latency_seconds_bucket{namespace=\"celery\",name=\"my_app.tasks.fetch_some_data\",queue=\"celery\",le=\"0.05\"} 4.0\ncelery_tasks_latency_seconds_bucket{namespace=\"celery\",name=\"my_app.tasks.fetch_some_data\",queue=\"celery\",le=\"0.075\"} 5.0\ncelery_tasks_latency_seconds_bucket{namespace=\"celery\",name=\"my_app.tasks.fetch_some_data\",queue=\"celery\",le=\"0.1\"} 5.0\ncelery_tasks_latency_seconds_bucket{namespace=\"celery\",name=\"my_app.tasks.fetch_some_data\",queue=\"celery\",le=\"0.25\"} 5.0\ncelery_tasks_latency_seconds_bucket{namespace=\"celery\",name=\"my_app.tasks.fetch_some_data\",queue=\"celery\",le=\"0.5\"} 5.0\ncelery_tasks_latency_seconds_bucket{namespace=\"celery\",name=\"my_app.tasks.fetch_some_data\",queue=\"celery\",le=\"0.75\"} 5.0\ncelery_tasks_latency_seconds_bucket{namespace=\"celery\",name=\"my_app.tasks.fetch_some_data\",queue=\"celery\",le=\"1.0\"} 5.0\ncelery_tasks_latency_seconds_bucket{namespace=\"celery\",name=\"my_app.tasks.fetch_some_data\",queue=\"celery\",le=\"2.5\"} 8.0\ncelery_tasks_latency_seconds_bucket{namespace=\"celery\",name=\"my_app.tasks.fetch_some_data\",queue=\"celery\",le=\"5.0\"} 11.0\ncelery_tasks_latency_seconds_bucket{namespace=\"celery\",name=\"my_app.tasks.fetch_some_data\",queue=\"celery\",le=\"7.5\"} 11.0\ncelery_tasks_latency_seconds_bucket{namespace=\"celery\",name=\"my_app.tasks.fetch_some_data\",queue=\"celery\",le=\"10.0\"} 11.0\ncelery_tasks_latency_seconds_bucket{namespace=\"celery\",name=\"my_app.tasks.fetch_some_data\",queue=\"celery\",le=\"+Inf\"} 11.0\ncelery_tasks_latency_seconds_count{namespace=\"celery\",name=\"my_app.tasks.fetch_some_data\",queue=\"celery\"} 11.0\ncelery_tasks_latency_seconds_sum{namespace=\"celery\",name=\"my_app.tasks.fetch_some_data\",queue=\"celery\"} 16.478713035583496\n# TYPE celery_task_latency_created gauge\ncelery_task_latency_seconds_created{namespace=\"celery\",name=\"my_app.tasks.fetch_some_data\",queue=\"celery\"} 1.5489449475378375e+09\n```\n\n### Inspired by @zerok work\nhttps://github.com/zerok/celery-prometheus-exporter", "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/OvalMoney/celery-exporter", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "celery-exporter", "package_url": "https://pypi.org/project/celery-exporter/", "platform": "", "project_url": "https://pypi.org/project/celery-exporter/", "project_urls": { "Homepage": "https://github.com/OvalMoney/celery-exporter" }, "release_url": "https://pypi.org/project/celery-exporter/1.4.0/", "requires_dist": null, "requires_python": "", "summary": "Prometheus metrics exporter for Celery", "version": "1.4.0" }, "last_serial": 5578149, "releases": { "1.0.1": [ { "comment_text": "", "digests": { "md5": "9ad2ab8221e052d590dd0d88a5a4046d", "sha256": "bcff754782152104d2ba9637ad055f8cfa0393c2ac2fb6991f308dd7a52d8b82" }, "downloads": -1, "filename": "celery-exporter-1.0.1.tar.gz", "has_sig": false, "md5_digest": "9ad2ab8221e052d590dd0d88a5a4046d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9784, "upload_time": "2019-02-05T10:44:41", "url": "https://files.pythonhosted.org/packages/4a/ad/b8892ab1083dc8c2287122eddddc1e5c7d98e15c0cb56128c81bbda54d46/celery-exporter-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "718b7bfb1e2f95a738dc9e4f43b531f1", "sha256": "2e37d361d0057acbe94491e29e014d296fbf9b975797279bf647a14b35c9da8f" }, "downloads": -1, "filename": "celery-exporter-1.0.2.tar.gz", "has_sig": false, "md5_digest": "718b7bfb1e2f95a738dc9e4f43b531f1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9789, "upload_time": "2019-02-05T12:01:29", "url": "https://files.pythonhosted.org/packages/81/0d/ab9c94c525a17a1e621b6031fe789742a8ae2dda2081be002d891dc1b110/celery-exporter-1.0.2.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "7112b96562ae7bff5e7ca406ae3927e9", "sha256": "db50e1229adb09ff67195004f773165ae7f86eff78e12230fef98965d95d438e" }, "downloads": -1, "filename": "celery-exporter-1.1.0.tar.gz", "has_sig": false, "md5_digest": "7112b96562ae7bff5e7ca406ae3927e9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9790, "upload_time": "2019-02-06T12:32:00", "url": "https://files.pythonhosted.org/packages/5a/81/4fed902e534398d9c907befd6e9bfb2edeac68c7cf007000d422788c5beb/celery-exporter-1.1.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "3463e3c6aafe6dab7c539a1bf390451a", "sha256": "7a76cf30a6c1b98c8e95f313fa950c9c216f86e36cb1819db2ffa9adca2a0ec2" }, "downloads": -1, "filename": "celery-exporter-1.2.1.tar.gz", "has_sig": false, "md5_digest": "3463e3c6aafe6dab7c539a1bf390451a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10215, "upload_time": "2019-03-27T11:18:37", "url": "https://files.pythonhosted.org/packages/fd/19/6d8a8fa0197752f332aba144fb2dfc845437e0c5e8e8a9737860f27af7e0/celery-exporter-1.2.1.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "b8d79f48a0cc0f7903e0ce6930add196", "sha256": "d8049b23096279cd303e30c2c512f2423300fb50ca28b7277af75175633642ce" }, "downloads": -1, "filename": "celery-exporter-1.3.0.tar.gz", "has_sig": false, "md5_digest": "b8d79f48a0cc0f7903e0ce6930add196", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10806, "upload_time": "2019-04-09T13:14:01", "url": "https://files.pythonhosted.org/packages/4d/29/bfdacddc412275e5e0949a1df3cf15aa4a8d0e81cc806c1ab1f917c4d5cc/celery-exporter-1.3.0.tar.gz" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "001a99fd3a93d6b20130c289f74515cf", "sha256": "dd17130ad9307b103858cd381ef181b3fdba4d80a58c56838f9acf270ea91766" }, "downloads": -1, "filename": "celery-exporter-1.3.1.tar.gz", "has_sig": false, "md5_digest": "001a99fd3a93d6b20130c289f74515cf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10871, "upload_time": "2019-04-09T16:35:01", "url": "https://files.pythonhosted.org/packages/30/82/2591ae7eecfd205dd3067c4f0e520f0d27dac447facf97e86d49174b3299/celery-exporter-1.3.1.tar.gz" } ], "1.3.2": [ { "comment_text": "", "digests": { "md5": "ac5d071287d45516bc8777d66cbd7f91", "sha256": "863adef552389bf83f1e2e634e3748a4c4fc2584ed86b51dfb6f6b022e9fff3a" }, "downloads": -1, "filename": "celery-exporter-1.3.2.tar.gz", "has_sig": false, "md5_digest": "ac5d071287d45516bc8777d66cbd7f91", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11130, "upload_time": "2019-04-11T15:10:08", "url": "https://files.pythonhosted.org/packages/89/ed/37553ad7058ed703f6370655bc70929763bb57e0374b2be70b9746348754/celery-exporter-1.3.2.tar.gz" } ], "1.3.3": [ { "comment_text": "", "digests": { "md5": "8c7a38005cb729ff8a9abfeb70eb6314", "sha256": "2fec4d5607065a61f1b2eefff77728ad0e0c3b3c9f3bbf89737d5a9173e9bed0" }, "downloads": -1, "filename": "celery-exporter-1.3.3.tar.gz", "has_sig": false, "md5_digest": "8c7a38005cb729ff8a9abfeb70eb6314", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11140, "upload_time": "2019-06-11T10:15:58", "url": "https://files.pythonhosted.org/packages/a9/74/34067732292261185e2fd419efea8f6c890f15322a3d95c8d1238d6b1703/celery-exporter-1.3.3.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "fad4552126b35391a517a42120f62b1c", "sha256": "023b943a4924a875a7a0a197e850eb5eead1332fd8bc9f2ed982b63a5cb83551" }, "downloads": -1, "filename": "celery-exporter-1.4.0.tar.gz", "has_sig": false, "md5_digest": "fad4552126b35391a517a42120f62b1c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11415, "upload_time": "2019-07-24T15:23:03", "url": "https://files.pythonhosted.org/packages/a2/25/497d1aad19bde44ef918cf71be1dc23799126888d40af58e7b5a0e65542e/celery-exporter-1.4.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "fad4552126b35391a517a42120f62b1c", "sha256": "023b943a4924a875a7a0a197e850eb5eead1332fd8bc9f2ed982b63a5cb83551" }, "downloads": -1, "filename": "celery-exporter-1.4.0.tar.gz", "has_sig": false, "md5_digest": "fad4552126b35391a517a42120f62b1c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11415, "upload_time": "2019-07-24T15:23:03", "url": "https://files.pythonhosted.org/packages/a2/25/497d1aad19bde44ef918cf71be1dc23799126888d40af58e7b5a0e65542e/celery-exporter-1.4.0.tar.gz" } ] }