Docker-搭建日志监控系统

项目中经常使用集中日志收集工具

  • Logstash

Logstash是一个开源数据收集引擎,具备实时管道功能。Logstash能够动态地未来自不一样数据源的数据统一块儿来,并将数据标准化到你所选择的目的地。node

  • 优势web

    Logstash 主要的有点就是它的灵活性,主要由于它有不少插件,详细的文档以及直白的配置格式让它能够在多种场景下应用。咱们基本上能够在网上找到不少资源,几乎能够处理任何问题。正则表达式

  • 缺点docker

    Logstash 致命的问题是它的性能以及资源消耗(默认的堆大小是 1GB)。尽管它的性能在近几年已经有很大提高,与它的替代者们相比仍是要慢不少的。这里有 Logstash 与 rsyslog 性能对比以及Logstash 与 filebeat 的性能对比。它在大数据量的状况下会是个问题。json

  • Filebeat

做为 Beats 家族的一员,Filebeat 是一个轻量级的日志传输工具,它的存在正弥补了 Logstash 的缺点:Filebeat 做为一个轻量级的日志传输工具能够将日志推送到中心 Logstash。浏览器

  • 优势curl

    Filebeat 只是一个二进制文件没有任何依赖。它占用资源极少,尽管它还十分年轻,正式由于它简单,因此几乎没有什么能够出错的地方,因此它的可靠性仍是很高的。它也为咱们提供了不少能够调节的点,例如:它以何种方式搜索新的文件,以及当文件有一段时间没有发生变化时,什么时候选择关闭文件句柄。async

  • 缺点elasticsearch

    Filebeat 的应用范围十分有限,因此在某些场景下咱们会碰到问题。例如,若是使用 Logstash 做为下游管道,咱们一样会遇到性能问题。正由于如此,Filebeat 的范围在扩大。开始时,它只能将日志发送到 Logstash 和 Elasticsearch,而如今它能够将日志发送给 Kafka 和 Redis,在 5.x 版本中,它还具有过滤的能力。编辑器

  • Fluentd (Docker日志驱动支持)

Fluentd 建立的初衷主要是尽量的使用 JSON 做为日志输出,因此传输工具及其下游的传输线不须要猜想子字符串里面各个字段的类型。这样,它为几乎全部的语言都提供库,这也意味着,咱们能够将它插入到咱们自定义的程序中。

  • 优势

    和多数 Logstash 插件同样,Fluentd 插件是用 Ruby 语言开发的很是易于编写维护。因此它数量不少,几乎全部的源和目标存储都有插件(各个插件的成熟度也不太同样)。这也意味这咱们能够用 Fluentd 来串联全部的东西。

  • 缺点

    由于在多数应用场景下,咱们会经过 Fluentd 获得结构化的数据,它的灵活性并很差。可是咱们仍然能够经过正则表达式,来解析非结构化的数据。尽管,性能在大多数场景下都很好,但它并非***的,和 syslog-ng 同样,它的缓冲只存在与输出端,单线程核心以及 Ruby GIL 实现的插件意味着它大的节点下性能是受限的,不过,它的资源消耗在大多数场景下是能够接受的。对于小的或者嵌入式的设备,可能须要看看 Fluent Bit,它和 Fluentd 的关系与 Filebeat 和 Logstash 之间的关系相似。

使用Docker-Compose搭建EFK收集中心

  1. 建立docker-compose.yml

新建一个efk目录,而后进入目录下:

version: '3'
services:
  web:
    image: httpd
    ports:
      - "80:80"
    links:
      - fluentd
    logging:
      driver: "fluentd"
      options:
        fluentd-address: localhost:24224
        tag: httpd.access

  fluentd:
    build: ./fluentd
    volumes:
      - ./fluentd/conf:/fluentd/etc
    links:
      - "elasticsearch"
    ports:
      - "24224:24224"
      - "24224:24224/udp"

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2
    environment:
      - "discovery.type=single-node"
    expose:
      - "9200"
    ports:
      - "9200:9200"

  kibana:
    image: kibana:7.10.1
    links:
      - "elasticsearch"
    ports:
      - "5601:5601"
  1. 建立fluentd镜像以及配置config与插件

新建 fluentd/Dockerfile

FROM fluent/fluentd:v1.12.0-debian-1.0
USER root
RUN ["gem", "install", "fluent-plugin-elasticsearch", "--no-document", "--version", "4.3.3"]
USER fluent

新建 fluentd/conf/fluent.conf

<source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>

<match *.**>
  @type copy

  <store>
    @type elasticsearch
    host elasticsearch
    port 9200
    logstash_format true
    logstash_prefix fluentd
    logstash_dateformat %Y%m%d
    include_tag_key true
    type_name access_log
    tag_key @log_name
    flush_interval 1s
  </store>

  <store>
    @type stdout
  </store>
</match>

  1. 启动服务

docker-compose up

  1. 屡次请求httpd服务生成日志

$ curl localhost:80

  1. 验证日志收集

打开浏览器访问http://localhost:5601

初始化建立fluentd-*索引

建立索引建立索引

此时能够看到Httpd 生成的日志已经被收集

loglog

使用fluentd收集关键点

  1. 如何指定fluentd驱动
  • 修改daemon.json(全局)

    "log-driver":"fluentd",
    "log-opts":{
     "fluentd-address":"192.168.0.133:24224"
    },
  • 单个容器

    # 启动增长 
    --fluentd-address=localhost:24224  --log-driver=fluentd
    #注意:注意,此时若是fluentd服务挂了 服务启动不起来的,能够在服务启动时候 加上
    --log-opt=fluentd-async-connect

结束

欢迎关注公众号! 公众号回复:入群 ,扫码加入咱们交流群! 扫码关注公众号获取更多学习资料

相关文章
相关标签/搜索