利用log-pilot + kafka 搭建k8s日志系统
环境
软件 |
版本 |
Kubernetes |
v1.18.6 |
Rancher |
v2.4.5 |
安装kafka
安装log-pilot前,需要先安装kafka
- 通过Rancher应用商店安装kafka
)
- 获取kafkaBroken地址
1 2 3 4 5
| NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR kafka-cp-kafka ClusterIP 10.43.180.111 <none> 9092/TCP 2m31s app=cp-kafka,release=kafka ... ...
|
安装log-pilot
log-pilot支持docker run的方式启动,也支持在k8s中通过daemonsest的方式启动
k8s启动yaml:https://github.com/AliyunContainerService/log-pilot/tree/master/examples
log-pilot安装参考:https://www.cnblogs.com/uglyliu/p/12382214.html
- 下载官方的yaml文件,修改kafka-broken地址
https://github.com/AliyunContainerService/log-pilot/blob/master/examples/pilot-kafka-kubernetes.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| apiVersion: apps/v1 kind: DaemonSet metadata: namespace: pilot name: log-pilot labels: k8s-app: log-pilot spec: selector: matchLabels: k8s-app: log-pilot updateStrategy: type: RollingUpdate template: metadata: labels: k8s-app: log-pilot spec: tolerations: - key: node-role.kubernetes.io/master effect: NoSchedule containers: - name: log-pilot image: registry.cn-hangzhou.aliyuncs.com/acs/log-pilot:0.9.5-fluentd env: - name: "LOGGING_OUTPUT" value: "kafka" - name: "KAFKA_BROKERS" value: "10.43.180.111:9092" ## 修改为对应的broken地址,多个地址以逗号分隔 - name: "NODE_NAME" valueFrom: fieldRef: fieldPath: spec.nodeName volumeMounts: - name: sock mountPath: /var/run/docker.sock - name: root mountPath: /host readOnly: true - name: pos mountPath: /pilot/pos - name: localtime mountPath: /etc/localtime securityContext: capabilities: add: - SYS_ADMIN terminationGracePeriodSeconds: 30 volumes: - name: sock hostPath: path: /var/run/docker.sock - name: root hostPath: path: / - name: pos emptyDir: {} - name: localtime hostPath: path: /etc/localtime
|
官方的yaml使用的是extensions/v1beta1,适用于k8s <=1.15版本,k8s>=1.16版本就要改成apps/v1
- 部署log-pilot
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 创建命名空间 # kubectl create ns pilot namespace/pilot created
执行该文件 # kubectl apply -f log-pilot.yaml daemonset.apps/log-pilot created
查看是否启动成功 # kubectl -n pilot get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES log-pilot-fcddx 1/1 Running 0 70s 10.42.1.13 ubuntu001 <none> <none> log-pilot-sktpt 1/1 Running 0 70s 10.42.0.22 xie-node001 <none> <none> log-pilot-td4z8 1/1 Running 0 70s 10.42.2.21 ubuntu002 <none> <none>
|
收集pod日志
有两种收集方式:
- 通过抓取pod 控制台输出
1 2 3 4 5
| env: - name: aliyun_logs_mylog value: stdout - name: aliyun_logs_mylog_tags value: "topic=k8s-mylog"
|
- 通过读取某个日志文件路径
1 2 3 4 5
| env: - name: aliyun_logs_mylog value: /var/log/xxx.log - name: aliyun_logs_mylog_tags value: "topic=k8s-mylog"
|
参数说明:
aliyun_logs_mylog
:收集带有aliyun_logs关键字的pod的日志,对应的值如果为stdout,则会收集控制台输出,如果值为某个日志文件路径,则收集该文件的日志
aliyun_logs_mylog_tags
:对接kafka一定要配置这个tag,如果是其他的可以不定义这个。值为设置对应的topic
aliyun_logs_mylog_format
:如果日志是json格式,可以设置这个参数,值为json,但是如果日志格式不是json而设置了这个参数,则无法收集到日志