0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

Xây Dựng Giải Pháp Giám Sát Nhật Ký Sự Kiện Windows Với ELK + Grafana

Đăng vào 1 tháng trước

• 7 phút đọc

Giới thiệu

Bạn đã từng dành hàng giờ để thiết lập giám sát nhật ký sự kiện Windows chưa? Tôi đã làm như vậy, và do đó, tôi đã xây dựng một giải pháp giúp triển khai một hệ thống giám sát đầy đủ với ELK và Grafana chỉ trong 5 phút. Trong bài viết này, tôi sẽ hướng dẫn bạn từng bước để có thể thiết lập một stack giám sát hoàn chỉnh.

Tóm tắt nhanh

powershell Copy
git clone https://github.com/SecByShresth/Windows-ELK-Monitoring-Stack.git
cd Windows-ELK-Monitoring-Stack
.\oneclick-setup.ps1  # Chạy với quyền Administrator
.\winlogbeat\install-winlogbeat.ps1  # Cài đặt bộ thu nhật ký

Kết quả: Giám sát nhật ký sự kiện Windows hoàn chỉnh với Elasticsearch, Kibana, Logstash và Grafana chạy cục bộ.

Vấn Đề Gặp Phải

Việc giám sát nhật ký sự kiện Windows không nên khó khăn như vậy:

  • ❌ Thiết lập stack ELK mất hàng giờ
  • ❌ Việc tạo chứng chỉ SSL rất phức tạp
  • ❌ Cấu hình Winlogbeat gây nhầm lẫn
  • ❌ Không có bảng điều khiển Windows được xây dựng sẵn
  • ❌ Nhiều phần cần phối hợp

Mục tiêu:

Chạy run-script.ps1 → Stack giám sát sẵn sàng ✅

Kiến Trúc Giải Pháp

Copy
┌─────────────────┐    ┌──────────────────┐    ┌─────────────────┐
│   Winlogbeat    │───▶│    Logstash      │───▶│ Elasticsearch   │
│ (Bộ thu sự kiện)│    │ (Cổng 5044)      │    │ (Cổng 9200)     │
└─────────────────┘    └──────────────────┘    └─────────────────┘
                                │                        │
                                ▼                        ▼
┌─────────────────┐    ┌──────────────────┐    ┌─────────────────┐
│    Grafana      │    │     Kibana       │    │   Chỉ HTTP      │
│ (Cổng 3000)     │    │ (Cổng 5601)      │    │ (Phát triển cục bộ) │
└─────────────────┘    └──────────────────┘    └─────────────────┘

Công Nghệ Sử Dụng

  • 🔍 Elasticsearch 8.11.2 (lưu trữ & tìm kiếm)
  • 📊 Kibana 8.11.2 (khám phá nhật ký)
  • 🔄 Logstash 8.11.2 (xử lý nhật ký)
  • 📈 Grafana mới nhất (bảng điều khiển)
  • 📥 Winlogbeat 8.15.1 (thu thập nhật ký)
  • 🐳 Docker (đóng gói ứng dụng)
  • ⚡ PowerShell (tự động hóa)

Hướng Dẫn Bắt Đầu Nhanh

1. Kiểm tra phiên bản PowerShell (cần 5.1+)

powershell Copy
$PSVersionTable.PSVersion

2. Xác minh Docker Desktop đang chạy

powershell Copy
docker version

3. Nhân bản và thiết lập

powershell Copy
git clone https://github.com/SecByShresth/Windows-ELK-Monitoring-Stack.git
cd Windows-ELK-Monitoring-Stack

4. Thiết lập chính sách thực thi nếu cần

powershell Copy
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

5. Chạy thiết lập một lần nhấn

powershell Copy
.\oneclick-setup.ps1

Những gì script làm:

  • ✅ Tạo file .env với mật khẩu ngẫu nhiên
  • ✅ Kiểm tra tính khả dụng của Docker
  • ✅ Khởi động các container ELK + Grafana
  • ✅ Chờ cho các dịch vụ sẵn sàng
  • ✅ Cung cấp URL truy cập

6. Cài đặt Winlogbeat

powershell Copy
.\winlogbeat\install-winlogbeat.ps1

Điều này sẽ:

  • Tải Winlogbeat 8.15.1
  • Cài đặt vào C:\Program Files\winlogbeat
  • Cấu hình cho các nhật ký Ứng dụng, Hệ thống, Bảo mật
  • Đăng ký như một dịch vụ Windows
  • Bắt đầu thu thập nhật ký ngay lập tức

Truy Cập Stack Của Bạn

Tại Sao Giải Pháp Này Đặc Biệt

Triển Khai Không Cần Cấu Hình

Chỉ cần chạy .\oneclick-setup.ps1

Tự Động Hóa PowerShell Thông Minh

Tạo mật khẩu ngẫu nhiên:

powershell Copy
function RandStr($len=20) {
    $bytes = New-Object 'Byte[]' $len
    [System.Security.Cryptography.RandomNumberGenerator]::Create().GetBytes($bytes)
    [System.Convert]::ToBase64String($bytes) -replace '[^a-zA-Z0-9]', 'A'
}

Chờ Dịch Vụ Sẵn Sàng:

powershell Copy
for ($i = 0; $i -lt 60; $i++) {
    try {
        $resp = Invoke-RestMethod -Uri 'http://localhost:9200/_cluster/health'
        if ($resp.status) { break }
    } catch { Start-Sleep -Seconds 5 }
}

Cấu Hình Sẵn Mọi Thứ

  • 📋 Các mẫu chỉ mục Kibana đã sẵn sàng
  • 🎨 Các nguồn dữ liệu Grafana tự động được cấu hình
  • 🔍 Pipeline Logstash được cấu hình cho nhật ký Windows
  • 📊 Các bảng điều khiển mẫu được bao gồm

