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
|
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}"
|
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
|
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
|
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. 参考