如何在 Docker 容器中运行 Filebeat
在这篇博客中,我们将学习如何在容器环境中运行 Filebeat。为了快速理解 -
- Filebeat用于转发和集中日志数据。
- 它重量轻,占用空间小,并且使用的资源更少。
- 它作为代理安装在您的服务器上。
- 它监视指定位置的日志文件。
- 它收集日志事件并将其转发到Elasticsearch或 Logstash 进行索引。
设置
在此设置中,我有一个 ubuntu 主机,运行 Elasticsearch 和 Kibana 作为 docker 容器。我会将 Elasticsearch 和 Kibana 端口绑定到我的主机,以便我的 Filebeat 容器可以同时访问 Elasticsearch 和 Kibana。我暂时不会使用 Logstash。
我还有另一个正在运行的 ubuntu 虚拟机,我已经使用 Vagrant 配置了它。在此客户端虚拟机中,我将运行Nginx和 Filebeat 作为容器。
这个想法是,Filebeat 容器应该从客户端计算机上运行的所有容器收集所有日志,并将它们发送到主机上运行的 Elasticsearch。
您可以将 Filebeat 配置为从任意数量的容器收集日志。在这里,我将只为此演示安装一个容器。现在,让我们从演示开始。
演示
version: '2.2'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
container_name: elasticsearch
environment:
- node.name=elasticsearch
- discovery.seed_hosts=elasticsearch
- cluster.initial_master_nodes=elasticsearch
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata1:/usr/share/elasticsearch/data
ports:
- 9200:9200
kibana:
image: docker.elastic.co/kibana/kibana:7.9.2
container_name: kibana
environment:
ELASTICSEARCH_URL: "http://elasticsearch:9200"
ports:
- 5601:5601
depends_on:
- elasticsearch
volumes:
esdata1:
driver: local
1. 在主机上将 Elastic Search 和 Kibana 作为 Docker 容器运行
要将 Elastic Search 和 Kibana 作为 docker 容器运行,我使用 docker-compose,如下所示 -
复制上面的 dockerfile 并使用命令运行它 - sudo docker-compose up -d
此 docker-compose 文件将启动两个容器,如以下输出所示 -
您可以使用 - sudo docker ps检查正在运行的容器
使用该命令的容器的日志可以使用 - sudo docker-compose log -f检查
我们现在必须能够从您的浏览器访问 Elastic Search 和 Kibana。
只需输入localhost:9200即可访问 Elasticsearch。你应该看到——
同样,对于 Kibana,请在浏览器中输入localhost:5601 。
2. 在虚拟机上将 Nginx 和 Filebeat 作为 Docker 容器运行
现在,让我们先转到虚拟机并部署 nginx。输入以下命令 -
sudo docker run -d -p 8080:80 — 名称 nginx nginx
您可以在终端上使用此命令来检查它是否已正确部署 -
卷曲本地主机:8080
这应该会得到以下响应 -
我们还应该能够通过浏览器访问 nginx 网页。为此,我们需要知道虚拟机的 IP。你可以像这样找到它。
现在在浏览器中输入192.168.1.14:8080 。应打开以下网页 -
现在,我们只需部署 Filebeat 容器即可。使用以下命令下载镜像 - sudo docker pull docker.elastic.co/beats/filebeat:7.9.2
3. 设置Filebeat容器
现在要运行 Filebeat 容器,我们需要设置将从 filebeat 发送的日志的 elasticsearch 主机。这个命令将做到这一点 -
sudo docker run \
docker.elastic.co/beats/filebeat:7.9.2 \
setup -E setup.kibana.host= host_ip :5601 \
-E output.elasticsearch.hosts=[" host_ip :9200"]
将字段host_ip替换为主机的 IP 地址并运行命令。
现在让我们使用下面给出的示例配置文件来设置 filebeat
filebeat.config:
modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
filebeat.autodiscover:
providers:
- type: docker
hints.enabled: true
processors:
- add_cloud_metadata: ~
output.elasticsearch:
hosts: '${ELASTICSEARCH_HOSTS:192.168.1.7:9200}'
我们只需要将最后一行中的elasticsearch替换为我们主机的 IP 地址,然后保存该文件,使其看起来像这样 -
最后,使用以下命令使用 Filebeat 容器挂载卷。
docker run -d \
--name=filebeat \
--user=root \
--volume="$(pwd)/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" \
--volume ="/var/lib/docker/containers:/var/lib/docker/containers:ro" \
--volume="/var/run/docker.sock:/var/run/docker.sock:ro" \
docker .elastic.co/beats/filebeat:7.9.2 filebeat -e --strict.perms=false
我们的设置现在已完成。现在我们可以转到 Kibana 并可视化从 Filebeat 发送的日志。
要在Docker容器中运行Filebeat,需要创建包含Filebeat配置文件的Docker镜像,并设置启动命令。确保配置文件中指定了正确的日志路径和输出目标。
- 点赞
- 收藏
- 关注作者
评论(0)