当前位置: 首页 > news >正文

记录第一次搭建ELK+filebeat环境

我的环境是用win11+wsl+docker desktop

前提条件

  1. 确保 WSL 中已安装 Docker 和 Docker Compose

  2. 确保你的 WSL 有足够的内存(至少 4GB 推荐给 Docker)

检查安装:

bash

docker --version
docker-compose --version

第一步:创建项目目录结构

创建一个专门的项目目录来存放所有配置文件:

bash

mkdir elk-filebeat-demo
cd elk-filebeat-demo
mkdir -p filebeat/{data,logs}

第二步:创建 Docker Compose 文件

创建 docker-compose.yml 文件:

bash

nano docker-compose.yml

将以下内容复制到文件中:

yaml

version: '3.8'services:# Elasticsearchelasticsearch:image: docker.elastic.co/elasticsearch/elasticsearch:7.17.21  # 使用 7.x 版本以兼容 JDK8container_name: elasticsearchenvironment:- discovery.type=single-node- "ES_JAVA_OPTS=-Xms512m -Xmx512m"  # 限制内存使用- xpack.security.enabled=false      # 学习环境禁用安全认证volumes:- elasticsearch_data:/usr/share/elasticsearch/dataports:- "9200:9200"networks:- elk-networkrestart: unless-stopped# Kibanakibana:image: docker.elastic.co/kibana/kibana:7.17.21container_name: kibanaenvironment:- ELASTICSEARCH_HOSTS=http://elasticsearch:9200ports:- "5601:5601"networks:- elk-networkdepends_on:- elasticsearchrestart: unless-stopped# Logstashlogstash:image: docker.elastic.co/logstash/logstash:7.17.21container_name: logstashenvironment:- LS_JAVA_OPTS=-Xmx256m -Xms256mvolumes:- ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml:ro- ./logstash/pipeline:/usr/share/logstash/pipeline:roports:- "5044:5044"networks:- elk-networkdepends_on:- elasticsearchrestart: unless-stopped# Filebeatfilebeat:image: docker.elastic.co/beats/filebeat:7.17.21container_name: filebeatuser: root  # 需要 root 权限读取日志文件volumes:- ./filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro- ./filebeat/data:/usr/share/filebeat/data:rw- ./filebeat/logs:/usr/share/filebeat/logs:rw- /var/log:/var/log:ro  # 挂载宿主机的日志目录- /var/lib/docker/containers:/var/lib/docker/containers:ro  # 收集 Docker 容器日志networks:- elk-networkdepends_on:- elasticsearch- logstashrestart: unless-stopped# 定义网络和卷
networks:elk-network:driver: bridgevolumes:elasticsearch_data:driver: local

第三步:创建 Logstash 配置

创建配置目录和文件:

bash

mkdir -p logstash/{config,pipeline}

创建 Logstash 主配置文件:

bash

nano logstash/config/logstash.yml

内容:

yaml

http.host: "0.0.0.0"
path.config: /usr/share/logstash/pipeline

创建 Logstash 管道配置文件:

bash

nano logstash/pipeline/logstash.conf

内容:

ruby

input {beats {port => 5044}
}# 简单的过滤,可以按需扩展
filter {# 如果是系统日志,可以解析时间戳等if [fileset][module] == "system" {if [fileset][name] == "auth" {grok {match => { "message" => ["%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} %{DATA:[system][auth][ssh][method]} for (invalid user )?%{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]} port %{NUMBER:[system][auth][ssh][port]} ssh2(: %{GREEDYDATA:[system][auth][ssh][signature]})?","%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} user %{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]}","%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: Did not receive identification string from %{IPORHOST:[system][auth][ssh][ip]}","%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sudo(?:\[%{POSINT:[system][auth][pid]}\])?: \s*%{DATA:[system][auth][user]} :( %{DATA:[system][auth][sudo][error]} ;)? TTY=%{DATA:[system][auth][sudo][tty]} ; PWD=%{DATA:[system][auth][sudo][pwd]} ; USER=%{DATA:[system][auth][sudo][user]} ; COMMAND=%{GREEDYDATA:[system][auth][sudo][command]}","%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} groupadd(?:\[%{POSINT:[system][auth][pid]}\])?: new group: name=%{DATA:system.auth.groupadd.name}, GID=%{NUMBER:system.auth.groupadd.gid}","%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} useradd(?:\[%{POSINT:[system][auth][pid]}\])?: new user: name=%{DATA:[system][auth][user][add][name]}, UID=%{NUMBER:[system][auth][user][add][uid]}, GID=%{NUMBER:[system][auth][user][add][gid]}, home=%{DATA:[system][auth][user][add][home]}, shell=%{DATA:[system][auth][user][add][shell]}$","%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} %{DATA:[system][auth][program]}(?:\[%{POSINT:[system][auth][pid]}\])?: %{GREEDYMULTILINE:[system][auth][message]}"] }pattern_definitions => {"GREEDYMULTILINE"=> "(.|\n)*"}remove_field => "message"}date {match => [ "[system][auth][timestamp]", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]}}}
}output {elasticsearch {hosts => ["elasticsearch:9200"]index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"}#  stdout { codec => rubydebug }  # 取消注释可以在控制台看到日志,用于调试
}

第四步:创建 Filebeat 配置

创建 Filebeat 配置文件:

bash

nano filebeat/filebeat.yml

内容:

yaml

filebeat.inputs:- type: logenabled: truepaths:- /var/log/*.log- /var/log/auth.log- /var/log/syslogfields:log_type: system- type: logenabled: truepaths:- /var/lib/docker/containers/*/*.logfields:log_type: docker# 设置模块路径
filebeat.config.modules:path: ${path.config}/modules.d/*.ymlreload.enabled: false# 输出到 Logstash
output.logstash:hosts: ["logstash:5044"]# 日志记录设置(可选,用于调试)
logging.level: info
logging.to_files: true
logging.files:path: /usr/share/filebeat/logsname: filebeatkeepfiles: 7

第五步:启动 ELK 栈

现在一切就绪,启动所有服务:

bash

docker-compose up -d

检查服务状态:

bash

docker-compose ps

查看日志(如果需要调试):

bash

docker-compose logs -f elasticsearch
# 或者查看特定服务日志
docker-compose logs -f filebeat

第六步:验证和访问

  1. 检查 Elasticsearch

    bash

    curl http://localhost:9200
  2. 访问 Kibana
    在 Windows 浏览器中打开:http://localhost:5601

  3. 在 Kibana 中创建索引模式

    • 进入 Kibana → Management → Stack Management → Index Patterns

    • 点击 "Create index pattern"

    • 输入 filebeat-*

    • 选择 @timestamp 作为时间字段

    • 点击 "Create index pattern"

  4. 查看日志

    • 进入 Kibana → Analytics → Discover

    • 选择 filebeat-* 索引模式

    • 你应该能看到收集到的系统日志


常用命令

bash

# 停止所有服务
docker-compose down# 停止并删除数据卷(彻底清理)
docker-compose down -v# 查看服务状态
docker-compose ps# 查看实时日志
docker-compose logs -f# 重启特定服务
docker-compose restart filebeat

优势说明

使用 Docker Compose 方式的好处:

  1. 隔离性:所有组件在容器中运行,不影响宿主机

  2. 一致性:版本匹配,避免兼容性问题

  3. 可重复性:配置文件化,容易重现和分享

  4. 易清理:一条命令即可完全清理环境

现在你就可以开始探索 ELK 栈的功能了!你可以修改 Filebeat 配置来收集其他日志文件,或者学习 Logstash 的过滤规则来解析特定格式的日志。

执行docker-compose up -d要先进入wsl的磁盘目录

必须要在 Docker Compose 文件所在的目录下执行命令,否则 Docker Compose 找不到 docker-compose.yml 文件。


正确的步骤应该是:

  1. 在 WSL 中切换到你的项目目录(根据你的实际路径):

bash

# 如果你的项目在 Windows 的 F:\wsl\project\elk-filebeat-demo
# 在 WSL 中对应的路径可能是:
cd /mnt/f/wsl/project/elk-filebeat-demo# 或者如果你的项目在 WSL 的家目录中
cd ~/elk-filebeat-demo
  1. 确认当前目录下有 docker-compose.yml 文件

bash

ls -la

你应该能看到:

text

docker-compose.yml
filebeat/
logstash/
  1. 然后才启动服务

bash

docker-compose up -d

关于 WSL 文件路径的重要说明

在 WSL 中有两种文件存储位置:

方案一:放在 Windows 文件系统中(/mnt/...)
  • 路径/mnt/f/wsl/project/elk-filebeat-demo

  • 优点:文件在 Windows 中可见,方便用 VS Code 等工具编辑

  • 缺点:I/O 性能稍差(但对于学习环境影响不大)

方案二:放在 WSL 原生文件系统中(~/ 或 /home/username/...)
  • 路径~/elk-filebeat-demo 或 /home/你的用户名/elk-filebeat-demo

  • 优点:I/O 性能更好

  • 缺点:在 Windows 文件资源管理器中不可直接访问


检查你是否在正确目录的方法

bash

# 查看当前目录
pwd# 查看目录内容
ls -la# 确认有 docker-compose.yml 文件
ls docker-compose.yml

如果显示 No such file or directory,说明你不在正确的目录。


完整的正确流程示例

bash

# 1. 进入项目目录(根据你的实际路径选择)
cd /mnt/f/wsl/project/elk-filebeat-demo# 2. 确认文件存在
ls -la# 3. 启动服务
docker-compose up -d# 4. 检查服务状态
docker-compose ps# 5. 查看日志
docker-compose logs -f elasticsearch

如果已经在错误的位置启动了怎么办?

如果在错误目录执行了 docker-compose up -d,需要先停止:

bash

# 在原来的错误目录下停止服务
docker-compose down# 然后切换到正确目录再启动
cd /正确的/路径/elk-filebeat-demo
docker-compose up -d

总结:必须先进入包含 docker-compose.yml 文件的目录,然后再执行启动命令。

http://www.dtcms.com/a/418830.html

相关文章:

  • 【复习】计网每日一题--多播
  • 狮山网站开发wordpress轩小程序
  • Ubuntu22.04——配置固定IP
  • 记Bugku CTF平台解题过程
  • OceanBase主备库日志传输服务
  • React-props的children属性
  • 济宁做网站的公司邯郸公司网站建设
  • 特别分享:关于Pipeline
  • 速通ACM省铜第十七天 赋源码(Racing)
  • ARM(IMX6ULL)——通信(IIC/I2C)
  • 零基础学AI大模型之LangChain-PromptTemplate
  • FFT去除规律条纹
  • JAVA中的权限修饰符
  • 前端面试十四之webpack和vite有什么区别
  • 小米路由器 做网站银川森林半岛
  • Kafka04-知识速记
  • 【Linux】高级I/O
  • 开源的容器化平台:Docker高级应用与实战案例
  • 3.7 广域网 (答案见原书 P116)
  • 临淄网站制作首选公司seo排名需要多少钱
  • k8s-部署单master节点
  • Python 2025:量子计算编程的新前沿
  • 二级学院网站建设自评报告互联网营销公司有哪些
  • 做网站滨州现在写博客还是做网站
  • 基于 Service Worker 的图书馆资源缓存技术研究
  • php网站后台验证码不显示哈尔滨教育云平台网站建设
  • 银行门户网站是什么意思网页设计代码中字体的颜色如何改
  • 【代码的暴力美学】-- C语言基础编程题_1
  • Java 架构师系列:JVM 与 AI 负载的优化策略
  • 数据分析-Excel-常用函数