Skip to main content

New Custom Solution for Real-Time Bindplane Agent Monitoring in Google SecOps

  • December 11, 2025
  • 1 reply
  • 33 views

Forum|alt.badge.img+8

I’m excited to share a custom solution I’ve developed that will make our Bindplane Agent monitoring process much easier and more efficient. With this setup, agent status can now be monitored in real time directly from Google SecOps, eliminating the need to repeatedly check the Bindplane console.

What This Solution Does

  • Integrates Bindplane API with Google SecOps SOAR.
  • Automates ingestion of agent status logs into Google SecOps SIEM.
  • Triggers alerts whenever an agent becomes inactive.
  • Provides a single pane of glass for the SOC team to monitor agent health.

Key Components

  • Bindplane API.
  • SOAR IDE script to fetch and ingest agent data.
  • SIEM rule to detect inactive agents and generate alerts.

Benefits

✔ Real-time monitoring without manual console checks.
✔ Automated alerts for inactive agents.
✔ Streamlined workflow within existing security tools.


Prerequisites
Before you begin, ensure you have:

  • Access to Bindplane with permissions to generate an API key
  • Access to Google SecOps SOAR (IDE)
  • Access to Google SecOps SIEM to create ingestion rules and alerts
  • Google SecOps Customer ID for log ingestion

 

Detailed Steps

Step 1: Generate Bindplane API Key

Follow the official Bindplane documentation to create an API key:

https://docs.bindplane.com/cli-and-api/api-keys

This key will allow the SOAR IDE to query Bindplane agent status.

 

Step 2: SOAR IDE for fetching Bindplane Agent Status

  • In Google SecOps SOAR, create a new IDE integration.
  • The following Python script calls the Bindplane API, extracts key details for each agent, and ingests them into the Google SecOps Ingestion API under log type.

You may extend this script to include additional fields if required.

SOAR IDE Script

# Define the Bindplane API URL and the API Key

url = "https://app.bindplane.com/v1/agents"  # Bindplane API Endpoint for Agent details

api_key = "xxxxx-xxxxx-xxxxxxxx-xxxxx"  #Your Bindplane API Key

# Set the headers with the API key

headers = {

    "X-Bindplane-Api-Key": api_key

}

# Make the GET request to the API

response = requests.get(url, headers=headers)

# Initialize an empty list to hold the formatted agent data

agents_data = []

# Check if the request was successful (status code 200)

if response.status_code == 200:

    # Parse the response JSON

    data = response.json()

    # Iterate over the list of agents

    for agent in data.get('agents', []):

        user_defined_time = str(datetime.now(timezone.utc))

        agent_name = agent.get('name', 'Unknown')

        agent_status_code = agent.get('status', 'Unknown')

        # Map the status code to active/inactive

        agent_status = "active" if agent_status_code == 1 else "inactive"

        # Extract additional attributes

        os_family = agent.get('labels', {}).get('attributes/os.family', 'Unknown')

        agent_version = agent.get('labels', {}).get('bindplane/agent-version', 'Unknown')

        # Extract assigned configuration

        assigned_configuration = agent.get('configurationStatus', {}).get('assigned', 'Unknown')

        # Create dictionary for this agent's data

        agent_data = {

            "Agent Name": agent_name,

            "Status": agent_status,

            "OS": os_family,

            "Agent Version": agent_version,

            "Assigned Configuration": assigned_configuration

        }

        agents_data.append(agent_data)

    # Send each agent record to SecOps Ingestion API

    for agent in agents_data:

        json_dict = {

            "customer_id": "xxx-xxxxx-xxxxx-xxxx-xxx",  # Your SecOps SIEM Customer ID

            "log_type": "<LOG_TYPE>",  #Enter log type in which you want this data to ingest.

            "entries": [

                {

                    "log_text": json.dumps(agent)

                }

            ]

        }

        serialized_data = json.dumps(json_dict)

        GCM.send_logs(serialized_data)  # Send logs to SIEM ingestion API

Step 3: Create SIEM Rule to Detect Inactive Agents

After ingestion begins, create a rule in Google SecOps SIEM to alert when a Bindplane agent reports "Status": "inactive".

SIEM Rule

rule BINDPLANE_AGENT_NOT_REPORTING {

  meta:

    author = "Suraj Kadav"

    description = "This rule will trigger an alert when any Bindplane agent goes offline/disconnected."

    severity = "Critical"

  events:

    $e.metadata.log_type = "BINDPLANE_AGENT"

    $e.extracted.fields["Status"] = "inactive"

  outcome:

    $Agent_Name = $e.extracted.fields["Agent Name"]

    $Agent_Status = $e.extracted.fields["Status"]

    $System_OS = $e.extracted.fields["OS"]

    $Agent_Version = $e.extracted.fields["Agent Version"]

    $Agent_Configuration = $e.extracted.fields["Assigned Configuration"]

  condition:

    $e

}

Tip : Consider adding a suppress/threshold to avoid flapping alerts (e.g., require 2–3 consecutive inactive observations or a time window).

 

Optional Enhancements

  • Additional Agent details
  • OS-based grouping
  • Dashboards
  • Optimize code for faster performance.

 

This solution is created to simplify operations and improve visibility of Bindplane Agent status for the SOC team. If you’re interested in implementing it or have ideas for enhancements, feel free to reach out or drop your suggestions in the comments!

1 reply

matthewnichols
Community Manager
Forum|alt.badge.img+16
  • Community Manager
  • December 11, 2025

Thanks for sharing this with the Community ​@skadav !