Files
kubesphere/docs/en/guides/kubesphere-logging-devlopment-guide.md
huanggze 8022de126c add logging dev guides
Signed-off-by: huanggze <loganhuang@yunify.com>
2019-12-23 21:12:08 +08:00

2.3 KiB

Logging

This documentation contains backend development guides for interaction with key components behind KubeSphere logging system. Logging backend provides the capabilities of:

  • Log search
  • Log export
  • Log output configuration
  • Multi-tenant isolation

File Tree

The listing below covers all folders related to the logging backend.

/pkg
  ├─api
  │  └─logging            # declares structs for api responses
  │     └─v1alpha2             
  ├─apiserver             # implements handler for http requests
  │  ├─logging            
  │  └─tenant
  ├─kapis                 # registers APIs and routing
  │  ├─logging
  │  │  ├─install
  │  │  └─v1alpha2
  │  ├─tenant
  │  │  ├─install
  │  │  └─v1alpha2
  ├─models                
  │  ├─log                # constants, utils and fluent-bit crd operation
  │  │  ├─constants.go
  │  │  ├─logcollector.go # some utils
  │  │  ├─logcrd.go       # interacts with fluent-bit crd
  │  │  └─types.go
  │  └─tenant
  └─simple
     ├─factory.go         # contains factory functions for es client options
     └─client
        ├─elasticsearch   # wraps es search apis
        │  ├─esclient.go  # constructs es search body 
        │  ├─interface.go # general interface methods for es clients
        │  ├─options.go   # es client options
        │  └─versions     # client code by es versions
        │     ├─v5
        │     ├─v6
        │     └─v7
        └─fluentbit       # autogenerated client code for fluent-bit crd

API Design

There are two types of APIs in logging. One for log query, and the other for interacting with the CustomResourceDefinition used by Fluent-bit Operator. For information about CRD and Fluent-bit Operator, please go to its own repo.

To support multi-tenant isolation, KubeSphere's logging query APIs have the format like below, though the underlying logic is using Elastic Search APIs:

GET /namespaces/{namespace}/pods/{pod}/containers/{container}

KubeSphere API gateway will decode the URL and conduct authorization. A person who doesn't belong to a namespace will be rejected to make a request.