使用Docker搭建ELK日志搜集系统(二)

导读:上篇介绍了ELF/EFK中Elasticsearch、Kibana的配置安装,这篇开始介绍Fluentd做为日志搜集工具的配置安装

Fluentd是什么?

  • Fluented 是一个开源免费的日志搜集工具,经常代替Logstash(EFK),支持的插件非常多,对docker支持较好
  • Fluentd尽量将数据结构化为JSON:这允许Fluentd统一处理日志数据的所有方面:收集、过滤、缓冲和跨多个源和目的地输出日志(统一日志层)
  • 使用JSON进行下游数据处理要容易得多,因为它有足够的结构,可以在保持灵活模式的同时进行访问

Fluentd可以搜集那些日志

使用Fluentd搜集Docker日志配置

系统安装运行需求和建议:

  • 至少一台独立的linux host centos 7.4,docker 18.06.1-ce+以上版本,建议两台做高可用
  • 生产环境推荐2核4G内存

安装步骤

  1. 安装docker环境

    https://www.cnblogs.com/yjb007/p/9551878.html

  2. 安装fluentd
mkdir -p /srv/volume/fluentd/
cd /srv/volume/fluentd/
mkdir -p plugins/

#Fluentd的Dockerfile文件
cat > Dockerfile << ‘EOF‘
FROM fluent/fluentd:v1.2.5-debian-onbuild

ENV TZ=Asia/Shanghai
RUN apt-get update         && apt-get -y install tzdata         && apt-get -y install curl         && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime         && echo $TZ > /etc/timezone

