Fetch Fabric Log Search Results#

Retrieve distributed log search results from Fabric of FortiAnalyzer using Task ID.

✅ All code examples tested: Verified against FortiAnalyzer v7.4.8, v7.6.4, v8.0.0.

Overview#

This endpoint fetches results from fabric-wide log searches - useful for:

  • Retrieving results from distributed searches across multiple FAZ units

  • Polling search status across Supervisor and Members

  • Paginating large result sets from fabric deployments

Two-Step Pattern: Create search → Wait for completion → Fetch results

Endpoint Details#

Method: POST URL: /jsonrpc API Path: /soc-fabric/logsearch/{taskID} ADOM Support: Yes Requires Authentication: Yes Minimum Version: 7.4.0

Request Example#

{
    "method": "get",
    "params": [{
        "url": "/soc-fabric/logsearch/12470",
        "apiver": 3,
        "limit": 10,
        "offset": 0
    }],
    "session": "{{session_id}}",
    "id": 1
}
{
    "result": [{
        "data": {
            "tid": 12470,
            "status": "done",
            "percentage": 100,
            "total_lines": 450,
            "logs": [
                {
                    "srcip": "10.0.200.253",
                    "dstip": "140.82.121.5",
                    "service": "HTTPS",
                    "action": "accept"
                }
            ]
        },
        "status": {
            "code": 0,
            "message": "OK"
        }
    }]
}

Complete Python Example#

import requests
import urllib3
import time

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

def fetch_fabric_search_results(session_id, tid, limit=100):
    """Fetch fabric search results with polling"""
    url = "https://faz.example.com/jsonrpc"

    # Poll until complete
    max_attempts = 30
    for attempt in range(max_attempts):
        payload = {
            "method": "get",
            "params": [{
                "url": f"/soc-fabric/logsearch/{tid}",
                "apiver": 3,
                "limit": limit,
                "offset": 0
            }],
            "session": session_id,
            "id": 1
        }

        response = requests.post(url, json=payload, verify=False)
        result = response.json()

        if result['result'][0]['status']['code'] == 0:
            data = result['result'][0]['data']
            status = data.get('status', 'unknown')
            percentage = data.get('percentage', 0)

            print(f"  Status: {status} - {percentage}% complete")

            if status == 'done' and percentage == 100:
                return data.get('logs', [])

        time.sleep(2)  # Wait 2 seconds between polls

    raise TimeoutError("Search did not complete within timeout")

# Example
logs = fetch_fabric_search_results(
    session_id="your_session_id",
    tid=12470
)

print(f"Retrieved {len(logs)} log entries from fabric search")