Docker部署EFK(elasticsearch+fluentd+kibana)

  • 前言
    EFK作为ELF的替代方案,是目前比较火的日志分析平台套件,网上很多教程都旧了并且写的含混不清,所以决定自己写一遍,希望能为大家带来帮助。

  • 创建专用网络

docker network create logging
  • 运行Elasticsearch(用于收集保存log)
启动约需2分钟,需耐心等待

docker run -d \
--name elasticsearch \
--net logging \
-p 9200:9200 \
-p 9300:9300 \
-e TZ=Asia/Shanghai \
-e "discovery.type=single-node" \
elasticsearch:7.6.2
  • 运行Kibana(用于分析显示log)
docker run -d \
--name kibana \
--net logging \
-p 5601:5601 \
-e TZ=Asia/Shanghai \
-e ELASTICSEARCH_URL=http://elasticsearch:9200 \
kibana:7.6.2
  • 自定义Fluentd配置文件docker-fluentd.conf
#默认转发所有9200端口数据

   @type forward


#多开个端口以后给syslog用

  @type syslog
  port 8888
  tag  rsyslog


#将匹配规则的数据存到elasticsearch(其实就是所有数据都存)

  @type elasticsearch
  host elasticsearch #你的elasticsearch地址或docker实例名
  port 9200
  flush_interval 10s
  logstash_format true  #设置以后index为logstash-日期,代替index_name的值,并且索引添加@timestamp字段记录日志读取时间
  logstash_prefix ${tag}  #设置以后索引会以tag名称-日期进行命名
  index_name ${tag}-%Y.%m.%d
  type_name  ${tag}-%Y.%m.%d
  include_tag_key true  #把tag当做字段写入ES
  tag_key @log_name
    #让index_name ${tag}-%Y.%m.%d 时间格式生效
    timekey 1h
  


  • 生成一个带插件的Fluendtd镜像

官方提供的镜像不包含elasticsearch插件,所以我们得自己生成一个

#编辑Dockerfile
FROM fluentd
USER root
RUN gem install fluent-plugin-elasticsearch \
fluent-plugin-tail-ex \
fluent-plugin-tail-multiline

USER fluent
#多留个端口出来供以后转发用
EXPOSE 24224 24224/udp 8888 

#docker build
docker build -t my-fluentd .
  • 运行Fluentd(抓取log)
docker run -d \
--name fluentd \
--net logging \
-p 24224:24224 \
-p 24224:24224/udp \
-p 8888:8888 \
-e TZ=Asia/Shanghai \
-e FLUENTD_CONF=docker-fluentd.conf \
-v /path/to/dir/docker-fluentd.conf:/fluentd/etc/docker-fluentd.conf \
-v /path/to/dir:/fluentd/log \
fluentd
  • 为所有运行的镜像添加参数
如不在同一网段中,请将fluentd:24224改为指定ip

--log-driver=fluentd \
--log-opt fluentd-address=fluentd:24224 \
--log-opt tag="{{.ImageName}}/{{.Name}}/{{.ID}}" \

例如:
docker run -d
-e TZ=Asia/Shanghai \
--log-driver=fluentd \
--log-opt fluentd-address=fluentd:24224 \
--log-opt tag="{{.ImageName}}/{{.ID}}" \
-p 80:80 \
-p 443:443 \
nginx

tag参数可以帮我们过滤出想要的数据,非常有用,不建议修改

  • 完工
    通过浏览器访问Kibana的地址,即可进入日志平台,配置过索引后即可查看到的nginx的日志
    Kibana访问地址:http://host-ip:5601

  • 参考:
    Install Elasticsearch with Docker
    Docker 容器中运行 Kibana
    Customize log driver output
    Plugin For Elasticsearch
    通过fluentd转存nginx日志
    Istio日志采集EFK
    fluentd代替logstash搭建EFK日志管理系统

你可能感兴趣的:(Docker部署EFK(elasticsearch+fluentd+kibana))