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端口数据
<source>
   @type forward
</source>

#多开个端口以后给syslog用
<source>
  @type syslog
  port 8888
  tag  rsyslog
</source>

#将匹配规则的数据存到elasticsearch(其实就是所有数据都存)
<match **>
  @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
  <buffer tag, time>  #让index_name ${tag}-%Y.%m.%d 时间格式生效
    timekey 1h
  </buffer>
</match>

  • 生成一个带插件的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参数可以帮我们过滤出想要的数据,非常有用,不建议修改

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容