Please enable Javascript to view the contents

Loggie 部署与配置

 ·  ☕ 2 分钟

1. 下载 Chart 包

1
git clone https://github.com/loggie-io/installation

2. 安装 loggie

1
cd installation/helm-chart
1
helm install loggie ./ -nloggie --create-namespace

3. 全局配置修改

  • 移除标准输出前面的时间戳
1
kubectl -n loggie  edit cm loggie-config-loggie 

将 parseStdout 改为 true,移除标准输出前面的时间戳。

1
2
3
4
5
6
config:
  loggie:
    discovery:
      enabled: true
      kubernetes:
        parseStdout: true
  • podlogs 改成 varlog 挂载
1
kubectl -n loggie edit ds loggie
1
2
3
4
5
6
7
8
9
        volumeMounts:
        - mountPath: /var/log
          name: varlog
          readOnly: true
      volumes:
      - hostPath:
          path: /var/log
          type: DirectoryOrCreate
        name: varlog
  • 给节点级别采集加上元信息
1
kubectl -n loggie  edit cm loggie-config-loggie 
1
2
3
4
    typeNodeFields:
      nodename: "${_k8s.node.name}"
      clusterlogconfig: "${_k8s.clusterlogconfig}"
      os: "${_k8s.node.nodeInfo.osImage}"
  • pod 级别采集加上元信息
1
kubectl -n loggie  edit cm loggie-config-loggie 
1
2
3
    typePodFields:
      workloadkind: "${_k8s.workload.kind}"
      workloadname: "${_k8s.workload.name}"

4. 配置 kubelet

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
cat << 'EOF' | sudo tee /etc/systemd/system/kubelet-log.service
[Unit]
Description=Kubelet log collector
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/journalctl -u kubelet.service -f
StandardOutput=append:/var/log/kubelet.log
StandardError=inherit
LogRateLimitIntervalSec=0
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF
1
2
3
systemctl daemon-reload
systemctl enable kubelet-log.service
systemctl restart kubelet-log.service

5. 业务快速配置

  • 配置环境变量
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
export NAMESPACE=""
export ES_INDEX=""
export ES_PORT=""
export ES_HOSTS=""
export ES_USERNAME=""
export ES_PASSWORD=""
export POD_LABEL_KEY=""
export POD_LABEL_VALUE=""

ES_HOSTS_YAML=""
IFS=',' read -ra _es_host_arr <<< "${ES_HOSTS}"
for _h in "${_es_host_arr[@]}"; do
  _h="${_h#"${_h%%[![:space:]]*}"}"
  _h="${_h%"${_h##*[![:space:]]}"}"
  [[ -z "${_h}" ]] && continue
  ES_HOSTS_YAML+="        - \"http://${_h}:${ES_PORT}\""$'\n'
done
  • 配置 Sink
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
cat << EOF | kubectl apply -f -
apiVersion: loggie.io/v1beta1
kind: Sink
metadata:
  name: default
  namespace: ${NAMESPACE}
spec:
  sink: |
    type: elasticsearch
    index: "${ES_INDEX}"
    hosts: 
${ES_HOSTS_YAML}
    username: "${ES_USERNAME}"
    password: "${ES_PASSWORD}"
EOF
  • 配置 Interceptor
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
cat << EOF | kubectl apply -f -
apiVersion: loggie.io/v1beta1
kind: Interceptor
metadata:
  name: default
  namespace: ${NAMESPACE}
spec:
  interceptors: |
    - type: jsonDecode
      field: message
    - type: schema
      addMeta:
        timestamp:
          key: "@timestamp"
      remap:
        body:
          key: message
EOF
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
cat << EOF | kubectl apply -f -
apiVersion: loggie.io/v1beta1
kind: Interceptor
metadata:
  name: default
  namespace: ${NAMESPACE}
spec:
  interceptors: |
    - type: schema
      addMeta:
        timestamp:
          key: "@timestamp"
      remap:
        body:
          key: message
EOF
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
cat << EOF | kubectl apply -f -
apiVersion: loggie.io/v1beta1
kind: LogConfig
metadata:
  name: default
  namespace: ${NAMESPACE}
spec:
  selector:
    type: pod
    labelSelector:
      "${POD_LABEL_KEY}": "${POD_LABEL_VALUE}"
  pipeline:
    sources: |
      - type: file
        name: common
        paths:
          - stdout
    sinkRef: default
    interceptorRef: default
EOF

6. 参考


微信公众号
作者
微信公众号