使用filebeat, elasticsearch和kibana构建日志管道
日志记录在应用程序实施过程中是一个关键点,因为它可以让我们了解应用程序,并在出现错误或输出正确值时提供更多信息。换句话说,日志可以为我们提供应用程序的健康状态。对于非复杂的软件架构,当问题发生时,很容易找出问题并解决,然而,一旦复杂性增加,应用程序的可见性减少,这就需要寻找其他解决方案,简化日志可视化工具,其中可以对日志数据进行过滤,并且在某些情况下生成警告消息。绝大多数云平台都支持所有这些功能,甚至更多。
现在,如果我们想创建一个由生成日志的应用程序、Elasticsearch、Filebeat和Kibana组成的日志管道,我们需要遵循哪些步骤呢?本教程的目标是向您演示如何使用docker-compose.yml文件以及较少的配置来轻松创建这个管道。准备docker-compose文件可能需要一些时间,那是肯定的,然而,您将不需要像我这样花时间来进行这个设置:)
以下教程依赖于三个步骤来实现日志管道:
准备docker-compose文件
执行docker-compose文件
在Kibana中可视化日志内容
1.准备docker-compose文件
第一个yaml文件是docker-compose.yml,其中包含我们需要的四个服务:
app:生成日志消息并将其添加到app.log文件中。所选的Docker镜像是python3.8,可以根据需要更换为更简单的镜像。
filebeat:是一款从app.log文件中提取日志消息并将其转发到Elasticsearch的软件。
elasticsearch:收集所有这些格式化数据并存储在其数据库中。
kibana:使我们能够可视化Elasticsearch中可用的数据,并使用一些过滤机制提取日志数据。
version: "3"
services:
app:
image: python:3.8
command: bash -c "while true; do echo 'Log message from app' >> /var/log/app.log; sleep 5; done"
volumes:
- app_logs:/var/log
networks:
- test
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
filebeat:
image: docker.elastic.co/beats/filebeat:7.16.2
user: root
volumes:
- ./filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
- app_logs:/var/log/app/:ro
command: filebeat -e
networks:
- test
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.16.2
environment:
- "ES_JAVA_OPTS=-Xms1g -Xmx1g"
- "discovery.type=single-node"
- "xpack.security.enabled=false"
volumes:
- elasticsearch_data:/usr/share/elasticsearch/data
ports:
- "9200:9200"
- "9300:9300"
networks:
- test
restart: on-failure
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
kibana:
image: docker.elastic.co/kibana/kibana:7.16.2
ports:
- "5601:5601"
depends_on:
- elasticsearch
environment:
- "xpack.security.authc.http.enabled=false"
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
networks:
- test
volumes:
app_logs:
elasticsearch_data:
networks:
test:
driver: bridge
Filebeat需要一个额外的yaml配置文件,该文件保存为Filebeat。如下所示。注意,这个文件被传递到上面的filebeat docker服务中的docker容器。
filebeat.inputs:
- type: log
paths:
- '/var/log/app/*.log'
output.elasticsearch:
hosts: ["elasticsearch:9200"]
indices:
- index: "filebeat-%{[agent.version]}-%{+yyyy.MM.dd}"
logging.json: true
logging.metrics.enabled: false
此配置指示将从哪个数据源检索日志文件,以及将具有特定索引格式的数据转发到哪个数据源,日志内容将被转发。在搜索日志文件时,这个索引名将出现在kibana界面中。
在创建了上述两个文件之后,在终端上执行ls -al后,可以看到这些文件如下所示:
2. 执行docker-compose文件
出于测试的目的,docker-compose的执行方式如下:
docker-compose up
要检查elasticsearch除非docker日志是否有意义,你可以调用localhost:9200,结果是:
想知道kibana是否在运行:http://localhost:5601/app/home#/
顺便说一下,您还可以使用-d模式执行docker-compose,这里的目标是增加控制台消息中的可见性,并理解发生了什么。
顺便说一下,您还可以使用-d模式执行docker-compose,这里的目标是增加控制台消息中的可见性,并理解发生了什么。
3.可视化日志在Kibana
为了可视化仪表板或发现中的日志消息,我们需要在Stack Management下创建一个索引模式,如下所示:
在打开索引模式创建的情况下,在filebeat中创建的模式是filebeat-*。一旦输入,所有相关字段将在右侧列出。我们可以在下面添加时间戳字段,然后可以应用Create Index Pattern。
要查看所有这些配置是否有效,我们打开左侧面板上的Discovery。所有日志消息都被发送,并且可以在文档对象中识别日志消息,该文档对象是高亮显示的。
总结
在上面的示例中,日志管道的创建似乎不太复杂,但是,请记住,一旦复杂性级别增加,其管理可能会变得更加困难。在本教程中,目的是提供一个简单的日志管道环境,它可能对您的目的有所帮助。
- 点赞
- 收藏
- 关注作者
评论(0)