如何在docker环境使用ElasticSearch + Fluentd + Kibana打造日志收集系统

一. fluentd收集日志     

为了方便大家理解如何一步一步的搭建这个日志收集系统,我先讲解如何使用Fluentd将Docker容器的日志收集写到本地的文件里。

     Fluentd是一个开源的日志收集器,Docker在V1.8之后实现了原生的Fluentd Docker Logging Driver,使用这个driver就可以将docker里的日志写到Fluentd里。详细的Fluentd介绍可参考官网 https://docs.fluentd.org/

docker-compose.yml示例:

services:
  fluentd:
    image: fluentd:latest
    container_name: fluentd
    ports:
      - "24224:24224"
      - "24224:24224/udp"
    restart: always
    enviroment:
      - FLUENTD_CONF=fluentd.conf
    volumes:
      -  /var/log:/var/log
      -  /var/fluentd.conf:/fluentd/etc/fluentd.conf

  nginx:
    image: nginx:latest
    links:
      - fluentd
    ports:
     - "80:80"
     - "443:443"
    container_name: nginx
    logging:
      driver: "fluentd"
      options:
        fluentd-address: localhost:24224
        tag: nginx

 注: 宿主提供的/var/log要有其他用户的写入权限,否则启动时fluentd容器会报错。

/var/fluentd.conf文件内容如下,这段配置的意思是讲匹配nginx的日志写入到/var/log/nginx目录下,其他文件写入到/var/log/other目录下

<match nginx>
 @type file
 path /var/log/nginx
 append true
 flush_interval 60s
 flush_at_shutdown true
</match>

<match **>
 @type file
 path /var/log/other
 append true
 flush_interval 60s
 flush_at_shutdown true
</match>

然后使用docker-compose启动后,在宿主机/var/log目录下可以看到生成的日志文件,类似下图。 

 二. fluentd将日志转发到elasticsearch

 默认的fluentd的docker镜像没有相关插件,需要安装,这里我们写个Dockerfile

FROM fluent/fluentd:latest

RUN fluent-gem install fluent-plugin-elasticsearch

 Dockerfile与Docker-Compose.yml在同一个目录,

Docker-Compose.yml修改如下

services:
  elasticsearch:
    image: elasticsearch:7.13.4
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
    volumes:
      - /usr/local/elasticsearch/data:/usr/share/elasticsearch/data

  fluentd:
    build: .
    container_name: fluentd
    ports:
      - "24224:24224"
      - "24224:24224/udp"
    restart: always
    links:
      - elasticsearch
    enviroment:
      - ESHost=elasticsearch
      - FLUENTD_CONF=fluentd.conf
    volumes:
      -  /var/log:/var/log
      -  /var/fluentd.conf:/fluentd/etc/fluentd.conf

  nginx:
    image: nginx:latest
    links:
      - fluentd
    ports:
     - "80:80"
     - "443:443"
    container_name: nginx
    logging:
      driver: "fluentd"
      options:
        fluentd-address: localhost:24224
        tag: nginx

  fluentd.conf文件修改如下

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

<match **>
  @type elasticsearch
  host "#{ENV['ESHost']}"
  port 9200
  logstash_format true
</match>

二. 使用kibana可视化查询elasticsearch

在docker-compose增加kibana容器配置

services:
  kibana:
    image: kibana:7.13.4
    links:
      - elasticsearch
    container_name: kibana
    ports:
      - "5601:5601"
    environment:
     - ELASTICSEARCH_HOSTS=http://elasticsearch:9200

  elasticsearch:
    image: elasticsearch:7.13.4
    container_name: elasticsearch
    restart: always
    environment:
      - discovery.type=single-node
    volumes:
      - /usr/local/elasticsearch/data:/usr/share/elasticsearch/data

  fluentd:
    build: .
    container_name: fluentd
    ports:
      - "24224:24224"
      - "24224:24224/udp"
    restart: always
    links:
      - elasticsearch
    enviroment:
      - ESHost=elasticsearch
      - FLUENTD_CONF=fluentd.conf
    volumes:
      -  /var/log:/var/log
      -  /var/fluentd.conf:/fluentd/etc/fluentd.conf

  nginx:
    image: nginx:latest
    links:
      - fluentd
    ports:
     - "80:80"
     - "443:443"
    container_name: nginx
    logging:
      driver: "fluentd"
      options:
        fluentd-address: localhost:24224
        tag: nginx

启动后在浏览器输入 http://[server]:5601可打开kibana页面

参考:

https://docs.fluentd.org/container-deployment/docker-compose

https://zhuanlan.zhihu.com/p/257867352

https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html

https://www.elastic.co/guide/cn/kibana/current/docker.html

关于安全访问的解决方案,可参考

Kibana配置登录密码 https://blog.csdn.net/qq_40142345/article/details/105487478

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Docker 上部署 EFK(Elasticsearch + Fluentd + Kibana日志收集和可视化平台,您可以按照以下步骤进行: 1. 安装 DockerDocker Compose(如果尚未安装)。 2. 创建一个新的目录,用于存放 EFK 配置文件和数据: ```bash mkdir efk cd efk ``` 3. 创建 `docker-compose.yml` 文件,并使用以下内容填充: ```yaml version: '3' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.14.0 container_name: elasticsearch environment: - discovery.type=single-node - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - esdata:/usr/share/elasticsearch/data fluentd: image: fluent/fluentd:v1.14.2-debian-1.0 container_name: fluentd volumes: - ./fluentd/conf:/fluentd/etc - esdata:/fluentd/log kibana: image: docker.elastic.co/kibana/kibana:7.14.0 container_name: kibana environment: - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 ports: - 5601:5601 volumes: esdata: ``` 4. 在 `efk` 目录中创建一个新的子目录 `fluentd`,并在其中创建一个 `conf` 目录,用于存放 Fluentd 配置文件。 5. 在 `fluentd/conf` 目录中创建一个新文件 `fluent.conf`,并使用以下内容填充: ```conf <source> @type forward port 24224 </source> <match **> @type elasticsearch host elasticsearch port 9200 logstash_format true logstash_prefix fluentd flush_interval 10s </match> ``` 6. 启动 EFK: ```bash docker-compose up -d ``` 7. 使用浏览器访问 Kibana 控制台:`http://localhost:5601`。您应该能够看到 Kibana 的登录页面。 现在,您已成功部署了 EFK 平台,并可以使用 Fluentd 收集日志使用 Kibana 进行可视化和分析。请注意,这只是一个基本的配置示例,您可能需要根据自己的需求进行进一步的配置和定制化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值