使用filebeat, elasticsearch和kibana构建日志管道

举报
kaliarch 发表于 2023/11/12 11:35:06 2023/11/12
【摘要】 日志记录在应用程序实施过程中是一个关键点,因为它可以让我们了解应用程序,并在出现错误或输出正确值时提供更多信息。换句话说,日志可以为我们提供应用程序的健康状态。对于非复杂的软件架构,当问题发生时,很容易找出问题并解决,然而,一旦复杂性增加,应用程序的可见性减少,这就需要寻找其他解决方案,简化日志可视化工具,其中可以对日志数据进行过滤,并且在某些情况下生成警告消息。绝大多数云平台都支持所有这些...

日志记录在应用程序实施过程中是一个关键点,因为它可以让我们了解应用程序,并在出现错误或输出正确值时提供更多信息。换句话说,日志可以为我们提供应用程序的健康状态。对于非复杂的软件架构,当问题发生时,很容易找出问题并解决,然而,一旦复杂性增加,应用程序的可见性减少,这就需要寻找其他解决方案,简化日志可视化工具,其中可以对日志数据进行过滤,并且在某些情况下生成警告消息。绝大多数云平台都支持所有这些功能,甚至更多。

现在,如果我们想创建一个由生成日志的应用程序、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。所有日志消息都被发送,并且可以在文档对象中识别日志消息,该文档对象是高亮显示的。

总结

在上面的示例中,日志管道的创建似乎不太复杂,但是,请记住,一旦复杂性级别增加,其管理可能会变得更加困难。在本教程中,目的是提供一个简单的日志管道环境,它可能对您的目的有所帮助。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。