This connector combines the two GEM QRadar connectors into a single Universal Cloud REST API log source:
| Section | Source | Window |
|---|---|---|
| A — Open Issues | GET /api/v1/issues → GET /api/v1/issues/{id}/details |
Previous calendar day (yesterday midnight → today midnight UTC) |
| B — Activity Log | POST /api/v3/reports/run |
Rolling window [now − recurrence_minutes, now] |
Both sections run in sequence every time the log source fires, sharing the same gem_host, api_key, and api_secret credentials.
A single Log Source Extension (LSX) uses two <match-group> elements to parse both event shapes:
issue_id (issue events)"1" (activity log events)Because the two JSON shapes are mutually exclusive, the groups never conflict.
| File | Purpose |
|---|---|
GEM-Combined-Workflow.xml |
UCC workflow — runs Issues (Section A) then Activity Log (Section B) each cycle |
GEM-Combined-WorkflowParameterValues.xml |
Default parameter values to fill in before importing |
GEM-Combined-LogSourceExtension.xml |
LSX — two match groups, one per event shape |
000000000000000000002001)| Parameter | Description | Default |
|---|---|---|
gem_host |
Hostname of the GEM instance — no scheme, no trailing slash e.g. eu.guardium.security.ibm.com |
(required) |
api_key |
GEM API key | (required, secret) |
api_secret |
GEM API secret | (required, secret) |
report_id |
Activity Log report ID | 000000000000000000002001 |
fetch_size |
Records per page for the Activity Log | 500 |
recurrence_minutes |
Must match the QRadar log source recurrence schedule | 10 |
⚠️
recurrence_minutesmust stay in sync with the Recurrence field on the QRadar log source. The workflow uses this value to calculate the Activity Log time window. If they diverge, records will be missed or duplicated.
GEM-Combined-Workflow.xml.GEM-Combined-WorkflowParameterValues.xml and fill in:
gem_host — your GEM hostname (e.g. eu.guardium.security.ibm.com)api_key — your GEM API keyapi_secret — your GEM API secretUniversal Cloud REST API.Universal Cloud REST API.10 minutes (or your desired interval — update recurrence_minutes to match).GEM-Combined-LogSourceExtension.xml.In QRadar navigate to Admin → Custom Event Properties → Add and create all properties listed below, or right-click an event in Log Activity → Extract Property.
| CEP Name | Type | Description |
|---|---|---|
| GEM Issue ID | AlphaNumeric | Internal numeric issue ID |
| GEM Sequential ID | AlphaNumeric | Human-readable ID e.g. ISS-0016 |
| GEM Issue Name | AlphaNumeric | Short issue title |
| GEM Issue Type | AlphaNumeric | Issue category / type |
| GEM Issue Executor | AlphaNumeric | User assigned to the issue |
| GEM Issue Status | AlphaNumeric | Issue status e.g. ISSUE_STATUS_OPEN |
| GEM Asset Name | AlphaNumeric | Name of the affected asset |
| GEM Asset ID | AlphaNumeric | Asset identifier |
| GEM Asset Type | AlphaNumeric | Asset type e.g. database |
| GEM Affected Resources Count | AlphaNumeric | Number of affected resources |
| GEM Policy ID | AlphaNumeric | ID of the triggering policy |
| GEM Policy Name | AlphaNumeric | Name of the triggering policy |
| GEM Date Detected | AlphaNumeric | ISO-8601 timestamp of detection |
| GEM Last Modified | AlphaNumeric | ISO-8601 timestamp of last modification |
| GEM Scope | AlphaNumeric | Scope name |
| GEM Scope ID | AlphaNumeric | Scope identifier |
| GEM Rule ID | AlphaNumeric | Rule that triggered the issue |
| GEM Data Classifications | AlphaNumeric | Data classification tags |
| GEM Sensitivity Category | AlphaNumeric | Sensitivity tag category |
| GEM Sensitivity Count | AlphaNumeric | Count for the sensitivity category |
| CEP Name | Type | Description |
|---|---|---|
| GEM Activity CreationTimeUTC | AlphaNumeric | Timestamp the activity was created |
| GEM Activity PerformedBy | AlphaNumeric | User who performed the activity |
| GEM Activity Context | AlphaNumeric | Service context of the activity |
| GEM Activity ActionTaken | AlphaNumeric | Action taken |
| GEM Activity ContextDescription | AlphaNumeric | Detailed context description |
| GEM Activity Activity | AlphaNumeric | Detailed activity context |
| GEM Activity AuditTrailID | AlphaNumeric | Audit trail ID |
QRadar UCC Scheduler
│
▼
GEM-Combined-Workflow.xml
│
├─ SECTION A — Open Issues
│ ├─ Compute date window: [yesterday midnight, today midnight UTC]
│ ├─ GET /api/v1/issues (paginated, offset steps by 20)
│ │ └─ For each issue → GET /api/v1/issues/{id}/details
│ │ └─ PostEvent issue_details/single ──► Group 1 (LSX)
│ └─ Loop until partial page
│
└─ SECTION B — Activity Log
├─ Compute rolling window: [now − recurrence_minutes, now]
├─ POST /api/v3/reports/run (paginated, offset steps by fetch_size)
│ └─ For each record → PostEvent results object ──► Group 2 (LSX)
└─ Loop until partial page
│
▼
QRadar Log Activity
├─ Group 1 LSX → Issue event fields + CEPs
└─ Group 2 LSX → Activity log fields + CEPs
The LSX uses two <match-group> elements evaluated in order:
| Group | Order | Discriminator | Fires for |
|---|---|---|---|
| 1 | 1 | json-matcher on "issue_id" present |
Issue events |
| 2 | 2 | json-matcher on "1" (CreationTimeUTC) present |
Activity log events |
The two event shapes are structurally incompatible — an issue detail object never contains a key "1", and an activity results object never contains "issue_id" — so the groups are guaranteed to be mutually exclusive.
| Separate (2 log sources) | Combined (this connector) | |
|---|---|---|
| Log sources in QRadar | 2 | 1 |
| API credential config | ×2 | ×1 |
| Recurrence schedules | 2 to maintain | 1 |
| LSX | 2 separate | 1 with 2 match groups |
| CEPs | Identical set | Identical set |
| Event differentiation | By log source | By LSX match group |