Last9 Last9

Mar 4th, ‘25 / 11 min read

Everything You Need to Know About SIEM Logs

SIEM logs help detect threats and improve security. Learn how they work, why they matter, and how to use them effectively.

Everything You Need to Know About SIEM Logs

That moment when your production system goes down, and you're stuck piecing together logs from twenty different services? It’s frustrating and slow—especially when you need answers fast.

SIEM logs help bring order to this chaos, giving you a structured way to track security events and system activity. But understanding how to use them effectively isn’t always straightforward, and most documentation can feel more complicated than the problem itself.

This guide breaks down everything around SIEM logs.

What Are SIEM Logs (And Why Should You Care?)

SIEM (Security Information and Event Management) logs are the centralized collection point for all the security-relevant data across your systems. Think of it as the ultimate log aggregator with a security focus.

Right off the bat:

SIEM logs ≠ just another logging system

The difference? SIEM logs don't just store information – they correlate events across your entire stack to identify patterns that single-source logs can't reveal.

When your database server suddenly spikes to 100% CPU while your API response times triple and failed login attempts surge – only a SIEM system connects these dots into a coherent story: "Someone's trying to brute force their way in."

💡
Understanding different syslog formats can help you standardize log collection and make SIEM analysis more effective. Learn more here.

The Core Components of SIEM Logs

Let's break down what makes up a proper SIEM logging system:

Log Collection

This is where everything starts – pulling logs from:

  • Application servers
  • Database servers
  • Network devices
  • Cloud infrastructure
  • Security tools
  • Containers and orchestration

The collection needs to be reliable, lightweight, and – most importantly – complete. Missing logs create blind spots that can hide critical issues.

Normalization

Have you ever tried to analyze logs from ten different systems with ten different formats?

Normalization transforms diverse log formats into a standard structure:

{
  "timestamp": "2025-03-04T14:23:15Z",
  "source": "api-server-12",
  "severity": "ERROR",
  "event_type": "AUTHENTICATION_FAILURE",
  "user": "michael.scott",
  "source_ip": "192.168.1.123",
  "message": "Failed login attempt: Invalid password",
  "attempt_count": 5
}

This uniformity makes search, analysis, and automation infinitely easier.

Correlation

This is the secret sauce of SIEM logs. Correlation analyzes relationships between events:

  • Temporal proximity: "These ten events happened within five seconds"
  • Causal relationships: "This config change triggered these exceptions"
  • Pattern recognition: "We see this sequence before every outage"

A good SIEM system uses correlation rules to transform isolated incidents into meaningful security narratives.

Alerting

What good are insights if nobody sees them? SIEM logging includes intelligent alerting mechanisms that notify you of potential security incidents based on predefined rules or ML-detected anomalies.

The best SIEM alerts aren't just noisy notifications – they provide context about what happened, why it matters, and what you should do next.

💡
Managing log retention effectively ensures you keep critical data without overwhelming your SIEM. Learn more about log retention here.

Why Traditional Logging Falls Short

You might be thinking: "I already have ELK/Graylog/Loki. Why bother with SIEM logs?"

Here's what you're missing:

Feature Traditional Logging SIEM Logs
Focus Operational troubleshooting Security threats & compliance
Context Single system or limited scope Cross-system correlation
Intelligence Basic search & filtering Threat detection & analysis
Retention Usually days to weeks Months to years (compliance)
Access Control Often minimal Granular, role-based
Compliance Limited reporting Built-in regulatory frameworks

Traditional logging tells you what happened. SIEM logs tell you what it means for your security posture.

Step-by-Step Process to Setting Up SIEM Logs

Let's get tactical. Here's how to implement SIEM logging without losing your mind:

Step 1: Define What You Need to Log

Not all logs deserve SIEM treatment. Focus on security-relevant events:

  • Authentication attempts (success/failure)
  • Authorization decisions (access granted/denied)
  • Configuration changes
  • System startups/shutdowns
  • Resource exhaustion events
  • Privilege escalation
  • Data access patterns
  • Network connections (especially external)

