跳转至

本地开发

本文介绍如何在本地开发和调试Loggie工程。

本地工程

golang开发环境

Loggie使用Golang编写,请确保本地有Golang开发环境。

go version

代码工程

请使用自己的github账号fork Loggie工程。然后git clone到本地。

git clone git@github.com:<Account>/loggie.git

本地环境

正常情况下,本地无特殊依赖。

针对不同的功能场景,需要根据具体情况安装或者使用外部的依赖。

建议本地运行Kubernetes进行部署和管理。

Kubernetes

搭建Kubernetes

推荐使用Kind

部署依赖组件

推荐使用Helm来部署。相关的组件可使用公开的Helm仓库来添加和部署。

本地Loggie连接Kubernetes

如果需要使用LogConfig等CRD,或者调试Kubernetes下的使用方式,需要在系统配置中,enable Kubernetes Discovery。

loggie.yml

  discovery:
    enabled: true
    kubernetes:
      kubeconfig: ${home}/.kube/config

指定kubeconfig连接本地的Kubernetes APIServer。

另外,Agent形态的Loggie,会只监听本节点的Kubernetes Pod事件,需要在Loggie启动参数中添加-meta.nodeName来模拟所在的节点。

例如,可以使用kubectl get node查看所有节点名称:

NAME                 STATUS   ROLES    AGE     VERSION
kind-control-plane   Ready    master   2y50d   v1.21.0
然后启动参数增加-meta.nodeName=kind-control-plane,可以使Loggie启动后被认为部署在该节点。

验证与调试

Loggie默认启动后,输出的日志格式为JSON,如果你不习惯,可在启动参数中添加-log.jsonFormat=false来关闭。

本地尽量使用模拟的方式,合理利用dev source和dev sink。比如:

  • 开发source,可配置dev sink输出到本地stdout验证
  • 开发sink,可配置dev source模拟输入或者配置file source采集本地文件
  • 开发interceptor,可同时配置dev source和dev sink用于模拟

示例:在pipelines中,使用dev sink,查看最终输出发送至下游的数据。

pipelines.yml

    sink:
      type: "dev"
      printEvents: true
      codec:
        pretty: true