{"id":29403561,"url":"https://github.com/ask-and-use/exporter_aad_apps","last_synced_at":"2026-05-21T05:04:28.271Z","repository":{"id":302211919,"uuid":"1011378788","full_name":"Ask-And-Use/exporter_aad_apps","owner":"Ask-And-Use","description":"Azure AD Application Credential Monitor","archived":false,"fork":false,"pushed_at":"2025-07-03T12:27:36.000Z","size":33,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-10T23:28:02.720Z","etag":null,"topics":["aad","azure","exporter","observability","prometheus"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ask-And-Use.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-30T18:12:14.000Z","updated_at":"2025-07-03T12:27:39.000Z","dependencies_parsed_at":null,"dependency_job_id":"3476e35c-7066-4d3b-b04c-0ae28b02bef0","html_url":"https://github.com/Ask-And-Use/exporter_aad_apps","commit_stats":null,"previous_names":["ask-and-use/exporter_aad_apps"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Ask-And-Use/exporter_aad_apps","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ask-And-Use%2Fexporter_aad_apps","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ask-And-Use%2Fexporter_aad_apps/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ask-And-Use%2Fexporter_aad_apps/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ask-And-Use%2Fexporter_aad_apps/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ask-And-Use","download_url":"https://codeload.github.com/Ask-And-Use/exporter_aad_apps/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ask-And-Use%2Fexporter_aad_apps/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33289546,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-21T02:57:32.698Z","status":"ssl_error","status_checked_at":"2026-05-21T02:57:31.990Z","response_time":62,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aad","azure","exporter","observability","prometheus"],"created_at":"2025-07-10T19:00:41.860Z","updated_at":"2026-05-21T05:04:28.267Z","avatar_url":"https://github.com/Ask-And-Use.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n# Description\n\nAzure AD Application Credential Monitor\n\nThis module monitors Azure AD application credential expiration dates and exposes\nthem as Prometheus metrics. It helps prevent unexpected credential expirations by\nproviding visibility into remaining days before credentials expire.\n\n# Features\n- Lists Azure AD applications and their credentials using Microsoft Graph API\n- Calculates remaining days until credential expiration\n- Exposes metrics via Prometheus HTTP server\n- Supports configuration via command line arguments or JSON config file\n- Optional verbose output mode\n\n# Setup\n\n```\npip install -r requirements.txt\n```\n\n# Usage\n\n## With script parameters\n\n```\nUsage:\n    python exporter_aad_app.py -t \u003ctenant_id\u003e -c \u003cclient_id\u003e -s \u003cclient_secret\u003e [-v] [-p \u003cport\u003e] [-l \u003clisten_addr\u003e] [-t \u003ctimeout\u003e]\n\nOptions:\n    -h, --help          Show usage information\n    -t, --tenant        Azure AD tenant ID\n    -c, --client        Client ID for authentication\n    -s, --secret        Client secret for authentication\n    -p, --port          Port to run Prometheus HTTP server (default: 5001)\n    -l, --listen        Address to listen on (default: 0.0.0.0)\n        --timeout       HTTP request timeout in seconds (default: 10)\n    -v, --verbose       Enable verbose output\n```\n\n# Output example\n\n```\n# HELP python_gc_objects_collected_total Objects collected during gc\n# TYPE python_gc_objects_collected_total counter\npython_gc_objects_collected_total{generation=\"0\"} 461.0\npython_gc_objects_collected_total{generation=\"1\"} 19.0\npython_gc_objects_collected_total{generation=\"2\"} 0.0\n# HELP python_gc_objects_uncollectable_total Uncollectable objects found during GC\n# TYPE python_gc_objects_uncollectable_total counter\npython_gc_objects_uncollectable_total{generation=\"0\"} 0.0\npython_gc_objects_uncollectable_total{generation=\"1\"} 0.0\npython_gc_objects_uncollectable_total{generation=\"2\"} 0.0\n# HELP python_gc_collections_total Number of times this generation was collected\n# TYPE python_gc_collections_total counter\npython_gc_collections_total{generation=\"0\"} 38.0\npython_gc_collections_total{generation=\"1\"} 3.0\npython_gc_collections_total{generation=\"2\"} 0.0\n# HELP python_info Python platform information\n# TYPE python_info gauge\npython_info{implementation=\"CPython\",major=\"3\",minor=\"13\",patchlevel=\"0\",version=\"3.13.0\"} 1.0\n# HELP azure_app_credential_days_remaining Number of days remaining before Azure application credential expires\n# TYPE azure_app_credential_days_remaining gauge\nazure_app_credential_days_remaining{app_id=\"9f2312f7-4e77-47db-a53e-665f2cc4f3bc\",app_name=\"Gateway-System\",credential_id=\"130aa1d3-49df-4be3-8595-3bf65dc72ece\",credential_name=\"ClientSecret\"} 42.31322540811602\nazure_app_credential_days_remaining{app_id=\"39702cd9-eb4f-4cc0-8138-d7ba2d006116\",app_name=\"Web-Sync\",credential_id=\"80a40502-d3e8-40f3-9872-0095b75479f5\",credential_name=\"Certificate\"} 782.3220381889447\nazure_app_credential_days_remaining{app_id=\"82dfa503-a1c5-46a7-87a7-7a0871fed0f8\",app_name=\"Backup-Prod\",credential_id=\"34547559-e320-494d-bcc4-7515c4b61c99\",credential_name=\"ServicePrincipal\"} 287.1588045961993\nazure_app_credential_days_remaining{app_id=\"2e6b63c2-a409-4e1d-abba-1a483d1ec878\",app_name=\"Dashboard-API\",credential_id=\"aecde791-19af-441f-8b32-403d6f02628b\",credential_name=\"APIKey\"} -37.173127599717\nazure_app_credential_days_remaining{app_id=\"706ee4b2-84cf-4d5c-82a2-3335a5b9fffb\",app_name=\"Monitor-Web-Central\",credential_id=\"e52037fd-9078-4ab0-a9e2-65af22829180\",credential_name=\"OAuth2Token\"} 65.02065752834775\nazure_app_credential_days_remaining{app_id=\"b111cdb5-ea49-469e-9b08-cf0e2c7e6ed6\",app_name=\"Dashboard-Data-Enterprise\",credential_id=\"befeda18-2dc5-474b-bb4c-a196c699da27\",credential_name=\"SharedKey\"} -275.11365602887275\nazure_app_credential_days_remaining{app_id=\"5379fa19-b241-4cf9-93cd-420be72d7934\",app_name=\"Data-Hub\",credential_id=\"c02c41f1-d351-49d0-83e1-9d884481c27c\",credential_name=\"SASToken\"} 55.9209267782255\n```\n\n# Prometheus Scraping\n\n```yaml\n  - job_name: 'aad_app_exporter'\n    scrape_interval: 600s\n    scrape_timeout: 60s\n    metrics_path: /metrics\n    scheme: http\n    static_configs:\n      - targets: ['127.0.0.1:5001']\n```    \n\n# Grafana Dashboard\n\nYou should import the grafana_dahsboard.json file inside the deployement folders","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fask-and-use%2Fexporter_aad_apps","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fask-and-use%2Fexporter_aad_apps","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fask-and-use%2Fexporter_aad_apps/lists"}