[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"marketplace-site-banners":3,"github-stars":9,"prometheus":115},[4],{"id":5,"icon":6,"content":7,"link":8,"include_paths":6,"exclude_paths":6},"5cf2f5f6-aecf-4395-8c23-69de326fdf02",null,"Directus V12 is here","https:\u002F\u002Fdirectus.com\u002Fresources\u002Fv12-built-for-the-whole-team",{"id":10,"node_id":11,"name":12,"full_name":13,"private":14,"owner":15,"html_url":33,"description":34,"fork":14,"url":35,"forks_url":36,"keys_url":37,"collaborators_url":38,"teams_url":39,"hooks_url":40,"issue_events_url":41,"events_url":42,"assignees_url":43,"branches_url":44,"tags_url":45,"blobs_url":46,"git_tags_url":47,"git_refs_url":48,"trees_url":49,"statuses_url":50,"languages_url":51,"stargazers_url":52,"contributors_url":53,"subscribers_url":54,"subscription_url":55,"commits_url":56,"git_commits_url":57,"comments_url":58,"issue_comment_url":59,"contents_url":60,"compare_url":61,"merges_url":62,"archive_url":63,"downloads_url":64,"issues_url":65,"pulls_url":66,"milestones_url":67,"notifications_url":68,"labels_url":69,"releases_url":70,"deployments_url":71,"created_at":72,"updated_at":73,"pushed_at":74,"git_url":75,"ssh_url":76,"clone_url":77,"svn_url":33,"homepage":78,"size":79,"stargazers_count":80,"watchers_count":80,"language":81,"has_issues":82,"has_projects":82,"has_downloads":82,"has_wiki":14,"has_pages":14,"has_discussions":82,"forks_count":83,"mirror_url":6,"archived":14,"disabled":14,"open_issues_count":84,"license":85,"allow_forking":82,"is_template":14,"web_commit_signoff_required":14,"has_pull_requests":82,"pull_request_creation_policy":90,"topics":91,"visibility":32,"forks":83,"open_issues":84,"watchers":80,"default_branch":111,"temp_clone_token":6,"custom_properties":112,"organization":113,"network_count":83,"subscribers_count":114},7122594,"MDEwOlJlcG9zaXRvcnk3MTIyNTk0","directus","directus\u002Fdirectus",false,{"login":12,"id":16,"node_id":17,"avatar_url":18,"gravatar_id":19,"url":20,"html_url":21,"followers_url":22,"following_url":23,"gists_url":24,"starred_url":25,"subscriptions_url":26,"organizations_url":27,"repos_url":28,"events_url":29,"received_events_url":30,"type":31,"user_view_type":32,"site_admin":14},15967950,"MDEyOk9yZ2FuaXphdGlvbjE1OTY3OTUw","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F15967950?v=4","","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus","https:\u002F\u002Fgithub.com\u002Fdirectus","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Ffollowers","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Ffollowing{\u002Fother_user}","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Fgists{\u002Fgist_id}","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Fstarred{\u002Fowner}{\u002Frepo}","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Fsubscriptions","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Forgs","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Frepos","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Fevents{\u002Fprivacy}","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Freceived_events","Organization","public","https:\u002F\u002Fgithub.com\u002Fdirectus\u002Fdirectus","The flexible backend for all your projects 🐰 Turn your DB into a headless CMS, admin panels, or apps with a custom UI, instant APIs, auth & more.","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fforks","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fkeys{\u002Fkey_id}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fcollaborators{\u002Fcollaborator}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fteams","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fhooks","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fissues\u002Fevents{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fevents","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fassignees{\u002Fuser}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fbranches{\u002Fbranch}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Ftags","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fgit\u002Fblobs{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fgit\u002Ftags{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fgit\u002Frefs{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fgit\u002Ftrees{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fstatuses\u002F{sha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Flanguages","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fstargazers","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fcontributors","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fsubscribers","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fsubscription","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fcommits{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fgit\u002Fcommits{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fcomments{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fissues\u002Fcomments{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fcontents\u002F{+path}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fcompare\u002F{base}...{head}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fmerges","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002F{archive_format}{\u002Fref}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fdownloads","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fissues{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fpulls{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fmilestones{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fnotifications{?since,all,participating}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Flabels{\u002Fname}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Freleases{\u002Fid}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fdeployments","2012-12-12T01:35:36Z","2026-07-18T05:08:19Z","2026-07-17T21:10:45Z","git:\u002F\u002Fgithub.com\u002Fdirectus\u002Fdirectus.git","git@github.com:directus\u002Fdirectus.git","https:\u002F\u002Fgithub.com\u002Fdirectus\u002Fdirectus.git","https:\u002F\u002Fdirectus.com",447310,36507,"TypeScript",true,4850,399,{"key":86,"name":87,"spdx_id":88,"url":6,"node_id":89},"other","Other","NOASSERTION","MDc6TGljZW5zZTA=","all",[92,93,94,95,96,97,12,98,99,100,101,102,103,104,105,106,107,108,109,110],"api","app","cms","composable","data-visualization","database","graphql","headless-cms","javascript","mariadb","mssql","mysql","no-code","node","postgresql","sql","sqlite","typescript","vue","main",{},{"login":12,"id":16,"node_id":17,"avatar_url":18,"gravatar_id":19,"url":20,"html_url":21,"followers_url":22,"following_url":23,"gists_url":24,"starred_url":25,"subscriptions_url":26,"organizations_url":27,"repos_url":28,"events_url":29,"received_events_url":30,"type":31,"user_view_type":32,"site_admin":14},326,{"metadata":6,"logo":116,"helpful_resources":117,"extensions":121,"date_updated":123,"user_updated":124,"date_created":125,"user_created":126,"sort":6,"id":127,"category":128,"description":129,"slug":130,"name":131,"content":132,"website":133,"status":134,"external_resources":135,"extensionDetails":136},"5518999c-90c2-48d0-bdef-24840a65c86c",[118],{"title":119,"url":120},"Prometheus Documentation","https:\u002F\u002Fprometheus.io\u002Fdocs\u002F",[122],"directus-extension-prometheus","2025-07-30T17:42:10.984Z","1a9ab95a-93bc-4908-af85-0d42bb6e6aa6","2025-07-11T14:29:17.283Z","1cd0a355-b103-477d-9375-61e88f3110f8","71b89fd3-41d2-4f89-9245-f02cb2b41425","Monitoring","Monitor your Directus instance with Prometheus metrics and observability","prometheus","Prometheus","\u003Cp>Prometheus is an open-source monitoring and alerting toolkit designed for collecting and querying metrics from your systems.&nbsp;With the Prometheus extension for Directus, you can keep a close watch on your Directus instance by exposing key metrics in a format that Prometheus can easily scrape and analyze.\u003C\u002Fp>\n\u003Cp>In the context of data and content management, Prometheus gives you real-time visibility into how your Directus environment is performing. You can track everything from API request rates to system resource usage, helping you spot issues before they impact your users or your data workflows. This is especially useful for teams managing content at scale, where uptime and reliability are critical.\u003C\u002Fp>\n\u003Cp>By integrating Prometheus with Directus, you gain powerful insight into your data platform&rsquo;s health. The metrics collected can be used for detailed dashboards, automated alerts, and long-term trend analysis, making it easier to maintain stable, high-performing content operations.\u003C\u002Fp>\n\u003Cp>Whether you&rsquo;re troubleshooting slow queries or planning for future growth, Prometheus provides the observability you need to make informed decisions about your data infrastructure.\u003C\u002Fp>","https:\u002F\u002Fprometheus.io","published",[],[137],{"name":122,"description":138,"verified":14,"id":139,"readme":140,"type":141,"last_updated":142,"host_version":143,"downloads":144,"total_downloads":224,"sandbox":14,"license":225,"publisher":226,"versions":229,"formatted_name":131,"formatted_readme":295,"formatted_description":138,"images":296,"recent_downloads_7_days":158,"recent_downloads_30_days":297},"Export Directus metrics into prometheus","d9017186-28b1-441c-9564-738c4f9e9718","# Directus Extension: Prometheus\n\nExpose directus metrics to your prometheus instance.\n\nNo configuration required.\n\n## Install into your project\n\n```bash\nnpm install directus-extension-prometheus\n```\n\nNow, when you launch your directus instance, you will receive\nmetrics on the \u002Fmetrics endpoint.\n\n## Optional Configuration\n\n\n| Option                        | Description                                               | Default      |\n|-------------------------------|-----------------------------------------------------------|--------------|\n| `PROMETHEUS_METRICS_ENDPOINT` | The endpoint on which the prometheus metrics are exposed. | `\"\u002Fmetrics\"` |\n\n## Default Metrics\n\nHere is an example of the types of metrics exposed by this extension:\n\n```\n# HELP directus_request_count The total number of http requests\n# TYPE directus_request_count counter\ndirectus_request_count{status=\"200\",method=\"GET\"} 160\ndirectus_request_count{status=\"200\",method=\"POST\"} 2\ndirectus_request_count{status=\"304\",method=\"GET\"} 12\ndirectus_request_count{status=\"204\",method=\"PATCH\"} 5\n\n# HELP directus_request_duration_seconds The total duration of http requests\n# TYPE directus_request_duration_seconds histogram\ndirectus_request_duration_seconds_bucket{le=\"0.005\",method=\"GET\",status=\"200\"} 10\ndirectus_request_duration_seconds_bucket{le=\"0.01\",method=\"GET\",status=\"200\"} 57\ndirectus_request_duration_seconds_bucket{le=\"0.025\",method=\"GET\",status=\"200\"} 141\ndirectus_request_duration_seconds_bucket{le=\"0.05\",method=\"GET\",status=\"200\"} 158\ndirectus_request_duration_seconds_bucket{le=\"0.1\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"0.25\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"0.5\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"1\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"2.5\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"5\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"10\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"+Inf\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_sum{method=\"GET\",status=\"200\"} 2.239873104999999\ndirectus_request_duration_seconds_count{method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"0.005\",method=\"POST\",status=\"200\"} 0\ndirectus_request_duration_seconds_bucket{le=\"0.01\",method=\"POST\",status=\"200\"} 0\ndirectus_request_duration_seconds_bucket{le=\"0.025\",method=\"POST\",status=\"200\"} 1\ndirectus_request_duration_seconds_bucket{le=\"0.05\",method=\"POST\",status=\"200\"} 1\ndirectus_request_duration_seconds_bucket{le=\"0.1\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"0.25\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"0.5\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"1\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"2.5\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"5\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"10\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"+Inf\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_sum{method=\"POST\",status=\"200\"} 0.08861785999999999\ndirectus_request_duration_seconds_count{method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"0.005\",method=\"GET\",status=\"304\"} 0\ndirectus_request_duration_seconds_bucket{le=\"0.01\",method=\"GET\",status=\"304\"} 6\ndirectus_request_duration_seconds_bucket{le=\"0.025\",method=\"GET\",status=\"304\"} 11\ndirectus_request_duration_seconds_bucket{le=\"0.05\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"0.1\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"0.25\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"0.5\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"1\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"2.5\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"5\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"10\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"+Inf\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_sum{method=\"GET\",status=\"304\"} 0.16695966899999998\ndirectus_request_duration_seconds_count{method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"0.005\",method=\"PATCH\",status=\"204\"} 0\ndirectus_request_duration_seconds_bucket{le=\"0.01\",method=\"PATCH\",status=\"204\"} 4\ndirectus_request_duration_seconds_bucket{le=\"0.025\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"0.05\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"0.1\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"0.25\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"0.5\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"1\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"2.5\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"5\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"10\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"+Inf\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_sum{method=\"PATCH\",status=\"204\"} 0.059318456000000006\ndirectus_request_duration_seconds_count{method=\"PATCH\",status=\"204\"} 5\n\n# HELP directus_collection_size The total number of items in each collection\n# TYPE directus_collection_size gauge\ndirectus_collection_size{collection=\"directus_activity\"} 4\ndirectus_collection_size{collection=\"directus_collections\"} 1\ndirectus_collection_size{collection=\"directus_fields\"} 1\ndirectus_collection_size{collection=\"directus_files\"} 0\ndirectus_collection_size{collection=\"directus_folders\"} 0\ndirectus_collection_size{collection=\"directus_migrations\"} 62\ndirectus_collection_size{collection=\"directus_permissions\"} 0\ndirectus_collection_size{collection=\"directus_presets\"} 0\ndirectus_collection_size{collection=\"directus_relations\"} 0\ndirectus_collection_size{collection=\"directus_revisions\"} 2\ndirectus_collection_size{collection=\"directus_roles\"} 1\ndirectus_collection_size{collection=\"directus_sessions\"} 2\ndirectus_collection_size{collection=\"directus_settings\"} 0\ndirectus_collection_size{collection=\"directus_users\"} 1\ndirectus_collection_size{collection=\"directus_webhooks\"} 0\ndirectus_collection_size{collection=\"directus_dashboards\"} 0\ndirectus_collection_size{collection=\"directus_panels\"} 0\ndirectus_collection_size{collection=\"directus_notifications\"} 0\ndirectus_collection_size{collection=\"directus_shares\"} 0\ndirectus_collection_size{collection=\"directus_flows\"} 0\ndirectus_collection_size{collection=\"directus_operations\"} 0\ndirectus_collection_size{collection=\"thing\"} 0\n```\n\n## Adding Your Own Metrics\n\nTo add your own metrics, you have to [create an extension](https:\u002F\u002Fdocs.directus.io\u002Fextensions\u002Fcreating-extensions.html).\nMost likely you'd want to create a hook extension but `directus-extension-prometheus` should be available from any api extension.\n\nUsage:\n\n```javascript\nconst {globalRegister} = require('directus-extension-prometheus');\nconst {Counter} = require(\"prom-client\");\n\nmodule.exports = {\n    default: ({init}) => {\n        \u002F\u002F here I use the app.before hook to register this metric as soon as the app starts\n        init('app.before', () => {\n            const count = new Counter({\n                registers: [globalRegister],\n                name: 'timey_wimey',\n                help: 'People assume that time is a strict progression from cause to effect, but actually from a non-linear, non-subjective viewpoint, it’s more like a big ball of wibbly-wobbly, timey-wimey stuff.'\n            });\n\n            \u002F\u002F increment the counter every second\n            setInterval(() => {\n                count.inc();\n            }, 1000);\n        });\n    }\n}\n```","hook","2024-02-28T07:28:58.388Z","^9.26.0",[145,148,151,153,156,159,162,165,168,171,173,176,179,182,184,187,190,193,195,198,201,203,206,208,211,214,216,218,220,222],{"date":146,"count":147},"2026-06-17",0,{"date":149,"count":150},"2026-06-18",4,{"date":152,"count":150},"2026-06-19",{"date":154,"count":155},"2026-06-20",1,{"date":157,"count":158},"2026-06-21",8,{"date":160,"count":161},"2026-06-22",5,{"date":163,"count":164},"2026-06-23",6,{"date":166,"count":167},"2026-06-24",80,{"date":169,"count":170},"2026-06-25",25,{"date":172,"count":150},"2026-06-26",{"date":174,"count":175},"2026-06-27",3,{"date":177,"count":178},"2026-06-28",10,{"date":180,"count":181},"2026-06-29",13,{"date":183,"count":150},"2026-06-30",{"date":185,"count":186},"2026-07-01",2,{"date":188,"count":189},"2026-07-02",30,{"date":191,"count":192},"2026-07-03",19,{"date":194,"count":178},"2026-07-04",{"date":196,"count":197},"2026-07-05",54,{"date":199,"count":200},"2026-07-06",23,{"date":202,"count":164},"2026-07-07",{"date":204,"count":205},"2026-07-08",15,{"date":207,"count":147},"2026-07-09",{"date":209,"count":210},"2026-07-10",40,{"date":212,"count":213},"2026-07-11",41,{"date":215,"count":147},"2026-07-12",{"date":217,"count":186},"2026-07-13",{"date":219,"count":147},"2026-07-14",{"date":221,"count":161},"2026-07-15",{"date":223,"count":155},"2026-07-16",12477,"MIT",{"username":227,"verified":14,"id":228,"github_username":6,"github_name":6,"github_blog":6,"github_bio":6,"github_location":6,"github_company":6,"github_avatar_url":6},"chappio","0b1b3462-2165-47db-b812-74dde57114d5",[230,240,247,255,263,271,279,287],{"version":231,"package":139,"publisher":228,"type":141,"host_version":232,"publish_date":233,"verified":14,"id":234,"url_repository":6,"url_homepage":235,"url_bugs":6,"file_count":164,"unpacked_size":236,"sandbox":14,"sandbox_requested_scopes":6,"license":225,"bundled":237,"maintainers":238},"1.1.0","^9.22.4","2023-02-11T11:17:47.950Z","1897734e-e720-4e30-88e3-3d21d852811e","https:\u002F\u002Fgithub.com\u002Fchappio\u002Fdirectus-extension-prometheus",12334,[],[239],9216,{"version":241,"package":139,"publisher":228,"type":141,"host_version":143,"publish_date":142,"verified":14,"id":242,"url_repository":6,"url_homepage":235,"url_bugs":6,"file_count":161,"unpacked_size":243,"sandbox":14,"sandbox_requested_scopes":6,"license":225,"bundled":244,"maintainers":245},"1.4.0","190cb59f-ce3f-4574-8c5b-96065c808e26",13078,[],[246],10410,{"version":248,"package":139,"publisher":228,"type":141,"host_version":232,"publish_date":249,"verified":14,"id":250,"url_repository":6,"url_homepage":235,"url_bugs":6,"file_count":164,"unpacked_size":251,"sandbox":14,"sandbox_requested_scopes":6,"license":225,"bundled":252,"maintainers":253},"1.1.1","2023-02-11T11:28:12.884Z","35814b57-cb00-42af-8409-6f8149162fdd",42783,[],[254],9217,{"version":256,"package":139,"publisher":228,"type":141,"host_version":232,"publish_date":257,"verified":14,"id":258,"url_repository":6,"url_homepage":235,"url_bugs":6,"file_count":161,"unpacked_size":259,"sandbox":14,"sandbox_requested_scopes":6,"license":225,"bundled":260,"maintainers":261},"1.0.0","2023-02-08T20:30:13.591Z","429c38d0-ff46-4247-a518-b1c43d93209f",12127,[],[262],9214,{"version":264,"package":139,"publisher":228,"type":141,"host_version":232,"publish_date":265,"verified":14,"id":266,"url_repository":6,"url_homepage":235,"url_bugs":6,"file_count":164,"unpacked_size":267,"sandbox":14,"sandbox_requested_scopes":6,"license":225,"bundled":268,"maintainers":269},"1.2.1","2023-02-22T21:28:09.523Z","562bdfe9-1658-4752-ba32-3f4b65a31707",42837,[],[270],9219,{"version":272,"package":139,"publisher":228,"type":141,"host_version":232,"publish_date":273,"verified":14,"id":274,"url_repository":6,"url_homepage":235,"url_bugs":6,"file_count":175,"unpacked_size":275,"sandbox":14,"sandbox_requested_scopes":6,"license":225,"bundled":276,"maintainers":277},"1.0.1","2023-02-08T20:46:52.909Z","8cd9960e-61fa-4a67-a9ce-4fbe53133693",40652,[],[278],9215,{"version":280,"package":139,"publisher":228,"type":141,"host_version":232,"publish_date":281,"verified":14,"id":282,"url_repository":6,"url_homepage":235,"url_bugs":6,"file_count":164,"unpacked_size":283,"sandbox":14,"sandbox_requested_scopes":6,"license":225,"bundled":284,"maintainers":285},"1.2.0","2023-02-22T20:21:37.645Z","aab17b4f-04c6-4ef6-bcc7-116912fff2d6",42825,[],[286],9218,{"version":288,"package":139,"publisher":228,"type":141,"host_version":143,"publish_date":289,"verified":14,"id":290,"url_repository":6,"url_homepage":235,"url_bugs":6,"file_count":161,"unpacked_size":291,"sandbox":14,"sandbox_requested_scopes":6,"license":225,"bundled":292,"maintainers":293},"1.3.0","2023-04-26T14:33:14.073Z","cba98e6e-e64f-481a-919b-9f9f8cd9a6b1",11915,[],[294],9220,"\u003Ch1>Directus Extension: Prometheus\u003C\u002Fh1>\n\u003Cp>Expose directus metrics to your prometheus instance.\u003C\u002Fp>\n\u003Cp>No configuration required.\u003C\u002Fp>\n\u003Ch2>Install into your project\u003C\u002Fh2>\n\u003Cpre>\u003Ccode class=\"language-bash\">npm install directus-extension-prometheus\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Now, when you launch your directus instance, you will receive\nmetrics on the \u002Fmetrics endpoint.\u003C\u002Fp>\n\u003Ch2>Optional Configuration\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Option\u003C\u002Fth>\n\u003Cth>Description\u003C\u002Fth>\n\u003Cth>Default\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>PROMETHEUS_METRICS_ENDPOINT\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>The endpoint on which the prometheus metrics are exposed.\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>\"\u002Fmetrics\"\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>Default Metrics\u003C\u002Fh2>\n\u003Cp>Here is an example of the types of metrics exposed by this extension:\u003C\u002Fp>\n\u003Cpre>\u003Ccode># HELP directus_request_count The total number of http requests\n# TYPE directus_request_count counter\ndirectus_request_count{status=\"200\",method=\"GET\"} 160\ndirectus_request_count{status=\"200\",method=\"POST\"} 2\ndirectus_request_count{status=\"304\",method=\"GET\"} 12\ndirectus_request_count{status=\"204\",method=\"PATCH\"} 5\n\n# HELP directus_request_duration_seconds The total duration of http requests\n# TYPE directus_request_duration_seconds histogram\ndirectus_request_duration_seconds_bucket{le=\"0.005\",method=\"GET\",status=\"200\"} 10\ndirectus_request_duration_seconds_bucket{le=\"0.01\",method=\"GET\",status=\"200\"} 57\ndirectus_request_duration_seconds_bucket{le=\"0.025\",method=\"GET\",status=\"200\"} 141\ndirectus_request_duration_seconds_bucket{le=\"0.05\",method=\"GET\",status=\"200\"} 158\ndirectus_request_duration_seconds_bucket{le=\"0.1\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"0.25\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"0.5\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"1\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"2.5\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"5\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"10\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"+Inf\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_sum{method=\"GET\",status=\"200\"} 2.239873104999999\ndirectus_request_duration_seconds_count{method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"0.005\",method=\"POST\",status=\"200\"} 0\ndirectus_request_duration_seconds_bucket{le=\"0.01\",method=\"POST\",status=\"200\"} 0\ndirectus_request_duration_seconds_bucket{le=\"0.025\",method=\"POST\",status=\"200\"} 1\ndirectus_request_duration_seconds_bucket{le=\"0.05\",method=\"POST\",status=\"200\"} 1\ndirectus_request_duration_seconds_bucket{le=\"0.1\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"0.25\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"0.5\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"1\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"2.5\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"5\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"10\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"+Inf\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_sum{method=\"POST\",status=\"200\"} 0.08861785999999999\ndirectus_request_duration_seconds_count{method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"0.005\",method=\"GET\",status=\"304\"} 0\ndirectus_request_duration_seconds_bucket{le=\"0.01\",method=\"GET\",status=\"304\"} 6\ndirectus_request_duration_seconds_bucket{le=\"0.025\",method=\"GET\",status=\"304\"} 11\ndirectus_request_duration_seconds_bucket{le=\"0.05\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"0.1\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"0.25\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"0.5\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"1\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"2.5\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"5\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"10\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"+Inf\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_sum{method=\"GET\",status=\"304\"} 0.16695966899999998\ndirectus_request_duration_seconds_count{method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"0.005\",method=\"PATCH\",status=\"204\"} 0\ndirectus_request_duration_seconds_bucket{le=\"0.01\",method=\"PATCH\",status=\"204\"} 4\ndirectus_request_duration_seconds_bucket{le=\"0.025\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"0.05\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"0.1\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"0.25\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"0.5\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"1\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"2.5\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"5\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"10\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"+Inf\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_sum{method=\"PATCH\",status=\"204\"} 0.059318456000000006\ndirectus_request_duration_seconds_count{method=\"PATCH\",status=\"204\"} 5\n\n# HELP directus_collection_size The total number of items in each collection\n# TYPE directus_collection_size gauge\ndirectus_collection_size{collection=\"directus_activity\"} 4\ndirectus_collection_size{collection=\"directus_collections\"} 1\ndirectus_collection_size{collection=\"directus_fields\"} 1\ndirectus_collection_size{collection=\"directus_files\"} 0\ndirectus_collection_size{collection=\"directus_folders\"} 0\ndirectus_collection_size{collection=\"directus_migrations\"} 62\ndirectus_collection_size{collection=\"directus_permissions\"} 0\ndirectus_collection_size{collection=\"directus_presets\"} 0\ndirectus_collection_size{collection=\"directus_relations\"} 0\ndirectus_collection_size{collection=\"directus_revisions\"} 2\ndirectus_collection_size{collection=\"directus_roles\"} 1\ndirectus_collection_size{collection=\"directus_sessions\"} 2\ndirectus_collection_size{collection=\"directus_settings\"} 0\ndirectus_collection_size{collection=\"directus_users\"} 1\ndirectus_collection_size{collection=\"directus_webhooks\"} 0\ndirectus_collection_size{collection=\"directus_dashboards\"} 0\ndirectus_collection_size{collection=\"directus_panels\"} 0\ndirectus_collection_size{collection=\"directus_notifications\"} 0\ndirectus_collection_size{collection=\"directus_shares\"} 0\ndirectus_collection_size{collection=\"directus_flows\"} 0\ndirectus_collection_size{collection=\"directus_operations\"} 0\ndirectus_collection_size{collection=\"thing\"} 0\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>Adding Your Own Metrics\u003C\u002Fh2>\n\u003Cp>To add your own metrics, you have to \u003Ca href=\"https:\u002F\u002Fdocs.directus.io\u002Fextensions\u002Fcreating-extensions.html\">create an extension\u003C\u002Fa>.\nMost likely you'd want to create a hook extension but \u003Ccode>directus-extension-prometheus\u003C\u002Fcode> should be available from any api extension.\u003C\u002Fp>\n\u003Cp>Usage:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-javascript\">const {globalRegister} = require('directus-extension-prometheus');\nconst {Counter} = require(\"prom-client\");\n\nmodule.exports = {\n    default: ({init}) =&gt; {\n        \u002F\u002F here I use the app.before hook to register this metric as soon as the app starts\n        init('app.before', () =&gt; {\n            const count = new Counter({\n                registers: [globalRegister],\n                name: 'timey_wimey',\n                help: 'People assume that time is a strict progression from cause to effect, but actually from a non-linear, non-subjective viewpoint, it’s more like a big ball of wibbly-wobbly, timey-wimey stuff.'\n            });\n\n            \u002F\u002F increment the counter every second\n            setInterval(() =&gt; {\n                count.inc();\n            }, 1000);\n        });\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>",[],411]