Phép Màu Docker Compose

yaml Copy
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.11.2
    environment:
      - xpack.security.enabled=false
      - discovery.type=single-node
    ports:
      - 9200:9200

  kibana:
    image: docker.elastic.co/kibana/kibana:8.11.2
    depends_on:
      - elasticsearch
    ports:
      - 5601:5601

Cấu Trúc Dự Án

Copy
windows-elk-monitoring-stack/
├── oneclick-setup.ps1              # Script thiết lập chính
├── docker-compose.yml              # Quản lý container
├── .env.example                    # Mẫu cấu hình
├── grafana/
│   ├── dashboards/                 # Bảng điều khiển được xây dựng sẵn
│   └── provisioning/               # Tự động cấu hình
├── logstash/
│   └── pipeline/winlog.conf        # Xử lý nhật ký Windows
├── winlogbeat/
│   ├── install-winlogbeat.ps1      # Trình cài đặt thu thập
│   └── winlogbeat.template.yml     # Cấu hình thu thập nhật ký
└── README.md                        # Tài liệu đầy đủ

Những Gì Bạn Sẽ Thấy

Khám Phá Kibana:

plaintext Copy
winlog.event_id: 4625  # Đăng nhập thất bại
winlog.event_data.Level: "Error"  # Lỗi ứng dụng
@timestamp >= now-1h and winlog.channel: "System"  # Sự kiện hệ thống gần đây

Bảng Điều Khiển Grafana:

  • Tổng quan về sự kiện Windows
  • Giám sát sự kiện bảo mật
  • Cảnh báo tình trạng hệ thống
  • Theo dõi lỗi ứng dụng

Sử Dụng Nâng Cao

Nguồn Nhật Ký Tùy Chỉnh

yaml Copy
winlogbeat.event_logs:
  - name: Application
  - name: System  
  - name: Security
  - name: Microsoft-Windows-PowerShell/Operational
  - name: Microsoft-Windows-Sysmon/Operational

Xử Lý Logstash

plaintext Copy
input {
  beats { port => 5044 }
}

filter {
  if [winlog][event_id] == 4625 {
    mutate { add_tag => [ "failed_login" ] }
  }
}

output {
  elasticsearch {
    hosts => ["http://elasticsearch:9200"]
    index => "winlogbeat-%{+YYYY.MM.dd}"
  }
}

Lưu Ý Bảo Mật Quan Trọng

  • ⚠️ Thiết lập này chỉ dành cho PHÁT TRIỂN/THỬ NGHIỆM CỤC BỘ. Đối với môi trường sản xuất:
    • Bật bảo mật X-Pack của Elasticsearch
    • Cấu hình chứng chỉ SSL/TLS
    • Thay đổi mật khẩu mặc định
    • Triển khai xác thực phù hợp
    • Phân đoạn mạng

Khắc Phục Sự Cố

Docker không chạy:

powershell Copy
docker version

Xung đột cổng:

powershell Copy
netstat -ano | findstr ":9200"
netstat -ano | findstr ":5601"
netstat -ano | findstr ":3000"

Winlogbeat không thu thập:

powershell Copy
Get-Service winlogbeat
Get-Content "C:\Program Files\winlogbeat\logs\winlogbeat"
Restart-Service winlogbeat

Hiệu Năng & Sử Dụng Tài Nguyên

Yêu Cầu Tối Thiểu:

  • 💾 4GB RAM (8GB được khuyến nghị)
  • 💿 5GB dung lượng đĩa
  • 🖥️ Windows 10/11 hoặc Server 2016+

Sử Dụng Dự Kiến:

  • Elasticsearch: ~512MB RAM
  • Kibana: ~200MB RAM
  • Logstash: ~300MB RAM
  • Grafana: ~100MB RAM
  • Winlogbeat: ~50MB RAM

Cải Tiến Tương Lai

  • Hỗ trợ SSL/TLS với chứng chỉ tự động được tạo
  • Bảng điều khiển bảo mật được xây dựng sẵn thêm
  • Mẫu tích hợp Sysmon
  • Ghi nhật ký tập trung đa máy chủ
  • Mẫu quy tắc cảnh báo
  • Bảng điều khiển giám sát hiệu suất

Cộng Đồng & Đóng Góp

Nếu bạn thấy điều này hữu ích:

  • ⭐ Đánh dấu kho lưu trữ
  • 🔄 Chia sẻ với mạng lưới của bạn
  • 🐛 Báo cáo sự cố trên GitHub
  • 💡 Đóng góp cải tiến

Kết Nối Với Tôi:

Profile: Portfolio

Kết Luận

Việc giám sát nhật ký sự kiện Windows không cần phải phức tạp. Với giải pháp một lần nhấn này, bạn sẽ có:

  • ✅ Stack ELK + Grafana hoàn chỉnh trong 5 phút
  • ✅ Thu thập nhật ký sự kiện Windows tự động
  • ✅ Các bảng điều khiển và mẫu chỉ mục được cấu hình sẵn
  • ✅ Đóng gói container Docker để quản lý dễ dàng
  • ✅ Tự động hóa PowerShell cho môi trường Windows

Thích hợp cho phát triển, thử nghiệm, phản ứng sự cố hoặc giám sát quy mô nhỏ.

Kho Lưu Trữ & Tài Nguyên:

plaintext Copy
GitHub: https://github.com/SecByShresth/Windows-ELK-Monitoring-Stack

Bắt Đầu Nhanh:

powershell Copy
git clone https://github.com/SecByShresth/Windows-ELK-Monitoring-Stack.git
cd Windows-ELK-Monitoring-Stack
.\oneclick-setup.ps1

Truy Cập Stack:

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào