第 1 步:使用 Docker Compose 部署 Elasticsearch 和 Kibana
首先,我们需要创建一个 docker-compose.yml
文件来定义和运行 Elasticsearch 和 Kibana 服务。这种方式可以轻松管理两个容器的配置和网络。
-
创建
docker-compose.yml
文件在一个新的文件夹中,创建名为
docker-compose.yml
的文件,并填入以下内容。version: '3.8' services: elasticsearch: image: elasticsearch:8.18.2 container_name: elasticsearch environment: - "discovery.type=single-node" - "xpack.security.enabled=false" # 重要:为简化部署,此处禁用安全功能。生产环境请勿使用! - "ES_JAVA_OPTS=-Xms1g -Xmx1g" # 根据您的服务器资源调整内存 volumes: - es_data:/usr/share/elasticsearch/data ports: - "9200:9200" - "9300:9300" networks: - elastic_net kibana: image: kibana:8.18.2 container_name: kibana environment: - "ELASTICSEARCH_HOSTS=http://elasticsearch:9200" # 指向 Elasticsearch 容器 ports: - "5601:5601" depends_on: - elasticsearch networks: - elastic_net volumes: es_data: driver: local networks: elastic_net: driver: bridge
配置说明:
-
xpack.security.enabled=false
: 我们禁用了 Elasticsearch 的安全功能(如用户认证)。这极大地简化了配置过程,但强烈不建议在生产环境中使用。 -
discovery.type=single-node
: 将 Elasticsearch 配置为单节点模式。 -
volumes
: 创建一个名为es_data
的数据卷,用于持久化存储 Elasticsearch 的数据,防止容器删除后数据丢失。 -
networks
: 创建了一个名为elastic_net
的桥接网络,以确保 Kibana 和 Elasticsearch 可以相互通信。
-
-
启动服务
在包含
docker-compose.yml
文件的目录中,打开终端并运行以下命令:docker-compose up -d
-
验证服务状态
等待几分钟,让服务完全启动。然后通过以下命令检查容器是否正常运行:
docker-compose ps
您应该能看到
elasticsearch
和kibana
两个容器都处于Up
状态。您也可以通过浏览器或
curl
命令来验证服务是否可访问:-
Elasticsearch: 打开终端,运行
curl http://localhost:9200
。如果返回一个包含版本信息的 JSON 对象,则表示 Elasticsearch 运行正常。
-
-
-
Kibana: 打开浏览器,访问
http://localhost:5601
。如果看到 Kibana 的欢迎界面,则表示 Kibana 运行正常。
-
第 2 步:安装并配置 Filebeat
现在,我们需要在您已经安装了 NGINX 的服务器上安装和配置 Filebeat。
-
安装 Filebeat
将
filebeat-8.18.2-x86_64.rpm
包上传到您的 NGINX 服务器,并使用以下命令进行安装:rpm -vi filebeat-8.18.2-x86_64.rpm
安装完成后,Filebeat 的配置文件位于
/etc/filebeat/
目录下。 -
启用 NGINX 模块
Filebeat 提供了预置的模块来简化常见服务的日志采集,包括 NGINX。运行以下命令启用 NGINX 模块:
filebeat modules enable nginx
此命令会在
/etc/filebeat/modules.d/
目录下创建一个nginx.yml
配置文件(如果它不存在的话)。 -
配置
filebeat.yml
编辑主配置文件
/etc/filebeat/filebeat.yml
。您需要修改output.elasticsearch
和setup.kibana
部分,使其指向我们刚刚用 Docker 部署的服务。nano /etc/filebeat/filebeat.yml
找到并修改以下关键部分(文件中的其他默认配置可以暂时保持不变):
# ============================== Outputs =============================== # ---------------------------- Elasticsearch Output ---------------------------- output.elasticsearch: # Array of hosts to connect to. # 重要:请将 'your_server_ip' 替换为您服务器的实际 IP 地址。 # 不要使用 localhost 或 127.0.0.1,因为 Filebeat 运行在主机上,而 ES 在 Docker 容器中。 hosts: ["your_server_ip:9200"] # 如果您在上面 docker-compose.yml 中开启了安全功能,则需要配置用户名和密码 # username: "elastic" # password: "your_password" # ============================== Kibana ================================== # Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. # This requires a Kibana endpoint configuration. setup.kibana: # Kibana Host # 重要:请将 'your_server_ip' 替换为您服务器的实际 IP 地址。 host: "your_server_ip:5601"
关键点:
-
hosts
: 必须填写您服务器的公网或内网IP地址,而不是localhost
,因为 Filebeat 进程需要从主机访问 Docker 容器暴露的端口。 -
setup.kibana.host
: 同上,也需要填写您服务器的 IP 地址。
-
-
检查 NGINX 模块配置
打开
/etc/filebeat/modules.d/nginx.yml
文件,确保它监控的日志路径是正确的。默认配置如下:- module: nginx access: enabled: true var.paths: ["/var/log/nginx/access.log*"] # 检查您的 NGINX access 日志路径是否匹配 error: enabled: true var.paths: ["/var/log/nginx/error.log*"] # 检查您的 NGINX error 日志路径是否匹配
如果您的 NGINX 日志文件存放在其他位置,请务必修改
var.paths
的值。
第 3 步:启动 Filebeat 并加载资源
在启动 Filebeat 之前,我们需要运行 setup
命令。这个命令会自动连接到 Kibana 和 Elasticsearch,并加载预置的 NGINX 仪表板、索引模式等资源。
-
加载 Filebeat 资源
运行以下命令。对日志格式进行简单的模板分解,此过程可能需要一两分钟。
filebeat setup -e
如果看到类似
Dashboards loaded.
的信息,说明资源已成功加载到 Kibana。 -
启动并启用 Filebeat 服务
现在可以启动 Filebeat 服务,并设置为开机自启。
# 启动 Filebeat systemctl start filebeat # 设置为开机自启 systemctl enable filebeat
-
检查 Filebeat 状态
运行以下命令确保 Filebeat 服务正在运行且没有错误:
systemctl status filebeat
您也可以查看 Filebeat 的日志来排查问题:
journalctl -u filebeat -f
。
第 4 步:在 Kibana 中查看 NGINX 日志
现在,所有服务都已配置并运行,是时候在 Kibana 中查看成果了。
-
访问 Kibana
再次打开浏览器,访问
http://your_server_ip:5601
。
-
打开 Discover(发现)页面
-
点击左上角的菜单图标(三条横线)。
-
在 "Analytics" 分类下,点击 "Discover"。
-
-
选择索引模式
-
在 Discover 页面的左上角,您应该会看到一个下拉菜单。
-
filebeat setup
命令已经为您创建了名为filebeat-*
的索引模式。如果未被选中,请从下拉列表中选择它。
-
-
查询日志
一旦选择了正确的索引模式,您应该能看到从 NGINX 推送过来的日志数据流。
-
您可以在顶部的查询栏(KQL)中输入查询语句来过滤日志,例如
nginx.access.response_code : 404
来查找所有 404 错误。 -
左侧的字段列表可以让您快速筛选和分析数据。
-
-
查看 NGINX 仪表板
Filebeat 最强大的功能之一就是预置的仪表板。
-
点击左上角的菜单图标。
-
在 "Analytics" 分类下,点击 "Dashboard"。
-
在搜索框中输入 "nginx",您应该能看到类似于
[Filebeat NGINX] Access and error logs ECS
的仪表板。 -
点击打开它,您将看到一个包含各种图表和统计信息的可视化界面,全面展示了 NGINX 的访问情况和错误。
-
至此,已成功搭建了一套完整的日志采集分析系统。