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. 禁止运行在 master 节点
发现 loggie 对 IO 消耗比较大,先屏蔽 master 节点,避免影响集群的稳定性。
1
2
3
4
5
6
7
8
9
10
| spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node-role.kubernetes.io/control-plane
operator: DoesNotExist
- key: node-role.kubernetes.io/master
operator: DoesNotExist
|
7. 调整 loggie 的日志级别
1
2
3
4
5
6
| spec:
template:
spec:
containers:
- args:
- -log.level=panic
|
loggie 默认的日志级别是 info,有时会打印大量的日志,日志级别从低到高依次为 trace、debug、info、warn、error、fatal、panic。日志级别越低,输出的日志越详细,日志级别越高,输出的日志越少。
8. 参考