Secure60 Win Log Agent is a lightweight Windows application that collects Windows event logs and sends them to your Secure60 Collector in a flat JSON format aligned with the Secure60 Common Information Model (CIM). It runs on Windows servers and workstations and can be used interactively or installed as a Windows service so it starts automatically at boot.
ignore_older), and optional XML querymessage_text, host_name, source_name, event_data_*, and CIM aliases for rulesC:\Secure60Agent) and copy the downloaded exe into it. Create secure60-win-log-agent.yml in the same folder (Step 2 below).Edit secure60-win-log-agent.yml in that folder and set where the agent sends events. Either destination is a complete configuration.
Via a Secure60 Collector (default). Set the Collector URL under output.http.hosts:
output:
http:
hosts: ["https://your-collector.secure60.local"]
Direct to Secure60 Ingest (quickest deployment, no Collector required). Set mode: ingest with the project id and an INGEST token for that project:
output:
http:
mode: "ingest"
hosts: ["https://ingest.secure60.io"]
project_id: "<your-project-id>"
token: "<ingest-token>"
Tokens are created in the Secure60 portal under Organisation settings → Tokens (attach the project, access type INGEST). Environment variable alternatives and on-prem Ingest endpoints are covered in Sending directly to Ingest.
With no event_logs section, the agent collects its built-in default set of Windows event logs, which follows the ASD/ACSC Windows event logging and forwarding guidance (Security logons and account changes, process creation, services and scheduled tasks, PowerShell, Defender, Sysmon and others). The agent writes No event_logs configured, using built-in defaults: ... to its log at startup. To collect different channels or event IDs, see Event logs; to adjust retry and TLS, see Configuration Reference.
Open Command Prompt or PowerShell as Administrator, then:
cd C:\Secure60Agent
secure60-win-log-agent-64bit-1.2.0.exe install
The agent registers as a Windows service named Secure60 Win Log Agent. The service is configured to use the folder containing the executable as its working directory, so it finds secure60-win-log-agent.yml next to the exe.
net start Secure60WinLogAgent
The service starts and begins collecting and sending events. It is set to Automatic startup, so it will start again after a reboot.
You can confirm the service in Windows Services: open services.msc, find Secure60 Win Log Agent, and check that Status is Running and Startup Type is Automatic.

