日志系统

1 篇文章 0 订阅

单纯的日志系统思路是比较简单的:

  • 日志采集:beats、fluentd、logstash等等 主要采集所需日志

  • 缓冲层:redis、kafka、rabbitMQ 日志量采集很多,哪层出速度跟不上入速度,积累到不行就增到哪层去

  • 过滤清洗聚合:logstash (也支持日志采集)将获取到的 原始日志根据规则进行清洗、过滤,最后将清洗好的日志转发至Elasticsearch。除外logstash还有队列持久化功能,在某些程度上可以不需要消息队列层因为持久化在队列极限(队列或者队列中未确认事件数量)后会背压以组织数据流入logstash,从而达到限流,说白了就是队列满了拒收而Filebeat呢则存储了每个事件的传递状态,在定义的输出被阻止并且尚未确认所有事件的情况下,Filebeat将继续尝试发送事件,直到输出确认其已接收到事件为止 如果 Filebeat 在发送事件过程中关闭,它不会等到输出确认所有事件后才关闭。任何发送到输出但在 Filebeat 关闭之前未被确认的事件都将在 Filebeat 重新启动时再次发送。这可以确保每个事件至少发送一次,但最终可能会将重复的事件发送到输出。可以通过设置 shutdown _ timeout 选项,将 Filebeat 配置为在关闭前等待特定时间。长话短说:就是只有具有确认功能的输入插件才有效,例如Beats和http之类的插件

  • 存放、检索:elasticsearch(题外话!有些情况例如搜索类应用或许还需要配合数据库存储;有些需求甚至让集群分单独角色去运行而不是混合角色)
    Elasticsearch web管理工具cerebro es索引管理 使用谷歌插件ElasticSearch Head

  • 展示:kibana、Grafana

玩法很多,比较Elastic Stack生态圈不单单只有日志收集功能,日志方面总的来说就是看需要收集的日志量来评估日志系统如何规划,尽量避免单点。


k8s的日志系统思路:
需了解所要收集哪些东西

  • 系统组件日志:在容器中运行的(kube-scheduler和kube-proxy等等)和不在容器中运行的(kubelet、Docker)
  • 集群里pod中运行的

容器日志路径
默认路径:/var/lib/docker/containers
可以使用docker info 命令查看这一项‘Docker Root Dir: /var/lib/docker’
pod日志:/var/log/pods/ (pod中全部容器日志) 和 /var/log/container/(pod中容器分别日志) ★Pod日志是docker日志的软连接来的,k8s自己是不产日志的而是用docker的。
Kubelet 和Docker在使用 systemd 的操作系统中将自己的日志写到journald,fluentd提供了systemd输入插件,beats提供了Journalbeat用于从基于systemd / journald的Linux系统进行日志传送ES/logstash(此功能是试验性的)


收集方法 参考官网
① 节点上部署一个日志收集程序:通常用DaemonSet
②在应用程序的 pod 中,包含专门记录日志的 sidecar 容器:使用emtyDir共享日志目录
1.sidecar容器将应用程序日志传送到自己的标准输出、或者别的输出方式,然后用节点级日志收集程序收集
2.sidecar容器就是采集程序
③从应用中直接暴露日志目录或者说应用程序直接推送方式


es具体操作参考官网很详细
fluentd-kubernetes-daemonset
Fluent Bit 部署
fluent bit 的解析器参数
fluentd+Elasticsearch+kibana 收集docker容器日志也不错毕竟Docker有一个内置的Fluentd日志记录驱动程序,但没有Logstash的驱动程序。使用Fluentd,不需要在容器上放置任何额外的代理即可将日志推送到Fluentd。日志从STDOUT直接传送到Fluentd服务,而无需额外的日志文件,也就意味着docker logs 不了咯,根据官网似乎只有企业版docker才有双重日志功能。
至于K8S应用来说,beats配个k8s处理器添加些K8S元数据,Fluent Bit 则是搞个过滤器添加些K8S元数据

补充: Filebeat处理器起过滤出需要的数据或者增加元数据信息,另外filebeat.Inputs 部分使用 include _ lines、 exclude _ lines 和 exclude _ files 选项可以将每个输入配置为包含或排除特定行或文件这种方法的缺点是,您需要为所需的每个筛选条件实现一个配置选项,而处理器则是 Filebeat 导出的所有数据的全局处理


对于java日志格式的,Filebeat-输入有多行选项和logstash-多行编解码插件使用。一般都是在Filebeat处理


Filebeat
输入-收割机
输入负责管理收割机并查找所有要读取的源
收割机负责读取单个文件的内容。收割机逐行读取每个文件,并将内容发送到输出

k8s处理器:
Indexers 索引器-------索引器使用pod元数据为每个pod创建唯一的标识符,这些标识符有助于将观察pod的元数据与实际事件相关联;
Matchers 匹配者------匹配器使用事件中的信息来构造与索引器创建的标识符匹配的查找键;通俗就是从事件信息里拿个字段来寻找匹配的标识符,找到就把pod元数据增到这个事件

k8s处理器和 Filebeat一起使用时默认使用容器索引器和 logs_path,容器ID跟路径中包含的容器id关联;要用其他索引器和匹配者就要禁用默认选其他 官网链接 https://www.elastic.co/guide/en/beats/filebeat/current/add-kubernetes-metadata.html

Filebeat 自动发现也能采集k8s或者容器日志。自动发现有以下
第一种基于模板与条件自动发现-- 您可以定义在条件与事件匹配时要应用的一组配置模板。模板定义了与自动发现事件相匹配的条件,以及在此条件发生时要启动的配置列表
第二种基于提示自动发现,可以根据Kubernetes Pod 注释或者 Docker 标签中来检索。官网还列举了一Pod多容器、多行设置、多个输入等 官网链接 https://www.elastic.co/guide/en/beats/filebeat/current/configuration-autodiscover-hints.html
在这里插入图片描述


logstash

输入-过滤-输出

grok filter plugin----------Grok内置字段 链接: https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns 自定义匹配模式时可能需要Oniguruma 正则表达式 链接:https://github.com/kkos/oniguruma/blob/master/doc/RE

事件发送到相同的Elasticsearch集群,但是要针对不同的索引方法:
方法① 使用不同的Elasticsearch输出,每个输出的参数 index 值都不同
方法② 使用一个Elasticsearch输出并将动态变量或者某个字段替换为index 参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值