RUN buildDeps="sudo make gcc g++ libc-dev ruby-dev"  && apt-get update  && apt-get install -y --no-install-recommends $buildDeps  && sudo gem install         fluent-plugin-elasticsearch  && SUDO_FORCE_REMOVE=yes     apt-get purge -y --auto-remove                   -o APT::AutoRemove::RecommendsImportant=false                   $buildDeps  && rm -rf /var/lib/apt/lists/*            /home/fluent/.gem/ruby/2.3.0/cache/*.gem

COPY fluent.conf /fluentd/etc/fluent.conf
EOF

#Fluentd的配置文件
cat > fluent.conf << ‘EOF‘
<source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>
#监听TCP24224端口,转发从这个端口进来的数据,要求进来的数据格式是json格式;数据流走向<filter></filter>

<filter docker.**>
  @type parser
  format json
# time_format %Y-%m-%dT%H:%M:%S.%L%Z
  key_name log
  reserve_data false
  suppress_parse_error_log true
  ignore_key_not_exist true
  replace_invalid_sequence true
</filter>
#如果进来的数据的tag是以dockerk开头的字段,则进行这个对应的数据处理,tag是docker daemon中配置的

<filter docker.nginx.**>
  @type record_transformer
  enable_ruby true
  <record>
    "@timestamp" ${Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%z")}
  </record>
</filter>
#如果进来的数据tag匹配docker.nginx.**,则给这段数据添加一堆key,value值,这里是增加了一个@timestamp字段;原因是nginx自身的access.log日志时间格式不是%Y-%m-%dT%H:%M:%S.%L%z
#只有%Y-%m-%dT%H:%M:%S.%L%z这样的事件格式kibana才能正确识别

<match docker.**>
  @type elasticsearch
  hosts 10.1.1.225:9200
  user elastic
  password changeme

  target_index_key @target_index
  index_name default_index
  type_name fluentd

  include_tag_key true
  tag_key DockerName

  flush_interval 1s
  request_timeout 15s
  reload_connections false
  reconnect_on_error true
  resurrect_after 5s

  buffer_type memory
  num_threads 2
</match>
#如果进来的数据tag匹配docker.**,则将数据存储到elasticsearch中,存储到elasticsearch的index以进来的json格式日志中的@target_index的key值作为索引
#如果没有名称叫@target_index的key,则将数据存储到名称叫default_index的默认索引中

<match **>
  @type elasticsearch
  hosts 10.1.1.225:9200
  user elastic
  password changeme

  logstash_format true
  logstash_prefix unknown
  logstash_dateformat %Y.%m.%d

  time_key_format %Y-%m-%dT%H:%M:%S.%N%z

  target_index_key @target_index
  index_name default_index
  type_name fluentd

  include_tag_key true
  tag_key DockerName

  flush_interval 1s
  request_timeout 15s
  reload_connections false
  reconnect_on_error true
  resurrect_after 5s

  buffer_type memory
  num_threads 2
</match>
#如果之前的tag都没匹配到,则数据按照这个规则进行存储
EOF

docker build --no-cache --pull -t fluentd/yujianbo:20180829 ./

docker rm -f pilipa-inside-fluentd
docker run -d         --name pilipa-inside-fluentd         --env FLUENTD_CONF=fluent.conf         -v /srv/fluentd/fluent.conf:/fluentd/etc/fluent.conf         -p 8888:8888         -p 24224:24224 fluentd/yujianbo:20180829

3.修改docker的配置文件让容器启动后自动把日志转发到我们新建的fluentd服务器

cat /etc/docker/daemon.json
{
    "dns": [
        "114.114.114.114",
        "8.8.8.8"
    ],
    "data-root": "/srv/docker/",
    "hosts": [
        "unix:///var/run/docker.sock"
    ],
    "registry-mirrors": [
        "https://0sr73mco.mirror.aliyuncs.com"
    ],
    "log-driver": "fluentd",
    "log-opts": {"fluentd-address":"10.1.1.229:24224","tag":"docker.{{.Name}}"}
}

systemctl daemon-reload
systemctl restart docker

4.新建一个nginx容器测试一下

cat /root/nginx.conf
...
log_format json
                ‘{"times":"$time_local",‘
                ‘"@target_index":"nginx",‘
                ‘"remoteuser":"$remote_user",‘
                ‘"remoteip":"$remote_addr",‘
                ‘"bodysize":$body_bytes_sent,‘
                ‘"requesttime":$request_time,‘
                ‘"upstreamtime":$upstream_response_time,‘
                ‘"upstreamhost":"$upstream_addr",‘
                ‘"http_host":"$host",‘
                ‘"request":"$request",‘
                ‘"url":"$uri",‘
                ‘"xff":"$http_x_forwarded_for",‘
                ‘"referer":"$http_referer",‘
                ‘"http_user_agent":"$http_user_agent",‘
                ‘"status":$status}‘;

    access_log  /var/log/nginx/access.log  json;
...
docker run -d --name nginx -p 80:80 -v /root/nginx.conf:/etc/nginx/nginx.conf nginx
#访问一下curl http://127.0.0.1/就能在kibana上看到我们服务器新产生的日志了

参考资料:

https://docs.fluentd.org/v1.0/articles/quickstart

https://docs.fluentd.org/v0.12/articles/install-by-docker

原文地址:https://www.cnblogs.com/yjb007/p/9553137.html

时间: 2024-08-12 14:08:58

使用Docker搭建ELK日志搜集系统(二)的相关文章

在linux中快速使用docker搭建ELK日志监控分析系统

在linux中使用docker安装ELK日志监控分析系统 网上的教程非常零散或者很多都已经过时了,我这里总结了相比于其他更新的日志系统搭建.并且使用docker镜像,更加简化了安装.在这开始之前先附上我的成功配置截图: linux的安装 linux的安装很简单,但是要使用docker必须安装centos7及以上,不然出现的各种兼容性问题自行百度解决.这里有两种方法: 如果是学生可以购买阿里或者腾讯的linux服务器,简单方便,每个月只要10元钱,其实挺划算的.这是阿里linux的购买地址:htt

centos 7搭建ELK日志分析系统

一.ELK的组成 ELK由ElasticSearch.Logstash和Kiabana三个开源工具组成,其官方网站为https://www.elastic.co/cn Elasticsearch:是个开源分布实时分析搜索引擎,建立在全文搜索引擎库Apache Lucens基础上,同时隐藏了Apache Luces的复杂性.Elasticsearch将所有的功能打包成一个独立的服务,并提供了一个简单的RESTful API接口,它具有分布式.零配置.自动发现.索引自动分片.索引副本机制.RESTf

Ubuntu14.04搭建ELK日志分析系统

系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误.日志的作用不言而喻,但对于数量庞大且分布在多台机器上的日志,查看就显得特别麻烦了.所以,对于运维人员来说,使用日志分析系统是非常有必要的. 开源实时日志分析ELK平台能够实现日志的监控与分析,ELK由ElasticSearch.Logstash和Kiabana三个开源工具组成.官方网站:https://www.elastic.co/pr

centos 7.3搭建ELK日志分析系统详解

一.前言: 日志分析是我们运维解决系统故障.发现问题的主要手段.为了可以集中管理多台服务器的日志记录,开源实时日志分析ELK平台应用而生,ELK由Elasticsearch.Logstash和Kibana三个开源工具组成,这三个工具可以分别部署在不同的服务器上,并且相互关联,不过需要收集哪台服务器的日志,就必须在该服务器上部署Logstash.ELK的官网是:Elastic官网 ELK的工作原理如下(懂得其中原理,才可部署一个高可用的ELK平台):Logstash收集APPServer(应用服务

Linux 搭建ELK日志收集系统

在搭建ELK之前,首先要安装Redis和JDK,安装Redis请参考上一篇文章. 首先安装JDK及配置环境变量 1.解压安装包到/usr/local/java目录下[[email protected]_0_9_centos ~]# tar xvf /ryt/soft/jdk-11.0.3_linux-x64_bin.tar.gz -C /usr/local/java/ 2.配置环境变量(在尾部追加内容如下)[[email protected]_0_9_centos ~]# vim /etc/pr

快速搭建ELK日志分析系统

一.ELK搭建篇 官网地址:https://www.elastic.co/cn/ 官网权威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html 安装指南:https://www.elastic.co/guide/en/elasticsearch/reference/5.x/rpm.html ELK是Elasticsearch.Logstash.Kibana的简称,这三者是核心套件,但并非全部. Elas

十分钟搭建和使用ELK日志分析系统

前言 为满足研发可视化查看测试环境日志的目的,准备采用EK+filebeat实现日志可视化(ElasticSearch+Kibana+Filebeat).题目为"十分钟搭建和使用ELK日志分析系统"听起来有点唬人,其实如果单纯满足可视化要求,并且各软件都已经下载到本地,十分钟是可以搭建一个ELK系统的.本文介绍如何快速安装.配置.使用EK+FILEBEAT去实现日志搜集.本文中没有使用LOGSTASH做日志搜集过滤,但为了后期需要先进行了安装. 工作原理 ElasticSearch:是

基于Docker容器部署ELK日志分析系统

部署ELK日志分析系统,比较消耗计算机硬件,如果使用虚拟机进行测试部署,建议分配较多的硬件资源,否则,当elk容器运行后,会使其无法正常运行.我这里将分配给docker主机5G内存,四个CPU. 一.环境准备 我这里使用一台docker主机(如需要部署docker服务,可以参考博文:Docker的安装详细配置),其IP地址为192.168.20.6,在其之上运行elk容器. 二.配置docker主机运行elk容器 [[email protected] ~]# echo "vm.max_map_c

结合Docker快速搭建ELK日志收集分析平台

结合Docker快速搭建ELK日志收集分析平台 2017-03-27 09:39 阅读 172 评论 0 作者:马哥Linux运维-Eason ELK Stack ELK (Elasticsearch + Logstash + Kibana),是一个开源的日志收集平台,用于收集各种客户端日志文件在同一个平台上面做数据分析. Introduction Elasticsearch, 基于json分析搜索引擎Logstash, 动态数据收集管道Kibana, 可视化视图将elasticsearh所收集