Nginx容器日志收集方案fluentd+elasticsearch+kilbana

容器技术在发展到今天已经是相当的成熟,但容器不同于虚拟机,我们在使用容器的同时也有很多相关的技术问题需要解决,比如:容器性能监控,数据持久化,日志监控与分析等。我们不能像平时使用虚拟机一样来管理容器,本文我将给大家带来fluentd+elasticsearch+kilbana容器日志收集方案。

我们将通过容器的fluentd日志驱动将系统内产生的日志发送给fluentd服务端,再过来fluentd服务端处理所有容器发送过来的日志,再转发到elasticsearch,最后通过kilbana来展示和分析我们的日志。我们将通过以下拓扑来完成我们的日志收集。

  1. 部署elasticsearch+kilbana,此两个组件不是本文重点介绍对象,网络上也要很多关于这两个组件的部署方法,因为篇幅原因这里就不在重复,以后可能会加更新上ELK的部署博文。另外关于Docker的安装部署也是基本的,相信各位已经在研究容器日志收集不会连Docker都不会部署吧,完成第一步请继续往下看
  2. 部署fluentd与配置
    1. 安装主程序

      大家请至官网下载自己所需要版本,对号入坐。我测试为CentOS7-x86_64,所以我下载的包为:td-agent-2.3.5-1.el7.x86_64.rpm,执行以下命令安装:

      yum -y install td-agent-2.3.5-1.el7.x86_64.rpm

    2. 安装elasticsearch插件

      因为我们需要将日志发送到elasticsearch,所以需要安装此插件,默认此插件没有安装,执行以下命令安装:

      /opt/td-agent/embedded/bin/gem install fluent-plugin-elasticsearch

      我们可以查看安装的插件列表:

      /opt/td-agent/embedded/bin/gem list

    3. 编辑配置文件/etc/td-agent/td-agent.conf

      如果存在此配置文件我们清空文件里面所有内容,增加如下内容:

    4. <source>
        @type forward
        port 24224
        bind 0.0.0.0
      </source>
      
      <match docker.test.nginx>
        @type elasticsearch
        host 192.168.1.23
        port 9200
        logstash_format true
        logstash_prefix docker.test.nginx
        logstash_dateformat %Y-%m-%d
        flush_interval 5s
        type_name docker_container_log
        include_tag_key true
      </match>
    5. 启动服务

      systemctl start td-agent

      确保已经监听0.0.0.0:24224

  3. 启动Nginx容器
    1. 启动命令:
    2. docker run -dit -p 8080:80 --log-driver=fluentd                 --log-opt fluentd-address=192.168.3.232:24224                 --log-opt tag="docker.test.nginx"                 nginx
    3. 启动命令介绍:
      1. --log-driver:指定容器的日志驱动,Docker默认支持很多日志驱动,可以查看官方文档。
      2. --log-opt:指定日志驱动的选项,其中fluentd-address指定fluentd服务端的IP与端口,tag指定日志的标签,fluentd根据标签来对日志进行分类处理,每一条日志发送到fluentd服务端的时候都会打上此标签。
  4. 当我们完成以上几步那么我们的日志收集就完成了一大半了,我们的Nginx访问日志和错误日志都已经通过fluentd驱动传送到fluentd服务端,然后fluentd服务端又将日志处理发送到elasticsearch,最后我们只需要通过kilbana,将日志从elasticsearch取出展示及可。

如果你按我的操作方法完成的日志收集,你不会天真的以为就这么简单,错!当然没有这么简单。我们只是简单的完成了日志收集与展示。fluentd收集的日志每一条记录都会存放在log字段中,我们还需要对log这个字段进行json格式化处理,方便我们对日志进行分析,操作方法如下:

  1. 修改我们的Nginx镜像的日志格式为json格式,关于如何修改大家可以根据自己需求,参考更多网友的方法进行修改,我这里修改模板为:
  2.     log_format main ‘{ "@timestamp": "$time_iso8601", ‘
                             ‘"@fields": { ‘
                             ‘"remote_addr": "$remote_addr", ‘
                             ‘"remote_user": "$remote_user", ‘
                             ‘"body_bytes_sent": "$body_bytes_sent", ‘
                             ‘"request_time": "$request_time", ‘
                             ‘"status": "$status", ‘
                             ‘"request": "$request", ‘
                             ‘"request_method": "$request_method", ‘
                             ‘"http_referrer": "$http_referer", ‘
                             ‘"http_x_forwarded_for": "$http_x_forwarded_for", ‘
                             ‘"http_user_agent": "$http_user_agent" } }‘;
  3. 修改我们的fluentd服务端配置文件如下:
  4. <source>
      @type forward
      port 24224
      bind 0.0.0.0
    </source>
    
    <filter docker.test.nginx>
      @type parser
      format json
      key_name log
    </filter>
    
    <match docker.test.nginx>
      @type elasticsearch
      host 192.168.1.23
      port 9200
      logstash_format true
      logstash_prefix docker.test.nginx
      logstash_dateformat %Y-%m-%d
      flush_interval 5s
      type_name docker_container_log
      include_tag_key true
    </match>

修改完成后记得td-agent服务

