公众号关注 「奇妙的 Linux 世界」

设为「星标」,每天带你玩转 Linux !

cc6a2eb2f6a8968c8bd15a1bb7b3e532.png

Loggie 是网易和中国工商银行联合发起的一个基于 Golang 的轻量级、高性能、云原生日志采集 Agent和中转处理 Aggregator 开源项目,支持多 Pipeline 和组件热插拔,提供了:

  • 🔨 一栈式日志解决方案:同时支持日志中转、过滤、解析、切分、日志报警等

  • ☁ 云原生的日志形态:快速便捷的容器日志采集方式,原生的 Kubernetes动态配置下发

  • 🔑 生产级的特性:Loggie 吸收了我们长期的大规模运维经验,形成了全方位的可观测性、快速排障、异常预警、自动化运维能力

505f0859575875e16fae809deac8b24c.png

结合网易数帆长期的业务实践,Loggie形成了如下几大特点:

  • 可扩展、热插拔:配置不同的 Source/Interceptor/Sink,拥有中转、过滤、解析、切分、日志报警等能力,可使用 Golang 快速自研插件

  • 强隔离:多 Pipeline 设计,减少互相干扰,可同时发送多个不同数据源

  • 轻量级、高性能:基于 Golang,极少的资源占用,强大的吞吐性能

  • 可靠性保障:完善的日志可观测性,原生 Prometheus metrics 支持,还有限流等 Interceptor

  • 云原生:配置中心集成 Kubernetes,创建 CRD 实例即可采集容器日志

同时,基于Loggie的流式数据传输设计,我们可以灵活使用 Loggie 的Pipeline。

从使用形态上可划分为:

  • Agent 形态:每个节点一个或者每个Pod一个,用于采集日志或者其他数据

  • Aggregator 形态:用于中转、转发和处理,可独立部署成集群

可以应用在:

  • 数据采集:采集容器日志、节点日志,采集Prometheus metrics、Kubernetes Events 等

  • 数据中转:作为中转机去做数据的聚合、转发、分流

  • 数据处理:进行流式数据的切分、转换、处理

  • 日志报警:进行异常日志的检测与报警

  • ......

此外,利用 Loggie 的设计,用户也可以快速开发一个 Source、Sink 或Interceptor 组件,复用Loggie的能力,避免大量重复的开发工作。

下图是 Loggie 和其他日志采集工具的功能对比:

ee4ffdc7367ee9340062312c1d4421f4.png

下面我们演示在一个 Kubernetes 集群中,通过创建 LogConfig CRD 快速采集 Pod 的日志。

首先部署 Loggie DaemonSet,可以选择使用 Helm Chart 进行安装。

helm pull https://github.com/loggie-io/installation/releases/download/v1.0.0/loggie-v1.0.0.tgz && tar xvzf loggie-v1.0.0.tgz
helm install loggie ./loggie -nloggie --create-namespace

也可以直接部署:

helm install loggie -n loggie --create-namespace https://github.com/loggie-io/installation/releases/download/v1.0.0/loggie-v1.0.0.tgz

接下来就可以采集日志了,Loggie 定义了 Kubernetes CRD LogConfig,一个 LogConfig 表示采集一类 Pods 的日志采集任务。比如现在我们有一个 nginx 应用需要被采集日志:

kubectl create deploy nginx --image=nginx

先要定义输出源 Sink,使用 Loggie 定义的 Sink CRD 来定义,表明日志发送的后端。为了方便演示,这里我们将日志发送至 Loggie Agent 自身的日志中并打印。

cat << EOF | kubectl apply -f -
apiVersion: loggie.io/v1beta1
kind: Sink
metadata:
  name: default
spec:
  sink: |
    type: dev
    printEvents: true
EOF

可以通过 kubectl get sink 查看到已创建的 Sink。接下来就需要定义采集任务了,使用 Loggie 定义的 LogConfig 这个 CRD,表示一个日志采集任务,我们创建一个 LogConfig 示例如下所示:

cat << EOF | kubectl apply -f -
apiVersion: loggie.io/v1beta1
kind: LogConfig
metadata:
  name: nginx
  namespace: default
spec:
  selector:
    type: pod
    labelSelector:
      app: nginx
  pipeline:
    sources: |
      - type: file
        name: mylog
        paths:
        - stdout
    sinkRef: default
EOF

创建完之后,我们可以使用 kubectl get lgc 查看到创建的 CRD 实例。同时,我们还可以通过 kubectl describe lgc nginx 查看 LogConfig 的事件,以获取最新的状态。

Events:
  Type    Reason       Age   From                       Message
  ----    ------       ----  ----                       -------
  Normal  syncSuccess  52s   loggie/kind-control-plane  Sync type pod [nginx-6799fc88d8-5cb67] success

上面的 nginx LogConfig 通过其中的 spec.selector 来匹配采集哪些 Pod 的日志,这里我们使用 app: nginx 选择了刚才创建的 nginx Pod。spec.pipeline 则表示 Loggie 的 Pipeline 配置,我们只采集容器标准输出的日志,所以在 paths 中填写 stdout 即可。

现在我们就可以来查看日志了,首先找到所在的nginx pod节点:

kubectl get po -owide -l app=nginx

然后我们找到该节点的 Loggie:

kubectl -nloggie get po -owide |grep ${node}

可以通过:

kubectl -nloggie logs -f ${logge-pod}

然后就可以查看 Loggie 打印出的日志,正常里面展示了采集到的 nginx 标准输出日志。

关于 Loggie 的更多使用可以查看官方文档了解更多 https://loggie-io.github.io/docs/。

仓库地址:https://github.com/loggie-io/loggie

本文转载自:「Github爱好者」,原文:https://tinyurl.com/jmdw43d,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。

712a89fca99b19fdf4ec2e5cf4dc02b2.gif

最近,我们建立了一个技术交流微信群。目前群里已加入了不少行业内的大神,有兴趣的同学可以加入和我们一起交流技术,在 「奇妙的 Linux 世界」 公众号直接回复 「加群」 邀请你入群。

71ba713f533ef9253d73c819186bf571.png

你可能还喜欢

点击下方图片即可阅读

8445dcd6b0fcd1eaf911156747e2addf.png

万字长文带你入门 Elasticsearch

de91869ace2828731d8413d428b4b078.png
点击上方图片,『美团|饿了么』外卖红包天天免费领

3b7d57c518f4ef89931c5fb19cece5c0.png

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