For each service, ask: "If this system were compromised, what logs would tell the story?"

Step 2: Choose Your SIEM Technology

The market's packed with options, but here are standouts for different needs:

  • For teams already in AWS: AWS Security Hub with CloudWatch Logs
  • For open-source fans: Wazuh (based on Elastic Stack)
  • For enterprise environments: Splunk Enterprise Security
  • For cloud-native setups: Sumo Logic or Datadog Security Monitoring

Factors to consider:

  • Scalability (how many events per second?)
  • Retention requirements (regulatory needs?)
  • Budget constraints (some SIEMs get pricey at scale)
  • Integration with your existing toolchain
💡
Monitoring Nginx logs can help you detect issues early and improve security. Learn more about Nginx log monitoring here.

Step 3: Implement Log Forwarding

Get your logs into the SIEM system with these common approaches:

# Filebeat example for shipping logs to Elastic Security
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/auth.log
    - /var/log/application/*.log
  fields:
    application: payment-service
    environment: production
  fields_under_root: true

output.elasticsearch:
  hosts: ["siem.example.com:9200"]
  username: "filebeat_writer"
  password: "${FILEBEAT_PASSWORD}"

Breaking down the code:

  • This Filebeat configuration sets up log collection from two sources: system authentication logs and your application logs
  • The fields section adds context tags to every log event, marking them as coming from your payment service in production
  • fields_under_root: true puts these tags at the top level of the JSON for easier filtering in your SIEM
  • The output section defines where logs get sent - in this case, to an Elasticsearch instance that powers your SIEM
  • Credentials are stored as environment variables for security rather than hardcoded

For containerized environments, consider:

  • Fluent Bit or Fluentd as log forwarders
  • Log routing through your service mesh
  • Cloud provider logging agents

Step 4: Normalize and Enrich Your Data

This step transforms raw logs into security gold:

# Pseudocode example for log enrichment
def enrich_log_event(event):
    # Add source context
    event['hostname'] = get_hostname()
    event['environment'] = ENVIRONMENT
    event['service_version'] = get_service_version()
    
    # Add security context
    if 'user_id' in event:
        event['user_role'] = lookup_user_role(event['user_id'])
        event['department'] = lookup_department(event['user_id'])
    
    # Add threat intelligence
    if 'ip_address' in event:
        reputation = lookup_ip_reputation(event['ip_address'])
        event['ip_reputation_score'] = reputation['score']
        event['ip_country'] = reputation['country']
        
    return event

Explanation:

  • This function transforms basic log events into security-rich data points by adding three layers of context:
  • System context: Where did this event come from? (hostname, environment, service version)
  • User context: Who was involved? What's their role and department? (critical for access control analysis)
  • Threat intelligence: Is the IP address suspicious? Has it been linked to attacks before?
  • The beauty of this approach is that your SIEM can now answer questions like "Show me all actions by finance department users from suspicious IPs"

The richer your logs, the more valuable your SIEM becomes.

Step 5: Build Correlation Rules

This is where you teach your SIEM to think like a security analyst:

# Example correlation rule (pseudocode)
rule:
  name: "Potential Account Takeover"
  description: "Multiple failed logins followed by a successful login from a new location"
  conditions:
    - event.type == "AUTHENTICATION_FAILURE"
    - count(event) >= 5
    - groupBy: [user_id]
    - window: 5 minutes
    - followed_by:
        event.type == "AUTHENTICATION_SUCCESS"
        AND NOT previous_logins.contains(source_ip)
  severity: HIGH
  response:
    - alert_channels: [slack, email]
    - suggest_actions: ["force_password_reset", "enable_mfa"]

Explanation:

  • This rule detects a classic account takeover pattern: someone tries multiple wrong passwords, then finally gets in from a new location
  • The count(event) >= 5 checks for at least 5 failed login attempts
  • groupBy: [user_id] focuses the pattern on each user independently
  • The window: 5 minutes sets the timeframe - attacks usually happen in quick succession
  • The followed_by clause is the magic: it looks for a successful login from an IP address not in the user's login history
  • When matched, this rule generates a high-severity alert and suggests immediate actions (password reset, enabling MFA)
  • This is the kind of correlation that's impossible with traditional logging

Start with common patterns, then refine based on your environment's specific threats.

💡
Tracking error logs in real time helps you catch issues before they escalate. Learn how to set up real-time log monitoring here.

4 Common SIEM Logging Mistakes (And How to Avoid Them)

Learn from the pain of others:

1. Drowning in Noise

The problem: Sending everything to your SIEM creates alert fatigue and bloated costs.

The fix: Be selective. Log security-relevant events with appropriate severities. Use pre-filtering to discard routine noise before it hits your SIEM.

2. Missing Critical Context

The problem: Bare logs without context are like clues without a crime scene.

The fix: Enrich logs with user context, resource information, and business impact. A failed login means one thing for a regular user, but something entirely different for your database admin account.

3. Neglecting Log Integrity

The problem: If attackers can modify your logs, your SIEM becomes worthless.

The fix: Implement log signing and secure transport. Use append-only storage where possible. Consider write-once media for critical logs.

# Example: Setting immutable flag on log files in Linux
chattr +a /var/log/auth.log

What it does:

  • This single command adds an "append-only" attribute to your authentication log file
  • The +a flag allows new data to be added to the file, but prevents existing content from being modified or deleted
  • This simple protection means attackers who gain system access can't erase their tracks from your logs
  • It's a basic but effective forensic protection that should be standard practice for critical security logs

4. Forgetting the Humans

The problem: The most sophisticated SIEM is useless if nobody looks at it.

The fix: Design your SIEM dashboard for actual humans. Create role-specific views. Integrate with the tools your team already uses daily (Slack, Teams, etc.).

💡
Extracting useful insights from logs starts with proper parsing. Learn the basics of log parsing here.

Practical SIEM Log Examples (And What They Tell You)

Let's see SIEM logs using some examples:

Example 1: Detecting Data Exfiltration

// Initial event in database logs
{
  "timestamp": "2025-03-04T02:15:33Z",
  "source": "postgres-prod-1",
  "event_type": "QUERY_EXECUTED",
  "user": "app_service",
  "client_ip": "10.0.5.12",
  "query": "SELECT * FROM customers WHERE signup_date > '2024-01-01'",
  "rows_returned": 25843,
  "execution_time_ms": 3542
}

// Followed by network logs
{
  "timestamp": "2025-03-04T02:16:01Z",
  "source": "firewall-edge-3",
  "event_type": "CONNECTION_ESTABLISHED",
  "source_ip": "10.0.5.12",
  "destination_ip": "203.0.113.42",
  "destination_port": 443,
  "bytes_sent": 15842906,
  "protocol": "HTTPS"
}

SIEM correlation shows: An internal system queried a large customer dataset, then immediately sent 15MB of data to an external IP that's never been seen before. Classic data exfiltration pattern.

Example 2: Privilege Escalation Chain

// First event - password change
{
  "timestamp": "2025-03-04T15:22:18Z",
  "source": "auth-service",
  "event_type": "PASSWORD_RESET",
  "target_user": "helpdesk_operator",
  "initiator": "email_reset_flow",
  "source_ip": "192.168.34.56"
}

// Second event - login
{
  "timestamp": "2025-03-04T15:23:45Z",
  "source": "auth-service",
  "event_type": "AUTHENTICATION_SUCCESS",
  "user": "helpdesk_operator",
  "source_ip": "192.168.34.56",
  "auth_method": "password"
}

// Third event - privilege change
{
  "timestamp": "2025-03-04T15:25:12Z",
  "source": "admin-portal",
  "event_type": "ROLE_CHANGE",
  "target_user": "helpdesk_operator",
  "new_role": "system_administrator",
  "initiator": "helpdesk_operator",
  "justification": "Temporary access for weekend maintenance"
}

// Fourth event - sensitive access
{
  "timestamp": "2025-03-04T15:26:30Z",
  "source": "aws-console",
  "event_type": "API_CALL",
  "user": "helpdesk_operator",
  "action": "CreateAccessKey",
  "resource": "arn:aws:iam::123456789012:user/database_backup_role"
}

SIEM correlation reveals: Someone got access to a helpdesk account, then escalated privileges, then created AWS credentials – classic account takeover and privilege escalation chain.

Integrating SIEM Logs With Your Development Workflow

SIEM isn't just for security teams. Here's how to make it work for developers and SREs:

In Your CI/CD Pipeline

Add security touchpoints:

# Example GitHub Actions workflow with SIEM integration
name: Build and Deploy

on:
  push:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      
      # Normal CI steps here
      - name: Build and test
        run: ./gradlew build
      
      # SIEM integration
      - name: Log Deployment Event
        run: |
          curl -X POST https://siem-ingest.example.com/api/events \
          -H "Content-Type: application/json" \
          -H "Authorization: Bearer ${{ secrets.SIEM_TOKEN }}" \
          -d '{
            "event_type": "DEPLOYMENT",
            "service": "payment-api",
            "version": "${{ github.sha }}",
            "deployer": "${{ github.actor }}",
            "changes_url": "https://github.com/${{ github.repository }}/commit/${{ github.sha }}"
          }'

Explanation:

  • This GitHub Actions workflow sends deployment information to your SIEM as part of your CI/CD pipeline
  • After the normal build and test steps, it makes an API call to your SIEM's ingestion endpoint
  • It includes crucial security context: what was deployed, which version, who deployed it, and a link to the exact code changes.
  • This creates a permanent record of deployments in your security logs
  • When troubleshooting security incidents, this gives you a timeline of exactly what code was running when an issue occurred
  • The secret token is stored securely in GitHub's secrets system, not in the workflow file itself

This creates deployment trail evidence in your SIEM – critical for root cause analysis.

💡
If you're deciding between SLF4J and Log4j, understanding their differences can help you choose the right tool. Read more here.

In Your Runtime Environment

Instrument your code to emit security events:

// Example in Node.js
function logSecurityEvent(eventType, details) {
  const event = {
    timestamp: new Date().toISOString(),
    service: process.env.SERVICE_NAME,
    event_type: eventType,
    environment: process.env.ENVIRONMENT,
    host: os.hostname(),
    ...details
  };
  
  // Synchronous local logging
  console.log(JSON.stringify(event));
  
  // Asynchronous SIEM forwarding
  if (process.env.SIEM_ENDPOINT) {
    axios.post(process.env.SIEM_ENDPOINT, event)
      .catch(err => console.error('Failed to send to SIEM:', err));
  }
}

// Usage in authentication code
function authenticate(username, password) {
  try {
    const user = validateCredentials(username, password);
    
    logSecurityEvent('AUTHENTICATION_SUCCESS', {
      user_id: user.id,
      source_ip: request.ip,
      auth_method: 'password'
    });
    
    return user;
  } catch (error) {
    logSecurityEvent('AUTHENTICATION_FAILURE', {
      attempted_user: username,
      source_ip: request.ip,
      reason: error.code
    });
    
    throw error;
  }
}

Explanation:

  • This Node.js code shows how to instrument your application code to emit security events directly to your SIEM
  • The logSecurityEvent() function creates standardized security events with consistent fields:
    • Automatic contextual data (timestamp, service name, environment, hostname)
    • Event-specific details passed in by the caller
  • It handles two paths for the log event:
    • Local logging (for development and immediate visibility)
    • Asynchronous forwarding to your SIEM (using environment variables for config)
  • The authentication example shows how to log both successful and failed logins
  • Note how failures log the attempted username but successes log the validated user ID - this protects against username enumeration attacks
  • The error is re-thrown after logging, maintaining normal application flow

Making Your SIEM Logs Actually Useful

The difference between a SIEM that helps and one that collects dust:

Threat Modeling Your Logging

Instead of logging blindly, ask these questions:

  1. "What could attackers do to this system?"
  2. "What log evidence would that activity create?"
  3. "Are we capturing those logs?"
  4. "Do we have alerts for those patterns?"

This approach ensures your SIEM logs actually cover your threat surface.

Creating Actionable Alerts

Generic alerts get ignored. Good alerts are:

  • Specific: "3 failed sudo attempts on payment-db-1" vs. "Authentication failure detected"
  • Contextualized: Include what happened before and after
  • Actionable: Suggest next steps or link to playbooks
  • Prioritized: Use severity levels that actually mean something

Building Dashboards That Tell Stories

Effective SIEM dashboards show:

  • Security posture at a glance
  • Trends over time
  • Current investigations
  • Recent incidents
  • Top findings requiring attention

A good dashboard answers the question: "Is anything on fire right now, and if so, where?"

Conclusion

When done right, SIEM logs shift security from reactive to proactive. Start small, prioritize quality over quantity, and make SIEM logging a core part of your development and operations workflow from the start. The most effective SIEM is the one that becomes a natural part of your daily process.

💡
If you've any questions about implementing SIEM logs in your environment, discuss in our Discord community, where we discuss your use cases you've been trying to solve.

FAQs

What is SIEM?

SIEM (Security Information and Event Management) is a system that collects, analyzes, and correlates security data from various sources to detect and respond to threats in real time.

How does SIEM work?

SIEM ingests logs from different systems (servers, firewalls, applications), applies rules and correlation logic, and generates alerts when suspicious activity is detected. It also helps with compliance reporting and forensic analysis.

Why is SIEM important?

SIEM provides centralized visibility into security events, helping organizations detect threats, ensure compliance, and investigate incidents efficiently.

What are common sources of SIEM logs?

  • Firewalls and network devices
  • Endpoint security solutions
  • Cloud services (AWS, Azure, GCP)
  • Applications and databases
  • Identity and access management systems

What’s the difference between SIEM and log management?

Log management focuses on collecting and storing logs, while SIEM analyzes logs for security insights, detects anomalies, and triggers alerts.

Can SIEM prevent cyberattacks?

SIEM itself doesn’t prevent attacks, but it helps detect threats early so security teams can respond before major damage occurs.

What are the challenges of implementing SIEM?

  • High volume of logs leading to alert fatigue
  • Fine-tuning rules to reduce false positives
  • Integration with diverse IT infrastructure
  • Cost and complexity of deployment
  • IBM QRadar
  • Microsoft Sentinel
  • Elastic Security
  • Graylog
  • Wazuh (open-source)

How much data should I feed into my SIEM?

Start with the security essentials, not everything. A typical starting point is 5-15% of your total log volume. Expand gradually based on threats and gaps you discover.

What's the right retention period for SIEM logs?

It depends on:

  • Regulatory requirements (HIPAA, PCI-DSS, etc.) which might mandate 1+ years
  • Breach detection time (industry average is 200+ days, so 12+ months is wise)
  • Your threat model and risk tolerance

A common approach: Hot storage (1-3 months) for active searching, cold storage (12+ months) for compliance and investigations.

Cloud SIEM vs. Self-hosted?

Factor Cloud SIEM Self-hosted SIEM
Setup time Days Weeks to months
Maintenance Minimal Significant
Scalability On-demand Requires planning
Cost model Predictable, usage-based Large upfront + ongoing
Control Limited customization Complete control
Data residency Potential concerns You decide

For most teams under 100 people, cloud SIEM makes more sense. As you grow, hybrid approaches often provide the best balance.

How do I handle high-volume log sources?

Options include:

  • Sampling (take every Nth event)
  • Filtering (discard routine events)
  • Aggregation (roll up similar events)
  • Pre-processing (extract just the security-relevant fields)

Always log security-critical events at 100%. Only apply reduction techniques to high-volume, lower-criticality sources.

Contents


Newsletter

Stay updated on the latest from Last9.

Authors
Anjali Udasi

Anjali Udasi

Helping to make the tech a little less intimidating. I love breaking down complex concepts into easy-to-understand terms.

Topics