K8s~为pod添加sidecar进行日志收集

我们在k8s部署服务时,一般来说一个服务会对应一类pod,而pod通过rs实现副本集,而这些pod的日志一般有控制台stdout和文件的,一般会把这些日志最终输出到elasticsearch里,再通过kabana进行分析,而在实现由pod到elasticsearch(es)时有多种方法,下面我列举一下:

  1. 直接从标准控制台 stdout中通过fluentd进行收集,再存到es( 早期docker有实现)
  2. 通过logback里的fluentd包,直接把日志输出到fluentd,再存到es
  3. 在k8s里,可以为pod添加一个边车(边斗,sidecar),这个边车主要是fluentd插件,从容器日志文件里读取日志,收集到es

从上面的解析可以看到第1种如果你是docker swarm环境可以使用,而第2种与业务代码耦合太紧也不合适,只有第三种是未来的趋势,目前大都是使用这种方式!

实现方式

1 sidecar的fluentd的mapconfig

apiVersion: v1
kind: ConfigMap
metadata:
  name: fluentd-config
  namespace: saas
data:
  fluentd.conf: |
    <source>
      type tail
      format none
      path /var/log/*.log
      pos_file /var/log/log.pos
      tag saas
    </source>

    <match **>
      @id elasticsearch
      @type elasticsearch
      @log_level debug
      index_name fluentd
      type_name _doc
      host elasticsearch.elk
      port 9200
      include_tag_key true
      tag_key @log_name
      logstash_format true
      flush_interval 10s
    </match>

运行

kubectl create -f fluentd-config-sidecar.yaml

测试一个pod,像容器输出日志到目录,定时反复输出

apiVersion: v1
kind: Pod
metadata:
  labels:
    example: logging-sidecar
  name: logging-sidecar-example
spec:
  containers:
  - name: synthetic-logger
    image: 172.17.0.22:8888/saas/hello-world:latest
    command: ["bash", "-c", "i=\"0\"; while true; do echo \"`hostname`: $i \" >> /var/log/1.log; date --rfc-3339 ns >> /var/log/1.log; sleep 4; i=$[$i+1]; done"]
    volumeMounts:
    - name: varlog
      mountPath: /var/log
  - name: sidecar-log-collector
    image: registry.cn-beijing.aliyuncs.com/k8s-mqm/fluentd-elasticsearch:v2.1.0
    env:
    - name: FLUENTD_ARGS
      value: -c /etc/fluentd-config/fluentd.conf
    volumeMounts:
          - name: varlog
            mountPath: /var/log
          - name: config-volume
            mountPath: /etc/fluentd-config
  volumes:
    - name: varlog
      emptyDir: {}
    - name: config-volume
      configMap:
        name: fluentd-config

部署它

kubectl create -f fluentd-demo.yaml

然后去你的kabana里查看日志,可以按着@log_name字段去查询,这就是我们日志里的tag,这个我们可以在代码里配置,可以设置成一个namespace,这样方便日志的跟踪!

(0)

相关推荐

  • EFK:免费的日志采集与可视化搜索套件

    我们收集日志是为了做进一步的分析.收集是第一步,收集到日志后还需要进行存储.索引,以便进行快速查询分析.我们还需要一个友好的查询界面,来方便用户使用日志. 本文介绍一个免费的开源软件组合,正好可以实现 ...

  • Fluentd部署:错误排查

    本文介绍一下排查Fluentd运行时错误的几种方法. 查看日志 如果感觉Fluentd运行异常,请先查看日志.td-agent安装后,默认日志存放在/var/log/td-agent/td-agent ...

  • 号称下一代日志收集系统!来看看它有多强

    后面随着架构的优化与演进,又引入另一个轻量级的组件 Filebeat,Filebeat和Logstash一样属于日志收集处理工具,基于原先 Logstash-fowarder 的源码改造出来的.与Lo ...

  • 云原生系列5 容器化日志之EFK

    上图是EFK架构图,k8s环境下常见的日志采集方式. 日志需求 1 集中采集微服务的日志,可以根据请求id追踪到完整的日志: 2 统计请求接口的耗时,超出最长响应时间的,需要做报警,并针对性的进行调优 ...

  • Fluentd部署:系统配置

    首先,本文"系统配置"指的是Fluentd的全局配置项,诸如开启RPC.使用多worker模式等.可在配置文件中通过<system>进行配置,或通过命令行进行配置. & ...

  • windows2016_x64搭建ELK(datasource->filebeat->logstash->elasticsearch->kibana)

    本文示例日志程序基于asp.net core 3.0+nlog ELK相关程序如下图: 日志组件推荐: java: logback.lo4jasp.net: log4net.nlog 客户端安装和运行 ...

  • Fluentd输出插件:out_elasticsearch用法详解

    " 把日志输出到elasticsearch做业务分析,这大概是最普遍的日志采集用途了" out_elasticsearch 输出插件用于将日志记录写入elasticsearch. ...

  • Postgresql日志收集

    PG安装完成后默认不会记录日志,必须修改对应的(${PGDATA}/postgresql.conf)配置才可以,这里只介绍常用的日志配置. 1.logging_collector = on/off   ...

  • ES 慢查询日志收集实战总结

    前言 在执行elasticsearch查询的时候,有些查询会占用大量的资源导致响应很慢,这个时候就需要ES对慢查询进行监控.找到那些响应很慢的请求.ES的请求主要分为搜索和索引,ES也分别提供了这两种 ...

  • Go实现海量日志收集系统(二)

    51Reboot 将在 2020.1.16日 21:00 为您带来分享主题<大佬教你如何从 ES 初学者到 ES专家>直播链接(提前报名):https://ke.qq.com/course ...

  • java 执行shell命令及日志收集避坑指南

    有时候我们需要调用系统命令执行一些东西,可能是为了方便,也可能是没有办法必须要调用.涉及执行系统命令的东西,则就不能做跨平台了,这和java语言的初衷是相背的. 废话不多说,java如何执行shell ...

  • Sql server reporting service下 LogFiles中日志不断添加,特别是mdmp超过100M的大文件不停增加解决办法

    前些天一直因磁盘被LogFiles中日志文件太大,导致笔记本的磁盘不够用了.详情可见http://www.360doc.com/content/21/0327/00/17987244_96917987 ...

  • k8s中docker,pod,service之间网络通信模型

    k8s对Pods之间如何进行组网通信提出了要求,k8s对集群的网络有以下要求: 所有的Pods之间可以在不使用NAT网络地址转换的情况下相互通信 所有的Nodes之间可以在不使用NAT网络地址转换的情 ...

  • 广华日志漫笔99977(97)

    刚开始做流量的时候,不要想着我每天怎么搞个100个200个,就想着我每天怎么能搞到10个精准,我怎么能每天搞到10个精准流量,当你真的做到了这一点,当你真正做到了这一点,那你就超越了大部分人. 等人啊 ...

  • 广华日志漫笔99977(96)

    当一个人一单变成了讲台,当一个人一单穿着西装打着领带站上了演讲台,这就说明什么,说明他一辈子也不会再说一句实话了,说明他一辈子再也不会说一句实话了. 改变命运最快的方法就是做推广,改变命运最快的方法就 ...