暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

云原生可观察性系列二:基于Loggie采集容器日志

IT那活儿 2022-08-28
1049

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!


文章前言

我们现有日志采集方式主要是基于开源flume 进行二次开发,已实现对应用日志、syslog、组件日志、sql查询等类型的日志进行采集,适用传统运行环境日志采集,长期实践过程中flume对文件数过多,量大的情况下采集存在资源消耗较高的现象(进程高cpu) 。
应用大规模上K8s云环境后需要对容器及容器内部日志进行采集,flume 本身并不支持,需要找寻相应的开源解决方案,而今年推出的开源日志采集组件Loggie可以满足这种场景。
Loggie是一个基于Golang的轻量级、高性能、云原生日志采集Agent和中转处理Aggregator,支持多Pipeline和组件热插拔,提供了基于日志可观测性、快速排障、异常预警、自动化运维能力。


安装部署

2.1 环境准备

在此之前需要有一套k8s集群以及helm环境。
helm下载地址:https://github.com/kubernetes/helm/releases,下载上传解压即可。
下载好Loiggie安装包:https://github.com/loggie-io/installation/releases/download/v1.2.0/loggie-v1.2.0.tgz
loggie官方文档:https://loggie-io.github.io/docs/

2.2 部署

1)DaemonSet方式部署loggie,helm install loggie ./loggie -nloggie --create-namespace 可以通过kubectl get ds -n loggie命令查看loggie容器是否创建成功。
2)创建被采集的测试容器。
3)定义输出源Sink,创建一个Loggie定义的CRD Sink实例,表明日志发送的后端。接收日志的后端存在多种,例如es、kafka、Prometheus,本次演示配置输出到loggie容器日志(dev)和kafka中。
输出源dev:
apiVersion: loggie.io/v1beta1
kind: Sink
metadata:
 name: default
spec:
 sink: |
   type: dev
   printEvents: true

输出源:kafka
apiVersion: loggie.io/v1beta1
kind: Sink
metadata:
 name: default
spec:
 sink: |
   type: kafka
   brokers: ["192.168.XX.XXX:9092"] # kafka地址
   topic: "loggie"   # topic名称

其他输出源配置详见:https://loggie-io.github.io/docs/reference/下的Sink节点。
通过kubectl apply -f xxx.yaml创建sink。
4)定义采集任务,Loggie定义CRD LogConfig,表示一个日志采集任务;本次演示两种采集方式,直接采集应用日志文件和采集容器日志。
采集容器日志:
apiVersion: loggie.io/v1beta1
kind: LogConfig
metadata:
 name: tomcat-app
 namespace: default
spec:
 selector:
   type: pod
   labelSelector:
     app: asdf
 pipeline:
   sources: |
     - type: file
       name: mylog
       paths:
       - stdout
   sinkRef: default

采集容器内的应用日志:
apiVersion: loggie.io/v1beta1
kind: LogConfig
metadata:
 name: tomcat-app
 namespace: default
spec:
 selector:
   type: pod
   labelSelector:
     app: asdf
 pipeline:
   sources: |
     - type: file
       name: mylog
       paths:
       - usr/local/logs/app.log
   sinkRef: default

更多采集配置请详见:https://loggie-io.github.io/docs/reference/下的source节点。
5)配置完成后查看测试pod所在节点(dev模式下日志只会采集到同一节点的loggie),kubectl get pods -l app=asdf -o wide  ,查看loggie日志和kafka消费可以看到有数据,其中body字段为日志信息,日志采集成功。
需要回顾上期云原生相关文章,可点击文章标题《云原生可观察性系列一:Tetragon实践》跳转原文查看。


本文作者:长研云原生研究小组(上海新炬王翦团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论