loggie icon indicating copy to clipboard operation
loggie copied to clipboard

Feat: add sink clickhouse

Open zhu733756 opened this issue 1 year ago • 1 comments

Proposed Changes:

  • Add Sink Clickhouse

Which issue(s) this PR fixes:

Fixes https://github.com/loggie-io/loggie/issues/494

Additional documentation:

How to run it with source kubeEvents:

1.  Exec ddl on your clickhouse server
---
CREATE DATABASE events;
CREATE TABLE events.events (
    namespace String,
    name String,
    selfLink String,
    uid String,
    resourceVersion String,
    creationTimestamp String,
    managedFields String,
    kind String,
    apiVersion String,
    fieldPath String,
    reason String,
    message String,
    host String,
    firstTimestamp String,
    lastTimestamp String,
    count Float64,
    type String,
    eventTime String,
    reportingComponent String,
    reportingInstance String
) ENGINE = MergeTree() ORDER BY (namespace, name, creationTimestamp)
---
2. git clone https://github.com/zhu733756/loggie
3. add vscode launch.json (cd loggie && mkdir -p .vscode)
---
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "loggie-clickhouse-sink",
            "type": "go",
            "request": "launch",
            "mode": "auto",
            "program": "${workspaceFolder}/cmd/loggie/main.go",
            "args": ["--config.system", "/root/go/src/github.com/loggie/.vscode/loggie.yml", "--config.pipeline", "/root/go/src/github.com/loggie/.vscode/pipeline.yml", "--meta.nodeName", "nodeX", "--log.level","debug"]
        }
    ]
}
---
4.loggie.yml(default)
---
loggie:
  reload:
    enabled: true
    period: 10s

  monitor:
    logger:
      period: 30s
      enabled: true
    listeners:
      filesource: ~
      filewatcher: ~
      reload: ~
      sink: ~
      queue: ~
      pipeline: ~
      sys: ~

  discovery:
    enabled: false
    kubernetes:
      containerRuntime: containerd
      kubeconfig: "/root/.kube/config"
      typePodFields:
        namespace: "${_k8s.pod.namespace}"
        podname: "${_k8s.pod.name}"
        containername: "${_k8s.pod.container.name}"
        nodename: "${_k8s.node.name}"
        logconfig: "${_k8s.logconfig}"

  defaults:
    sink:
      type: dev
    sources:
      - type: file
        timestampKey: "@timestamp"
        bodyKey: "message"
        fieldsUnderRoot: true
        addonMeta: true
        addonMetaSchema:
          underRoot: true
          fields:
            filename: "${_meta.filename}"
            line: "${_meta.line}"
        watcher:
          maxOpenFds: 6000
  http:
    enabled: true
---
5. pipeline.yml
---
pipelines:
- name: clickhouse
  sources:
  - type: kubeEvent
    name: events
    kubeconfig: "/root/.kube/config"
  queue:
    type: channel
    batchSize: 2048000 
    batchBytes: 33554432000 
    batchAggTimeout: 10s
  interceptors:
  - type: transformer
    name: jsonDecode
    actions:
    - if: exist(body)
      then:
      - action: jsonDecode(body)
  - type: transformer
    name: underRoot
    actions:
    - if: exist(metadata)
      then:
      - action: underRoot(metadata)
    - if: exist(involvedObject)
      then:
      - action: underRoot(involvedObject)
    - if: exist(source)
      then:
      - action: underRoot(source)
  - type: transformer
    name: setField
    actions:
    - action: set(managedFields, "")
  - type: transformer
    name: setEmpty
    actions:
    - if: NOT exist(host)
      then:
      - action: set(host, "")
    - if: NOT exist(fieldPath)
      then:
      - action: set(fieldPath, "")
    - if: NOT exist(apiVersion)
      then:
      - action: set(apiVersion, "")
    - if: NOT exist(count)
      then:
        - action: set(count, 0)
        - action: strconv(count, float)
        - action: return()
      else:
        - action: return()
  - type: maxbytes
    maxBytes: 1048576
  - type: rateLimit
    qps: 10000
  sink:
    type: clickhouse
    addr: ["xx.xx.xx.xx:9000"]
    user: "defaut"
    password: "defaut"
    database: "events"
    table: "events"
    debug: true
---
6. Click Vscode Debug button would run it.

zhu733756 avatar Aug 25 '23 04:08 zhu733756

/cc @ethfoo

zhu733756 avatar Aug 25 '23 06:08 zhu733756