方案简介
Elasticsearch 集群部署: 为了高可用性和可扩展性,可以将 Elasticsearch 部署为集群。
Logstash 管道优化: 根据日志量和复杂度,调整 Logstash 的 worker 数量、批处理大小等参数。
索引生命周期管理 (ILM): 使用 ILM 策略自动管理 Elasticsearch 索引(例如,定期滚动、删除旧索引)。
安全性: 启用 Elasticsearch 和 Kibana 的安全认证(用户名/密码、TLS/SSL)。
监控: 监控 ELK Stack 的性能和健康状态. 可以使用 Elastic Stack Monitoring 功能, 或者 Prometheus + Grafana.
安装使用
-
安装 Docker 和 Docker Compose:
-
Ubuntu:
1
2
3
4
5
6sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -
CentOS/RHEL:
1
2
3sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin -
验证安装:
1
2docker --version
docker compose version
-
-
** 增加 Docker 用户到
docker
组:** 避免每次都使用sudo
.1
2sudo usermod -aG docker $USER
newgrp docker # 或者注销并重新登录 -
创建工作目录:
1
2mkdir elk-smb
cd elk-smb
2. 创建 Docker Compose 文件 (docker-compose.yml):
在 elk-smb
目录下创建 docker-compose.yml
文件,内容如下:
1 | version: '3.8' |
3. 创建 Logstash 管道配置:
在 elk-smb
目录下创建 logstash/pipeline
目录,并在其中创建 Logstash 管道配置文件 smb-pipeline.conf
:
1 | # logstash/pipeline/smb-pipeline.conf |
说明:
- 这个配置文件同时处理来自 Beats (Windows Event Log) 和 Syslog (Samba) 的输入.
- Windows 部分, 使用
xml
插件解析事件日志的 XML 数据. - Samba 部分, 使用
grok
插件解析日志. 你需要根据实际的 Samba 日志格式调整grok
表达式. mutate
用于重命名字段, 添加字段等.date
用于解析时间戳.
- 代理服务器查询
1 | systemctl show --property=Environment docker |
4. 启动 ELK Stack:
在 elk-smb
目录下,运行以下命令:
1 | # docker compose up -d |
这将启动 Elasticsearch、Logstash 和 Kibana 容器。-d
选项表示在后台运行。
5. 验证安装:
-
Elasticsearch:
1
curl http://localhost:9200
- 返回结果
1 | { |
应该会看到 JSON 响应,表明 Elasticsearch 正在运行。
-
Kibana:
在浏览器中访问
http://localhost:5601
,应该能看到 Kibana 的界面。 -
Logstash:
Logstash 启动后会监听 5044 (Beats) 和 514 (Syslog) 端口. 可以通过查看 Logstash 的日志来确认:1
docker logs logstash
6. 配置数据源 (Samba 和 Windows):
-
Samba (Linux):
- 配置 Samba (
/etc/samba/smb.conf
) 以将日志发送到 Syslog(如前所述):1
2
3
4[global]
log level = 3
syslog only = yes
syslog = 3 - 配置 rsyslog 或 syslog-ng 将 Samba 的日志转发到 Logstash 容器的 IP 地址和端口 514。 (如果 Logstash 和 Samba 在同一台机器, 可以用
127.0.0.1
, 否则用 Logstash 所在机器的 IP). rsyslog 配置示例 (/etc/rsyslog.conf
或/etc/rsyslog.d/50-default.conf
):1
local7.* @<Logstash 容器 IP>:514 # UDP
- 重启 Samba 和 rsyslog:
1
2sudo systemctl restart smbd
sudo systemctl restart rsyslog
- 配置 Samba (
-
Windows Server:
- 配置 Windows 审核策略(如前所述)。
- 安装和配置 Winlogbeat(如前所述),将
output.logstash.hosts
设置为 Logstash 容器的 IP 地址和端口 5044。 Winlogbeat 配置示例 (winlogbeat.yml
):
1
2output.logstash:
hosts: ["<Logstash 容器 IP>:5044"]- 获取 Logstash 容器的 IP:
1
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' logstash
- 启动 Winlogbeat 服务。
7. 在 Kibana 中查看日志:
-
在 Kibana 中创建 Index Pattern (索引模式):
- 首次访问 Kibana 时,它会提示您创建 Index Pattern。
- 在 Management -> Stack Management -> Index Patterns 中创建。
- Index Pattern 名称:
smb-audit-*
(与 Logstash 配置中的index
匹配)。 - 时间筛选字段:
@timestamp
-
在 Discover 中查看日志:
- 选择
smb-audit-*
索引模式。 - 设置时间范围。
- 您应该能看到来自 Samba 和 Windows 的 SMB 访问日志。
- 选择
8. 停止和删除容器:
1 | docker compose down |