{"id":33286389,"url":"https://github.com/coordimap/agent","last_synced_at":"2026-06-07T23:00:37.704Z","repository":{"id":57764828,"uuid":"525092160","full_name":"coordimap/agent","owner":"coordimap","description":null,"archived":false,"fork":false,"pushed_at":"2026-06-07T18:07:37.000Z","size":1349,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-06-07T20:08:09.702Z","etag":null,"topics":["aws","blast","blast-radius","blast-radius-reduction","diagram","diagram-generator","diagramming","gcp","kubernetes"],"latest_commit_sha":null,"homepage":"https://coordimap.com","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/coordimap.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-08-15T18:16:10.000Z","updated_at":"2026-06-07T18:07:40.000Z","dependencies_parsed_at":"2024-08-11T06:43:16.449Z","dependency_job_id":"3b8fac4c-21f0-4dd6-af7d-fe4299bafb99","html_url":"https://github.com/coordimap/agent","commit_stats":null,"previous_names":[],"tags_count":187,"template":false,"template_full_name":null,"purl":"pkg:github/coordimap/agent","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coordimap%2Fagent","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coordimap%2Fagent/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coordimap%2Fagent/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coordimap%2Fagent/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/coordimap","download_url":"https://codeload.github.com/coordimap/agent/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coordimap%2Fagent/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34041089,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-07T02:00:07.652Z","response_time":124,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["aws","blast","blast-radius","blast-radius-reduction","diagram","diagram-generator","diagramming","gcp","kubernetes"],"created_at":"2025-11-17T16:02:53.693Z","updated_at":"2026-06-07T23:00:37.687Z","avatar_url":"https://github.com/coordimap.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# coordimap-agent\n\n`coordimap-agent` is a data crawler that gathers information from various sources and generates a JSON graph of all the elements. It is written in Go and can be configured to crawl different data sources.\n\n## Getting Started\n\nTo get started with `coordimap-agent`, you\\'ll need to have Go installed on your system. You can find the installation instructions for Go in the [official documentation](https://golang.org/doc/install).\n\n### Dependencies\n\n`coordimap-agent` has the following dependencies:\n\n- [cloud.google.com/go/compute/metadata](http://cloud.google.com/go/compute/metadata)\n- [dev.azure.com/bloopi/bloopi/\\_git/shared_models.git](http://dev.azure.com/bloopi/bloopi/_git/shared_models.git)\n- [github.com/aws/aws-sdk-go](http://github.com/aws/aws-sdk-go)\n- [github.com/gertd/go-pluralize](http://github.com/gertd/go-pluralize)\n- [github.com/go-redis/redis/v8](http://github.com/go-redis/redis/v8)\n- [github.com/go-sql-driver/mysql](http://github.com/go-sql-driver/mysql)\n- [github.com/gorilla/mux](http://github.com/gorilla/mux)\n- [github.com/lib/pq](http://github.com/lib/pq)\n- [github.com/parnurzeal/gorequest](http://github.com/parnurzeal/gorequest)\n- [github.com/prometheus/client_golang](http://github.com/prometheus/client_golang)\n- [github.com/prometheus/common](http://github.com/prometheus/common)\n- [github.com/rs/zerolog](http://github.com/rs/zerolog)\n- [github.com/spf13/viper](http://github.com/spf13/viper)\n- [go.mongodb.org/mongo-driver](http://go.mongodb.org/mongo-driver)\n- [golang.org/x/oauth2](http://golang.org/x/oauth2)\n- [google.golang.org/api](http://google.golang.org/api)\n- [gopkg.in/alecthomas/kingpin.v2](http://gopkg.in/alecthomas/kingpin.v2)\n- [gopkg.in/yaml.v3](http://gopkg.in/yaml.v3)\n- [k8s.io/api](http://k8s.io/api)\n- [k8s.io/apimachinery](http://k8s.io/apimachinery)\n- [k8s.io/client-go](http://k8s.io/client-go)\n\nThese dependencies will be automatically downloaded when you build the project.\n\n## Build and Test\n\nTo build and run `coordimap-agent`, you can use the provided Dockerfile. You will need to have Docker installed on your system. You can find the installation instructions for Docker in the [official documentation](https://docs.docker.com/get-docker/).\n\nTo build the Docker image, run the following command from the root of the project:\n\n```\ndocker build -t coordimap-agent .\n```\n\nOnce the image is built, you can run the `coordimap-agent` container with the following command:\n\n```\ndocker run coordimap-agent\n```\n\n## eBPF Flow Crawler\n\n`coordimap-agent` includes an eBPF-based flow crawler that can be used to monitor network traffic in a Kubernetes environment. This crawler uses eBPF to capture network flows and map the connections between services and pods.\n\n### eBPF Dependencies\n\nTo use the eBPF flow crawler, you will need to have the following additional dependencies installed on your system:\n\n- `clang`\n- `llvm`\n- `bpftool`\n\n### eBPF Build Step\n\nBefore building `coordimap-agent`, you will need to run the following command to generate the eBPF Go files:\n\n```\ngo generate ./internal/cloud/flows\n```\n\nThis command will compile the eBPF C code and generate the necessary Go files to interact with it.\n\n### eBPF Configuration\n\nTo enable the eBPF flow crawler, you will need to add the following configuration to your `config.yaml` file:\n\n```yaml\n- type: flows\n  id: \"ebpf_flows\"\n  config:\n    - name: crawl_interval\n      value: 30s\n    - name: deployedAt\n      value: \"kubernetes\" # can be \"kubernetes\" or \"server\"\n    - name: interface_name\n      value: \"all\" # can be \"all\" or a specific interface like \"eth0\"\n    - name: external_mappings\n      value: \"*@your_k8s_cluster_uid\" # required when deployedAt is \"kubernetes\"\n```\n\n## Configuration\n\n`coordimap-agent` is configured using a YAML file. By default, the application looks for a `config.yaml` file in the same directory as the executable. You can specify a different configuration file using the `--config` flag or the `COORDIMAP_CONFIG_PATH` environment variable.\n\nThe complete configuration shape is shown in `configs/config.yaml.template`. A fully commented version is available in `configs/agent.example.yaml`.\n\nThe configuration file specifies the data sources to be crawled. Here is an example configuration:\n\n```yaml\ncoordimap:\n  api_key: ${COORDIMAP_API_KEY}\n  data_sources:\n    - type: aws\n      id: aws-production\n      config:\n        - name: scope_id\n          value: \"your-aws-account-id\"\n        - name: access_key_id\n          value: ${AWS_ACCESS_KEY_ID}\n        - name: secret_access_key\n          value: ${AWS_SECRET_ACCESS_KEY}\n        - name: crawl_interval\n          value: 30s\n\n    - type: gcp\n      id: gcp-production\n      config:\n        - name: scope_id\n          value: \"your-gcp-project-number\"\n        - name: project_id\n          value: \"your-gcp-project-id\"\n        - name: credentials_file\n          value: /etc/coordimap-agent/gcp-service-account.json\n        - name: crawl_interval\n          value: 30s\n```\n\nSupported data source types are `aws`, `gcp`, `kubernetes`, `postgres`, `mysql`, `mariadb`, `mongodb`, `aws_flow_logs`.\n\nMost crawlers support `crawl_interval` values using seconds or minutes, for example `30s` or `5m`.\n\n## Supported Data Sources\n\nHere are the supported data sources and their sample configurations:\n\n### GCP\n\n```yaml\ncoordimap:\n  api_key: ${COORDIMAP_API_KEY}\n  data_sources:\n    - type: gcp\n      id: gcp_id_123\n      config:\n        - name: scope_id\n          value: \"your-gcp-project-number\"\n        - name: in_cloud\n          value: \"false\"\n        - name: credentials_file\n          value: \"/path/to/your/credentials.json\"\n        - name: project_id\n          value: \"your-gcp-project-id\"\n        - name: crawl_interval\n          value: 30s\n        - name: gcp_flows\n          value: \"true\"\n        - name: external_mappings\n          value: \"europe-west3-your-gke-cluster@your_k8s_cluster_uid\"\n        - name: include_regions\n          value: \"your-gcp-region\"\n```\n\nGCP VPC flow logs are collected by enabling `gcp_flows` on a `gcp` data source.\n\n### AWS\n\n```yaml\n- type: aws\n  id: awstestid\n  config:\n    - name: scope_id\n      value: \"your-aws-account-id\"\n    - name: policy_config\n      value: \"true\"\n    - name: access_key_id\n      value: \"${AWS_ACCESS_KEY_ID}\"\n    - name: secret_access_key\n      value: \"${AWS_SECRET_ACCESS_KEY}\"\n    - name: crawl_interval\n      value: 30s\n```\n\n### PostgreSQL\n\n```yaml\n- type: postgres\n  id: postgres123\n  name: \"database-name\"\n  desc: \"Description of the database.\"\n  config:\n    - name: scope_id\n      value: \"your-postgres-system-identifier\"\n    - name: db_name\n      value: \"your_db_name\"\n    - name: db_host\n      value: \"your_db_host\"\n    - name: db_user\n      value: \"your_db_user\"\n    - name: db_pass\n      value: \"your_db_password\"\n    - name: ssl_mode\n      value: \"require\" # or disable\n    - name: crawl_interval\n      value: 30s\n    - name: mapping_internal_id\n      value: \"your-internal-mapping-id\"\n```\n\n### MariaDB\n\n```yaml\n- type: mariadb\n  id: \"data_source_123\"\n  config:\n    - name: scope_id\n      value: \"your-mariadb-server-uuid\"\n    - name: db_name\n      value: \"your_db_name\"\n    - name: db_host\n      value: \"your_db_host\"\n    - name: db_user\n      value: \"your_db_user\"\n    - name: db_pass\n      value: \"your_db_password\"\n    - name: crawl_interval\n      value: 30s\n```\n\n### MySQL\n\n```yaml\n- type: mysql\n  id: \"mysql-primary\"\n  config:\n    - name: scope_id\n      value: \"your-mysql-server-uuid\"\n    - name: db_name\n      value: \"your_db_name\"\n    - name: db_host\n      value: \"your_db_host\"\n    - name: db_user\n      value: \"your_db_user\"\n    - name: db_pass\n      value: \"your_db_password\"\n    - name: ssl_mode\n      value: \"disable\" # or require\n    - name: crawl_interval\n      value: 30s\n```\n\n### Kubernetes\n\n```yaml\n- type: kubernetes\n  id: \"kube_cluster_id\"\n  config:\n    - name: scope_id\n      value: \"your_k8s_cluster_uid\"\n    - name: in_cluster\n      value: \"false\"\n    - name: cluster_name\n      value: \"your_cluster_name\"\n    - name: cloud_data_source_id\n      value: \"your_cloud_data_source_id\"\n    - name: config_file\n      value: \"/path/to/your/kube/config\"\n    - name: crawl_interval\n      value: 30s\n    - name: send_secret_data\n      value: \"true\" # set to \"false\" to omit Secret data and stringData payloads\n    - name: send_configmap_data\n      value: \"true\" # set to \"false\" to omit ConfigMap data and binaryData payloads\n    - name: metrics_prometheus_host\n      value: \"http://prometheus.monitoring.svc.cluster.local:9090\"\n    - name: external_mappings\n      value: \"node-1@aws_data_source_id us-central1-a-node-2@gcp_data_source_id *my-project-id.iam.gserviceaccount.com@123456789012\"\n```\n\n### Generate Kubernetes Cluster UID\n\nThe Kubernetes internal names are scoped by `scope_id` (not by data source id). You should use the cluster UID as the `scope_id`, which you can retrieve from the `kube-system` namespace:\n\n```bash\nkubectl get namespace kube-system -o jsonpath='{.metadata.uid}'\n```\n\nUse this UID as the `scope_id` in:\n\n- the Kubernetes data source configuration\n- mappings that need to reference Kubernetes internal names (for example, GCP flow logs `external_mappings`)\n\n### AWS Flow Logs\n\n```yaml\n- type: aws_flow_logs\n  name: \"flowlog-name\"\n  desc: \"Description of the flow logs.\"\n  config:\n    - name: scope_id\n      value: \"your-aws-account-id\"\n    - name: log_format\n      value: \"all\"\n    - name: log_type\n      value: \"S3\"\n    - name: account_id\n      value: \"your_aws_account_id\"\n    - name: bucket_name\n      value: \"your_s3_bucket_name\"\n    - name: region\n      value: \"your_aws_region\"\n    - name: access_key_id\n      value: \"${AWS_ACCESS_KEY_ID}\"\n    - name: secret_access_key\n      value: \"${AWS_SECRET_ACCESS_KEY}\"\n    - name: crawl_interval\n      value: 30s\n```\n\n### MongoDB\n\n```yaml\n- type: mongodb\n  name: \"mongo-instance-name\"\n  desc: \"Description of the mongo instance.\"\n  config:\n    - name: scope_id\n      value: \"your-replica-set-id\"\n    - name: db_name\n      value: \"*\" # or a specific database name\n    - name: db_host\n      value: \"your_mongo_host\"\n    - name: db_user\n      value: \"your_mongo_user\"\n    - name: db_pass\n      value: \"your_mongo_password\"\n    - name: crawl_interval\n      value: 30s\n```\n\n## Identity Matrix\n\n`coordimap-agent` uses an internal asset identity model that should be scoped by the upstream system identity, not by the connector `data_source_id`. The `data_source_id` identifies the crawl configuration, while the `scope_id` identifies the real ownership boundary the assets belong to.\n\n| Data source     | Recommended `scope_id`    | Where it comes from                             | Typical asset path                                                                                                     |\n| --------------- | ------------------------- | ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |\n| Kubernetes      | `cluster_uid`             | Kubernetes API cluster identity                 | `namespace/type/name`, `type/name` for cluster-wide assets                                                             |\n| GCP             | `project_number`          | GCP project metadata / API                      | `zone/vm_instance/name`, `region/bucket/name`, `region/sql/name`                                                       |\n| AWS             | `account_id`              | AWS STS caller identity                         | `region/ec2/instance-id`, `region/rds/db-arn`, `global/s3/bucket-name`                                                 |\n| PostgreSQL      | `system_identifier`       | PostgreSQL server or cluster identity           | `database/schema/table`, `database/schema/index`                                                                       |\n| MySQL / MariaDB | `server_uuid`             | MySQL or MariaDB server identity                | `database/schema/table`, `database/schema/index`                                                                       |\n| MongoDB         | replica set or cluster ID | replica set or cluster identity                 | `database/collection`, `database/collection/index`                                                                     |\n| OTel            | reuse upstream `scope_id` | OTel resource attributes from the source system | `coordimap.scope_id`, `k8s.cluster.uid`, `cloud.account.id`, `cloud.project.number`, `db.postgresql.system_identifier` |\n\n## How To Find Your `scope_id`\n\nYou must provide a `scope_id` for each data source in your configuration. This keeps internal asset IDs stable across configurations and data source recreation. Use the following guidelines to find the appropriate `scope_id` for your data sources.\n\n### Kubernetes\n\nUse the cluster UID:\n\n```bash\nkubectl get namespace kube-system -o jsonpath='{.metadata.uid}'\n```\n\nRecommended `scope_id`: `cluster_uid`\n\nNotes:\n\n- Works for both self-hosted and managed Kubernetes clusters.\n- This is the preferred scope for Kubernetes internal names.\n- When linking Kubernetes service accounts to GCP service accounts for Workload Identity,\n  use `external_mappings` entries that match the full GSA email suffix and map it to the\n  GCP `scope_id` (project number), for example:\n\n```yaml\n- name: external_mappings\n  value: \"*my-project-id.iam.gserviceaccount.com@123456789012\"\n```\n\n- In that mapping:\n  - `my-project-id` is the GCP project ID used in the GSA email address\n  - `123456789012` is the GCP project number, which is the recommended GCP `scope_id`\n\n### GCP\n\nUse the project number:\n\n```bash\ngcloud projects describe PROJECT_ID --format='value(projectNumber)'\n```\n\nYou can also get the project ID if needed:\n\n```bash\ngcloud projects describe PROJECT_ID --format='value(projectId)'\n```\n\nRecommended `scope_id`: `project_number`\n\n### AWS\n\nUse the AWS account ID:\n\n```bash\naws sts get-caller-identity --query Account --output text\n```\n\nRecommended `scope_id`: `account_id`\n\n### PostgreSQL\n\nUse the PostgreSQL system identifier:\n\n```sql\nSELECT system_identifier FROM pg_control_system();\n```\n\nRecommended `scope_id`: `system_identifier`\n\nNotes:\n\n- This is the preferred scope for self-hosted PostgreSQL.\n- It identifies the PostgreSQL server or cluster lineage.\n- If `pg_control_system()` is unavailable, the value can also be retrieved with PostgreSQL system tooling such as `pg_controldata`.\n\n### MySQL / MariaDB\n\nUse the server UUID:\n\n```sql\nSHOW VARIABLES LIKE 'server_uuid';\n```\n\nRecommended `scope_id`: `server_uuid`\n\nNotes:\n\n- This is the preferred scope for self-hosted MySQL and MariaDB instances.\n- If `server_uuid` is not available in a specific deployment, use an explicitly configured stable `scope_id`.\n\n### MongoDB\n\nUse a replica set or cluster identity when available.\n\nUseful commands:\n\n```javascript\nrs.conf();\nrs.status();\n```\n\nRecommended `scope_id`: replica set / cluster ID\n\nNotes:\n\n- For replica set deployments, prefer a true replica set or cluster identifier if your deployment exposes one.\n- If no immutable ID is available, the replica set name is an acceptable but weaker fallback.\n- For standalone MongoDB instances, use an explicitly configured stable `scope_id`.\n\n### OTel\n\nOTel should reuse the upstream `scope_id` instead of inventing a separate identity.\n\nRecommended resource attributes include:\n\n- `coordimap.scope_id`\n- `k8s.cluster.uid`\n- `cloud.account.id`\n- `cloud.project.number`\n- `db.postgresql.system_identifier`\n\nNotes:\n\n- OTel should emit the same scope used by the infrastructure crawler.\n- This allows the backend to generate matching internal IDs and create relationships reliably.\n\n## Metric Trigger Rules\n\nThe agent can evaluate metric rules and send metric-trigger elements to the backend. These are sent as regular elements with type `coordimap.metric_trigger` and include all matching internal IDs in the element payload.\n\nMetric rules are configured inside each datasource block (`data_sources[*].metric_rules`).\nCurrently metric rules are supported only for datasource types:\n\n- `kubernetes`\n- `gcp`\n\n### Supported Providers\n\n- `prometheus` (for Kubernetes data sources)\n- `gcp_monitoring` (for GCP data sources)\n\n### Config Format\n\nMetric rules are configured in YAML under `data_sources[*].metric_rules`.\n\nEach rule must set `mode` to either:\n\n- `custom` for user-defined provider queries\n- `predefined` for built-in templates\n\nExample:\n\n```yaml\ncoordimap:\n  api_key: ${COORDIMAP_API_KEY}\n  data_sources:\n    - type: kubernetes\n      id: kube-prod\n      config:\n        - name: scope_id\n          value: your-cluster-uid\n        - name: config_file\n          value: /path/to/your/kube/config\n        - name: metrics_prometheus_host\n          value: http://prometheus.monitoring.svc.cluster.local:9090\n      metric_rules:\n        - id: k8s-high-5xx\n          name: Kubernetes Service High 5xx\n          provider: prometheus\n          mode: custom\n          custom:\n            query: sum(rate(istio_requests_total{response_code=~\"5..\"}[5m])) by (destination_workload_namespace, destination_canonical_service)\n          lookback: 5m\n          threshold:\n            operator: \"\u003e\"\n            value: 1\n          target:\n            resolver: kubernetes_service\n            namespace_label: destination_workload_namespace\n            name_label: destination_canonical_service\n\n    - type: gcp\n      id: gcp-prod\n      config:\n        - name: scope_id\n          value: \"123456789012\"\n        - name: project_id\n          value: your-project-id\n      metric_rules:\n        - id: cloudsql-high-cpu\n          name: CloudSQL High CPU\n          provider: gcp_monitoring\n          mode: predefined\n          predefined:\n            name: cloudsql_high_cpu\n            params:\n              lookback: 5m\n              threshold: 0.8\n```\n\nKubernetes metric rules require either `metrics_prometheus_host` or `prometheus_host` in the same Kubernetes data source configuration.\n\nCommon fields:\n\n- `id`\n- `name`\n- `provider`\n- `lookback`\n- `threshold.operator` and `threshold.value`\n- `target.resolver`\n\nPrometheus-specific:\n\n- `custom.query`\n\nGCP Monitoring-specific:\n\n- `custom.filter` or `custom.metric_type`\n- optional `alignment_period`, `per_series_aligner`, `cross_series_reducer`, `group_by_fields`\n\n### Predefined Rules\n\nCurrent predefined templates:\n\n- provider `prometheus`\n  - `kubernetes_service_high_5xx`\n  - `kubernetes_deployment_high_5xx`\n  - `kubernetes_service_high_latency`\n  - `kubernetes_pod_high_restart_rate`\n  - `kubernetes_pod_crashloop_or_imagepull_error`\n  - `kubernetes_pod_not_ready`\n  - `kubernetes_deployment_unavailable_replicas`\n  - `kubernetes_deployment_availability_gap`\n  - `kubernetes_pod_high_cpu_usage`\n  - `kubernetes_pod_high_memory_workingset`\n  - `kubernetes_pod_cpu_throttling_high`\n  - `kubernetes_pod_oom_events`\n  - `kubernetes_pod_unschedulable`\n  - `kubernetes_pvc_low_free_space`\n  - `kubernetes_pvc_free_space_burn_rate`\n  - `kubernetes_inode_low_free`\n  - `kubernetes_statefulset_pvc_low_free_space`\n- provider `gcp_monitoring`\n  - `cloudsql_high_cpu`\n  - `cloudsql_high_connections`\n  - `vm_high_cpu`\n\nPredefined params are template-specific. For example:\n\n- `kubernetes_service_high_5xx`: `window`, `threshold`\n- `kubernetes_deployment_high_5xx`: `window`, `threshold`\n- `kubernetes_service_high_latency`: `window`, `quantile`, `threshold`\n- `kubernetes_pod_high_restart_rate`: `window`, `threshold`\n- `kubernetes_pod_crashloop_or_imagepull_error`: `lookback`, `reason_regex`\n- `kubernetes_pod_not_ready`: `lookback`\n- `kubernetes_deployment_unavailable_replicas`: `threshold`\n- `kubernetes_deployment_availability_gap`: `threshold`\n- `kubernetes_pod_high_cpu_usage`: `window`, `threshold`\n- `kubernetes_pod_high_memory_workingset`: `threshold`\n- `kubernetes_pod_cpu_throttling_high`: `window`, `threshold`\n- `kubernetes_pod_oom_events`: `window`\n- `kubernetes_pod_unschedulable`: `lookback`\n- `kubernetes_pvc_low_free_space`: `threshold`, `namespace`, `pvc_regex`\n- `kubernetes_pvc_free_space_burn_rate`: `threshold`, `window`, `horizon_seconds`, `namespace`, `pvc_regex`\n- `kubernetes_inode_low_free`: `threshold`, `namespace`, `pvc_regex`\n- `kubernetes_statefulset_pvc_low_free_space`: `threshold`, `namespace`, `statefulset`, `volume_claim_prefix`\n- `cloudsql_high_cpu`: `lookback`, `threshold`\n- `cloudsql_high_connections`: `lookback`, `threshold`, `metric_type`, `alignment_period`, `per_series_aligner`\n- `vm_high_cpu`: `lookback`, `threshold`, `alignment_period`, `per_series_aligner`\n\n### Target Resolvers\n\n- Kubernetes: `kubernetes_service`, `kubernetes_deployment`, `kubernetes_pod`, `kubernetes_pvc`, `kubernetes_statefulset`\n- GCP: `gcp_cloudsql`, `gcp_vm_instance`\n- Cross data source: `external_mapping`\n\nFor `external_mapping`, if no `external_mappings` entry matches, the target is ignored and nothing is sent for that series.\n\n## Contribute\n\nIf you would like to contribute to `coordimap-agent`, please fork the repository and submit a pull request. We welcome all contributions!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoordimap%2Fagent","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcoordimap%2Fagent","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoordimap%2Fagent/lists"}