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

2024-06-02 09:39:02

容器技术在发展到今天已经是相当的成熟,但容器不同于虚拟机,我们在使用容器的同时也有很多相关的技术问题需要解决,比如:容器性能监控,数据持久化,日志监控与分析等。我们不能像平时使用虚拟机一样来管理容器,本文我将给大家带来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 forwardport 24224bind 0.0.0.0
      </source><match docker.test.nginx>@type elasticsearchhost 192.168.1.23port 9200logstash_format truelogstash_prefix docker.test.nginxlogstash_dateformat %Y-%m-%dflush_interval 5stype_name docker_container_loginclude_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 forwardport 24224bind 0.0.0.0
    </source><filter docker.test.nginx>@type parserformat jsonkey_name log
    </filter><match docker.test.nginx>@type elasticsearchhost 192.168.1.23port 9200logstash_format truelogstash_prefix docker.test.nginxlogstash_dateformat %Y-%m-%dflush_interval 5stype_name docker_container_loginclude_tag_key true
    </match>

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

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

转载于:https://blog.51cto.com/270142877/1948683

Nginx容器日志收集方案fluentd+elasticsearch+kilbana相关推荐

  1. k8s容器日志收集方案

    背景 由于以下容器本身特性和现有日志采集工具的缺陷,开发者在收集Kubernetes分布式集群日志时常常遇到困扰:容器本身特性:采集目标多:容器本身的特性导致采集目标多,需要采集容器内日志.容器std ...

  2. 容器内应用日志收集方案

    容器化应用日志收集挑战 应用日志的收集.分析和监控是日常运维工作重要的部分,妥善地处理应用日志收集往往是应用容器化重要的一个课题. Docker处理日志的方法是通过docker engine捕捉每一个 ...

  3. Nginx容器动态流量管理方案-nginx-upsync-module+nginx_upstream_check_module初体验

    缘起 最近一直在研究日志收集系统的框架,之前在线游戏的数据发送都是由游戏服务器发送的,我来之前一直是rsync传输,也还算稳定.但现在上了单机游戏,只能由手机客户端直接发送,dau比较高,最近很火的& ...

  4. 再见笨重的ELK!这套轻量级日志收集方案要火!

    之前一直使用的日志收集方案是ELK,动辄占用几个G的内存,有些配置不好的服务器有点顶不住!最近发现一套轻量级日志收集方案: Loki+Promtail+Grafana(简称LPG), 几百M内存就够了 ...

  5. EKS日志收集方案-PLG(Promtail+Loki+Grafana)

    组件概述(什么是PLG?) Promtail:日志收集代理,它通常被部署到需要监视应用程序的每台机器/容器上.Promtail主要是用来发现目标.将标签附加到日志流以及将日志推送到Loki.截止到目前 ...

  6. 基于filebeat + logstash的日志收集方案

    日志收集是一个很普遍的需求,各个服务的log日志,打点日志都需要收集起来做离线etl或实时分析.日志收集工具也有很多开源的可供选择,flume,  logstash, filebeat等等.  目前3 ...

  7. 前端错误日志收集方案

    前言 公司的项目上线出现问题后难以定位错误,研究过现存的错误监控方案,受限于特殊条件只能定制自己的错误收集方案. 基于以上背景我撸出来一个错误日志收集方案 - Ohbug. 欢迎各位大佬 star ~ ...

  8. 关于nginx容器日志按天保存的配置

    nginx 容器日志按天保存 nginx 容器按天保存日志配置: http {# 日志样式log_format main '$remote_addr - $remote_user [$time_loc ...

  9. 看不到日志_Kubernetes中常用的日志收集方案

    在kubernetes中对日志的处理方式叫做cluster-level-logging,即这个日志处理系统跟容器,Pod,Node的生命周期无关,也就是无论是容器挂了,Pod被删除了还是Node宕机了 ...

最新文章

  1. cookie记录用户的浏览商品的路径
  2. 剑指offer:连续子数组的最大和
  3. c# 之Web.config
  4. Nessus Scan
  5. matlab hist函数_算法工匠MATLAB专训营:Matlab绘图,小试牛刀
  6. 三十二、电子商务服务推荐模型构建
  7. 【Qt教程】Qt常用部件介绍
  8. 机器学习sklearn的快速使用--周振洋
  9. 高等数学下-赵立军-北京大学出版社-题解-练习11.1
  10. linux下recv 、send阻塞、非阻塞区别和用法
  11. 5918. 统计字符串中的元音子字符串
  12. zoj 1006 do the untwist
  13. 为提升在线语音识别效率,他创造了两种升级版算法模型
  14. E - Wireless Network(并查集)
  15. 【2012 - 百度之星资格赛 - H:用户请求中的品牌】
  16. tensorflow图片预处理,随机亮度,旋转,剪切,翻转。
  17. 在html中如何缩小图片,如何减小网页中图片的尺寸?
  18. linuxService
  19. Openjudge上mooc组题目:魔兽世界:备战
  20. 【Hive+MySQL+Python】淘宝用户购物行为数据分析项目

热门文章

  1. Win7 防火墙添加端口
  2. 《这就是搜索引擎:核心技术详解》---读后感
  3. Openssl:构建CA的过程并实现web服务基于https访问的网络架构
  4. sql server 2005中新增加的try catch学习
  5. Xamarin.FormsShell基础教程(5)Shell项目内容新建页面
  6. 使用Metasploit工作区
  7. iOS 11开发教程(三)运行第一个iOS 11程序
  8. 分享Kali Linux 2016.2第50周虚拟机
  9. java获取内存基址_安卓逆向|菜鸟的FRIDA学习笔记:内存读写
  10. java对托盘加监听右击报错_java实现系统托盘示例