一、K8s整体日志收集方案
整体的日志收集方案,如下图所示:
- Filebeat是本地文件的日志数据采集器,可监控日志目录或特定日志文件(tail file),并将它们转发给Elasticsearch或Logstatsh进行索引、kafka等。带有内部模块(auditd,Apache,Nginx,System和MySQL),可通过一个指定命令来简化通用日志格式的收集,解析和可视化。
- ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部。
二、针对不同组件的日志收集
三、安装ELK
- 安装JDK:这里我们使用的是jdk-8u181-linux-x64.tar.gz(安装过程省去,非常简单)
- 安装Elasticsearch:直接解压启动,即可,执行下面的语句测试ES。
- 安装Kibana:核心配置文件config/kibana.yml
server.port: 5601
server.host: "192.168.79.110"
elasticsearch.hosts: ["http://localhost:9200"]
启动:bin/kibana,访问Web Console:http://192.168.79.110:5601
- 安装logstash:核心配置文件config/logstash.conf
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "k8s-log-%{+YYYY-MM-dd}"
}
}
启动:bin/logstash -f config/logstash.conf
四、收集k8s组件日志
filebeat的配置文件filebeat.yml使用ConfigMap管理,k8s组件日志记录在node节点本机/var/log/messages目录下,所以将node节点/var/log/messages目录挂载到pod中。创建收集k8s 组件日志/var/log/messages资源。
创建yaml文件如下:k8s-logs.yaml,并执行kubectl create -f k8s-logs.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: k8s-logs-filebeat-config
namespace: kube-system
data:
filebeat.yml: |-
filebeat.prospectors:
- type: log
paths:
- /messages
fields:
app: k8s
type: module
fields_under_root: true
output.logstash:
hosts: ['192.168.79.110:5044']
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: k8s-logs
namespace: kube-system
spec:
selector:
matchLabels:
project: k8s
app: filebeat
template:
metadata:
labels:
project: k8s
app: filebeat
spec:
containers:
- name: filebeat
image: collenzhao/filebeat:6.5.4
args: [
"-c", "/etc/filebeat.yml",
"-e",
]
resources:
requests:
cpu: 100m
memory: 100Mi
limits:
cpu: 500m
memory: 500Mi
securityContext:
runAsUser: 0
volumeMounts:
- name: filebeat-config
mountPath: /etc/filebeat.yml
subPath: filebeat.yml
- name: k8s-logs
mountPath: /messages
volumes:
- name: k8s-logs
hostPath:
path: /var/log/messages
type: File
- name: filebeat-config
configMap:
name: k8s-logs-filebeat-config
下图是Kibana的生成的信息。