The same executable supports interactive use and service management.
| Option | Command | Description |
|---|---|---|
| Run interactively | secure60-win-log-agent-64bit-1.2.0.exe |
Runs in the foreground; useful for testing. Use Ctrl+C to stop. Config file: secure60-win-log-agent.yml in the current directory, or use -c path\to\config.yml. |
| Install service | secure60-win-log-agent-64bit-1.2.0.exe install |
Installs the Windows service (requires Administrator). Working directory is set to the exe folder so the YAML beside the exe is used. |
| Uninstall service | secure60-win-log-agent-64bit-1.2.0.exe uninstall |
Removes the Windows service (requires Administrator). |
| Start service | secure60-win-log-agent-64bit-1.2.0.exe start |
Starts the service. You can also use net start Secure60WinLogAgent. |
| Stop service | secure60-win-log-agent-64bit-1.2.0.exe stop |
Stops the service. You can also use net stop Secure60WinLogAgent or stop it from services.msc. |
When running as a service, the agent uses the config file in the service working directory (the folder where you ran install). When running interactively, it uses the current directory or the path given by -c. (If you use a different build or version, replace secure60-win-log-agent-64bit-1.2.0.exe with your executable’s name in the commands above.)
The agent is configured via a single YAML file: secure60-win-log-agent.yml. By default the agent looks for this file in the current directory (interactive) or in the service working directory (when run as a service). Use -c to specify a different path when running interactively.
The event_logs list defines which Windows event logs (channels) to collect. It is optional. When event_logs is absent or empty, the agent uses the default event logs below. When you provide a list, it replaces the defaults entirely; nothing is merged, so include every channel you want. Each entry can include:
| Key | Description |
|---|---|
name |
Required. Channel name (e.g. Application, System, Security, Windows PowerShell, Microsoft-Windows-PowerShell/Operational, ForwardedEvents). |
id |
Optional identifier for checkpointing; defaults to the channel name. |
ignore_older |
Optional. Only collect events newer than this (e.g. 72h, 24h, 1h). Omit to collect all available events. |
event_id |
Optional. Comma-separated event IDs to collect. Accepts single IDs, ranges and exclusions (e.g. 400, 403, 4720-4767, -4689). Omit to collect the whole channel. |
provider |
Optional. Restrict to specific provider names. |
include_xml |
Optional. Include raw event XML in each event (default: false). |
include_message |
Optional. Include the rendered message text as message_text (default: true). Set to false to omit. |
xml_query |
Optional. Advanced XML query; use with id. |
batch_read_size |
Optional. Max events per read batch (default: 512). |
Example of an explicit list (this replaces the defaults):
event_logs:
- name: Application
ignore_older: 72h
- name: System
- name: Security
- name: Windows PowerShell
event_id: 400, 403, 600, 800
- name: Microsoft-Windows-PowerShell/Operational
event_id: 4103, 4104, 4105, 4106
Long event_id lists are split across several query clauses automatically, so they stay within the Windows limit on the number of expressions in one event query.
The default set is an allow-list of event IDs per channel. Each channel is collected with ignore_older: 72h, which limits the first start to the last 72 hours; after that the agent resumes from its checkpoint. The shipped secure60-win-log-agent.yml contains the same list, so you can edit it in place.
| Channel | Event IDs | What they cover |
|---|---|---|
Security |
See Security event IDs | Logons and logoffs, privileged logons, account and group changes, audit policy changes, log clearing, process creation, service and scheduled task creation, Kerberos and NTLM authentication, directory object changes |
System |
104, 219, 1074, 6005, 6006, 6008, 7031, 7034, 7045 | System log cleared, failed kernel driver load, shutdown and restart, event log service stop and unexpected shutdown, service crashes, new service installed |
Application |
1000, 1001, 1002 | Application crashes, Windows Error Reporting and application hangs (exploitation indicators) |
Windows PowerShell |
400, 800 | PowerShell engine start and pipeline execution |
Microsoft-Windows-PowerShell/Operational |
4103, 4104 | Module logging and script block logging |
Microsoft-Windows-Windows Defender/Operational |
1006-1015, 1116-1121, 1127, 2001, 2003, 2006, 3002, 5001, 5004, 5007, 5008, 5010, 5012, 5013 | Malware detections, remediation results, quarantine and history changes, attack surface reduction blocks, signature and engine update failures, real-time protection disabled or failed, configuration changes, tamper protection |
Microsoft-Windows-TaskScheduler/Operational |
106, 140, 141, 142 | Scheduled task registered, updated, deleted, disabled |
Microsoft-Windows-WMI-Activity/Operational |
5859-5861 | WMI event subscriptions, including permanent subscriptions used for persistence |
Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational |
1149 | Remote Desktop connection authenticated, with the client address |
Microsoft-Windows-Windows Firewall With Advanced Security/Firewall |
2004-2006, 2033 | Firewall rule added, changed, deleted |
Microsoft-Windows-CodeIntegrity/Operational |
3001-3004, 3010, 3023, 3076, 3077 | Unsigned or untrusted drivers and images, application control audit and block events |
Microsoft-Windows-AppLocker/EXE and DLL |
8003, 8004 | AppLocker blocked and audited executables and DLLs |
Microsoft-Windows-AppLocker/MSI and Script |
8006, 8007 | AppLocker blocked and audited installers and scripts |
Microsoft-Windows-Sysmon/Operational |
All events | Sysmon process, network, file, registry, image load, pipe and WMI events |
| Event IDs | Meaning |
|---|---|
| 4624, 4625, 4634, 4647, 4648, 4672, 4964 | Logon, failed logon, logoff, user-initiated logoff, logon with explicit credentials, special privileges assigned, special group logon |
| 4778, 4779 | Remote Desktop session reconnected and disconnected |
| 4720-4767 | User, computer and group creation, modification, deletion and membership changes; password set and reset attempts; account lockout (4740) and unlock (4767); SID history (4765, 4766) |
| 4768, 4771, 4776 | Kerberos ticket-granting ticket request, Kerberos pre-authentication failure, NTLM credential validation (domain controllers) |
| 4688 | Process creation |
| 4697-4702 | Service installed (4697), scheduled task created, deleted, enabled, disabled and updated (4698-4702) |
| 4704-4706, 4713, 4716, 4719 | User right assigned and removed, new domain trust, Kerberos policy change, trusted domain change, audit policy change |
| 4782, 4794, 5376, 5377 | Password hash accessed, Directory Services Restore Mode password set, Credential Manager backup and restore |
| 5136, 5137, 5141 | Directory object modified, created, deleted (domain controllers) |
| 1100, 1102 | Event log service shut down, audit log cleared |
Many Security events exist only when the matching Windows audit policy is enabled, and an event that is never generated costs nothing to collect. In particular, 4688 requires Audit Process Creation (and Include command line in process creation events to carry the command line), 4698-4702 require Audit Other Object Access Events, and 5136-5141 require Audit Directory Service Changes. The ASD/ACSC publication below lists the Group Policy settings for each category. If Sysmon is installed, its process creation event (Event ID 1) is richer than 4688 and the two can be used together.
Differences from the sources: ASD filters 4624 by logon type and drops Kerberos logons, while the agent’s event_id filter selects by ID only, so all logon types are collected (an xml_query entry can apply a logon-type filter). Events 4105 and 4106 (script start and stop) and 4689 (process exit) are omitted because each doubles the volume of the event it pairs with and adds little to detection.
Channels such as Microsoft-Windows-Sysmon/Operational and the AppLocker channels exist only when the component is installed. The agent logs one warning per missing channel (channel "..." is not present on this host; skipping it and checking again every 15m0s), keeps collecting the others, and starts collecting from a channel when it appears, for example after Sysmon is installed. Nothing needs to be removed from the configuration.
Add these to an explicit event_logs list (copy the default entries you want to keep first, as a list you provide replaces the defaults):
| Addition | When |
|---|---|
ForwardedEvents |
On a Windows Event Collector server receiving Windows Event Forwarding |
Security 4769 |
On domain controllers, to detect Kerberoasting. High volume on busy domains |
Security 5140 |
On file servers, for share access. Expect IPC$ and SYSVOL noise |
Security 4689 |
Process exit events, for process duration |
Microsoft-Windows-PowerShell/Operational 4105, 4106 |
Script start and stop events |
Events are sent to the URL(s) under output.http:
| Key | Description |
|---|---|
hosts |
Required. List of collector URLs (e.g. ["https://collector.secure60.local:8080"]). |
protocol |
Optional. https or http; often inferred from the URL. |
headers |
Optional. Extra HTTP headers (e.g. Content-Type: application/json, X-Secure60-Agent: win-log-agent). |
retry.max_attempts |
Optional. Retry attempts per batch (default: 3). |
retry.wait_min / retry.wait_max |
Optional. Backoff between retries (e.g. 1s, 10s). |
ssl.verification_mode |
Optional. full (verify server cert), none or skip (e.g. for self-signed or testing). |
ssl.certificate_authorities |
Optional. Paths to CA certs when using full verification. |
ssl.certificate / ssl.key |
Optional. Client certificate and key for mTLS. |
Example:
output:
http:
hosts: ["https://collector.secure60.local:8080"]
headers:
Content-Type: "application/json"
X-Secure60-Agent: "win-log-agent"
retry:
max_attempts: 3
wait_min: 1s
wait_max: 10s
ssl:
verification_mode: "none" # use "full" and certificate_authorities in production
Available in v1.1.1+. By default the agent sends to an on-prem Collector (mode: collector). It
can instead send straight to the Secure60 Ingest API (cloud or on-prem) — no Collector required —
by setting mode: ingest with the target project id and a token:
| Key | Description |
|---|---|
mode |
collector (default) or ingest. |
project_id |
Ingest mode. Target Secure60 project id. |
token |
Ingest mode. JWT with INGEST access for that project (sent as Authorization: Bearer). |
output:
http:
mode: "ingest"
hosts: ["https://ingest.secure60.io"] # ingest base; the agent appends /ingest/1.0/http/project/<id>
project_id: "301"
token: "eyJ..."
In ingest mode the agent POSTs to <base>/ingest/1.0/http/project/<project_id>. The mode applies to
all output (event logs and inventory). You can also supply these via environment variables instead of
the file — S60_SEND_MODE, S60_INGEST_BASE, S60_PROJECT_ID, S60_TOKEN (for a Windows service,
set them as machine/system environment variables). Get the token and project id from the Secure60
portal under Organisation settings → Tokens (attach the project, access type INGEST).
Available in v1.1.0+. In addition to event logs, the agent can periodically report a software inventory — the operating system build/patch level and installed updates — to the same Collector. Secure60 uses this to identify missing Microsoft security patches and surface them in Vulnerability Management. No additional connection settings are required; it reuses output.http.
The agent schedules these inventory scans itself on a timer (no Windows Scheduled Task needed) — the first runs shortly after the service starts, then on the configured interval.
| Key | Description |
|---|---|
inventory.enabled |
Collect and send inventory. Default: true (set false to disable). |
inventory.interval_hours |
How often to collect (default: 12). |
Example:
inventory:
enabled: true
interval_hours: 12
Inventory collection reads the OS build/revision from the registry and installed updates via WMI; the service account (LocalSystem) has the required access by default.
| Key | Description |
|---|---|
registry_file |
File path for checkpoint/state (default: .secure60-win-log-agent.yml in the working directory). The agent uses this to resume after restart. |
logging.level |
Log level (e.g. info, debug). |
Example:
registry_file: ".secure60-win-log-agent.yml"
logging:
level: info
secure60-win-log-agent-64bit-1.2.0.exe -c "C:\Path\To\MyConfig.yml"Changing the config (e.g. output.http.hosts or event_logs) requires restarting the agent (or the service) for changes to take effect.
The agent writes log output so you can troubleshoot issues whether it runs interactively or as a service.
The event log source is registered when you run install and removed when you run uninstall. Use the log file for detailed messages (e.g. HTTP retries, event log backoff); use Event Viewer for start/stop and critical errors.
Events are sent to the collector as a JSON array. Each event is a flat object (no nested structures) with lowercase keys, aligned with Secure60 CIM where applicable. Fields include:
windows-logevent_data_targetusername, event_data_ipaddress)The agent sends only message_text for the rendered message (no separate message field).
Use a dedicated folder — Keep the exe and YAML in one folder (e.g. C:\Secure60Agent) and install the service from there so the working directory and config path are predictable.
Set the destination first — Before installing the service, set either the Collector URL or the Ingest settings in secure60-win-log-agent.yml (see Step 2). No event log configuration is required.
TLS in production — For production, use ssl.verification_mode: "full" and configure ssl.certificate_authorities (and client cert/key if required).
Limit event volume if needed — The default set already filters by event ID. To reduce volume further, remove entries from an explicit event_logs list or shorten ignore_older; to widen it, add the common additions.
Confirm the service after install — After install and net start Secure60WinLogAgent, check services.msc to confirm Status is Running and Startup Type is Automatic.
Upgrades — To upgrade, stop the service, replace the exe (and update the YAML if needed), then start the service again. The checkpoint file is preserved so collection continues from the last position.
| Version | Changes |
|---|---|
| 1.2.0 | Built-in default event log set when event_logs is not configured (see Default event logs); an explicit event_logs list replaces it entirely. Channels not present on a machine (for example Sysmon or AppLocker) are skipped with a single log warning. |
| 1.1.3 | Software inventory is reported before the scan that produced it is announced, so hosts no longer appear with an empty inventory while rows arrive. Large inventories are sent in batches of 1,000 rows. |
| 1.1.2 | Sysmon events carry parent process, loaded image, call trace, signature and registry detail under standard Secure60 field names, as used by the managed Windows detections. |
| 1.1.1 | Direct-to-Ingest send mode (mode: ingest). |
| 1.1.0 | Periodic software inventory (OS build and installed updates) for vulnerability management. |
Upgrades replace the executable in place; existing configuration files continue to work unchanged.