今天来安装 ELK Stack,并且收集 k8s 的 log,但是会有一点点不同,我们看下图:
这个图简单表现出一个利用 ELK 收集 log 的流程,你的 log file 会被送到 logstash 做资料清洗或是处理, logstash 再将处理好的资料(log)送至 elsaticsearch 做储存,最後再由 kibana 将你的资料视觉化、展示给你看,而今天所分享的方法较为简单,虽然也可以收集 log 但却在实际应用上会不大方便使用,我们看下图:
跟上面那张图相比,多了一个 beat,那 beat 在这里担任什麽工作呢?beat 负责的主要是收集资料,并送至 elasticsearch 或 logstash 做资料处理,再送至 elasticsearch,不过beat有分很多种,metricbeat 、 filebeat 等,每个 beat 的分工各不相同,像 filebeat ,顾名思义就是会去收集 file 的 data ,而这也是我们今天要使用的,不过我们今天不做资料处理,也就是没有 logstash 的部分,所以会导致数面所提到的问题,那不赘述太多,先来安装看看吧!
kubectl apply -f https://download.elastic.co/downloads/eck/1.3.1/all-in-one.yaml
kubectl apply -f es.yaml
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
name: quickstart
spec:
version: 7.10.2
nodeSets:
- name: default
count: 1
config:
node.store.allow_mmap: false
podTemplate:
spec:
volumes:
- name: elasticsearch-data
emptyDir: {}
kubectl port-forward service/quickstart-es-http 9200
默认帐号:elastic
PASSWORD=$(kubectl get secret quickstart-es-elastic-user -o go-template='{{.data.elastic | base64decode}}')
echo $PASSWORD
curl -u "elastic:$PASSWORD" -k "https://localhost:9200"
kubectl apply -f kibana.yaml
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
name: quickstart
spec:
version: 7.10.2
count: 1
elasticsearchRef:
name: quickstart
kubectl port-forward --address=0.0.0.0 service/quickstart-kb-http 5601:5601
默认帐号:elastic
kubectl get secret quickstart-es-elastic-user -o=jsonpath='{.data.elastic}' | base64 --decode; echo
https://{node-IP}:5601
kubectl apply -f filebeat.yaml
apiVersion: beat.k8s.elastic.co/v1beta1
kind: Beat
metadata:
name: quickstart
spec:
type: filebeat
version: 7.10.2
elasticsearchRef:
name: quickstart
config:
filebeat.inputs:
- type: container
paths:
- /var/log/containers/*.log
daemonSet:
podTemplate:
spec:
dnsPolicy: ClusterFirstWithHostNet
hostNetwork: true
securityContext:
runAsUser: 0
containers:
- name: filebeat
volumeMounts:
- name: varlogcontainers
mountPath: /var/log/containers
- name: varlogpods
mountPath: /var/log/pods
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
volumes:
- name: varlogcontainers
hostPath:
path: /var/log/containers
- name: varlogpods
hostPath:
path: /var/log/pods
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
apiVersion: v1
kind: Pod
metadata:
name: counter
spec:
containers:
- name: count
image: busybox
# 输出hello world
args: [/bin/sh, -c,
'i=0; while true; do echo "hello world: $i: $(date)"; i=$((i+1)); sleep 3; done']
ps: 记得create 或 apply :)
Ya! 有 log 了,不过省略 logstash 其实还蛮麻烦的,这些 log 一但多了起来,样式也多样化之後,会挺不好看的,目前我不清楚是否能在 filebeat 上进行简单的资料处理,所以资料处理的部分都在 logstash 上做,如果有人知道 filebeat 可以多做一些什麽的话,还请各位留言告知谢谢!
一天:)
<<: EP 14: The MenuItem of ListView binds Command in itself Model
>>: Alpine Linux Porting (一点一?)
本文目标 理解处理器在各个 stage 会有何种行为 Pinpline 的概念 现代处理器面临的挑战...
这次有幸能藉由铁人赛重新认识及学习Azure AI的相关技术, 以下为这次参赛的课题以及时程(会再陆...
使用 docker 安装 Wordpress 这个相当热门的 CMP 内容管理平台,可以省去不少过往...
此篇内容不会有 CSS 语法教学,而是着重在使用 Bootstrap 5 时需要具备的 CSS kn...
我们很常会在function中看到使用this这个关键字。但它是甚麽,要怎麽用?听说它的判断方法很麻...