通过以上的步骤我们也基本完成了对Nginx日志的json处理,可以通过我们定义的字段通过ELK进行日志的分析与处理。如果你的应用只有Nginx,那么恭喜你大功告成。但如果你还有其它日志要收集比如Tomcat,那么问题又来了,Tomcat的访问日志我们可以和Nginx一样进行json处理,但catalina日志怎么办,catalina的错误日志我们需要进行多行合并处理,还需要进行字段进行过滤,进行分析,我们有两种方法进行处理,一种是让开发把日志直接写成json格式,另外一种就是由我们来通过fluentd服务端转换,由于对fluentd研究不足,关于对tomcat容器日志收集的方法有机会写在后面的博文中,关于fluentd配置文件的进阶也将在后面的博文中介绍

时间: 2024-11-08 19:37:36

Nginx容器日志收集方案fluentd+elasticsearch+kilbana的相关文章

Tomcat容器日志收集方案fluentd+elasticsearch+kilbana

在上一遍博文中我们介绍了Nginx容器访问日志收集的方案,我们使用EFK的架构来完成对容器日志内应用日志的收集,如果不知道什么是EFK架构,那么请访问以下链接获取相关的帮助 Nginx容器日志收集方案fluentd+elasticsearch+kilbana 如果你已经认真阅读了上面的链接,并撑握了其用法,那么再来看本博文(针对于初学者),下面假设我们已经搭建好了上一讲所需要的基础环境,我们接下来就直接开始步入正题. 在步入正题之前我们首先需要确认我们需要完成的目标与效果,同样我们在启动Tomc

容器内应用日志收集方案

容器化应用日志收集挑战 应用日志的收集.分析和监控是日常运维工作重要的部分,妥善地处理应用日志收集往往是应用容器化重要的一个课题. Docker处理日志的方法是通过docker engine捕捉每一个容器进程的STDOUT和STDERR,通过为contrainer制定不同log driver 来实现容器日志的收集,缺省json-file log driver是将容器的STDOUT/STDERR 输出保存在磁盘上,然后用户就能使用docker logs <container>来进行查询. 在部署

logstash通过rsyslog对nginx的日志收集和分析

logstash通过rsyslog对nginx的日志收集和分析 http://bbotte.blog.51cto.com/6205307/1613571 logstash&elasticsearch&kibana的安装和配置 http://bbotte.blog.51cto.com/6205307/1614453  这一篇文章里面是以nginx打补丁的方式实现rsyslog把nginx的日志同步到logstash做分析,不过线上环境种种不一样,下面是把nginx的日志直接通过rsyslog

logstash日志收集分析系统elasticsearch&kibana

logstash日志收集分析系统Logstash provides a powerful pipeline for storing, querying, and analyzing your logs. When using Elasticsearch as a backend data store and Kibana as a frontend reporting tool, Logstash acts as the workhorse. It includes an arsenal of

ELK+syslog+nginx访问日志收集+分词处理

一.nginx访问日志配置: 1.日志格式配置: log_format json '{"@timestamp":"$time_iso8601",' '"host":"$server_addr",' '"clientip":"$remote_addr",' '"size":$body_bytes_sent,' '"xff":"$http_x

利用开源日志收集软件fluentd收集日志到HDFS文件系统中

说明:本来研究开源日志的系统是flume,后来发现配置比较麻烦,网上搜索到fluentd也是开源的日志收集系统,配置简单多了,性能不错,所以就改研究这个东东了!官方主页,大家可以看看:fluentd.org,支持300+的plugins,应该是不错的! fluentd是通过hadoop中的webHDFS与HDFS进行通信的,所以在配置fluentd时,一定要保证webHDFS能正常通信,和通过webHDFS写数据到hdfs中! 原理图如下: webHDFS的相关配置与测试,请看这篇文章:http

开源日志收集软件fluentd 转发(forward)架构配置

需求: 通过开源软件fluentd收集各个设备的apache访问日志到fluentd的转发服务器中,然后通过webHDFS接口,写入到hdfs文件系统中. 软件版本说明: hadoop版本:1.1.2 fluentd版本:1.1.21 测试环境说明: node29服务器上安装了apache,以及fluentd,作为fluentd的客户端: node1服务器,为hadoop服务器的namenode: node29服务器上fluentd配置文件: <source>   type tail   fo

Graylog2实现Docker容器日志收集

Graylog2 是一个开源的日志存储系统,是由java语言编写的server,能够接收TCP,UDP,AMQP的协议发送的日志信息,并且基于mongodb数据库服务器快速存储,能够通过一个基于ruby编写的web管理界面,让轻松管理你的日志. 1.组件准备 名称 组件名称 备注 1 mongodb 2 elasticsearch 3 graylog2 2.安装使用Docker-compose部署docker-compose安装,参考:http://hujianxiong.com/linuxan

万能日志数据收集器 Fluentd - 每天5分钟玩转 Docker 容器技术(91)

前面的 ELK 中我们是用 Filebeat 收集 Docker 容器的日志,利用的是 Docker 默认的 logging driver json-file,本节我们将使用 fluentd 来收集容器的日志. Fluentd 是一个开源的数据收集器,它目前有超过 500 种的 plugin,可以连接各种数据源和数据输出组件.在接下来的实践中,Fluentd 会负责收集容器日志,然后发送给 Elasticsearch.日志处理流程如下: 这里我们用 Filebeat 将 Fluentd 收集到的