# Agentic Debugging
Source: https://docs.drdroid.io/agent/agentic-debugging
Agentic Debugging allows you to delegate debugging tasks to an AI agent that uses contextual data, integrated tools, and reasoning to analyze system symptoms, identify likely root causes and recommend next steps for remediation.
## 🛠️ How It Works
DroidAgent collects evidence from your system and correlates them to come up with the likely root cause behind the issue and how it can be fixed. Here's how it works:
1. Collects Context: The agent collects context across multiple places, including but not limited to:
* Data Sources: Give the platform access to your telemetry data sources & map them to your services so it knows where to query metrics, logs, deployments or any other information for which service.
* Alerts: Access to alerts enables agent to decide when to investigate.
* Runbooks: Provide an additional set of prompts / wiki so that the agent can leverage it during investigations. Runbooks are not required for standard/common scenarios but only for situations where user already has an opinion.
2. Correlates & iterates:
* After every evidence collected, it tries to connect it back to the hypothesis it created and evaluates if it's getting any closer to the issue resolution or root cause identification.
Note: Data Sources are the core essentials so we would recommend not skipping them. With no integrations, the agent will provide general debugging guidance—questions to ask, commands to run, and logs to inspect manually.
## Data Sources & Integrations
Our platform supports integration with 50+ tools for evidence collection & investigation -- from your logs in ELK to dashboards in Grafana. You can find the full list [here](/integrations/integrations).
Each data source is converted into an MCP server and made accessible to the agent for leveraging during investigation.
## 📋 Example
For example, if a Kubernetes pod is CrashLooping, and you have observability integrations configured:
* The agent may fetch pod logs, check deployment configurations, and diagnose the root cause (e.g., OOMKill, bad image).
* Basis the pod's name, it might also look for a service of similar name, and once it finds it, it can decide to further investigate data sources of the service (like the dashboards & metrics associated with the service or the deployments history).
# Alert Details
Source: https://docs.drdroid.io/agent/alert-details
The Alert Details Page is accessed when a user clicks on a specific alert from the Alert Inbox. This page provides a consolidated view of the alert, with options to investigate, reinvestigate, and analyze detailed diagnostic data.
## 🔍 What You Can Do on This Page
### 1. View Investigation Summary
* At the top of the page, users see the results of the most recent investigation.
* This includes:
* Tasks that were automatically or manually performed.
* Agent insights and hypotheses.
* Key metrics or logs analyzed during the process.
### 2. Reinvestigate (Start Over with Better Context)
* If the user finds the investigation insufficient or inaccurate, they can trigger a Reinvestigation.
* **Reinvestigation**:
* Re-runs the analysis using the same or improved alert data.
* Users are encouraged to add relevant integrations (e.g., logs, metrics, infra APIs) to enrich context and improve results.
* Can incorporate updated signals or environment state.
> 💡 **Tip**: Reinvestigation is most powerful when paired with comprehensive integration coverage.
### 3. Continue Investigation (Pick Up from Previous Steps)
* Users can choose to Continue Investigation if the existing investigation has helpful partial context.
* **Continuing** allows:
* Extending the diagnostic trail from the last agent action.
* Adding custom tasks or questions for deeper insights.
* Exploring the reasoning chain of the agent so far.
### 4. Task Execution View
* Each investigation consists of **Tasks** — discrete debugging or remediation steps (e.g., querying logs, checking CPU load).
* For each task, users can view:
* Command/query executed.
* Source of data (integration used).
* Agent-generated interpretation or anomaly detection.
* Tasks are grouped and timestamped, helping users track progress.
### 5. Data & Visualization Panels
* Investigation tasks often return structured data (tables, charts, timelines).
* Users can interact with this data directly in the Alert Details Page:
* View logs, metrics, infra states.
* Expand/inspect anomalies.
* Correlate multiple datasets for better root cause understanding.
***
## 🧠 Behind the Scenes
* All investigations (initial, continued, or reinvestigations) are driven by DrDroid's agentic reasoning engine.
* The agent uses context from the alert metadata (e.g., datasource, affected service, triggering channel) to form hypotheses and take diagnostic steps.
* Users can provide feedback to improve agent understanding and future investigations.
# Common FAQs
Source: https://docs.drdroid.io/agent/common-faqs
Frequently asked questions about DroidAgent and its capabilities
This page contains frequently asked questions about DroidAgent and its capabilities. Find answers to common queries about investigations, security, and workflow integration.
## How DroidAgent Works
DroidAgent builds company-level intelligence by gathering context from multiple sources during investigations:
The agent combines real-time context (alerts, issues, ongoing investigations), integration-level context from tools like Coralogix, Grafana, and Kubernetes, plus uploaded documents and runbooks to conduct thorough investigations.
## Investigations
DroidAgent has been given context of patterns in your logs. Along with that, it leverages the information of ongoing alerts, any runbooks or documents and its innate knowledge of error debugging and monitoring to try different queries.
It can try multiple different queries in case it doesn't find success with one of them.
Based on the alert, it creates a plan of potential root causes and tries to find evidence to validate/disvalidate each hypothesis.
To create the plan, it uses a combination of real-time context (what alerts are going on), what dashboards/integrations exist in context of that alert/service and what documents are accessible.
The agent is using SOTA models with deep understanding of modern day cloud, infrastructure, engineering design principles and SRE practices. Using the combination of this knowledge, and the custom context provided to it, it's able to decide the commands to run on a cluster.
The agent has been trained to understand the relevance of different time windows in context of an alert (e.g. it can decide to get metrics for a timewindow just before the alert, or for the same timewindow in a previous day/week setup or at the current time to check if the issue is still ongoing).
It prioritizes alert\_time when it finds context in some document or alert itself.
## Data & Agent Security
DroidAgent implements multiple layers of security to protect your data and infrastructure:
The architecture shows how the Agent Engine and Execution Engine work together with safety checks, RBAC, PII scrubbing, and secure key management.
No. For all the integrations, the agent does not have access to keys -- it only has access to request specific API executions and the execution engine stores the keys securely in a database.
Additionally, there are guardrails in place to avoid agent from running unauthorised state-change or critical commands.
The agent does NOT have access to execute write commands by default. It can be given the access to execute commands with appropriate roll-backs and permissions in place. This can be done run-time or pre-configured based on specific situations as per the team's context.
DroidAgent implements multiple layers of security including RBAC and access management, PII scrubbing, safety checks, and built-in guardrails to prevent unauthorized operations. The execution engine can be deployed within your VPC for additional security.
## Workflow Integration
DroidAgent seamlessly integrates into your existing workflows without requiring changes to your current setup:
Key benefits include no metrics or logging tool changes, auto-sync with ticketing and on-call tools, RBAC integration, and lightweight configuration.
No metrics or logging tool changes required. DroidAgent auto-syncs with your ticketing and on-call tools, has RBAC and access management integration, and is lightweight and quick to configure.
DroidAgent integrates with Grafana, Coralogix, New Relic, Datadog, PagerDuty, Opsgenie, Slack, Jira, Kubernetes, cloud platforms (AWS, Azure, GCP), and databases.
DroidAgent is lightweight and quick to configure. It works with your existing monitoring infrastructure, auto-discovers your tools, and doesn't require downtime during installation.
You can upload custom runbooks, configure specific integrations, customize alert routing, and define investigation scope and permissions.
# Product Updates
Source: https://docs.drdroid.io/changelog
New updates and improvements
## Enhanced Alert Investigation Panel
### 🧠 Hypothesis Visibility:
Get instant visibility into the potential root cause hypotheses auto-generated by the DrDroid AI Agent for any alert — right in the expanded side panel.
### 🔍 Tool Usage Transparency:
Whenever DrDroid accesses your integrated tools (e.g., Datadog, Prometheus) for data validation, it's now clearly displayed to you along with the relevant steps performed.
## Context Engine:
* Service Catalog Auto-Mapping: Automatically pulls data from APMs, Kubernetes clusters, and CI/CD pipelines to build your service inventory.
* Infrastructure Catalog Integration: Syncs with your cloud provider to generate a real-time infrastructure map.
* Tooling Detection: Infers observability and alerting tools from incoming alert streams — no manual config required.
## Onboarding Upgrades
### New Signup Flow & Org Setup
Better onboarding, 1-click Slack integration, and responsive experience for new users.
### Categorisation on Integrations Page
Integrations are now categorized for better discoverability and can be installed more seamlessly.
## Smarter Agent Investigations with Adaptive Time Ranges
The DrDroid Agent is now more intelligent—automatically selecting the most relevant time duration for investigations based on context.
This ensures investigations are more focused, and reduce noise from irrelevant data.
✅ Improves Across:
* AWS
* Azure
* GCP
* Datadog
* New Relic
* Signoz
## VPC agent Upgrades
## 🚀 Updates to the VPC Agent
Context: DrDroid's VPC agent enables you to securely integrate tools inside your VPC to DrDroid cloud — no changes to security groups or ingress policies required.
With the latest update to the [drd-vpc-agent](https://github.com/DrDroidLab/drd-vpc-agent), we're making deployments faster and smarter.
## ⚡ One Command Setup for Docker & Helm
You can now install or update the VPC Agent using a **single command**, directly from your machine.
**For Docker:**
```shell theme={null}
./deploy_docker.sh
```
**For Helm:**
```shell theme={null}
./deploy_k8s.sh
```
*No more manual steps. Just plug in your API token from the platform and go.*
## 🛠️ Helm-Specific Enhancements
### ✅ Automatic Kubernetes Integration
When installed via Helm, the agent automatically registers a **Kubernetes connector** for the cluster it's deployed in.
* The agent gains **read-only access** to the cluster. It can start **fetching cluster metrics** immediately—no manual setup needed.
### 🔄 Daily Auto-Upgrades
The VPC Agent now supports **auto-updates of the agent image every day at 00:00 UTC**.
* Default deployment namespace: `drdroid`
* To customize, simply update the `namespace` in `helm/deploy_helm.sh`
## Alerts Inbox v0 – Initial Release
Prefer watching? There's a demo video at the end.
### Unified Alert View
All your alerts from multiple sources are now visible in one consolidated screen — searchable and filterable by time, channel, or tool.
### Auto Grouping of repeated alerts
Recurring alerts with the same title are auto-grouped together to reduce noise and make it easier to triage common issues.
### Get AI-generated remediation
Instantly run a debug flow on any alert and get pinpointed remediation suggestions — powered by Doctor Droid's AI engine.
### Demo Video:
# Data Types
Source: https://docs.drdroid.io/getting-started/concepts
This document explains the data types present in Dr Droid which can be configured to setup the agent.
### [Alert Definitions](https://aiops.drdroid.io/context/alert-configs)
Every alert streaming into DrDroid is first matched with an alert definition. This can include source, text matching against the alert message.
Several features can be enabled against an alert definition like auto investigation, escalation, runbooks etc.
### [Runbooks](https://aiops.drdroid.io/context/runbooks)
Runbooks are a collection of steps that can be executed. Agent searches for runbooks relevant to the user prompt / alert or chooses to execute if one is linked to the alert definition.
Runbooks can be linked to alert definitions or can be executed manually. They could also include scripts that can be executed to perform a task.
### [Teams](https://aiops.drdroid.io/context/team)
Teams are used to group users and link to services. Alerts linked to a service are assigned to the team linked to the service.
The users within a team can go in rotation to be on-call and receive notifications over slack, sms or phone.
### [Services](https://aiops.drdroid.io/context/services)
Every alert is linked to a service if possible. Service linking helps in finding the right owner of an alert. Service is auto detected from the alert message or can be manually linked.
A global list of services is assessed from the metadata extracted from connected sources. It can be manually added as well.
A service's context can be expanded by linking github repo and telemetry destinations, so alerts for that service can be investigated with rich context.
### Assets
Assets are fetched from connected sources. This could be services, dashboards, log groups, component names etc and helps in creating a knowledge graph and overview for the agent to use to identify right query parameters.
### [Guidelines & Overview](https://aiops.drdroid.io/context/knowledge-graph-v2)
Agent generates an overview of the organisation's architecture that Droid Agent pre-creates for reference later on.
User can also give custom guidelines to the agent to guide it in its investigation. They become part of the system prompt for the agent.
* Overview: Agent added overview of the organisation's architecture that Droid Agent pre-creates for reference later on.
* Troubleshooting: User added hints for debugging scenarios, used in every investigation
* Classification: User added hints on how to group alerts into issues
* Escalation: User added hints on how to escalate issues to owners / teams
### [Memory](https://aiops.drdroid.io/context/manage-memory)
Droid Agent keeps accumulating daily memory of issues and conversations linked to them to re-use them in future investigations.
### Code Repository Context
If given code access, Droid Agent analyses the code to create context docs for itself so when an alert is triggered, it can identify the repo + service quickly and understand how and what to query for root causing.
### [DrDroid MCP Server](/getting-started/drdroid-mcp-server)
DrDroid exposes an MCP (Model Context Protocol) server that lets you connect AI tools like Claude Desktop, Cursor, and Windsurf to your DrDroid account. The MCP server can be used to read and update data in your account — search alerts, browse service catalogs, manage runbooks, and more — directly from your AI tools.
# Deployment Models
Source: https://docs.drdroid.io/getting-started/deployment-models
| | Cloud + VPC Agent | On-Premise |
| ---------------- | ------------------------------------------------------------------------------------------ | --------------------------------- |
| **Best for** | Companies with some/all observability tools behind VPC | Regulated industries |
| **Data storage** | Securely saved on DrDroid cloud or within the VPC in a file (region option available soon) | In your cloud |
| **Compute** | DrDroid Cloud | In your cloud |
| **Maintenance** | Low to mid | Dedicated maintenance & support |
| **Setup time** | 3-7 days | 2-4 weeks |
| **Plan** | Teams+ | Enterprise only |
| **LLM** | DrDroid managed LLM cost and API keys | DrDroid / client managed API keys |
| **PII handling** | PII redaction before sending to LLM (Business+ plans only) | PII redaction by default |
# DrDroid MCP Server
Source: https://docs.drdroid.io/getting-started/drdroid-mcp-server
Connect your AI tools to DrDroid via the Model Context Protocol
DrDroid exposes an MCP (Model Context Protocol) server that lets you connect AI tools like Claude Desktop, Cursor, Windsurf, and other MCP-compatible clients directly to your DrDroid account.
## Quick Start
### 1. Get your API Key
Go to **Settings > Proxy Tokens, API Keys & MCP** in your DrDroid dashboard and create an API key.
### 2. Configure your MCP client
Add DrDroid as an MCP server in your client's configuration:
```json theme={null}
{
"mcpServers": {
"drdroid": {
"url": "https://aiops.drdroid.io/mcp/",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
```
**Claude Desktop** (`~/Library/Application Support/Claude/claude_desktop_config.json`):
```json theme={null}
{
"mcpServers": {
"drdroid": {
"url": "https://aiops.drdroid.io/mcp/",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
```
**Cursor** (Settings > MCP Servers > Add):
* URL: `https://aiops.drdroid.io/mcp/`
* Authentication: Bearer token with your API key
### 3. Start using it
Once connected, you can ask your AI tool things like:
* "Show me critical alerts from the last 24 hours"
* "What services are in my catalog?"
* "Find dashboards related to redis"
* "Create a runbook for handling database failovers"
* "List my recent investigations"
* "Show me all alert definitions and their sample alerts"
* "Create an alert definition for Sentry timeout errors"
* "List my auto-investigation rules"
* "Create an auto-investigation rule for critical Sentry alerts"
## Available Tools
### Read Tools
| Tool | Description | Key Parameters |
| ------------------------- | -------------------------------------------------------------------------------------- | ------------------------------------------------------------ |
| **search\_alerts** | Search alerts across all tools and channels with severity, source, and time breakdowns | `query`, `severity`, `sources`, `tags`, `duration` |
| **search\_resources** | Search dashboards, services, infra across all connected platforms | `query`, `doc_types`, `platforms`, `category` |
| **get\_service\_catalog** | List services with owners, dependencies, and metadata | `search`, `limit` |
| **list\_investigations** | View recent AI investigations with status | `search`, `limit`, `offset` |
| **list\_runbooks** | List runbooks and wiki documents | `search`, `source`, `include_skills`, `include_repo_context` |
### Write Tools
| Tool | Description | Key Parameters |
| ------------------- | ------------------------------------------ | ----------------------------------------------------------------------------------------- |
| **update\_service** | Update a service catalog entry | `service_id`, `service_name`, `type`, `upstream`, `downstream`, `notes`, `repository_url` |
| **create\_runbook** | Create a new runbook with markdown content | `title`, `content`, `when_to_use` |
| **update\_runbook** | Update or archive an existing runbook | `runbook_id`, `title`, `content`, `when_to_use`, `active` |
### Configuration Tools (read-only)
| Tool | Description | Key Parameters |
| ------------------------------------ | ------------------------------------------------------------------------ | -------------------------------------------------------- |
| **view\_alert\_definitions** | List/get alert definitions with sample alerts and DSL setup instructions | `action` (list/get), `definition_id`, `search`, `source` |
| **view\_auto\_investigation\_rules** | List/get auto-investigation rules with filter summaries | `action` (list/get), `rule_id`, `enabled_only` |
### Configuration Tools (write)
| Tool | Description | Key Parameters |
| -------------------------------------- | ------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| **manage\_alert\_definitions** | Create, update, or delete alert definitions | `action` (create/update/delete), `definition_id`, `name`, `definition_rule`, `priority`, `tags` |
| **manage\_auto\_investigation\_rules** | Create or update auto-investigation rules | `action` (create/update), `rule_id`, `name`, `model_key`, `filters`, `enabled` |
## Tool Details
### search\_alerts
Search and analyze alerts from your connected monitoring tools.
```
Parameters:
query - Text search across alert titles and content
severity - Filter by severity (comma-separated: critical,high,medium,low)
sources - Filter by alert source (comma-separated)
tags - Filter by tags (comma-separated)
duration - Time range shorthand: "24h", "7d", "4w"
start_time - ISO timestamp for custom range start
end_time - ISO timestamp for custom range end
limit - Max results (default: 50, max: 200)
```
Returns matching alerts with `severity_counts`, `source_counts`, `channel_counts`, and `hourly_counts` breakdowns. Use this for alert insights and trend analysis.
### search\_resources
Search across all indexed resources from your connected platforms.
```
Parameters:
query - Text search query
doc_types - Comma-separated: dashboard, panel, service, infra_component,
runbook, repo_context, memory, communication, alert_rule,
mcp_asset, metric
platforms - Comma-separated: grafana, datadog, kubernetes, newrelic, sentry, etc.
category - Filter infra components by category (e.g. "compute")
limit - Max results (default: 20, max: 100)
```
### get\_service\_catalog
List all services in your DrDroid service catalog.
```
Parameters:
search - Filter services by name
limit - Max results (default: 100, max: 500)
```
Returns services with `type`, `upstream`/`downstream` dependencies, `notes`, `repository_url`, and `created_by`.
### update\_service
Update fields on an existing service catalog entry.
```
Parameters:
service_id - (required) ID of the service to update
service_name - New service name
type - Service type: service, database, queue, cache, external, etc.
upstream - List of upstream service names
downstream - List of downstream service names
notes - Free-text notes
repository_url - Repository URL
```
### list\_runbooks
List runbooks and wiki documents. By default excludes internal skills and repo context docs.
```
Parameters:
search - Filter by title/path
source - Filter by source: confluence_cloud, bitbucket, mcp, etc.
include_skills - Include agent skill docs (default: false)
include_repo_context - Include repo context docs (default: false)
limit - Max results (default: 20, max: 100)
```
### create\_runbook
Create a new runbook/wiki document.
```
Parameters:
title - (required) Runbook title
content - (required) Markdown content
when_to_use - Description of when this runbook should be used
```
### update\_runbook
Update or archive an existing runbook.
```
Parameters:
runbook_id - (required) ID of the runbook to update
title - New title
content - New markdown content
when_to_use - Updated usage description
active - Set to false to archive the runbook
```
### view\_alert\_definitions
View alert definitions — the grouping rules that classify incoming alerts into named categories.
```
Parameters:
action - (required) "list" or "get"
definition_id - Required for get
search - Filter by name (list only)
source - Filter by source (list only)
sample_alerts_limit - Number of sample alerts to return (get only, default: 5)
```
The `get` action returns sample recent alerts that matched the definition, plus setup instructions.
### manage\_alert\_definitions
Create, update, or delete alert definitions.
```
Parameters:
action - (required) "create", "update", or "delete"
definition_id - Required for update/delete
name - Definition name (required for create)
definition_rule - DSL rule (required for create). Must start with alert.source=""
priority - 0=Highest, 1=Default, -1=Lowest (catch-all)
runbook_id - Attach a runbook for investigation context
notes - Free-text notes
tags - List of key:value strings (e.g. ["team:backend"])
```
**DSL Rule Syntax** (for `definition_rule`):
```
alert.source="sentry" and alert.text contains "timeout"
alert.source="datadog" and alert.title contains "CPU"
alert.source="pagerduty" and alert.labels.env="production"
alert.source="sentry" and alert.labels.keys contains "service"
alert.source="slack" and alert.channel_name="#alerts-prod"
```
### view\_auto\_investigation\_rules
View auto-investigation rules — controls which alerts automatically trigger AI investigations.
```
Parameters:
action - (required) "list" or "get"
rule_id - Required for get (UUID string)
enabled_only - Only return enabled rules (list only)
```
### manage\_auto\_investigation\_rules
Create or update auto-investigation rules.
```
Parameters:
action - (required) "create" or "update"
rule_id - Required for update (UUID string)
name - Rule name (required for create)
model_key - AI model: "sonnet-4.6" or "kimi-2.5" (required for create)
filters - JSON string of filter array (see syntax below)
description - Optional description
runbook_id - Attach a runbook for investigation context
max_triggers_per_hour - Per-rule rate limit
enabled - Enable/disable the rule
```
**Filter Syntax** (JSON array):
```json theme={null}
[
{"field": "source", "operator": "equals", "value": "sentry"},
{"field": "severity", "operator": "in", "values": ["critical", "high"]},
{"field": "alert_definition", "operator": "equals", "value": "42"},
{"field": "label_key", "operator": "contains", "value": "env"}
]
```
Available fields: `alert_definition`, `service`, `source`, `severity`, `label_key`, `label_value`, `tags`.
Available operators: `equals`, `not equals`, `in`, `contains`, `exists`, `not exists`, `is null`, `is not null`.
Note: filters are immutable after creation. To change filters, create a new rule.
## Authentication
All requests require a valid API key passed as a Bearer token. API keys are scoped to your DrDroid account — each key can only access data belonging to its associated account.
Generate API keys from **Settings > Proxy Tokens, API Keys & MCP** in your DrDroid dashboard.
## Transport
The MCP server uses **Streamable HTTP** transport (the current MCP standard), operating in stateless mode. Each request is independent — no session management required.
**Endpoint:** `https://aiops.drdroid.io/mcp/`
# Introduction
Source: https://docs.drdroid.io/getting-started/introduction
DrDroid is an AI SRE agent that investigates production alerts on your behalf. It connects to your observability stack, alert channels, and infrastructure, then runs agentic debugging to find likely root causes and suggest next steps.
## What DrDroid does
When an alert fires, DroidAgent pulls context from your connected tools (metrics, logs, deployments, runbooks, and more), correlates evidence, and works through hypotheses until it has a concrete diagnosis or a clear set of checks for your team.
You can run investigations from the [dashboard](https://aiops.drdroid.io), from Slack, or via the [DrDroid MCP server](/getting-started/drdroid-mcp-server) in tools like Cursor and Claude Desktop.
## Get started
Set up DrDroid and run your first agentic investigation in 15 minutes.
Route alerts via webhooks or connect your Slack channels.
50+ integrations — Grafana, Datadog, AWS, Kubernetes, and more.
Run investigations, write runbooks, and debug from Slack or the dashboard.
## Need help?
* Email us at [support@drdroid.io](mailto:support@drdroid.io)
* Join our [Discord](https://discord.gg/AQ3tusPtZn) server.
# Quickstart
Source: https://docs.drdroid.io/getting-started/quickstart
This guide will help you set up DrDroid and start investigating your alerts using AI within 15 minutes.
Note: This guide assumes you have already signed up on the [aiops](https://aiops.drdroid.io) platform.
### Step 1 - Setup your Alert stream
* Use Slack integration to add our app to your channels where you get alerts or send them to our webhook
* Once setup, you should be able to see them coming in on the [Alerts Page](https://aiops.drdroid.io/alerts).
* You should also see them being grouped into Issues based on definitions, source and relevance.
### Step 2 - Add your data sources
* Add integrations to your APM, Logs & Dashboarding tools. These could be the same tool or different.
* Add our Agent to your kubernetes cluster to allow first level cluster resources querying. [Here](https://github.com/DrDroidLab/drd-vpc-agent) you can find detailed instructions for installation.
* Add your code repository access. We support Github and Bitbucket currently. For advanced users, this integration allows for pull requests to be raised by our AI agent for fixing code related issues.
[Here](/integrations/integrations) you can find relevant documentation for different tools you want to add.
### Step 3 - Prepare the context for Agent
* Go to [Manage Agent](https://aiops.drdroid.io/agent-profiles) and build the context by clicking on "Train Agent".
* Want to see the context that agent has built? Request [knowledge graph](https://aiops.drdroid.io/context/knowledge-graph) generation from the Knowledge Graph v2 page.
### Step 4 - Run your investigations
* You can directly talk to the DroidAgent from the top menu bar and discuss alerts and issues from your system.
* Click on 'Run Investigation' button against an Issue and see the agent in action when it queries your data sources and tries to find root cause.
## Need Help?
* Email us at [support@drdroid.io](mailto:support@drdroid.io)
* Join our [Discord](https://discord.gg/AQ3tusPtZn) server.
# Self-Hosted Integrations
Source: https://docs.drdroid.io/getting-started/self-hosted
DrDroid supports integration to data sources that are behind your VPC.
The readme page of our [proxy service](https://github.com/DrDroidLab/drd-vpc-agent) on Github is the most accurate & updated source.
### Doctor Droid Proxy Service: Just-In-Time Data Access
Doctor Droid's proxy agent enables you to connect DrDroid with your k8s cluster and any other data source integrations within your VPC.
For example, while investigating some issues, it might be required to run kubectl commands or data fetching query in mongoDB instance that might be within your VPC. Using the proxy agent enables the Doctor Droid platform to query commands / fetch data during an investigation.
The Agent runs inside your VPC and acts as a reverse proxy to connect with your metric sources and send
metrics and related data to doctor droid cloud platform. The agent is designed to be lightweight and easy to deploy
with only egress tcp calls to Doctor Droid Cloud Platform.

Currently, the agent supports the following metric sources in your VPC:
* Grafana
* Grafana Loki
* Cloudwatch
* Kubernetes
* Azure AKS (via native Kubernetes)
* AWS EKS (via native Kubernetes)
* GKE (via native Kubernetes)
* New Relic
* Datadog
* Opensearch
* MongoDB
* Github
* Postgres
* Any SQL Database (via Sql Connection String)
* Bash Commands
Releasing soon (reach out to us if you need support for these or any other source):
* Azure
## Env vars
| Env Var Name | Description | Required |
| ---------------------- | ---------------------------------------------- | -------- |
| DRD\_CLOUD\_API\_TOKEN | Authentication token for doctor droid platform | True |
## Installation
To get started create an agent authentication token by visiting [site](https://aiops.drdroid.io/api-keys)
### Docker Compose
1. Create credentials/secret.yaml file with valid credentials. Secrets format for different connections can be
referenced
from: [credentials/credentials\_template.yaml.](https://github.com/DrDroidLab/drd-vpc-agent/blob/main/credentials/credentials_template.yaml)
Command:
```shell theme={null}
./deploy_docker.sh
```
For any update the agent, re-run the command.
### Helm
1. Add the secrets for the integrations in helm/configmap.yaml file.
Refer to the image below for a sample:
Command:
```shell theme={null}
./deploy_k8s.sh
```
* The agent will be installed in the namespace 'drdroid' by default. This can be changed in the helm/deploy\_helm.sh
file.
* Agent attempts to update its docker image automatically every day at 00:00 UTC. This is only possible if its installed with write access to its own deployment. If its installed with only read access, you'll have to run the following commands everry time you want to upgrade it.
```shell theme={null}
kubectl rollout restart deployment drd-vpc-agent-celery-beat -n drdroid
kubectl rollout restart deployment drd-vpc-agent-celery-worker -n drdroid
```
* Agent will have read access to the cluster and will be able to fetch the metrics from the cluster.
* For teams deploying with Helm, the agent by default has access to the kubernetes cluster where it's installed. This does not require any entry into configmap.yaml.
For any more questions or queries, reach out to our team or raise an issue on Github.
# Amazon EKS
Source: https://docs.drdroid.io/integrations/amazon-eks
1. **Prerequisites**: Have your AWS credentials ready, including [access key and secret access key](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html), with permissions to access the EKS role.
2. **Configuring Playbooks**: In the Playbooks dashboard, navigate to Integrations > AWS EKS. Enter your AWS access key ID, secret access key, region, EKS role ARN, and **External ID** (you generate this in Step 2 below and add it when creating the role in the AWS console).
3. **Testing the Integration**: Test the integration.
Note: For security reasons, it is recommended to create a new user with access attached to these permissions.
### Steps to create a new user:
#### Step 1: Create a policy (AmazonEKSViewNodesAndWorkloadsPolicy) with this json:
```
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"eks:DescribeNodegroup",
"eks:ListNodegroups",
"eks:DescribeCluster",
"eks:ListClusters",
"eks:AccessKubernetesApi",
"ssm:GetParameter",
"eks:ListUpdates",
"eks:ListFargateProfiles"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "*",
"Condition": {
"StringEquals": {
"iam:PassedToService": "eks.amazonaws.com"
}
}
}
]
}
```
#### Step 2: Generate External ID and create the role (eks-reader)
1. In DrDroid, go to **Integrations → AWS EKS**. In the **External ID** field click **Generate**, then copy the value (you will use it in the AWS console and again when saving the connector).
2. In the AWS console, go to **IAM → Roles → Create role**. Attach the policy from Step 1 (AmazonEKSViewNodesAndWorkloadsPolicy).
3. For **Trust policy**, choose **Custom trust policy** and use the following (replace `` with your AWS account ID and `` with the value you generated in step 1):
```json theme={null}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam:::root"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": ""
}
}
}
]
}
```
4. Name the role (e.g. `eks-reader`) and create it. You will enter this role’s ARN and the same External ID in DrDroid when configuring the connector.
#### Step 3: Create a policy (AmazonEKSAssumeEKSReaderPolicy) in your IAM that allows assuming this role with the following json:
```
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Resource": "arn:aws:iam:::role/eks-reader"
}
]
}
```
#### Step 4: Create a new user in your IAM with both policies attached
Attach **AmazonEKSAssumeEKSReaderPolicy** and **AmazonEKSViewNodesAndWorkloadsPolicy** to the user.
You don't need to add any group to the user.
#### Step 5: Create an access key
Once the user is created, go to **Security credentials** and create an access key.
#### Step 6: Select "Third-party service" while creating the key
#### Step 7: Add credentials and External ID in DrDroid
Copy the access key and secret key into **Integrations → AWS EKS** on the [Integrations page](https://aiops.drdroid.io/integrations/). Enter the **Assumed Role ARN** (the eks-reader role ARN), **AWS Region**, and the same **External ID** you generated in Step 2. Test the integration, then save.
#### Step 8: Give the eks-reader role permission to query the cluster We'll do that by creating a config map, a cluster role and a new role binding.
```bash bash theme={null}
apiVersion: v1
kind: ConfigMap
metadata:
name: aws-auth
namespace: kube-system
data:
mapRoles: |
- rolearn:
username: eks-reader
groups:
- eks-read-only-group
```
```bash bash theme={null}
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: eks-read-only
rules:
- apiGroups: [""]
resources: ["pods", "services", "namespaces"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: eks-readonly-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: eks-read-only
subjects:
- kind: Group
name: eks-read-only-group
apiGroup: rbac.authorization.k8s.io
```
Run the following commands (using credentials of a user who has cluster admin privileges).
* kubectl apply -f auth.yaml -n kube-system
* kubectl apply -f role.yaml -n kube-system
Now, you should be able to query your cluster resources from the Playbook tasks within DrDroid.
# ArgoCD Integration
Source: https://docs.drdroid.io/integrations/argocd-integration
This document will help you integrate ArgoCD into DrDroid to enable querying of recent deployments and take remediation actions such as rollbacks.
For integrating ArgoCD into DrDroid, you'll need to provide the host and the bearer token.
### Steps to Obtain a Bearer Token via ArgoCD Portal:
* **Log in to the ArgoCD Portal:**
* Open the ArgoCD web UI in your browser.
* Log in with your username and password.
* **Navigate to User Settings:**
* Click on your username in the top-right corner of the UI.
* Select "Account Settings" or a similar option (the wording may vary slightly).
* **Generate a Token:**
* Look for an option to "Generate Token" or "Add Token".
* Provide a name or description for the token if required (this is just for reference).
* Click "Generate".
* **Copy the Token:**
* After generating the token, a dialog box will display it.
* Copy the token immediately, as you might not be able to see it again.
You should usually generate the key from admin account. In case you aren't seeing this feature in admin, that means your account does not have the permission to generate an apikey. To enable this, you'll have to edit the ArgoCD configuration to add the apiKey capability for your account.
* **Edit the ArgoCD ConfigMap:** Use the following command to edit the argocd-cm ConfigMap:
```
kubectl edit configmap argocd-cm -n argocd
```
* **Update the admin Capabilities:** In the ConfigMap, add or update the admin account capabilities under the accounts section:
```bash bash theme={null}
data:
accounts.admin: apiKey
```
* **Save the Changes:** After editing, save and exit. This will update the configuration.
* **Restart the ArgoCD Server:** Restart the ArgoCD server to apply the changes.
```
kubectl rollout restart deployment argocd-server -n argocd
```
### Configure in DrDroid
* You can go to integrations and find ArgoCD in the CI/CD section.
* Then you can enter the Host and the Bearer token for this server.
In case your ArgoCD is behind a VPC and cannot be connected with DrDroid Cloud, try integrating with our VPC agent. Find more details on it [here](https://github.com/DrDroidLab/drd-vpc-agent).
# AWS Cloudwatch
Source: https://docs.drdroid.io/integrations/aws-cloudwatch-access
## Using keys
1. **Prerequisites**: Have your AWS credentials ready, including [access key and secret access key](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html), with permissions to access.
2. **Configuring DrDroid**: In the DrDroid platform, navigate to Integrations > CloudWatch. Enter your AWS access key ID, secret access key, and specify the region your CloudWatch logs are stored in.
3. **Testing the Integration**: Test the integration.
**Note:** For security reasons, some teams prefer to create a new user with access attached to these permissions.
### Steps to create a new user:
#### Step 1: Create a new user in your CloudWatch
Go to this [link](https://us-east-1.console.aws.amazon.com/iam/home#/users) within your AWS account IAM and create a new user.
#### Step 2: Attach one policy of **CloudWatchReadOnlyAccess** to the user.
You don't need to add any group to the user.
#### Step 3: Once the user is created, create an access key by going to "Security Credentials".
#### Step 4: Select "Third-party service" or "Application running on an AWS compute service" while creating the key.
#### Step 5: Copy paste the access key and secret key in [Integrations page](https://aiops.drdroid.io/integrations/).
***
## Using [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)
You can set up AssumeRole **self‑serve**. Everything you need is shown on the CloudWatch integration page in DrDroid.
### Step 1 – Get Doctor Droid AWS details from the UI
1. In DrDroid, go to **Integrations → CloudWatch**.
2. In the **AssumeRole** section, click **“Show AWS details”**.
3. Copy:
* **Doctor Droid AWS Account ID**
* **Doctor Droid AWS Role ARN**
> For security, we never publish these values in docs. Always copy them directly from the Integrations page.
### Step 2 – Generate External ID and create the IAM role
1. **Generate External ID in DrDroid:** In DrDroid, go to **Integrations → CloudWatch**. In the **External ID** field click **Generate**, then copy the value (you will add it in the AWS console and again when saving the connector).
2. **Create the role in AWS:** In your AWS console, go to **IAM → Roles → Create role**.
3. Choose **Custom trust policy** and use the following (replace `` with the Doctor Droid role ARN from Step 1, and `` with the External ID you generated above):
```json theme={null}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": ""
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": ""
}
}
}
]
}
```
4. When you name the role, **you must use a name that starts with `drd-`** for Doctor Droid to work with the default IAM policy. For example:
```text theme={null}
drd-cloudwatch-reader
```
5. In DrDroid, enter the **Assumed Role ARN** of the role you created, select the **AWS Region**, and if you used an External ID in the trust policy, enter the same value in **External ID** (or use **Generate** to create one and then update the role’s trust policy to match). Click **Test** to verify, then save the connector.
## Permissions
To allow Droid Agent to be able to run comprehensive investigation, we recommend assigning this custom policy to the user/role which is added for the connector. This is a read-only policy
```json theme={null}
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "EC2ReadOnly",
"Effect": "Allow",
"Action": [
"ec2:Describe*",
"ec2:Get*"
],
"Resource": "*"
},
{
"Sid": "AutoScalingReadOnly",
"Effect": "Allow",
"Action": [
"autoscaling:Describe*"
],
"Resource": "*"
},
{
"Sid": "LoadBalancerReadOnly",
"Effect": "Allow",
"Action": [
"elasticloadbalancing:Describe*"
],
"Resource": "*"
},
{
"Sid": "EKSReadOnly",
"Effect": "Allow",
"Action": [
"eks:Describe*",
"eks:List*"
],
"Resource": "*"
},
{
"Sid": "ECSReadOnly",
"Effect": "Allow",
"Action": [
"ecs:Describe*",
"ecs:List*"
],
"Resource": "*"
},
{
"Sid": "LambdaReadOnly",
"Effect": "Allow",
"Action": [
"lambda:Get*",
"lambda:List*"
],
"Resource": "*"
},
{
"Sid": "CloudWatchMetricsReadOnly",
"Effect": "Allow",
"Action": [
"cloudwatch:GetMetricData",
"cloudwatch:GetMetricStatistics",
"cloudwatch:ListMetrics",
"cloudwatch:Get*",
"cloudwatch:Describe*"
],
"Resource": "*"
},
{
"Sid": "CloudWatchLogsReadOnly",
"Effect": "Allow",
"Action": [
"logs:Get*",
"logs:List*",
"logs:Describe*",
"logs:StartQuery",
"logs:StopQuery",
"logs:GetQueryResults",
"logs:FilterLogEvents"
],
"Resource": "*"
},
{
"Sid": "XRayReadOnly",
"Effect": "Allow",
"Action": [
"xray:Get*",
"xray:BatchGet*"
],
"Resource": "*"
},
{
"Sid": "RDSReadOnly",
"Effect": "Allow",
"Action": [
"rds:Describe*",
"rds:ListTagsForResource"
],
"Resource": "*"
},
{
"Sid": "ElastiCacheReadOnly",
"Effect": "Allow",
"Action": [
"elasticache:Describe*",
"elasticache:ListTagsForResource"
],
"Resource": "*"
},
{
"Sid": "KafkaMSKReadOnly",
"Effect": "Allow",
"Action": [
"kafka:Describe*",
"kafka:List*",
"kafka:Get*"
],
"Resource": "*"
},
{
"Sid": "DynamoDBReadOnly",
"Effect": "Allow",
"Action": [
"dynamodb:Describe*",
"dynamodb:List*"
],
"Resource": "*"
},
{
"Sid": "S3ReadOnly",
"Effect": "Allow",
"Action": [
"s3:Get*",
"s3:List*"
],
"Resource": "*"
},
{
"Sid": "ECRReadOnly",
"Effect": "Allow",
"Action": [
"ecr:Describe*",
"ecr:Get*",
"ecr:List*",
"ecr:BatchGetImage"
],
"Resource": "*"
},
{
"Sid": "WAFReadOnly",
"Effect": "Allow",
"Action": [
"waf:Get*",
"waf:List*",
"wafv2:Get*",
"wafv2:List*"
],
"Resource": "*"
},
{
"Sid": "IAMReadOnly",
"Effect": "Allow",
"Action": [
"iam:Get*",
"iam:List*"
],
"Resource": "*"
},
{
"Sid": "CloudTrailReadOnly",
"Effect": "Allow",
"Action": [
"cloudtrail:Get*",
"cloudtrail:Describe*",
"cloudtrail:List*",
"cloudtrail:LookupEvents"
],
"Resource": "*"
},
{
"Sid": "EventBridgeReadOnly",
"Effect": "Allow",
"Action": [
"events:Describe*",
"events:List*"
],
"Resource": "*"
},
{
"Sid": "StepFunctionsReadOnly",
"Effect": "Allow",
"Action": [
"states:Describe*",
"states:List*",
"states:GetExecutionHistory"
],
"Resource": "*"
},
{
"Sid": "SecretsMetadataOnly",
"Effect": "Allow",
"Action": [
"secretsmanager:DescribeSecret",
"secretsmanager:ListSecrets"
],
"Resource": "*"
},
{
"Sid": "SSMParameterMetadata",
"Effect": "Allow",
"Action": [
"ssm:DescribeParameters",
"ssm:ListTagsForResource"
],
"Resource": "*"
},
{
"Sid": "TaggingReadOnly",
"Effect": "Allow",
"Action": [
"tag:GetResources",
"tag:GetTagKeys",
"tag:GetTagValues"
],
"Resource": "*"
},
{
"Sid": "CostExplorerReadOnly",
"Effect": "Allow",
"Action": [
"ce:GetCostAndUsage",
"ce:GetCostForecast",
"ce:GetReservationUtilization",
"ce:GetRightsizingRecommendation"
],
"Resource": "*"
},
{
"Sid": "ResourceExplorerSearch",
"Effect": "Allow",
"Action": [
"resource-explorer-2:Search"
],
"Resource": "*"
}
]
}
```
# Azure
Source: https://docs.drdroid.io/integrations/azure
To connect Azure as a data source for infrastructure inventory, observability, cost analysis, and optimization insights, you need to create a service principal with appropriate permissions.
## Prerequisites
1. **Azure CLI** installed and configured
2. An **Azure subscription** with appropriate admin access to create roles and service principals
3. An **Entra App** (Service Principal) for authentication
## Step 1: Get Your Subscription ID
Run the following command to get your Azure subscription ID:
```bash theme={null}
az account show --query id -o tsv
```
Or find it in the [Azure Portal](https://learn.microsoft.com/en-us/azure/azure-portal/get-subscription-tenant-id).
## Step 2: Create a Custom Role
Save the following role definition to a file called `custom-role.json`. Replace `{subscription-id}` with your actual subscription ID from Step 1.
```json theme={null}
{
"Name": "Infrastructure and Cost Analysis Reader",
"IsCustom": true,
"Description": "Read-only access for infrastructure inventory, observability, cost analysis, and optimization insights",
"Actions": [
"Microsoft.Compute/*/read",
"Microsoft.ContainerService/managedClusters/read",
"Microsoft.ContainerService/managedClusters/listClusterUserCredential/action",
"Microsoft.ContainerInstance/containerGroups/read",
"Microsoft.Network/*/read",
"Microsoft.Storage/storageAccounts/read",
"Microsoft.Storage/storageAccounts/listKeys/action",
"Microsoft.Storage/storageAccounts/blobServices/containers/read",
"Microsoft.Sql/servers/read",
"Microsoft.Sql/servers/databases/read",
"Microsoft.DBforPostgreSQL/servers/read",
"Microsoft.DBforMySQL/servers/read",
"Microsoft.Cache/redis/read",
"Microsoft.EventHub/namespaces/read",
"Microsoft.ServiceBus/namespaces/read",
"Microsoft.Resources/subscriptions/read",
"Microsoft.Resources/subscriptions/resourceGroups/read",
"Microsoft.Resources/deployments/read",
"Microsoft.Resources/deployments/operations/read",
"Microsoft.Insights/metrics/read",
"Microsoft.Insights/metricDefinitions/read",
"Microsoft.Insights/logs/read",
"Microsoft.Insights/diagnosticSettings/read",
"Microsoft.Insights/activityLogAlerts/read",
"Microsoft.Insights/alertRules/read",
"Microsoft.Insights/actionGroups/read",
"Microsoft.Insights/components/read",
"Microsoft.Insights/components/query/read",
"Microsoft.Insights/webtests/read",
"Microsoft.OperationalInsights/workspaces/read",
"Microsoft.OperationalInsights/workspaces/query/read",
"Microsoft.OperationalInsights/workspaces/sharedKeys/action",
"Microsoft.OperationsManagement/solutions/read",
"Microsoft.CostManagement/query/action",
"Microsoft.CostManagement/query/read",
"Microsoft.CostManagement/exports/read",
"Microsoft.CostManagement/exports/run/action",
"Microsoft.CostManagement/budgets/read",
"Microsoft.CostManagement/dimensions/read",
"Microsoft.CostManagement/forecast/read",
"Microsoft.Consumption/usageDetails/read",
"Microsoft.Consumption/budgets/read",
"Microsoft.Consumption/reservationRecommendations/read",
"Microsoft.Consumption/reservationDetails/read",
"Microsoft.Consumption/reservationSummaries/read",
"Microsoft.Consumption/priceSheets/read",
"Microsoft.Billing/billingAccounts/read",
"Microsoft.Billing/billingPeriods/read",
"Microsoft.Billing/invoices/read",
"Microsoft.Resources/tags/read",
"Microsoft.Advisor/recommendations/read",
"Microsoft.Advisor/configurations/read",
"Microsoft.Security/assessments/read",
"Microsoft.Security/securityStatuses/read",
"Microsoft.ContainerRegistry/registries/read",
"Microsoft.ContainerRegistry/registries/pull/read",
"Microsoft.ContainerRegistry/registries/metadata/read",
"Microsoft.Authorization/roleAssignments/read",
"Microsoft.Authorization/roleDefinitions/read",
"Microsoft.Authorization/permissions/read",
"Microsoft.ManagedIdentity/userAssignedIdentities/read",
"Microsoft.Capacity/reservationOrders/read",
"Microsoft.Capacity/reservations/read",
"Microsoft.Support/supportTickets/read"
],
"NotActions": [],
"DataActions": [
"Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read"
],
"NotDataActions": [],
"AssignableScopes": [
"/subscriptions/{subscription-id}"
]
}
```
Create the custom role using Azure CLI:
```bash theme={null}
az role definition create --role-definition custom-role.json
```
## Step 3: Create an Entra App (Service Principal)
Create a new App Registration in Azure Entra (formerly Azure Active Directory). You can follow the official instructions [here](https://learn.microsoft.com/en-us/entra/identity-platform/howto-create-service-principal-portal).
After creating the Entra App, note down the following values:
* **Tenant ID** (Directory ID)
* **Client ID** (Application ID)
Then create a **Client Secret** within the Entra App under "Certificates & secrets".
## Step 4: Assign the Custom Role to the Service Principal
Assign the custom role to your service principal:
```bash theme={null}
# Set your values
export AZURE_CLIENT_ID="your-client-id"
export AZURE_SUBSCRIPTION_ID="your-subscription-id"
# Assign the role
az role assignment create \
--assignee $AZURE_CLIENT_ID \
--role "Infrastructure and Cost Analysis Reader" \
--scope /subscriptions/$AZURE_SUBSCRIPTION_ID
```
## Step 5: Configure in Doctor Droid Platform
1. Navigate to the **Integrations** tab in the Doctor Droid platform
2. Click **Add New Integration**
3. Select **Azure** and click **Connect**
4. Fill in the following credentials:
| Field | Description | Example |
| -------------------- | ----------------------------------------------- | -------------------------------------- |
| **Integration Name** | A descriptive name to identify this integration | `Production Azure` |
| **Client ID** | Your Azure Client ID (Application ID) | `11111111-2222-3333-4444-555555555555` |
| **Client Secret** | Your Azure Client Secret (Application Secret) | `Abc12345DefGHIjk~LMNopqRSTUvwxYZ` |
| **Tenant ID** | Your Azure Tenant ID (Directory ID) | `66666666-7777-8888-9999-000000000000` |
| **Subscription ID** | Your Azure Subscription ID | `aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee` |
5. Click **Save** to complete the integration
## Permissions Overview
The custom role provides read-only access to:
| Category | Resources |
| ---------------------- | ---------------------------------------------------------- |
| **Compute** | Virtual Machines, Container Instances, AKS Clusters |
| **Networking** | Virtual Networks, Load Balancers, Network Security Groups |
| **Storage** | Storage Accounts, Blob Containers |
| **Databases** | SQL Servers, PostgreSQL, MySQL, Redis Cache |
| **Messaging** | Event Hubs, Service Bus |
| **Monitoring** | Metrics, Logs, Alerts, Application Insights, Log Analytics |
| **Cost Management** | Cost queries, Budgets, Forecasts, Usage details |
| **Billing** | Billing accounts, Invoices, Price sheets |
| **Security** | Security assessments, Advisor recommendations |
| **Container Registry** | Registry metadata and image pull access |
| **IAM** | Role assignments, Role definitions |
## Troubleshooting
### Role Creation Failed
Ensure you have `Microsoft.Authorization/roleDefinitions/write` permission on the subscription. You may need Owner or User Access Administrator role.
### Role Assignment Failed
Verify that:
* The Client ID is correct
* The service principal exists
* You have permission to assign roles on the subscription
### Integration Test Failed
Check that:
* All credentials (Client ID, Client Secret, Tenant ID, Subscription ID) are correct
* The Client Secret has not expired
* The role assignment is complete and propagated (may take a few minutes)
# Azure Log Analytics
Source: https://docs.drdroid.io/integrations/azure-cloud-log-analytics
To add Azure Log analytics as a data source, there are 4 keys that need to be configured within the your account:
1. Subscription ID: This is the primary ID for your Azure account. Find steps [here](https://learn.microsoft.com/en-us/azure/azure-portal/get-subscription-tenant-id) on how to retrieve the Subscription ID for your account.
For the next part of the process, you need to create an "Entra" app within your Azure account. You can find instructions on creating an Entra App [here](https://learn.microsoft.com/en-us/entra/identity-platform/howto-create-service-principal-portal). After creating the Entra App, add the following "API permissions":
* Azure Service Management -- user\_impersonation (Delegated type).
* Log Analytics API -- Data.Read (Application permissions).
* Microsoft Graph -- User.Read (Delegated) -- this permission will be added by default in your app.
After creating the permissions, you will be able to fetch the following properties:
2. Tenant ID
3. Client ID
4. Client Secret: Generate a Client Secret within the Entra App.
# Azure K8s Service (AKS)
Source: https://docs.drdroid.io/integrations/azure-k8s-service-aks
# Bash Commands
Source: https://docs.drdroid.io/integrations/bash-commands
### Executing BASH Command within PlayBooks
You can execute popular BASH commands from within DrDroid.
### Configuring a Remote Server
While configuration, you can add one or more multiple remote servers that can be connected using the same authentication mode:
To configure a remote server, we enable users with the following mode of authentication:
* PEM: These are private keys that can be used to establish the connection. The following PEM formats are currently supported:
* Ed25519Key, ECDSAKey, DSSKey & RSAKey
* Password
### Running a sample command:
Any command that you are able to run after logging into that terminal, you should be able to run remotely.
### Output
# BigQuery
Source: https://docs.drdroid.io/integrations/bigquery
Connect DrDroid to Google BigQuery so DroidAgent can run SQL queries during investigations.
DrDroid connects to Google BigQuery using a GCP service account. DroidAgent can list datasets, read table metadata, and run SQL queries when investigating alerts.
This is a **separate connector** from [Google Cloud Platform (GCP)](/integrations/gcp) and [Google Cloud Metrics & Logs](/integrations/google-cloud-metrics-and-logs). Add BigQuery only if you want the agent to query warehouse tables directly.
## Connection via dashboard
Open **Agent Setup → Integrations → BigQuery**, or go to [aiops.drdroid.io/integrations/big\_query](https://aiops.drdroid.io/integrations/big_query).
On **Big Query Integration Setup**, fill in:
| Field | Description |
| ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Integration Name** | A label for this connector (e.g. `Production BigQuery`). |
| **Project ID** | Your Google Cloud project ID (e.g. `my-project-123`). Must match the project in your service account JSON. |
| **Service Account JSON** | Paste the **entire** JSON key file from GCP. Include all fields (`type`, `project_id`, `private_key`, `client_email`, etc.). Do not paste only the private key. |
Click **Test connection**, then **Save**.
**Test connection** checks that DrDroid can authenticate and **list at least one dataset** in the project. If the project has no datasets, or the service account cannot see any, the test fails even when the JSON is valid.
## Create a service account
1. In [Google Cloud Console](https://console.cloud.google.com/), go to **IAM & Admin → Service Accounts**.
2. Create a service account (e.g. `drdroid-bigquery-reader`).
3. Create a JSON key: **Keys → Add key → Create new key → JSON**. Download and store it securely.
### Required IAM roles
Grant these on the **GCP project** (or tighter, as described below):
| Role | ID | Why |
| ------------------------ | --------------------------- | --------------------------------------------------------- |
| **BigQuery Job User** | `roles/bigquery.jobUser` | Run queries (creates query jobs). |
| **BigQuery Data Viewer** | `roles/bigquery.dataViewer` | Read table data and list datasets the account can access. |
Example (project-wide, simplest setup):
```bash theme={null}
export PROJECT_ID="your-project-id"
export SA_EMAIL="drdroid-bigquery-reader@${PROJECT_ID}.iam.gserviceaccount.com"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:${SA_EMAIL}" \
--role="roles/bigquery.jobUser"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:${SA_EMAIL}" \
--role="roles/bigquery.dataViewer"
```
### Restrict access to specific datasets (recommended)
For least privilege, keep **BigQuery Job User** on the project, and grant **BigQuery Data Viewer** only on datasets the agent should use:
```bash theme={null}
bq add-iam-policy-binding PROJECT_ID:DATASET_ID \
--member="serviceAccount:${SA_EMAIL}" \
--role="roles/bigquery.dataViewer"
```
Replace `PROJECT_ID` and `DATASET_ID` with your values. Repeat for each dataset. The service account must still be able to **see at least one dataset** for the connection test to pass.
## Enable the BigQuery API
```bash theme={null}
gcloud services enable bigquery.googleapis.com --project=$PROJECT_ID
```
## Querying
After the connector is saved, DroidAgent can run BigQuery SQL during investigations (read-only `SELECT` queries against datasets you granted access to).
# Clickhouse
Source: https://docs.drdroid.io/integrations/clickhouse-database
Connecting to Clickhousedb
## Connection:
#### Step 1: Go to Integrations > Clickhouse in the Playbooks platform.
#### Step 2: Enter your database connection details. (database host, port, and credentials (username and password))
> Note: When you fill in the host, you **do not need to add https\://**.
#### Step 3: **Testing the Integration**: Create a playbook that includes a step to run a simple SELECT query against your Clickhouse database and verify the results are fetched correctly.
## Querying:
After adding Clickhouse DB as a connection, you can do the following:
* Run a query on Clickhouse DB.
### How to limit access to select tables/DBs within Playbooks?
To restrict permissions to the users accessing Clickhouse via Playbooks, we recommend using roles that are relevant for
#### Create a new user:
```bash bash theme={null}
CREATE USER 'new_user_name' IDENTIFIED BY '%9v3vdsboq3v5Nyn5I';
```
#### Give required permissions to the user:
```bash bash theme={null}
GRANT SELECT ON db_name.table_name TO 'new_user_name';
```
#### Verify permissions granted:
```bash bash theme={null}
SELECT \* FROM system.grants WHERE user_name = 'new_user_name';
```
# Confluence Integration
Source: https://docs.drdroid.io/integrations/confluence
# Confluence Integration
Connect your Confluence workspace to DrDroid to access and reference your documentation directly within your debugging workflow.
## Features
* **Pages Access**: Fetch and view Confluence pages directly in DrDroid
* **Contextual Documentation**: Reference relevant documentation while debugging issues
* **Quick Access**: Search and access your team's knowledge base without leaving DrDroid
## Setup Instructions
1. **Prerequisites**
* Admin access to your Confluence workspace
* Admin permissions in DrDroid
2. **Authentication**
* Navigate to **Settings > Integrations** in DrDroid
* Click on **Confluence**
* Click **Connect**
* Follow the OAuth flow to authorize DrDroid
* Select the Confluence spaces you want to make accessible
3. **Configuration**
* Set default spaces to search
* Configure access permissions for team members
## Usage
Once connected, you can:
* Use the `/confluence` command in DrDroid to search for pages
* Reference Confluence pages in your runbooks
* Access documentation directly from alert details
## Troubleshooting
### Common Issues
* **Authentication Failed**: Ensure you have the correct permissions in Confluence
* **Pages Not Found**: Verify the spaces are properly shared with the integration user
* **Search Not Working**: Check if the indexing is complete in Confluence
## API Reference
### Available Endpoints
* List spaces
* Get page content
* Search pages
For detailed API documentation, refer to [Confluence's API documentation](https://developer.atlassian.com/cloud/confluence/rest/).
## Support
For additional help, contact our support team.
# Coralogix
Source: https://docs.drdroid.io/integrations/coralogix
Connect your Coralogix account to DrDroid for log analysis and monitoring
## Prerequisites
Before setting up the Coralogix integration, ensure you have:
* Admin access to your Coralogix account
* Ability to generate API keys
* Your Coralogix domain endpoint
## Getting Your Coralogix Domain
Get your Coralogix domain endpoint from: [Coralogix Domain Settings](https://coralogix.com/docs/user-guides/account-management/account-settings/coralogix-domain/)
## Getting Your API Key
1. **Navigate to Keys**: Click on your **profile button** in the top right corner, then **Settings** > **Keys**
2. **Choose Key Type**:
* For DrDroid integration, use **Personal Keys** or **Team Keys**
* Personal Keys are for individual users
* Team Keys are for shared team access (experimental)
3. **Create New Key**: Click **+ PERSONAL KEY** or **+ TEAM KEY**
4. **Configure Permissions**: Set appropriate role presets. For Doctor Droid to work smoothly, we recommend giving 'APM' and 'DASHBOARDS' roles.
5. **Copy the Key**: Save the generated API key securely
## Configuring DrDroid Integration
1. **Access Integrations**: In the DrDroid platform, navigate to **Integrations** > **Coralogix**
2. **Enter Credentials**:
* **Domain**: Enter your Coralogix domain (e.g., `https://your-company.coralogix.com`)
* **API Key**: Paste the API key you generated
3. **Test Connection**: Click **Test Connection** to verify the integration
4. **Save Configuration**: Once tested successfully, save your credentials
## Supported Features
With Coralogix integration, you can:
* **Query Logs**: Search and analyze logs using Coralogix's powerful query language
* **Fetch Metrics**: Retrieve custom metrics and time-series data
* **Dashboard Integration**: Pull data from Coralogix dashboards into DrDroid playbooks
## Integrating Coralogix based Grafana
To use Coralogix data in Grafana through DrDroid:
1. **Get Your Coralogix Domain**: From [Coralogix Domain Settings](https://coralogix.com/docs/user-guides/account-management/account-settings/coralogix-domain/)
2. **Configure Grafana Host**: Use the format `https://ng-api-http./grafana/api/`
* Example: `https://ng-api-http.us1.coralogix.com/grafana/api/`
3. **Use Coralogix API Key**: Use your Coralogix API key with Grafana presets as the Grafana API key
4. **Set Up in DrDroid**: Configure both Coralogix and Grafana integrations using the same Coralogix credentials
### Getting Help
If you encounter issues:
* Check the Coralogix documentation for API key configuration
* Verify your domain endpoint is correct
* Contact DrDroid support for integration-specific issues
# Query Existing Grafana Data Sources
Source: https://docs.drdroid.io/integrations/custom-promql-query
To connect your Grafana account to Playbooks, the step vary basis the version of Grafana that you are using.
### For version 9.1 and above:
1. **Prerequisites**: Ensure you have admin access to your Grafana instance and the ability to generate Service Accounts.
2. **Create Service Account**: In your Grafana dashboard, navigate to Admin >> Users & Access >> Service Accounts >> Create a Service Account
3. **Generate Service Account Key:** Within Service Account, create a new API key/token with Viewer permissions.
4. **Configuring Connection in Playbooks**: Go to Integrations > Grafana in the Playbooks platform. Enter your Grafana instance Host (Must be URL starting with http or https) and the API key you generated. The host should be accessible from the machine where the configuration is being added. (If it's being added from the Doctor Droid Cloud, then only Grafana instances accessible from internet can be used)
5. **Testing the Integration**: Test the connection and save the credentials.
Note: If you are using an older version of Grafana, you will be able to create an API key instead of Service Account key. Additionally, after 9.1, Grafana introduced a few breaking changes so please connect with us in case any of your functionalities are not working as expected.
### Note:
Post the successful integration, the platform will programmatically start fetching metadata from Grafana. This includes a list of data sources that are already within the Grafana platform.
# Datadog
Source: https://docs.drdroid.io/integrations/datadog-access
In this page:
* How to build [Datadog Connection](#connection)?
* [Types of Querying](#querying) Permitted on Datadog
## Connection:
#### Step 1: Create an API key associated with your user.
You can name this one 'dr-droid-key' and copy the "Key".
#### Step 2: Create an APP key with the following scopes:
Scopes requested (optional):
* **apm\_service\_catalog\_read**
* **apm\_api\_catalog\_read**
* **logs\_read\_data**
* **logs\_read\_index\_data**
* **ci\_visibility\_read**
* **dashboards\_read**
* **events\_read**
* **incident\_notification\_settings\_write**
* **incident\_read**
* **incident\_settings\_write**
* **incident\_write**
* **metrics\_read**
* **monitors\_read**
* **slos\_read**
* **create\_webhooks**
* **timeseries\_query**
* **apm\_read**
#### Step 3: Enter the relevant Site Parameter:
Read more on the different site parameters [here](https://docs.datadoghq.com/getting_started/site/).
#### Step 4: Test connection & save
## Querying:
Playbooks currently support the following types of queries within Datadog:
* Fetching results of any custom datadog metric query.
* Fetching Golden signals by selecting a service name.
* Fetching panels from any custom dashboard in Datadog.
* Selecting any of the metric that has been identified by Datadog's [metric summary](https://docs.datadoghq.com/metrics/summary/).
* Fetching logs from Datadog.
# Elastic Search
Source: https://docs.drdroid.io/integrations/elastic-search
You can generate API Keys for Elastic Search from kibana dashboard. Here is a simple video on how to obtain them:
\
You can directly add the keys in the portal for Elastic Search integration,

If you adding via the vpc agent, see the sample credentials for adding elastic search. Check the sample [here](https://github.com/DrDroidLab/drd-vpc-agent/blob/main/credentials/credentials_template.yaml#L112).
# Email
Source: https://docs.drdroid.io/integrations/email
### Step 1: Setup Email as Data Source:
1. Create an app with the Google account that will be configured in our platform as the source ([https://myaccount.google.com/apppasswords](https://myaccount.google.com/apppasswords)). You will have to turn-on 2FA for that account to get this feature.
This is the password that we need to add in the Data Source Configuration Page. Save these credentials somewhere, and click on done.
2. Add Email Server as an integration in the Integrations Page.
Put the app password as **Password** while configuring the Email Server Integration.
The **Port** and **SMTP Host** remain the same as shown for Gmail.
Follow the same steps for Outlook the only changes are the port should be changed to smtp-mail.outlook.com.
# Google Cloud Platform (GCP)
Source: https://docs.drdroid.io/integrations/gcp
To connect Google Cloud Platform as a data source for infrastructure inventory, observability, cost analysis, and optimization insights, you need to create a service account with a custom role.
## Prerequisites
1. **Google Cloud CLI (gcloud)** installed and configured
2. A **GCP project** with appropriate admin access to create roles and service accounts
3. **Billing account** access (for cost-related permissions)
## Step 1: Get Your Project ID
Run the following command to get your GCP project ID:
```bash theme={null}
gcloud config get-value project
```
Or list all projects:
```bash theme={null}
gcloud projects list
```
## Step 2: Create a Custom Role
Save the following role definition to a file called `custom-role.yaml`:
```yaml theme={null}
title: "Infrastructure and Cost Analysis Reader"
description: "Read-only access for infrastructure inventory, observability, cost analysis, and optimization insights"
stage: "GA"
includedPermissions:
# Compute Engine
- compute.instances.list
- compute.instances.get
- compute.disks.list
- compute.disks.get
- compute.networks.list
- compute.networks.get
- compute.subnetworks.list
- compute.subnetworks.get
- compute.firewalls.list
- compute.firewalls.get
- compute.addresses.list
- compute.addresses.get
- compute.zones.list
- compute.regions.list
- compute.machineTypes.list
# GKE (Kubernetes Engine)
- container.clusters.list
- container.clusters.get
- container.nodes.list
- container.nodes.get
- container.pods.list
- container.pods.get
- container.services.list
- container.services.get
# Cloud SQL
- cloudsql.instances.list
- cloudsql.instances.get
- cloudsql.databases.list
- cloudsql.databases.get
# Cloud Storage
- storage.buckets.list
- storage.buckets.get
- storage.objects.list
- storage.objects.get
# Cloud Monitoring
- monitoring.metricDescriptors.list
- monitoring.metricDescriptors.get
- monitoring.timeSeries.list
- monitoring.dashboards.list
- monitoring.dashboards.get
- monitoring.alertPolicies.list
- monitoring.alertPolicies.get
- monitoring.groups.list
- monitoring.groups.get
- monitoring.uptimeCheckConfigs.list
- monitoring.uptimeCheckConfigs.get
# Cloud Logging
- logging.logEntries.list
- logging.logs.list
- logging.logMetrics.list
- logging.logMetrics.get
- logging.sinks.list
- logging.sinks.get
# IAM
- iam.serviceAccounts.list
- iam.serviceAccounts.get
- iam.roles.list
- iam.roles.get
- resourcemanager.projects.get
- resourcemanager.projects.getIamPolicy
# Billing & Cost
- billing.accounts.list
- billing.accounts.get
- billing.budgets.list
- billing.budgets.get
# Cloud Asset Inventory
- cloudasset.assets.listResource
- cloudasset.assets.searchAllResources
- cloudasset.assets.searchAllIamPolicies
# Recommender (Cost Optimization)
- recommender.computeInstanceMachineTypeRecommendations.list
- recommender.computeInstanceMachineTypeRecommendations.get
- recommender.computeInstanceIdleResourceRecommendations.list
- recommender.computeInstanceIdleResourceRecommendations.get
# Resource Manager
- resourcemanager.projects.list
- resourcemanager.folders.list
- resourcemanager.organizations.get
```
Create the custom role using gcloud CLI:
```bash theme={null}
# Set your project ID
export PROJECT_ID="your-project-id"
# Create the custom role
gcloud iam roles create infrastructureCostReader \
--project=$PROJECT_ID \
--file=custom-role.yaml
```
## Step 3: Create a Service Account
Create a new service account for the Doctor Droid integration:
```bash theme={null}
# Create the service account
gcloud iam service-accounts create drdroid-reader \
--display-name="Doctor Droid Infrastructure Reader" \
--description="Service account for Doctor Droid integration" \
--project=$PROJECT_ID
```
## Step 4: Assign the Custom Role to the Service Account
Bind the custom role to the service account:
```bash theme={null}
# Get the service account email
export SA_EMAIL="drdroid-reader@${PROJECT_ID}.iam.gserviceaccount.com"
# Assign the custom role
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:${SA_EMAIL}" \
--role="projects/${PROJECT_ID}/roles/infrastructureCostReader"
```
## Step 5: Create and Download Service Account Key
Generate a JSON key file for the service account:
```bash theme={null}
gcloud iam service-accounts keys create drdroid-key.json \
--iam-account=$SA_EMAIL \
--project=$PROJECT_ID
```
This will create a `drdroid-key.json` file containing the service account credentials.
**Important:** Store this key securely. It provides access to your GCP resources.
## Step 6: Configure in Doctor Droid Platform
1. Navigate to the **Integrations** tab in the Doctor Droid platform
2. Click **Add New Integration**
3. Select **Google Cloud** and click **Connect**
4. Fill in the following credentials:
| Field | Description | Example |
| ------------------------ | ------------------------------------------------ | ---------------------------------- |
| **Integration Name** | A descriptive name to identify this integration | `Production GCP` |
| **Project ID** | Your GCP Project ID (found in the JSON key file) | `my-project-123456` |
| **Service Account JSON** | The entire contents of the JSON key file | `{"type": "service_account", ...}` |
5. Click **Test Connection** to verify the setup
6. Click **Save** to complete the integration
## Permissions Overview
The custom role provides read-only access to:
| Category | Resources |
| ------------------------- | ------------------------------------------------------------- |
| **Compute Engine** | Instances, Disks, Networks, Subnetworks, Firewalls, Addresses |
| **GKE** | Clusters, Nodes, Pods, Services |
| **Cloud SQL** | Instances, Databases |
| **Cloud Storage** | Buckets, Objects |
| **Cloud Monitoring** | Metrics, Dashboards, Alert Policies, Uptime Checks |
| **Cloud Logging** | Log Entries, Log Metrics, Sinks |
| **IAM** | Service Accounts, Roles, IAM Policies |
| **Billing & Cost** | Billing Accounts, Budgets |
| **Cloud Asset Inventory** | Resource search, IAM policy search |
| **Recommender** | Machine type recommendations, Idle resource recommendations |
| **Resource Manager** | Projects, Folders, Organizations |
## Organization-Level Access (Optional)
To grant access across multiple projects in an organization, create the role at the organization level:
```bash theme={null}
# Set your organization ID
export ORG_ID="your-org-id"
# Create role at organization level
gcloud iam roles create infrastructureCostReader \
--organization=$ORG_ID \
--file=custom-role.yaml
# Assign to service account at organization level
gcloud organizations add-iam-policy-binding $ORG_ID \
--member="serviceAccount:${SA_EMAIL}" \
--role="organizations/${ORG_ID}/roles/infrastructureCostReader"
```
## Troubleshooting
### Role Creation Failed
Ensure you have `roles/iam.roleAdmin` or `roles/owner` permission on the project. You may need to enable the IAM API:
```bash theme={null}
gcloud services enable iam.googleapis.com --project=$PROJECT_ID
```
### Service Account Creation Failed
Verify that:
* The IAM API is enabled
* You have `iam.serviceAccounts.create` permission
* The service account name is unique
### Permission Denied Errors
Some permissions require specific APIs to be enabled:
```bash theme={null}
# Enable required APIs
gcloud services enable compute.googleapis.com --project=$PROJECT_ID
gcloud services enable container.googleapis.com --project=$PROJECT_ID
gcloud services enable sqladmin.googleapis.com --project=$PROJECT_ID
gcloud services enable monitoring.googleapis.com --project=$PROJECT_ID
gcloud services enable logging.googleapis.com --project=$PROJECT_ID
gcloud services enable cloudasset.googleapis.com --project=$PROJECT_ID
gcloud services enable recommender.googleapis.com --project=$PROJECT_ID
gcloud services enable cloudbilling.googleapis.com --project=$PROJECT_ID
```
### Integration Test Failed
Check that:
* The Project ID is correct
* The JSON key file contents are complete and properly formatted
* The service account has the custom role assigned
* Required APIs are enabled in the project
### Billing Permissions Not Working
Billing permissions require the service account to be added to the billing account:
1. Go to [Billing Console](https://console.cloud.google.com/billing)
2. Select your billing account
3. Click **Account Management**
4. Add the service account email with **Billing Account Viewer** role
# Github Actions
Source: https://docs.drdroid.io/integrations/github-actions
Query Github actions
To enrich your alerts with information on recent deployments from Github Actions, a token. Either of the three are valid to be used:
* [GitHub App user access tokens](https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-user-access-token-for-a-github-app)
* [GitHub App installation access tokens](https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/generating-an-installation-access-token-for-a-github-app)
* [Fine-grained personal access tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-fine-grained-personal-access-token)
Please note: It is essential that you add `deployments:read` as a permission.
# Github
Source: https://docs.drdroid.io/integrations/github-repository
Using the Github connector, you can:
* Fetch recent commits
* Analyse Code
* Raise a Pull Request
### How to setup?
We recommend using the [Fine-grained personal access tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-fine-grained-personal-access-token) to connect your Github account to our platform.
The permissions required would be as follows:
* `Contents`: Read + Write (Allows to read code and commits)
* `Metadata`: Read-only
* `Pull requests`: Read + Write (Allows to raise a pull request)
You can select which specific repositories you want to give access to.
### How it works?
While investigating an issue, the Droid Agent uses this connector to fetch recent commits, analyse code and raise a pull request.
Read about how code security and isolation works within our coding agent (used to analyse code and raise PRs as needed) [here](/policies/code-security).
# Google Cloud GKE
Source: https://docs.drdroid.io/integrations/google-cloud-gke
Step 1: Create a Service Account
Step 2: Give it the permission (kubernetes engine viewer)
Step 3: Create a JSON Key for the service account
Go to GKE setup page in Playbooks
* Enter the project\_id and service account json
* If you do not know the project id, you can open the JSON. It exists as a key-value pair in the JSON.
* Test the connection and submit it
# Google Cloud Metrics & Logs
Source: https://docs.drdroid.io/integrations/google-cloud-metrics-and-logs
Step 1: Create a Service Account
Step 2: Give it the permissions: Monitoring Viewer & Logs Viewer
Step 3: Create a JSON Key for the service account
Go to Google Cloud setup page in Playbooks
* Enter the project\_id and service account json
* If you do not know the project id, you can open the JSON. It exists as a key-value pair in the JSON.
* Test the connection and submit it
# Grafana
Source: https://docs.drdroid.io/integrations/grafana
You can connect your account to your Grafana instance:
### For version 9.1 and above:
1. **Prerequisites**: Ensure you have admin access to your Grafana instance and the ability to generate Service Accounts.
2. **Create Service Account**: In your Grafana dashboard, navigate to Admin >> Users & Access >> Service Accounts >> Create a Service Account
3. **Generate Service Account Key:** Within Service Account, create a new API key/token with Viewer permissions.
4. **Configuring Connection in Playbooks**: Go to Integrations > Grafana in the Playbooks platform. Enter your Grafana instance Host (Must be URL starting with http or https) and the API key you generated. The host should be accessible from the machine where the configuration is being added. (If it's being added from the Doctor Droid Cloud, then only Grafana instances accessible from internet can be used)
5. **Testing the Integration**: Test the connection and save the credentials.
Note: If you are using an older version of Grafana, you will be able to create an API key instead of Service Account key. Additionally, after 9.1, Grafana introduced a few breaking changes so please connect with us in case any of your functionalities are not working as expected.
### Note:
Post the successful integration, the platform will programmatically start fetching metadata from Grafana. This includes a list of data sources that are already within the Grafana platform.
## Using Coralogix based Grafana
To integrate Coralogix data with Grafana through DrDroid:
1. **Get Your Coralogix Domain**: From [Coralogix Domain Settings](https://coralogix.com/docs/user-guides/account-management/account-settings/coralogix-domain/)
2. **Configure Grafana Host**: Use the format `https://ng-api-http./grafana/api/`
* Example: `https://ng-api-http.us1.coralogix.com/grafana/api/`
3. **Use Coralogix API Key**: Use your Coralogix API key with Grafana presets as the Grafana API key
4. **Set Up in DrDroid**: Configure both Coralogix and Grafana integrations using the same Coralogix credentials
## Using self-hosted grafana behind VPC?
Sure. We understand that this is a common scenario. Read more about how you can deploy our [drd-vpc-agent](/getting-started/self-hosted) to simplify connecting to such sources.
# Grafana Loki Logs
Source: https://docs.drdroid.io/integrations/grafana-loki-logs
Loki is an Open Source Timeseries Database supported by Grafana.
### Integration
To get started with the integration, we currently support Loki integration with the following parameters:
(a) Protocol (http / https)
(b) Host + Port
(c) X-Scope-OrgId
(d) TLS Certificate Validation
### Adding to Playbook
When you want to add data from Loki into a Playbook, select "Query Logs from Grafana Loki" in the Playbook.
### Querying
Write query, enter the result count and timestamp in epoch seconds (it will be pre-filled from the time range selected on top right)
### Output
# Overview
Source: https://docs.drdroid.io/integrations/integrations
DrDroid supports a wide range of integrations, including log search engines, databases, and monitoring services.
This section provides step-by-step guides to help you connect DrDroid with various data sources, ensuring a smooth setup process.
## Integration Status
| Category | Integration |
| --------------------------- | ---------------------------------------------------------------------- |
| **Cloud Monitoring** | [AWS CloudWatch](/integrations/aws-cloudwatch-access) |
| | [Azure Cloud](/integrations/azure-cloud-log-analytics) |
| | [Google Cloud Monitoring](/integrations/google-cloud-metrics-and-logs) |
| **Application Performance** | [Datadog](/integrations/datadog-access) |
| | [New Relic](/integrations/new-relic-access) |
| | [Grafana](/integrations/grafana) |
| | [Loki](/integrations/grafana-loki-logs) |
| | [Mimir](/integrations/mimir) |
| | [Elasticsearch](/integrations/elastic-search) |
| | [Sentry](/integrations/sentry-access) |
| | [Signoz](/integrations/signoz) |
| | [OpenSearch](/integrations/open-search) |
| | [Elastic APM](/integrations/elastic-search) |
| **Analytics** | [Posthog](/integrations/posthog) |
| **Databases** | [ClickhouseDB](/integrations/clickhouse-database) |
| | [PostgreSQL](/integrations/postgresql-database) |
| | [SQL Databases](/integrations/sql-databases) |
| | [MongoDB](/integrations/mongo-database-atlas) |
| | [BigQuery](/integrations/bigquery) |
| **Container Platforms** | [Kubernetes](/integrations/kubernetes) |
| | [EKS](/integrations/amazon-eks) |
| | [GKE](/integrations/google-cloud-gke) |
| **CI/CD Tools** | [Jenkins](/integrations/jenkins) |
| | [ArgoCD](/integrations/argocd-integration) |
| | [GitHub](/integrations/github-repository) |
| **Alerting** | [Slack](/integrations/slack-alerts) |
| | [MS Teams](/integrations/ms-teams) |
| | [Email Server](/integrations/email) |
| | [Zenduty](/integrations/zenduty) |
| | [Rootly](/integrations/rootly) |
| **Project Tools** | [Jira](/integrations/jira) |
| | [Confluence](/integrations/confluence) |
| **Custom** | [Remote Server](/integrations/remote-server-commands) |
| | [MCP Server](/integrations/mcp-server) |
Don't find the integration of your preference? Message us or email us at [support@drdroid.io](mailto:support@drdroid.io)!
***
# Jenkins
Source: https://docs.drdroid.io/integrations/jenkins
Connect DrDroid to Jenkins to inspect builds and jobs during investigations.
DrDroid connects to Jenkins so DroidAgent can fetch job and build context when debugging deployment or CI failures. Add the integration from the [Jenkins setup page](https://aiops.drdroid.io/integrations/jenkins) or through the VPC agent.
## Connection via dashboard
Open **Agent Setup → Integrations → Jenkins**, or go directly to [aiops.drdroid.io/integrations/jenkins](https://aiops.drdroid.io/integrations/jenkins).
Choose the authentication type that matches your Jenkins setup:
### Jenkins Authentication with Crumb
Use this when your Jenkins instance has CSRF protection enabled (the default on many installations).
| Field | Description |
| ---------------------------------- | ---------------------------------------------------------------------------------------------------- |
| **Integration Name** | A label for this connector (e.g. `Production Jenkins`). |
| **Jenkins URL** | Base URL of your Jenkins server, e.g. `https://jenkins.example.com`. Do not include a trailing path. |
| **Jenkins Username** | Jenkins user with permission to read jobs and builds. |
| **Jenkins API Token** | API token for that user (see below). |
| **Enable Crumb (CSRF Protection)** | Turn on so DrDroid sends a valid crumb with each request. |
Save and test the connection.
### Jenkins Authentication without Crumb
Use this when CSRF protection is disabled or your Jenkins version does not require crumbs for API access.
Fill in **Integration Name**, **Jenkins URL**, **Jenkins Username**, and **Jenkins API Token** the same way as above. Do not enable crumb handling for this connection type.
## Create a Jenkins API token
1. Sign in to Jenkins as the user you will connect with.
2. Open your user menu → **Configure** (or **Settings**).
3. Under **API Token**, click **Add new Token**, name it (e.g. `drdroid`), and generate it.
4. Copy the token once and paste it into **Jenkins API Token** in DrDroid. You cannot view it again after leaving the page.
Use a dedicated service account or bot user with read access to the jobs and folders the agent should inspect.
## Connection via VPC agent
If you run DrDroid through the [VPC agent](https://github.com/DrDroidLab/drd-vpc-agent), add a Jenkins entry to your `secrets.yaml`:
```yaml theme={null}
connector_name:
type: "JENKINS" # do not change
url: https://jenkins.example.com
username: your_jenkins_username
api_token: your_api_token
crumb: "true" # optional — "true" if CSRF crumbs are required, "false" otherwise (default)
```
See the [Jenkins section](https://github.com/DrDroidLab/drd-vpc-agent/blob/main/credentials/credentials_template.yaml#L105) in the credentials template.
Restart or reload the agent after updating secrets.
## Permissions
Grant the connected user **Read** access on the jobs, folders, and views you want available during investigations. Avoid admin-only accounts unless your security policy requires it.
# Jira
Source: https://docs.drdroid.io/integrations/jira
To create a key in JIRA, please follow the instructions on [this page](https://support.atlassian.com/atlassian-account/docs/manage-api-tokens-for-your-atlassian-account/#Create-an-API-token).
# Kubernetes
Source: https://docs.drdroid.io/integrations/kubernetes
This document highlights different ways you can integrate your k8s cluster to DrDroid.
The recommended way to integrate your k8s cluster with is via the DRD Proxy Agent.
## Using DRD Agent \[Recommended]
The fastest and easiest way to integrate is to install the DRD agent in your cluster using the proxy token from the platform. Here are the steps to do this:
* Obtain your proxy token from the platform
* Follow the instructions for helm-based installation that you can see in Github ([https://github.com/DrDroidLab/drd-vpc-agent](https://github.com/DrDroidLab/drd-vpc-agent))
\-- Clone the DRD Agent repository from github ([https://github.com/DrDroidLab/drd-vpc-agent](https://github.com/DrDroidLab/drd-vpc-agent))
\-- Make sure you are pointing to the right k8s cluster in the kubeconfig. Run the following commands:
```bash bash theme={null}
./deploy_k8s.sh
```
* Post the helm installation, you should see the status as Active for the proxy token you used.
* You should also start seeing the cluster registered with us in the Integrations page.
After this, you can run commands on your k8s cluster from DrDroid for standalone and as part of investigations. Go to the [Home Page](https://aiops.drdroid.io), click on 'DroidAgent' and type this `Get all pods from default namespace in my k8s cluster` and you should get the output.
## Other methods
### Using cloud provider credentials (for managed k8s clusters)
DrDroid allows you to provide IAM credentials from your cloud provider that have been authorised to run kubectl commands in your cluster. Here are details for different cloud providers.
* [Amazon EKS](/integrations/amazon-eks)
* [Google Cloud GKE](/integrations/google-cloud-gke)
* Azure AKS - supported through Kubernetes
# MCP Server
Source: https://docs.drdroid.io/integrations/mcp-server
Connect to a custom MCP (Model Context Protocol) server to extend DrDroid's capabilities with your own tools and data sources.
## Overview
MCP (Model Context Protocol) servers allow you to extend DrDroid's functionality by connecting to custom tools and data sources. This integration enables you to leverage your own MCP-compatible servers to provide additional context and capabilities to your playbooks and workflows.
## Prerequisites
Before setting up the MCP server integration, ensure you have:
* A running MCP server accessible via HTTP/HTTPS
* The base URL of your MCP server
* Any required authentication headers (if applicable)
* Network access from DrDroid to your MCP server
## Connection Setup
### Step 1: Prepare Your MCP Server
Ensure your MCP server is running and accessible. Your MCP server should be compatible with the Model Context Protocol specification.
### Step 2: Configure Base URL
Navigate to **Integrations > MCP Server** in the DrDroid platform.
#### Base URL Format
The base URL should be the root endpoint of your MCP server, **excluding** the `/mcp` path:
**Examples:**
* If your MCP server is at `https://app.render.com/mcp`, use: `https://app.render.com`
* If your MCP server is at `https://app.render.com/abc/mcp`, use: `https://app.render.com/abc`
* If your MCP server is at `http://localhost:8080/mcp`, use: `http://localhost:8080`
**Important Notes:**
* The URL must include the protocol (`http://` or `https://`)
* Do not include the `/mcp` endpoint path in the base URL
* The server must be accessible from DrDroid's network
### Step 3: Configure Authentication (Optional)
If your MCP server requires authentication, you can provide authentication headers in JSON format.
#### Authentication Headers Format
Enter a complete JSON object containing all required headers:
**Examples:**
```json theme={null}
{
"Authorization": "Bearer your-token-here"
}
```
```json theme={null}
{
"X-API-Key": "your-api-key",
"Authorization": "Bearer your-token"
}
```
```json theme={null}
{
"Authorization": "Basic dXNlcm5hbWU6cGFzc3dvcmQ=",
"X-Custom-Header": "custom-value"
}
```
**Important Notes:**
* Provide the complete JSON object with all required headers
* Use proper JSON formatting with double quotes
* Headers are case-sensitive
* This field is optional - only include if your MCP server requires authentication
### Step 4: Test and Save
1. Click **Test Connection** to verify that DrDroid can connect to your MCP server
2. If the test is successful, click **Save** to store the configuration
3. If the test fails, verify your base URL and authentication headers
## Usage
Once configured, your MCP server integration will be available for use in:
* **Playbooks**: Access MCP server tools and data in your automation workflows
* **Context**: Use MCP server data to provide additional context to AI assistants
* **Custom Actions**: Leverage MCP server capabilities in custom actions
## Troubleshooting
### Common Issues
**Connection Failed**
* Verify the base URL is correct and accessible
* Ensure the MCP server is running
* Check network connectivity between DrDroid and your server
**Authentication Errors**
* Verify authentication headers are properly formatted as JSON
* Check that all required headers are included
* Ensure tokens/keys are valid and not expired
**Invalid Base URL**
* Make sure the URL includes the protocol (`http://` or `https://`)
* Verify you're not including the `/mcp` path in the base URL
* Check for typos in the URL
### Network Requirements
* If using DrDroid Cloud, your MCP server must be accessible from the internet
* For self-hosted DrDroid deployments, ensure network connectivity to your MCP server
* Consider firewall rules and security groups that might block access
## Security Considerations
* Store authentication credentials securely
* Use HTTPS when possible to encrypt communication
* Regularly rotate API keys and tokens
* Implement proper access controls on your MCP server
* Monitor access logs for suspicious activity
## Support
If you encounter issues with your MCP server integration:
1. Check the troubleshooting section above
2. Verify your MCP server is compatible with the Model Context Protocol
3. Contact support at [support@drdroid.io](mailto:support@drdroid.io) for additional assistance
***
**Note**: This integration requires your MCP server to be compatible with the Model Context Protocol specification. Ensure your server implements the required MCP endpoints and follows the protocol standards.
# Query Grafana Mimir
Source: https://docs.drdroid.io/integrations/mimir
### Grafana Mimir
Mimir is an Open Source Timeseries Database supported by Grafana. It is compatible with Prometheus's query language PromQL.
### Integration
To get started with the integration, we currently support Mimir integration with the following parameters:
(a) Host: Must be url starting with http or https
(b) X-Scope-OrgId
(c) TLS Certificate Validation
### Adding to Playbook
When you want to add data from Mimir into a Playbook, select "Query Metrics from Mimir" in the Playbook.
### Configuring Mimir Task
You only need the PromQL query to run a task associated with Mimir.
### Seeing Output:
***
# Mongo Database (Atlas)
Source: https://docs.drdroid.io/integrations/mongo-database-atlas
This document outlines how to connect your MongoDB (Atlas) to DrDroid to query it from playbooks and investigations.
### Connection
**Prerequisites**: Obtain the database host, port, and credentials (username and password) with read access to the databases you want to query.
**Adding the connection**: Go to Integrations > MongoDB in the Playbooks dashboard. Enter your database connection details. This includes your connection string in the format of `mongodb+srv://:@.polos.mongodb.net`
**Testing the Integration**: Create a playbook that includes a step to list top 5 documents in a collection of your choice.
### Querying
After adding MongoDB as a connection, you can do the following:
* Run a query on MongoDB.
### Query Format
* Database
* Collection
* Filters
* Projection
* Sort Order
* Limit
* Timeout
# MS Teams
Source: https://docs.drdroid.io/integrations/ms-teams
You can send notifications to MS Teams using their "connectors".
Here are the steps to follow to receive the investigation summary directly into MS Teams:
### Step 1:
Create a webhook in your specific channel where you want to receive notifications. You can use this [documentation](https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook?tabs=newteams%2Cdotnet) by MS Teams as a reference on how to create webhooks.
### Step 2:
Select MS Teams as notification channel while setting up [Workflow](https://docs.drdroid.io/docs/workflows).
### Note:
MS Teams supports publishing of links and images currently using webhooks. It is not possible to send csv or txt files so you will receive the respective links for CSV & TXT files instead so you can open them and check it instantly.
# New Relic
Source: https://docs.drdroid.io/integrations/new-relic-access
To access your New Relic metrics and alerts data, you need to follow the below mentioned steps:
1. **Prerequisites**: Have your New Relic account ID and User API key ready.
2. **Configuring Playbooks**: Navigate to Integrations > New Relic in the Playbooks dashboard. Enter your account ID, User API key (format NRAK-\{}), and domain (api.newrelic.com or api.eu.newrelic.com).
3. **Testing the Integration**: Create a playbook that requests data from New Relic, such as application performance metrics, to verify the integration is working as expected.
Read more about how New Relic's User API key operates [here](https://docs.newrelic.com/docs/apis/intro-apis/new-relic-api-keys/).
# OpenSearch
Source: https://docs.drdroid.io/integrations/open-search
Connect DrDroid to your OpenSearch cluster for log search during investigations.
DrDroid connects to OpenSearch so DroidAgent can query logs during alert investigations. Add the integration from the [OpenSearch setup page](https://aiops.drdroid.io/integrations/open_search) or through the VPC agent.
## Connection via dashboard
Open **Agent Setup → Integrations → OpenSearch**, or go directly to [aiops.drdroid.io/integrations/open\_search](https://aiops.drdroid.io/integrations/open_search).
Choose one of the two connection types:
### OpenSearch Connection with Basic Auth
Use this when your cluster requires a username and password.
| Field | Description |
| -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| **Integration Name** | A label for this connector (e.g. `Production OpenSearch`). |
| **Protocol** | `http` or `https`. |
| **Host** | OpenSearch hostname, e.g. `my-opensearch.example.com` or `localhost`. Do not include the port in the host if you set **Port** separately. |
| **Port** | Cluster port, e.g. `9200`. |
| **Username** | Read-only user with access to the indices the agent should query. |
| **Password** | Password for that user. |
Save the form and test the connection.
### OpenSearch Connection (Host Only)
Use this when your cluster does not require basic authentication (for example, a VPC-restricted endpoint or a cluster behind another auth layer).
Fill in **Integration Name**, **Protocol**, **Host**, and **Port** the same way as above. Username and password are not required for this connection type.
## Connection via VPC agent
If you run DrDroid through the [VPC agent](https://github.com/DrDroidLab/drd-vpc-agent), add an OpenSearch entry to your `secrets.yaml` (copy from `credentials_template.yaml`):
```yaml theme={null}
connector_name:
type: "OPEN_SEARCH" # do not change
protocol: "https" # http or https
host: your-opensearch-host.example.com
username: your_username
password: your_password
port: 443 # optional
ssl_verify: "false" # optional (default false)
```
See the [OpenSearch section](https://github.com/DrDroidLab/drd-vpc-agent/blob/main/credentials/credentials_template.yaml#L56) in the credentials template for the full field list.
Restart or reload the agent after updating secrets so the new connector is picked up.
## Permissions
Use a dedicated read-only user. Grant access only to the indices and index patterns your on-call team expects the agent to query.
# Opsgenie integration
Source: https://docs.drdroid.io/integrations/opsgenie
## **Opsgenie:**
OpsGenie
## **Global API Key**
Step-1: Navigate to **Settings →App Settings → API key management**
Step-2: Create a new key with following access: Read, Create and update, Configuration access
Step-3: Share the key in Doctor Droid integrations page.
## **Team Level API Key:**
Step-1: Navigate to **Teams** page in Opsgenie platform
Step-2: Select the desired team
Step-3: Go to **Integrations** within that team
Step-4: Click **Add Integration**
Step-5: Select integration type as **API**
Step-6: Select **Assignee Team** and set a name for the integration
Step-7: **Enable** the integration
Step-8: Copy the generated **API key** and share it in Doctor Droid integrations page.
# PagerDuty integration
Source: https://docs.drdroid.io/integrations/pagerduty
## **PagerDuty:**
Step-1: Navigate to **Integrations →API Access Keys** under **Developer Tools.**
Step-2: Create a new key with **"read-only"** access.
Step-3: Share the key in Doctor Droid [integrations](https://aiops.drdroid.io/integrations) page.
# PostgreSQL Database
Source: https://docs.drdroid.io/integrations/postgresql-database
## Connection:
1. **Prerequisites**: Obtain the database host, port, and credentials (username and password) with read access to the databases you want to query.
2. **Adding the connection**: Go to Integrations > PostgreSQL in the Playbooks dashboard. Enter your database connection details. This includes your host, port, username and password.
3. **Testing the Integration**: Create a playbook that includes a step to run a simple SELECT query against your PostgreSQL database and verify the results are fetched correctly.
## Querying:
After adding postgreSQL as a connection, you can do the following:
* Run a query on PostgreSQL.
### PostgreSQL limited access
To restrict permissions to the users accessing PostgreSQL instance via Playbooks, we recommend creating a custom role with the minimal permissions to get the relevant data. Here are 3 queries that you can run in your pgSQL query console to create a new account:
#### Create a new user:
```bash bash theme={null}
CREATE USER demo_video WITH PASSWORD '%3v8923nv3yn5I';
```
#### Give required permissions to the user:
```bash bash theme={null}
GRANT SELECT ON table_name TO demo_video;
```
#### Verify permissions granted:
```bash bash theme={null}
SELECT *
FROM information_schema.role_table_grants
WHERE grantee = 'demo_video';
```
# Posthog
Source: https://docs.drdroid.io/integrations/posthog
Steps to integrate DrDroid with Posthog.
1. Go to [this page](https://us.posthog.com/project/54758/settings/project) after logging into Posthog.
1. Go to "Personal Keys" section
2. Create an API key.
3. Give the following scope: `query:read` , `event_definition:read`,`user:read`
2. Go to DrDroid portal
1. Add the key here.
2. Write the project ID.
3. Host should look like [https://app.posthog.com](https://app.posthog.com) or [https://us.posthog.com](https://us.posthog.com)
# Prometheus
Source: https://docs.drdroid.io/integrations/prometheus-raw-promql
Context: You can refer to this guide if you are looking to only add raw PromQL queries. If you have existing Grafana dashboards & configurations powered with a Prometheus source, directly import them into Playbooks along with it's configurations and filters using our .
### For version 9.1 and above:
1. **Prerequisites**: Ensure you have admin access to your Grafana instance and the ability to generate Service Accounts.
2. **Create Service Account**: In your Grafana dashboard, navigate to Admin >> Users & Access >> Service Accounts >> Create a Service Account
3. **Generate Service Account Key:** Within Service Account, create a new API key/token with Viewer permissions.
4. **Configuring Connection in Playbooks**: Go to Integrations > Grafana in the Playbooks platform. Enter your Grafana instance Host (Must be URL starting with http or https) and the API key you generated. The host should be accessible from the machine where the configuration is being added. (If it's being added from the Doctor Droid Cloud, then only Grafana instances accessible from internet can be used)
5. **Testing the Integration**: Test the connection and save the credentials.
Note: If you are using an older version of Grafana, you will be able to create an API key instead of Service Account key. Additionally, after 9.1, Grafana introduced a few breaking changes so please connect with us in case any of your functionalities are not working as expected.
### Note:
Post the successful integration, the platform will programmatically start fetching metadata from Grafana. This includes a list of data sources that are already within the Grafana platform.
# Overview
Source: https://docs.drdroid.io/integrations/remote-server-commands
Run terminal commands from UI using DrDroid
You can leverage DrDroid to run:
* Bash commands on remote server
* Run scripts on remote server
* Powershell commands on remote server \[Coming Soon]
* Commands on your local terminal from UI \[Coming Soon]
# Rootly
Source: https://docs.drdroid.io/integrations/rootly
Rootly is an incident management and response automation platform. You can forward incidents from Rootly into DrDroid so that DroidAgent can investigate and enrich them.
## Prerequisites
* An active **Rootly** account with permission to manage workflows / webhooks.
* Access to the DrDroid **dashboard** at [https://aiops.drdroid.io](https://aiops.drdroid.io).
## 1. Decide which incidents to send
We recommend starting with production-severity incidents only:
* Sev0 / Sev1 incidents
* Specific services or environments (e.g., `prod`, `us-east-1`)
This keeps the DrDroid alert stream focused while you evaluate the integration.
## 2. Configure a webhook in Rootly
1. In Rootly, go to **Workflows** or **Integrations**.
2. Create a **Webhook** (or HTTP) action that runs when an incident is created or updated.
3. Use your DrDroid alerts webhook URL.
4. Include in the payload:
* Incident title and description
* Severity / priority
* Service / component
* Tags / labels
See the [Rootly documentation](https://support.rootly.com) for configuration details.
## 3. Validate in DrDroid
1. Trigger a test incident in Rootly.
2. In DrDroid, open **Alerts Inbox** and confirm:
* The incident shows up as an alert/issue.
* Metadata (severity, service, tags) is correctly mapped.
Once wired, DrDroid can use **DroidAgent** flows (triaging, debugging, resolution) on incidents originating from Rootly.
# Sentry Integration
Source: https://docs.drdroid.io/integrations/sentry-access
Popular Error Tracking & Monitoring Software
To enable access to Sentry portal, you need to share an API key with us. Here is the process to get the API key:
### Step 1: Create an "Internal Integration":

### Step 2: Provide the following scopes:
* Project -- Read
* Issue & Event -- Read
* Organisation -- Read
### Step 3: Copy and paste the generated token (Red colour) in [DrDroid Integrations tab](https://aiops.drdroid.io/)
### Step 4: Only for Self-hosted sentry: Make sure to add the hostname in the integrations tab.
# Self-managed k8s cluster
Source: https://docs.drdroid.io/integrations/service-account-token
### Step 1: Create a Service Account
```
cat <.signoz.cloud`
* `https://.signoz.io`
4. Use this dashboard URL when configuring your integration.
#### **B. Self-Hosted Users**
1. Use the direct URL of your self-hosted SigNoz instance (e.g., `https://your-signoz-domain.com`).
2. Use this URL when configuring your integration.
**NOTE**: **`Do not use ingest or API endpoint URLs like /ingest or /api.`**
### 2. Generate an API Key
1. Navigate to **Settings > API Keys** in your SigNoz dashboard (Cloud or Self-Hosted).
2. Generate a new API key with appropriate permissions.
### 3. Network Access
* Ensure your network allows connections to your SigNoz instance.
**Reference:**\
[SigNoz Documentation – Getting Started with SigNoz Cloud](https://signoz.io/blog/opentelemetry-operator-complete-guide/)
# Custom Slack App
Source: https://docs.drdroid.io/integrations/slack-alerts
If you cannot install DrDroid provided Slack App, you can create your own custom Slack App too. Here are the steps for the same:
### Step 1: Generate the manifest
i. Go to Integrations -> New Integration -> Slack and click on `Get Manifest`
ii. Change the app name to whatever you want to keep
### Step 2: Creating Slack App and Manifest
i. Go to api.slack.com and access Your Apps.
ii. Select Create New App and choose From an app manifest.
iii. Pick your desired workspace, like DrDroid Community.
### Step 3: Configuring App Manifest
i. Switch to the JSON tab and delete the placeholder content. Paste copied manifest in the required fields in your app manifest.
ii. After updating the manifest, select Create to register the new Slack app.
### Step 4: Installing App to Workspace
i. Install the app to your workspace by clicking Install to Workspace and authorize the necessary permissions.
### Step 5: Retrieving Slack Keys
i. Once the app is installed, navigate to `OAuth & Permissions` to get the Bot User OAuth Token.
ii. Locate your App ID in the App Credentials section.
### Step 6: Finalizing Integration
i. Return to the Slack Integration Setup page in your application, and input the Bot User OAuth Token, App ID and all other required information.
ii. Test the connection to ensure your Slack integration is functioning correctly.
iii. Click Save to finalize the integration.
You've now successfully integrated Slack with your application, allowing for enhanced communication and automation features.
If you encounter any issues, double-check your host, OAuth token and app ID, and ensure that you authorized the correct permissions during the installation process.
# Slack App Integration
Source: https://docs.drdroid.io/integrations/slack-alerts-channel-access
If you do not use any on-call management tool and live your life on Slack, we've made it easy for you. Install our Slack app and boom, you're ready to go. 💥
## How to get started?
* Sign up at [DrDroid](https://aiops.drdroid.io).
* Add DrDroid app to your Slack workspace.
## Adding the bot to channel
* Once the app is installed, you should add the bot to any specific channel, start by typing **@DrDroid** in your alerts channel.
## Seeing alerts
Alerts received on any of these channels will be visible to you in the UI.
# SQL Databases
Source: https://docs.drdroid.io/integrations/sql-databases
1. **Prerequisites**: Obtain the database host, port, and credentials (username and password) with read access to the databases you want to query.
2. **Configuring Playbooks**: Go to Integrations > SQL Databases in the Playbooks dashboard. Enter your database connection details.
3. **Testing the Integration**: Create a playbook that includes a step to run a simple SELECT query against your database and verify the results are fetched correctly.
Connection String URI for different databases:
| Database | Connection String URI format |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| MySQL | `mysql+pymysql://user:pass@localhost:3306/db` |
| PostgreSQL | `postgresql+psycopg2://user:pass@localhost:5432/db` |
| Trino | `trino://user:pass@host:port/catalog/schema` |
| Athena (AWS) | `awsathena+rest://:@athena..amazonaws.com/?s3_staging_dir=` |
# VictoriaLogs
Source: https://docs.drdroid.io/integrations/victoria-logs
VictoriaLogs can be integrated with Doctor Droid using the host and login credentials.
### Integration
To get started with the integration, we currently support VictoriaLogs integration with the following parameters:
* Host
* Port
* Protocol
* Auth Headers
#### How to obtain the auth key?
Victoria Logs Integration in Doctor Droid is through the header you will be adding. In case your setup is without auth, just configure `{}`.
In case your setup needs auth, create the auth key with following steps:
* Join your login username and password to form the auth key -> username:password
* Base64 encode it. You can use [this website](https://www.base64encode.org/) for this.
* Your headers should look like `{"Authorization": "Basic "}`
#### Integrate Via VPC Agent
* Add Victoria Logs entry secrets/configmap file based on whether you are doing docker / k8s based setup.
* [Here](https://github.com/DrDroidLab/drd-vpc-agent/blob/main/credentials/credentials_template.yaml#L165) is the example of the secrets.yaml file for Victoria Logs integration.
* Escape the auth header before adding like this: `{\"Authorization\": \"Basic \"}`
#### Integrate directly
* Go [here](https://aiops.drdroid.io/integrations/victoria_logs) to add Victoria Logs credentials directly on the connector page.
* Add the auth header without adding any escape.
# Zenduty
Source: https://docs.drdroid.io/integrations/zenduty
Zenduty is an incident management and on-call scheduling platform. You can route alerts from Zenduty into DrDroid so that DroidAgent can triage and investigate them.
## Prerequisites
* An active **Zenduty** account with permission to manage services and integrations.
* Access to the DrDroid **dashboard** at [https://aiops.drdroid.io](https://aiops.drdroid.io).
## 1. Create or pick a service in DrDroid
1. Go to **Alerts Inbox** or **Service Catalog** in DrDroid.
2. Ensure you have a service that corresponds to the Zenduty service you want to connect.
## 2. Configure webhook in Zenduty
1. In Zenduty, open the service you want to integrate.
2. Go to **Integrations** and add a new **Webhook** (or HTTP) integration.
3. Use your DrDroid alerts webhook URL (the same one used by other alert sources).
4. Configure the payload to include:
* Service name / identifier
* Severity / priority
* Summary / description
* Tags or components (if available)
Refer to the [Zenduty Webhook documentation](https://support.zenduty.com) for detailed steps.
## 3. Verify alerts in DrDroid
1. Trigger a test incident in Zenduty.
2. In DrDroid, open **Alerts Inbox** and confirm that:
* The alert appears with the right service and severity.
* It is grouped into an issue if similar alerts exist.
Once connected, you can use **DroidAgent** to triage Zenduty-originated alerts the same way as other alert sources.
# Alerts Inbox
Source: https://docs.drdroid.io/monitor/alerts-inbox
The **Alerts Inbox** is your central dashboard for viewing and managing alerts generated from multiple sources such as monitoring tools, bots, and internal systems. It helps on-call engineers prioritize and debug issues quickly by surfacing actionable alerts in a unified view.
It has all the alerts you have received on Slack in different channels where you have added @drdroid.
| Column | Description |
| :------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Title** | Alert message or headline. It includes a clickable link to the alert detail page. |
| **Severity** | Indicates urgency. Examples: `Critical`, `Warning`, `Info`, `Unspecified`, or icons/colors. Helps prioritize response. |
| **Status** | Lifecycle stage of the alert:• `New` – Not yet handled• `Acknowledged` – Someone has just started working on it• `Triaged` – Someone has debugged the alert• `Escalated` – It has been escaled to the senior engineer• `Remediated/Resolved` – The issue has been resolved permanently or temporarily• `Hidden` – Manually snoozed or ignored |
| **Type** | Origin system for the alert (e.g., `Rollbar`, `custom_bot`, `hipctl`). |
| **Channel** | Slack channel of the alert (`#logs`, `#monitoring`, etc.). |
| **Timestamp** | When the alert was triggered. Useful for time-based debugging. |
| **Actions** | Contextual actions available per alert (explained below). |
### 🎬 Available actions
Each alert row include three actios and mentioned in the following:
| Action | Description |
| :--------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------ |
| **🧠 Debug with AI** | Launches DrDroid’s AI debugger. Automatically runs queries, checks logs/metrics, and generates a possible root cause analysis. |
| **📘 Execute Runbook** | Opens a suggested runbook (step-by-step remediation guide) mapped to the alert fingerprint/type. You can run individual tasks or steps. |
| **👁️ Hide Alert** | Temporarily removes the alert from active view. Useful for noise suppression or marking duplicates. It may still be accessible in search/history. |
## 💡 Pro Tips
* Prioritize alerts based on **Severity** and **Status**.
* Use **AI Debug** for high-volume or vague alerts—it summarizes findings for you.
* Apply **Channel** and **Type** filters when triaging cross-system incidents.
* Use **Runbook Execution** for known, recurring issues to act faster.
***
What’s Next
* [Alerts Details](/agent/alert-details)
* [Alert Grouping](/monitor/alert-grouping)
# Webhook Alerts
Source: https://docs.drdroid.io/monitor/webhook-alerts
Send alerts directly to Doctor Droid from your monitoring systems via webhook integration.
## 🔗 Webhook Endpoint
**URL:** `https://playbooks.drdroid.io/alert-middleware/webhooks/alert/ingest`
**Method:** `POST`
**Content-Type:** `application/json`
## 🔐 Authentication
Use Bearer token authentication. Get your API token from the **API Keys** section in [aiops.drdroid.io](https://aiops.drdroid.io).
**Header:** `Authorization: Bearer `
## 📝 Request Format
### Required Fields
| Field | Type | Description |
| --------------- | ------ | --------------------------------------------------- |
| `alert_title` | string | Concise description of the alert |
| `alert_message` | string | Detailed message or description |
| `severity` | string | `critical`, `warning`, `info` |
| `timestamp` | string | ISO 8601 timestamp (e.g., `"2024-01-15T10:30:00Z"`) |
### Optional Fields
| Field | Type | Description |
| ---------- | ------ | --------------------------------------------- |
| `source` | string | Source system (e.g., `"datadog"`, `"sentry"`) |
| `tags` | object | Key-value pairs for categorization |
| `metadata` | object | Additional context or data |
## 📋 Example Request
```bash theme={null}
curl -X POST "https://playbooks.drdroid.io/alert-middleware/webhooks/alert/ingest" \
-H "Authorization: Bearer " \
-H "Content-Type: application/json" \
-d '{
"alert_title": "Datadog Connection Failed",
"alert_message": "Unable to connect to Datadog",
"severity": "critical",
"timestamp": "2024-01-15T10:30:00Z",
"drd_alert_source": "Datadog"
}'
```
## 🔧 Platform Integrations
### NewRelic Setup
1. Go to **Alerts** > **Destinations** in the left sidebar
2. Click **Add a webhook destination**
3. Enter the webhook URL: `https://playbooks.drdroid.io/alert-middleware/webhooks/alert/ingest`
4. Set **Authentication Type** to **Bearer Token**
5. Enter your API token
6. Add this destination to your alert policies alongside existing alerting systems
**Coralogix:**
1. Click on the **Data Flow** dropdown in the top menu bar
2. Select **Outbound Webhooks**
3. Create a generic webhook with POST method
4. In the editing message section, add the authorization token as shown below:
**Grafana:**
1. In the left menu bar, go to **Alerting** > **Contact Points**
2. Click **Create Contact Point**
3. Add webhook with configuration similar to the screenshot below
4. It is mandatory to set the optional webhook settings in Grafana as shown in the screenshot
5. Save the contact point
**Sentry:**
1. Go to **Settings** > **Integrations**
2. Click **Create New Integration** of type **Webhook**
3. Set method type as **POST**
4. Set authentication method as **Bearer Token**
**Datadog:**
1. Go to **Integrations** > **Webhooks**
2. Click **New Webhook**
3. Configure the custom header to include the authorization bearer token as shown below:
**Other platforms support Bearer token authentication natively:**
* **Elasticsearch** - Configure webhook with Bearer token authentication
## 📊 Response Codes
| Status Code | Description |
| ----------- | ------------------------------------------- |
| `200` | Alert successfully ingested |
| `400` | Bad request - invalid payload format |
| `401` | Unauthorized - invalid or missing API token |
| `429` | Rate limit exceeded |
| `500` | Internal server error |
## 📚 Related Documentation
* [Alerts Inbox](/monitor/alerts-inbox) - View and manage incoming alerts
* [Alert Details](/agent/alert-details) - Debug and analyze specific alerts
* [Integrations](/integrations/integrations) - Connect with monitoring tools and services
# Doctor Droid Projects
Source: https://docs.drdroid.io/open-source/open-source
At DrDroid, we love open source and actively contribute to the community. We maintain several open source projects that help developers build better observability and automation solutions.
## Our Projects
1. [Playbooks](https://github.com/DrDroidLab/playbooks) -- Runbook automation platform with an easy-to-use drag-and-drop builder and deep observability integrations.
2. [Context Builder](https://github.com/DrDroidLab/context-builder) -- A CLI tool that extracts metadata from your production infrastructure tools (Grafana, Kubernetes, databases, etc.) and generates structured markdown files to provide coding agents with instant context about your system.
3. [Status Page Aggregator](https://github.com/DrDroidLab/status-page-aggregator) -- Get alerted if any of your vendors/integrations are down (\~50+ vendors already added to the library).
4. [DrDroid Debugging Toolkit](https://github.com/DrDroidLab/drdroid-debug-toolkit/) -- An SDK to accelerate custom debugging and automation scripts, written as code. Check out this [Example DIY AI Agent](https://github.com/DrDroidLab/slack-ai-bot-builder) built using this toolkit.
5. [MCP Servers](https://github.com/DrDroidLab/drd-vpc-agent/) -- Connect your Grafana, k8s cluster, Signoz other observability tools to AI in 1-click.
6. [Prometheus Alert Templates](https://github.com/DrDroidLab/prometheus-alert-templates/) -- Prometheus Alert Templates for Popular infrastructure components with ML model based threshold recommendations
7. [Kenobi](https://github.com/DrDroidLab/kenobi) -- Event analytics platform for real-time alerting and tracking.
Like what you see? Give it a spin, and don't forget to ⭐!
# Build Your Own AI Debugging Agent
Source: https://docs.drdroid.io/open-source/sre_ai_assistant
Use Doctor Droid' open source toolkit to go live in 30 minutes
## Doctor Droid's AI Agent toolkit enables:
* Alert driven runbook automation
* Natural language querying and actions on your infra and monitoring stack
* In-built analysis for metrics, log patterns and anomalies
## What you need?
* Slack workspace
* Local Docker installation
* Any IDE / Editor
* An OpenAI Key
## Quick Start
* Clone the toolkit repository - [https://github.com/DrDroidLab/slack-ai-bot-builder](https://github.com/DrDroidLab/slack-ai-bot-builder)
* Follow the instructions on the README to setup your runbook automation workflow or the chatbot
* You can use Doctor Droid's MCP servers - [https://github.com/DrDroidLab/monitoring-mcp-servers/](https://github.com/DrDroidLab/monitoring-mcp-servers/) or use the official ones for your stack.
## Need help?
* Join our [Discord](https://discord.gg/AQ3tusPtZn) server.
* Send us email - [support@drdroid.io](mailto:support@drdroid.io)
* Setup a call with our team - [https://calendly.com/dipesh-droid/](https://calendly.com/dipesh-droid/)
# Audit
Source: https://docs.drdroid.io/policies/audit
Export task execution information for any users for auditing purposes
In order to get executions for audit purposes, first you need to have an API key of the platform. You can get that [here](https://aiops.drdroid.io/api-keys).
Once you have the API token, make a request to this endpoint: `/playbooks-engine/audit_log/trigger`
Here is a curl to make it simpler:
```bash bash theme={null}
curl --location 'https://app.drdroid.io/playbooks-engine/audit_log/trigger' \
\--header 'Authorization: Bearer ' \
\--header 'Content-Type: application/json' \
\--data-raw '{
"recipient_email_ids": [], // Send to emails
"users": [], // Filter by users who have executed tasks
"meta": {
"time_range": {
"time_geq": 1744528831, // From (Unix time in seconds)
"time_lt": 1744888031 // To (Unix time in seconds)
}
}
}'
```
To get tasks executed by DrDroid, pass `Drdroid agent` in users.
[Here](https://www.epochconverter.com/) is a website to make it simpler to get `To` and `From` dates.
# Source Code Security
Source: https://docs.drdroid.io/policies/code-security
This document highlights how DrDroid handles source code securely.
Giving access to source code obviously raises questions about security. DrDroid handles source code with utmost care and security.
### How Droid Agent handles your code?
Ephemeral machines:
* When the agent wants to analyse the code, it spawns a Micro VM using an industry standard tool - [E2B](https://e2b.dev/).
* The code is cloned into the VM and is analysed using our coding agent (built on Claude Code). The VM is destroyed after the analysis is complete.
* Each session is unique and has no context transfer from previous sessions or to Claude for any training.
* The code is not stored on our cloud and its copy is destoyed along with the VM.
* This process is repeated from scratch each time the agent decides to analyse the code with no caching or backup.
Permission Controls:
* The PR is generated by pushing into a branch cut from your main/default branch. Agent does not have access to make changes to the default branch.
* Any rules you have created on your repositories to prevent direct push into main branch without a PR strictly apply here also.
* Pushing the new branch to Github and creating the PR are done outside of the coding agent's scope by the platform, hence ensuring agent does no.
# Data Retention
Source: https://docs.drdroid.io/policies/data-handling
At , we prioritize the security, privacy, and control of our users’ data. This outlines our commitment to ensuring that customers have full flexibility over their data retention while maintaining compliance with industry best practices.
### **1. Data Retention Period & Customer Control**
DrDroid enables customers to retain data for a period of their choosing, up to **90 days** from the time of data generation. Customers have the flexibility to configure their data retention settings within our platform to align with their internal policies and regulatory requirements.
### **2. No Ownership or Long-Term Storage**
DrDroid does **not** claim ownership of any customer data processed within our system. We act purely as a data processor, ensuring that all stored data remains under the full control of our customers. Furthermore, we do **not** store customer data in long-term cold storage beyond the configured retention period.
### **3. Automatic Data Deletion**
Once the chosen retention period (up to 90 days) expires, data is permanently and irreversibly deleted from all DrDroid systems, including backups and logs. There is no archival or cold storage of customer data beyond this timeframe.
### **4. Customer-Driven Deletion**
Customers may manually delete their data at any time before the expiration of their configured retention period. Once deleted, data is immediately removed from our active systems and permanently purged from backups within a reasonable timeframe.
### **5. Data Security During Retention**
While data is retained within the specified period, DrDroid implements **industry-leading security measures**, including encryption in transit and at rest, to safeguard customer data from unauthorized access.
### **6. Compliance & Transparency**
Our data retention practices are designed to meet compliance requirements for various security and privacy frameworks. Compliance with industry standards like **GDPR, SOC 2, HIPAA (where applicable), and other industry standards** is in our near future pipeline. We provide customers with full transparency regarding data handling practices to support their regulatory obligations.
### **7. No Data Monetization**
DrDroid does not use, sell, or share customer data for any purpose other than providing our core observability and investigation services.
### **8. Policy Updates**
This policy may be updated periodically to reflect improvements in our data handling practices. Customers will be notified of any material changes in advance.
For further inquiries regarding this policy, please contact us at [support@drdroid.io](mailto:support@drdroid.io).
# Privacy Policy
Source: https://docs.drdroid.io/policies/privacy-policy
Deep Sea Tech Inc. (together with its subsidiaries and affiliates – “DrDroid”, "Ringwraith Tech Private Limited", “we”, “our” or “us”) puts great efforts in making sure that the personal data processed by us is safe and used properly, and that our data practices are properly communicated to our customers, users and prospects.
This Privacy Policy describes how we collect, store, use and disclose the following types of personal data:
(i) Customer Data: data relating to identifiable individuals (“Personal Data”), which we analyze, process and manage on our customers’ behalf, as part of the DrDroid services (“Services”). Specifically, this is data which is related to their application health, infrastructure health and product health, as well as data submitted by our customers (including by connecting their systems with the Services);
(ii) DrDroid User Data: account, contact and activity data relating to individuals who use the DrDroid platform, application, and other tools and features provided by us as part of the Services (collectively – “Platform”);
(iii) DrDroid Website Data: data relating to our customers, visitors of our website ([www.drdroid.io](http://www.drdroid.io)), participants at our events, and any other prospective customer or partner who visits or otherwise interacts with any of our websites, online ads and content, emails or communications under our control (“Sites”).
Specifically, this Privacy Policy describes our practices regarding –
1. Data Collection & Processing
2. Data Uses
3. Data Location
4. Data Retention
5. Data Sharing
6. Cookies and Tracking Technologies
7. Communications
8. Data Security
9. Data Subject Rights
10. Data Controller/Processor
11. Additional Notice & Contact Details
By using the Services, you hereby warrant and represent that you have read, understand and agree to this Privacy Policy and the Terms of Service and that you are over 18 years of age. PLEASE DO NOT USE, INSTALL OR ACCESS THE SERVICES IF YOU DO NOT AGREE TO THIS PRIVACY POLICY.
### 1. Data Collection & Processing
(i) Customer Data: Our Services enable DrDroid customers to improve their application, infrastructure and product health. To provide insights and recommendations related to the same, the data shared by the user with us related to their company, refers to the Customer Data.
This includes, but not limited to alerts, metrics, events, logs, traces, or any other information that helps investigate and monitor the health of their applications.
Accordingly, to the extent that the EU’s General Data Protection Regulation (GDPR), California Consumer Privacy Act (CCPA), UK Data Protection Act (UKDPA) or any similar laws apply, our customer will be deemed the ‘data controller’ (under the GDPR, UKDPA and similar laws) or ‘business’ (under the CCPA or similar laws) of such Customer Data; and DrDroid will be deemed the ‘data processor’ or ‘service provider’ when processing such data.
(ii) DrDroid User Data: We collect and generate the following types of personal data concerning users of our Platform –
* user account information (e-mail address and, when applicable, hashed password);
* profile and contact information (name, company, e-mail, and additional information and media submitted by them, their teammates or their organization); and
* Platform usage information (connectivity, technical and aggregated usage data, such as user agent, IP addresses, device data (like type, OS, device id, browser version, locale and language settings used), activity logs, session recordings, and the cookies installed or utilized on their device;
Whilst DrDroid processes such DrDroid User Data on its customers’ behalf (where it is included in Customer Data), we also use it for our own purposes, as described in Section 2 below. Accordingly, to the extent applicable – our customer will be deemed the ‘data controller’ or ‘business’ with respect to such data; DrDroid will also be deemed an independent and separate ‘data controller’ or ‘business’ with respect to such data; and with respect to those portions or copies of DrDroid User Data that we process on behalf of our customer – we will also be deemed a ‘data processor’ or ‘service provider’.
(iii) DrDroid Website Data: We collect and generate the following types of personal data concerning our website visitors, customers and prospects –
* Website usage information (connectivity, technical and aggregated usage data, such as user agent, IP addresses, device data (like type, OS, device id, browser version, locale and language settings used), activity logs, session recordings, and the cookies and pixels installed or utilized on their device;
* Customer account information (contact, contractual and billing details concerning our customers, which may also contain the details of their internal focal persons who directly engage with DrDroid concerning their organizational account, e.g. the account administrators, billing contacts and authorized signatories on behalf of the customer; as well as the customer’s needs and preferences, as identified to us or recognized through our engagement with them);
* Information concerning our customers and prospects (contact and business details, our communications with such customers and prospects (correspondences, call and video recordings, and analyses thereof), as well as any needs, preferences, attributes and insights relevant to our potential engagement).
* We collect such data either automatically, through the data subject’s interaction with us or with our website, Platform or Services; or through third party services, social media, analytics tools, events we organize or participate in, and other business initiatives.
### 2. Data Uses
DrDroid processes Customer Data, and the personal data contained in it, strictly on our customer’s behalf, in accordance with their reasonable instructions.
We use other types of Personal Data (DrDroid User Data and DrDroid Website Data) as necessary for the performance of our Services; to comply with our legal and contractual obligations; and to support our legitimate interests in maintaining and improving our Services, e.g. in understanding how our Services are used and how our campaigns are performing, and gaining insights which help us dedicate our resources and efforts more efficiently; in marketing, advertising and selling our Services; providing customer service and technical support; and protecting and securing our customers, users, visitors, prospects, ourselves and our Services.
If you reside or are using the Services in a territory governed by privacy laws under which “consent” is the only or most appropriate legal basis for the processing of Personal Data as described herein (in general, or specifically with respect to the types of Personal Data you expect or elect to process or have processed by or via the Services, e.g. ‘special categories’ under the GDPR), your acceptance of our Terms and Conditions and this Privacy Policy will be deemed as your consent to the processing of your Personal Data for all purposes detailed in this Policy. If you wish to revoke such consent, please contact us at [privacy@drdroid.io](mailto:privacy@drdroid.io).
We do not sell your personal information for the intents and purposes of the California Consumer Privacy Act (CCPA).
Specifically, we use DrDroid User Data and DrDroid Website Data for the following purposes:
* To facilitate, operate, and provide our Services;
* To train our customer and user-facing staff;
* To authenticate the identity of our users, and to allow them access to our Services;
* To provide our customers and users with assistance and support;
* To gain a better understanding on how individuals use and interact with our Sites and Services, and how we could improve their and others’ user experience, and continue improving our products, offerings and the overall performance of our Services;
* To facilitate and optimize our marketing campaigns, ad management and sales operations, and to manage and deliver advertisements for our products and services more effectively, including on other websites and applications. Such activities allow us to highlight the benefits of using our Services, and thereby increase your engagement and overall satisfaction with our Services. This includes contextual, behavioral and interests-based advertising based on your activity, preferences or other data available to us or to our business partners;
* To contact our customers, users and prospects with general or personalized service-related messages, as well as promotional messages that may be of specific interest to them (as further described in Section 7 below);
* To facilitate, sponsor and offer certain events, contests and promotions;
* To support and enhance our data security measures, including for the purposes of preventing and mitigating the risks of fraud, error or any illegal or prohibited activity;
* To create aggregated statistical data, inferred non-personal data, or anonymized or pseudonymized data (rendered non-personal and non-identifiable), which we or our business partners may use to provide and improve our respective services, or for any other purpose; and
* To comply with applicable laws and regulations.
### 3. Data Location
We and our authorized Service Providers (defined below) maintain, store and process Personal Data in the United States of America and other locations, as reasonably necessary for the proper performance and delivery of our Services, or as may be required by law.
While privacy laws may vary between jurisdictions, DrDroid and its affiliates and Service Providers are each committed to protect Personal Data in accordance with this Privacy Policy and customary industry standards, regardless of any lesser legal requirements that may apply in their jurisdiction.
### 4. Data Retention
We retain Customer Data strictly on our customer’s behalf, in accordance with their reasonable instructions.
We retain DrDroid User Data and DrDroid Website Data for as long as it is reasonably necessary in order to maintain and expand our relationship and provide you with our Services and offerings; in order to comply with our legal and contractual obligations; or to protect ourselves from any potential disputes (i.e. as required by laws applicable to log-keeping, records and bookkeeping, and in order to have proof and evidence concerning our relationship, should any legal issues arise following your discontinuance of use), all in accordance with our data retention policy.
Please note that except as required by applicable law or our specific agreements with you, we will not be obligated to retain your Personal Data for any particular period, and we are free to securely delete it or restrict access to it for any reason and at any time, with or without notice to you. If you have any questions about our data retention policy, please contact us by e-mail at [privacy@drdroid.io](mailto:privacy@drdroid.io).
### 5. Data Sharing
Legal Compliance: In exceptional circumstances, we may disclose or allow government and law enforcement officials access to your Personal Data, in response to a subpoena, search warrant or court order (or similar requirement), or in compliance with applicable laws and regulations. Such disclosure or access may occur if we believe in good faith that: (a) we are legally compelled to do so; (b) disclosure is appropriate in connection with efforts to investigate, prevent, or take action regarding actual or suspected illegal activity, fraud, or other wrongdoing; or (c) such disclosure is required to protect our legitimate business interests, including the security or integrity of our products and services.
Service Providers: We may engage selected third party companies and individuals to perform services complementary to our own. Such service providers include hosting and server co-location services, communications and content delivery networks (CDNs), billing and payment processing services, fraud detection and prevention services, web analytics, e-mail distribution and monitoring services, session or activity recording services, remote access services, performance measurement, data optimization and marketing services, social and advertising networks, content providers, e-mail, voicemails, support and customer relation management systems, and our legal, financial and compliance advisors (collectively, “Service Providers“).
Our Service Providers shall each be deemed as a ‘data processor’ or ‘service provider’ in circumstances where DrDroid assumes the role of ‘data controller’; and where DrDroid acts as the ‘data processor’ or ‘service provider’ for our customer, the Service Provider shall be deemed as our ‘sub-processor’ or ‘service provider’ (as further described in Section 10 below).
Accordingly, these Service Providers may have access to DrDroid User Data and Website Data; and if we have expressly listed them in our Sub-Processor List, they may also have access to Customer Data — all depending on each of their specific roles and purposes in facilitating and enhancing our Services, and may only use it for such limited purposes as determined in our agreements with them.
When our Service Providers contact you in order to offer or promote our Services, they may additionally interest you in their own services. Should you decide to engage in such activities with the Service Provider, please note that such engagement is beyond the scope of DrDroid's Terms and Privacy Policy and will therefore be covered by our Service Provider’s Terms and Privacy Policy.
Third Party Websites and Services: Our Sites and Platform may include links to third party websites, and integrations with third party services. Such websites and third party services, and any information you process, submit, transmit or otherwise use with such websites and third party services, are governed by such third party’s terms and privacy practices and policies, and not by this Privacy Policy. We encourage you to carefully read the terms and privacy policies of such website and third party services.
Sharing Personal Data with our Customers and other Users: Customer Data is typically shared and is available to the users belonging to such customer’s account. DrDroid User Data is shared with the administrator of the customer’s account to which such user belongs (including data and communications concerning such user’s account). In such cases, sharing such data means that the administrator(s) or other users of the same account may access it on behalf of the customer, and will be able to monitor, process and analyze the Personal Data contained therein. This includes instances where you may contact us for help in resolving an issue specific to a team of which you are a member (and which is managed by the same customer).
Please note that DrDroid is not responsible for and does not control any further disclosure, use or monitoring by or on behalf of the customer, that itself acts as the ‘data controller’ of such data (as further described in Section 10 below).
Protecting Rights and Safety: We may share Personal Data with others if we believe in good faith that this will help protect the rights, property or personal safety of DrDroid, any of our users or customers, or any members of the general public.
DrDroid Subsidiaries and Affiliated Companies: We may share Personal Data internally within our group, for the purposes described in this Privacy Policy. In addition, should DrDroid or any of its subsidiaries or affiliates undergo any change in control or ownership, including by means of merger, acquisition or purchase of substantially all or part of its assets, Personal Data may be shared with or transferred to the parties involved in such an event. If we believe that such change in control might materially affect your Customer Data or Personal Data then stored with us, we will notify you of this event and the choices you may have via e-mail or prominent notice on our Services.
For the avoidance of doubt, DrDroid may share DrDroid User Data, Website Data in additional manners, pursuant to your explicit approval, or if we are legally obligated to do so, or if we have successfully rendered such data non-personal, non-identifiable and anonymous. We may transfer, share or otherwise use non-personal and non-identifiable data at our sole discretion and without the need for further approval.
### 6. Cookies and Tracking Technologies
We and our Service Providers use cookies and other technologies for performance, tracking, analytics and personalization purposes. We may share non-identifiable / aggregated extracts of such information with our partners for our legitimate business purposes.
Cookies are packets of information sent to your web browser and then sent back by the browser each time it accesses the server that sent the cookie. Some cookies are removed when you close your browser session. These are the “Session Cookies”. Some last for longer periods and are called “Persistent Cookies”. We use both types.
We use Persistent Cookies to remember your log-in details and make it easier for you to log-in the next time you access the Platform. We may use this type of cookies and Session Cookies for additional purposes, to facilitate the use of the Services’ features and tools.
Whilst we do not change our practices in response to a “Do Not Track” signal in the HTTP header from a browser or mobile application, you can manage your cookies preferences, including whether or not to accept them and how to remove them, through your browser settings. Please bear in mind that disabling cookies may complicate or even prevent you from using the Services.
We also use analytics tools, including Google Analytics and Mixpanel. These tools help us understand users’ behavior on our Sites and Platform, including by tracking page content, and click/touch, movements, scrolls and keystroke activities.
Further information about the privacy practices of our analytics service providers is available at: [www.google.com/policies/privacy/partners/](http://www.google.com/policies/privacy/partners/) and [https://mixpanel.com/terms/](https://mixpanel.com/terms/).
Further information about your option to opt-out of these analytics services is available at: [https://tools.google.com/dlpage/gaoptout](https://tools.google.com/dlpage/gaoptout) and [https://mixpanel.com/optout](https://mixpanel.com/optout).
Please note that if you get a new computer, install a new browser, erase or otherwise alter your browser’s cookie file (including upgrading certain browsers), you may also clear the opt-out cookies installed once you opt-out, so an additional opt-out will be necessary to prevent additional tracking.
### 7. Communications
We engage in service and promotional communications, through e-mail, phone, SMS and notifications.
Service Communications: We may contact you with important information regarding our Services. For example, we may send you notifications (through any of the means available to us) of changes or updates to our Services, billing issues, service changes, log-in attempts or password reset notices, etc. Our customers, and other users on the same customer account, may also send you notifications, messages and other updates regarding their or your use of the Services. Such notifications and messages may also be sent by them to their own customers (for example, invites, recordings or meeting summaries created through our Services). You can typically control your communications and notifications settings from your DrDroid User profile settings, or otherwise in accordance with the instructions included in the communications sent to you. Please note that you will not be able to opt-out of receiving certain service communications which are integral to your use (like password resets or billing notices).
Promotional Communications: We may also notify you about new features, additional offerings, events, special opportunities or any other information we think you will find valuable, as our customer, user or prospect. We may provide such notices through any of the contact means available to us (e.g. phone, mobile or e-mail), through the Services, Platform or Sites, or through our marketing campaigns on any other sites or platforms.
If you do not wish to receive such promotional communications, you may notify DrDroid at any time by sending an e-mail to: [privacy@drdroid.io](mailto:privacy@drdroid.io), changing your communications preferences in your User Profile settings, or by following the “unsubscribe”, “stop”, “opt-out” or “change e-mail preferences” instructions contained in the promotional communications you receive.
### 8. Data Security
We and our hosting services implement systems, applications and procedures to secure your personal data, to minimize the risks of theft, damage, loss of information, or unauthorized access or use of information.
These measures provide sound industry standard security. However, although we make efforts to protect your privacy, we cannot guarantee that our Sites, Platform or Services will be immune from any wrongdoings, malfunctions, unlawful interceptions or access, or other kinds of abuse and misuse.
### 9. Data Subject Rights
Individuals have the right to access, delete or transfer their Personal Data that we have collected and retained. To exercise these rights, individuals may contact us at [privacy@drdroid.io](mailto:privacy@drdroid.io). We will respond to all data access, deletion, and transfer requests in a timely manner, and we will take all necessary steps to comply with the request, subject to any legal or contractual obligations that may limit our ability to do so. If you are a customer of ours, we may require further information or clarification to verify your identity and to ensure that we are responding to the correct person. In order to help us comply with your request, please provide as much information as you can about the specific data you are seeking and the context in which it was provided.
In addition, we will provide customers with a mechanism to access, delete or transfer their Personal Data through our platform, if this is feasible from a technical and operational standpoint. If it is not feasible, we will provide individuals with an explanation for the same.
Please note that when you ask us to exercise any of your rights under this policy or applicable law, we may need to ask you to provide us certain credentials to make sure that you are who you claim you are, to avoid disclosure to you of personal information related to others and to ask you to provide further information to better understand the nature and scope of data that you request to access. Such additional data will be then retained by us for legal purposes (e.g. as proof of the identity of the person submitting the request), in accordance with Section 4 above.
We may redact from the data which we will make available to you, any personal data related to others.
If you would like to make any requests or queries regarding Personal Data that we process on our customer’s behalf, please contact the administrator of such customer’s account directly. For example, if you are our customer’s customer or prospect, or if you are a user of DrDroid on behalf of our customer, and wish to access, correct, or delete data processed by DrDroid on behalf of our customer, please direct your request to the relevant customer (who is the “data controller” of such data – see Section 10 below). Note that if you do contact us, we may share your communications with our customer and its account users; and that we may also share the contact details of the account administrator with individuals who sent us such a request or query relating to this account.
### 10. Data Controller/Processor
Certain data protection laws and regulations, such as the GDPR or the CCPA, typically distinguish between two main roles for parties processing Personal Data: the “data controller” (or under the CCPA, “business”), who determines the purposes and means of processing; and the “data processor” (or under the CCPA, “service provider”), who processes the data on behalf of the data controller (or business). Below we explain how these roles apply to our Services, to the extent that such laws and regulations apply.
DrDroid is the “data controller” of DrDroid Website Data. With respect to such data, we assume the responsibilities of the data controller (solely to the extent applicable under law), as set forth in this Privacy Policy. In such instances, our Service Providers processing such data will assume the role of “data processor”.
DrDroid is the “data processor” of Customer Data, which we process on behalf of our customer (who is the “data controller” of such data; and our Service Providers who process such Customer Data on our behalf are the “sub-processors” of such data.
DrDroid is both a “data controller” and “data processor” of DrDroid User Data. Such data is processed by DrDroid for its own purposes (as described in Section 2 above), as an independent ‘controller’; whilst those certain portions of it which are included in Customer Data will be processed by us on our customer’s behalf, as a ‘processor’.
Accordingly, DrDroid processes Customer Data strictly in accordance with such customer’s reasonable instructions and as further stipulated in our Data Processing Addendum and other commercial agreements with such customer. The customer, as controller of such data, will be responsible for meeting any legal requirements applicable to data controllers (such as establishing a legal basis for processing and responding to Data Subject Rights requests concerning the data they control).
For the avoidance of doubt, each customer is solely responsible for providing adequate notice to their account users and customers whose data may be contained in Customer Data – including sufficient reference to the processing of their Personal Data via the Services, and any other information necessary to comply with all applicable privacy and data protection laws; and to obtain all approvals and consents from such individuals as required under such laws.
### 11. Additional Notices
Updates and Amendments: We may update and amend this Privacy Policy from time to time by posting an amended version of our Services. The amended version will be effective as of the date it is published. We will provide prior notice if we believe any substantial changes are involved via any of the communication means available to us or via the Sites, Platform and/or Services. After such notice period, all amendments shall be deemed accepted by you.
External Links: While our Sites, Platform and/or Services may contain links to other websites or services, we are not responsible for their privacy practices. We encourage you to pay attention when you leave our Sites, Platform and/or Services for the website or application of such third parties, and to read the privacy policies of each and every website and service you visit. This Privacy Policy applies only to our Sites, Platform and/or Services.
Our Services are not designed to attract children under the age of 16: We do not knowingly collect Personal Data from children and do not wish to do so. If we learn that a person under the age of 16 is using the Sites, Platform and/or Services, we will attempt to prohibit and block such use and will make our best efforts to promptly delete any Personal Data stored with us with regard to such child. If you believe that we might have any such data, please contact us by e-mail at [privacy@drdroid.io](mailto:privacy@drdroid.io).
Data Protection Officer: DrDroid has appointed Mr. Siddarth Jain as our Data Protection Officer, for monitoring and advising on DrDroid’s ongoing privacy compliance and serving as a point of contact on privacy matters for data subjects and supervisory authorities. If you have any comments or questions regarding our Privacy Policy, if you have any concerns regarding your Privacy, or if you wish to make a complaint about how your personal data is being processed by DrDroid, you can contact [privacy@drdroid.io](mailto:privacy@drdroid.io).
Questions, concerns or complaints: If you have any comments or questions regarding our Privacy Policy, or if you have any concerns regarding your Personal Data held with us, please contact DrDroid's support at [privacy@drdroid.io](mailto:privacy@drdroid.io) or [support@drdroid.io](mailto:support@drdroid.io). If you are a GDPR-protected individual, you also have the right to lodge a complaint with an EU supervisory authority.
# Security & Privacy
Source: https://docs.drdroid.io/policies/security-privacy
Using an AI agent is like adding a junior team member—security and privacy are just as critical. At DrDroid, we prioritize making the experience both . Here’s how we ensure it:
## **Cloud Platform Security**
✅ **Self-hosted workers** – Your credentials and internal tool access stay within your environment using our [self-hosted proxy service](https://github.com/DrDroidLab/drd-vpc-agent).
✅ **Data encryption** – All data, whether at rest or in transit, is encrypted using robust security protocols.
✅ **Enterprise-grade security** – Our platform follows best practices, including multi-factor authentication (MFA), continuous vulnerability scanning, penetration testing, and strong network security measures like firewalls.
✅ **Compliance & reporting** – We uphold strict security compliance standards. Reach out for more details on our compliance framework.
## **AI & Large Language Models (LLMs)**
### **Deployment**
* We work only with **trusted vendors** that guarantee **no data usage for model training**.
* For enterprises, we offer **dedicated AI instances and private model deployments**.
### **Training & Data Handling**
* We **do not** fine-tune or train LLMs on customer data.
* Our platform operates on principles of **[chaos minimisation](https://docs.drdroid.io/docs/chaos-minimisation-framework)**, leveraging context from structured sources instead of depending on LLMs:
* **[SOPs](https://docs.drdroid.io/docs/best-practices-for-writing-sops)**
* **[Memory](https://docs.drdroid.io/docs/memory)**
* **[Catalogs](https://docs.drdroid.io/docs/catalog)**
### **Tool & Data Access Controls**
* **Isolated AI & backend services** – The AI agent can request data but **cannot execute actions directly**. All execution requests pass through a backend review for **correctness & safety**.
* **Strict workspace-level isolation** –
* Each workspace has a **unique agent**, restricted to its own data and tools.
* Data is accessed **only on a need-to-know basis** with proper authentication.
### **PII Protection**
* **Automated Data Scrubbing:** Our investigation tools automatically detect and redact personally identifiable information (PII) from system
outputs before processing or storage. This includes:
* Email addresses → \[EMAIL\_REDACTED]
* Phone numbers → \[PHONE\_REDACTED]
* IP addresses → \[IP\_REDACTED]
* API keys and tokens → \[API\_KEY\_REDACTED]
* Credit card numbers → \[CC\_REDACTED]
* **Real-time Processing:** PII scrubbing occurs immediately after data collection from connected systems (logs, metrics, databases) and before
any AI analysis or data persistence, ensuring sensitive information never enters our processing pipeline or AI engine.
* **Comprehensive Coverage:** The scrubbing system recursively processes all data structures (nested objects, arrays, strings) to ensure no PII
is inadvertently exposed in investigation results or stored context.
This automated protection helps maintain compliance with privacy regulations while preserving the technical context needed for effective incident resolution.
## **Compliance & Certifications**
DrDroid is certified for:
* **SOC-2**
* **ISO 27001**
For more details, visit our [Trust Center](https://security.drdroid.io/).
# Terms And Conditions
Source: https://docs.drdroid.io/policies/terms-of-use
## TERMS AND CONDITIONS
### SAAS SERVICES AND SUPPORT
Subject to the terms of this Agreement, Company will use commercially reasonable efforts to provide Customer the Services as part of the registration process, Customer will identify an administrative user name and password for Customer’s Company account. Company reserves the right to refuse registration of, or cancel passwords it deems inappropriate.
Subject to the terms hereof, Company will provide Customer with reasonable technical support services in accordance with Company’s standard practice.
### RESTRICTIONS AND RESPONSIBILITIES
Customer will not, directly or indirectly: reverse engineer, decompile, disassemble or otherwise attempt to discover the source code, object code or underlying structure, ideas, know-how or algorithms relevant to the Services or any software, documentation or data related to the Services (“Software”); modify, translate, or create derivative works based on the Services or any Software (except to the extent expressly permitted by Company or authorised within the Services); use the Services or any Software for time sharing or service bureau purposes or otherwise for the benefit of a third; or remove any proprietary notices or labels.
Customer represents, covenants, and warrants that Customer will use the Services only in compliance with Company’s standard published policies then in effect (the “Policy”) and all applicable laws and regulations. Customer hereby agrees to indemnify and hold harmless Company against any damages, losses, liabilities, settlements and expenses (including without limitation costs and attorneys’ fees) in connection with any claim or action that arises from an alleged violation of the foregoing or otherwise from Customer’s use of Services. Although Company has no obligation to monitor Customer’s use of the Services, Company may do so and may prohibit any use of the Services it believes may be (or alleged to be) in violation of the foregoing.
Customer shall be responsible for obtaining and maintaining any equipment and ancillary services needed to connect to, access or otherwise use the Services, including, without limitation, modems, hardware, servers, software, operating systems, networking, web servers and the like (collectively, “Equipment”). Customer shall also be responsible for maintaining the security of the Equipment, Customer account, passwords (including but not limited to administrative and user passwords) and files, and for all uses of Customer account or the Equipment with or without Customer’s knowledge or consent.
### CONFIDENTIALITY; PROPRIETARY RIGHTS
Each party (the “Receiving Party”) understands that the other party (the “Disclosing Party”) has disclosed or may disclose business, technical or financial information relating to the Disclosing Party’s business (hereinafter referred to as “Proprietary Information” of the Disclosing Party). Proprietary Information of Company includes non-public information regarding features, functionality and performance of the Service. Proprietary Information of Customer includes non-public data provided by Customer to Company to enable the provision of the Services (“Customer Data”). The Receiving Party agrees: (i) to take reasonable precautions to protect such Proprietary Information, and (ii) not to use (except in performance of the Services or as otherwise permitted herein) or divulge to any third person any such Proprietary Information. The Disclosing Party agrees that the foregoing shall not apply with respect to any information after five (5) years following the disclosure thereof or any information that the Receiving Party can document (a) is or becomes generally available to the public, or (b) was in its possession or known by it prior to receipt from the Disclosing Party, or (c) was rightfully disclosed to it without restriction by a third party, or (d) was independently developed without use of any Proprietary Information of the Disclosing Party or (e) is required to be disclosed by law. Customer shall own all right, title and interest in and to the Customer Data, as well as any data that is based on or derived from the Customer Data and provided to Customer as part of the Services. Company shall own and retain all right, title and interest in and to (a) the Services and Software, all improvements, enhancements or modifications thereto, (b) any software, applications, inventions or other technology developed in connection with Implementation Services or support, and (c) all intellectual property rights related to any of the foregoing. Notwithstanding anything to the contrary, Company shall have the right collect and analyze data and other information relating to the provision, use and performance of various aspects of the Services and related systems and technologies (including, without limitation, information concerning Customer Data and data derived therefrom), and Company will be free (during and after the term hereof) to (i) use such information and data to improve and enhance the Services and for other development, diagnostic and corrective purposes in connection with the Services and other Company offerings, and (ii) disclose such data solely in aggregate or other de-identified form in connection with its business. No rights or licenses are granted except as expressly set forth herein.
### CUSTOMER REFERENCE
Unless otherwise requested in writing, Customer grants DrDroid a non-exclusive right to use Customer's name and logo on DrDroid's website and marketing materials solely to identify Customer as a user of the services.
### PAYMENT OF FEES
Customer will pay Company the then applicable fees described in the Order Form for the Services and Implementation Services in accordance with the terms therein (the “Fees”). If Customer’s use of the Services exceeds the Service Capacity set forth on the Order Form or otherwise requires the payment of additional fees (per the terms of this Agreement), Customer shall be billed for such usage and Customer agrees to pay the additional fees in the manner provided herein. Company reserves the right to change the Fees or applicable charges and to institute new charges and Fees at the end of the Initial Service Term or the current renewal term, upon thirty (30) days prior notice to Customer (which may be sent by email). If Customer believes that Company has billed Customer incorrectly, Customer must contact Company no later than 60 days after the closing date on the first billing statement in which the error or problem appeared, in order to receive an adjustment or credit. Inquiries should be directed to the Company's customer support department.
Company may choose to bill through an invoice, in which case, full payment for invoices issued in any given month must be received by Company thirty (30) days after the mailing date of the invoice. Unpaid amounts are subject to a finance charge of 1.5% per month on any outstanding balance, or the maximum permitted by law, whichever is lower, plus all expenses of collection and may result in immediate termination of Service.
### TERM AND TERMINATION
Subject to earlier termination as provided below, this Agreement is for the Initial Service Term as specified in the Order Form, and shall be automatically renewed for additional periods of the same duration as the Initial Service Term (collectively, the “Term”), unless either party requests termination at least thirty (30) days prior to the end of the then-current term.
In addition to any other remedies it may have, either party may also terminate this Agreement upon thirty (30) days’ notice (or without notice in the case of nonpayment), if the other party materially breaches any of the terms or conditions of this Agreement. Customer will pay in full for the Services up to and including the last day on which the Services are provided. Upon any termination, Company will make all Customer Data available to Customer for electronic retrieval for a period of thirty (30) days, but thereafter Company may, but is not obligated to, delete stored Customer Data. All sections of this Agreement which by their nature should survive termination will survive termination, including, without limitation, accrued rights to payment, confidentiality obligations, warranty disclaimers, and limitations of liability.
### WARRANTY AND DISCLAIMER
Company shall use reasonable efforts consistent with prevailing industry standards to maintain the Services in a manner which minimizes errors and interruptions in the Services and shall perform the Implementation Services in a professional and workmanlike manner. Services may be temporarily unavailable for scheduled maintenance or for unscheduled emergency maintenance, either by Company or by third-party providers, or because of other causes beyond Company’s reasonable control, but Company shall use reasonable efforts to provide advance notice in writing or by e-mail of any scheduled service disruption. HOWEVER, COMPANY DOES NOT WARRANT THAT THE SERVICES WILL BE UNINTERRUPTED OR ERROR FREE; NOR DOES IT MAKE ANY WARRANTY AS TO THE RESULTS THAT MAY BE OBTAINED FROM USE OF THE SERVICES. EXCEPT AS EXPRESSLY SET FORTH IN THIS SECTION, THE SERVICES AND IMPLEMENTATION SERVICES ARE PROVIDED “AS IS” AND COMPANY DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
### INDEMNITY
Company shall hold Customer harmless from liability to third parties resulting from infringement by the Service of any patent or any copyright or misappropriation of any trade secret, provided Company is promptly notified of any and all threats, claims and proceedings related thereto and given reasonable assistance and the opportunity to assume sole control over defense and settlement; Company will not be responsible for any settlement it does not approve in writing. The foregoing obligations do not apply with respect to portions or components of the Service (i) not supplied by Company, (ii) made in whole or in part in accordance with Customer specifications, (iii) that are modified after delivery by Company, (iv) combined with other products, processes or materials where the alleged infringement relates to such combination, (v) where Customer continues allegedly infringing activity after being notified thereof or after being informed of modifications that would have avoided the alleged infringement, or (vi) where Customer’s use of the Service is not strictly in accordance with this Agreement. If, due to a claim of infringement, the Services are held by a court of competent jurisdiction to be or are believed by Company to be infringing, Company may, at its option and expense (a) replace or modify the Service to be non-infringing provided that such modification or replacement contains substantially similar features and functionality, (b) obtain for Customer a license to continue using the Service, or (c) if neither of the foregoing is commercially practicable, terminate this Agreement and Customer’s rights hereunder and provide Customer a refund of any prepaid, unused fees for the Service.
### LIMITATION OF LIABILITY
NOTWITHSTANDING ANYTHING TO THE CONTRARY, EXCEPT FOR BODILY INJURY OF A PERSON, COMPANY AND ITS SUPPLIERS (INCLUDING BUT NOT LIMITED TO ALL EQUIPMENT AND TECHNOLOGY SUPPLIERS), OFFICERS, AFFILIATES, REPRESENTATIVES, CONTRACTORS AND EMPLOYEES SHALL NOT BE RESPONSIBLE OR LIABLE WITH RESPECT TO ANY SUBJECT MATTER OF THIS AGREEMENT OR TERMS AND CONDITIONS RELATED THERETO UNDER ANY CONTRACT, NEGLIGENCE, STRICT LIABILITY OR OTHER THEORY: (A) FOR ERROR OR INTERRUPTION OF USE OR FOR LOSS OR INACCURACY OR CORRUPTION OF DATA OR COST OF PROCUREMENT OF SUBSTITUTE GOODS, SERVICES OR TECHNOLOGY OR LOSS OF BUSINESS; (B) FOR ANY INDIRECT, EXEMPLARY, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES; (C) FOR ANY MATTER BEYOND COMPANY’S REASONABLE CONTROL; OR (D) FOR ANY AMOUNTS THAT, TOGETHER WITH AMOUNTS ASSOCIATED WITH ALL OTHER CLAIMS, EXCEED THE FEES PAID BY CUSTOMER TO COMPANY FOR THE SERVICES UNDER THIS AGREEMENT IN THE 12 MONTHS PRIOR TO THE ACT THAT GAVE RISE TO THE LIABILITY, IN EACH CASE, WHETHER OR NOT COMPANY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
### MISCELLANEOUS
If any provision of this Agreement is found to be unenforceable or invalid, that provision will be limited or eliminated to the minimum extent necessary so that this Agreement will otherwise remain in full force and effect and enforceable. This Agreement is not assignable, transferable or sublicensable by Customer except with Company’s prior written consent. Company may transfer and assign any of its rights and obligations under this Agreement without consent. This Agreement is the complete and exclusive statement of the mutual understanding of the parties and supersedes and cancels all previous written and oral agreements, communications and other understandings relating to the subject matter of this Agreement, and that all waivers and modifications must be in a writing signed by both parties, except as otherwise provided herein. No agency, partnership, joint venture, or employment is created as a result of this Agreement and Customer does not have any authority of any kind to bind the Company in any respect whatsoever. In any action or proceeding to enforce rights under this Agreement, the prevailing party will be entitled to recover costs and attorneys’ fees. All notices under this Agreement will be in writing and will be deemed to have been duly given when received, if personally delivered; when receipt is electronically confirmed, if transmitted by facsimile or e-mail; the day after it is sent, if sent for next day delivery by recognized overnight delivery service; and upon receipt, if sent by certified or registered mail, return receipt requested. The parties shall work together in good faith to issue at least one mutually agreed upon press release within 90 days of the Effective Date, and Customer otherwise agrees to reasonably cooperate with Company to serve as a reference account upon request.
## EXHIBIT A
### Service Level Terms
The Services shall be available 99.9%, measured monthly, excluding holidays and weekends and scheduled maintenance. If Customer requests maintenance during these hours, any uptime or downtime calculation will exclude periods affected by such maintenance. Further, any downtime resulting from outages of third party connections or utilities or other reasons beyond Company’s control will also be excluded from any such calculation. Customer's sole and exclusive remedy, and Company's entire liability, in connection with Service availability shall be that for each period of downtime lasting longer than one hour, Company will credit Customer 5% of Service fees for each period of 30 or more consecutive minutes of downtime; provided that no more than one such credit will accrue per day. Downtime shall begin to accrue as soon as Customer (with notice to Company) recognizes that downtime is taking place, and continues until the availability of the Services is restored. In order to receive downtime credit, Customer must notify Company in writing within 24 hours from the time of downtime, and failure to provide such notice will forfeit the right to receive downtime credit. Such credits may not be redeemed for cash and shall not be cumulative beyond a total of credits for one (1) week of Service Fees in any one (1) calendar month in any event. Company will only apply a credit to the month in which the incident occurred. Company’s blocking of data communications or other Service in accordance with its policies shall not be deemed to be a failure of Company to provide adequate service levels under this Agreement.
### For any concerns, you can further reach out to us at:
Deep Sea Tech Inc: 2261 Market Street #5035 San Francisco, CA 94114