一、K8s整體日志收集方案
整體的日志收集方案,如下圖所示:

- Filebeat是本地檔案的日志資料采集器,可監控日志目錄或特定日志檔案(tail file),并將它們轉發給Elasticsearch或Logstatsh進行索引、kafka等,帶有內部模塊(auditd,Apache,Nginx,System和MySQL),可通過一個指定命令來簡化通用日志格式的收集,決議和可視化,
- ELK是Elasticsearch、Logstash、Kibana的簡稱,這三者是核心套件,但并非全部,
- Elasticsearch是實時全文搜索和分析引擎,提供搜集、分析、存盤資料三大功能;是一套開放REST和JAVA API等結構提供高效搜索功能,可擴展的分布式系統,它構建于Apache Lucene搜索引擎庫之上,
- Logstash是一個用來搜集、分析、過濾日志的工具,它支持幾乎任何型別的日志,包括系統日志、錯誤日志和自定義應用程式日志,它可以從許多來源接收日志,這些來源包括 syslog、訊息傳遞(例如 RabbitMQ)和JMX,它能夠以多種方式輸出資料,包括電子郵件、websockets和Elasticsearch,
- Kibana是一個基于Web的圖形界面,用于搜索、分析和可視化存盤在 Elasticsearch指標中的日志資料,它利用Elasticsearch的REST介面來檢索資料,不僅允許用戶創建他們自己的資料的定制儀表板視圖,還允許他們以特殊的方式查詢和過濾資料
二、針對不同組件的日志收集
- Node上部署一個日志收集程式:DaemonSet方式部署日志收集程式,對本節點/var/log和/var/lib/docker/containers/ 兩個目錄下的日志進行采集.

- Pod中附加專用日志收集的容器:每個運行應用程式的Pod中增加一個日志收集容器,使用emtyDir共享日志目錄讓日志收集程式讀取到,

- 應用程式直接推送日志:不屬于Kubernetes范圍,

三、安裝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的生成的資訊,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/18052.html
標籤:其他
