k8s 日志收集之 EFK
如今越来越多的应用部署在容器之中,如何收集日志也是一个很重要的问题。服务出问题了,排查问题需要给开发看日志。服务一般会在多个不同的 pod 中,一个一个的登进去看也的确不方便。业务数据统计也需要日志。因此日志收集很重要。今天就来试着部署一下业内常用的 k8s 日志收集方案 EFK。
E - elasticsearch
F - fluentd / filebeat
K - kibana
参考: https://github.com/easzlab/kubeasz/blob/master/docs/guide/efk.md
下面就直接是部署步骤:
1. clone 脚本
git clone https://github.com/easzlab/kubeasz.git
cd kubeasz
git checkout 2.2.3
2. 修改镜像版本
脚本中默认的 elasticsearch / kibana 是 6.x 版本. 这里我们修改为 7.x 版本
# manifests/efk/kibana-deployment.yaml
image: registry.cn-shanghai.aliyuncs.com/ninejy/kibana-oss:7.4.2 # manifests/efk/es-static-pv/es-statefulset.yaml
image: registry.cn-shanghai.aliyuncs.com/ninejy/elasticsearch:v7.4.3 # manifests/efk/fluentd-es-ds.yaml
image: registry.cn-shanghai.aliyuncs.com/ninejy/fluentd:v3.1.0
3. 安装并配置 nfs
# ubuntu 16.04
apt-get update && apt-get install -y nfs-kernel-server nfs-common # cat /etc/exports
/data *(insecure,rw,sync,no_root_squash,no_all_squash,no_subtree_check) # start nfs server
systemctl start nfs-kernel-server.service
4. 配置 pv
# cat manifests/efk/es-static-pv/es-pv0.yaml
# IP 根据实际的来写
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-es-0
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
volumeMode: Filesystem
persistentVolumeReclaimPolicy: Recycle
storageClassName: "es-storage-class"
nfs:
path: /data/es00
server: 10.31.0.18 # cat manifests/efk/es-static-pv/es-pv1.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-es-1
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
volumeMode: Filesystem
persistentVolumeReclaimPolicy: Recycle
storageClassName: "es-storage-class"
nfs:
path: /data/es01
server: 10.31.0.18 # cat manifests/efk/es-static-pv/es-pv2.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-es-2
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
volumeMode: Filesystem
persistentVolumeReclaimPolicy: Recycle
storageClassName: "es-storage-class"
nfs:
path: /data/es02
server: 10.31.0.18 # create directory
mkdir -p /data/{es00,es01,es02} # manifests/efk/es-static-pv/es-statefulset.yaml
# 修改 volumeClaimTemplates 下面的 storage 容量, 跟上面创建的 pv 容量保持一致
volumeClaimTemplates:
- metadata:
name: elasticsearch-logging
spec:
accessModes: [ "ReadWriteMany" ]
storageClassName: "es-storage-class"
resources:
requests:
storage: 5Gi
5. 执行脚本创建 efk
kubectl apply -f manifests/efk/
kubectl apply -f manifests/efk/es-static-pv/
6. 验证
kubectl get pods -n kube-system|grep -E 'elasticsearch|fluentd|kibana'
kubectl get pv
kubectl get pvc --all-namespaces # 强制删除 pv
# kubectl patch pv pv-name -p '{"metadata":{"finalizers":null}}'
说明: 这个方案只能搜集容器标准输出的日志, 如果需要搜集文件日志,可以使用阿里云开源的 log-pilot
下面是 log-pilot 的部署步骤:
7. 修改镜像, 默认的镜像使用 filebeat-6.x, 这跟 elasticsearch-7.x 不兼容。
# manifests/efk/log-pilot/log-pilot-filebeat.yaml
image: registry.cn-shanghai.aliyuncs.com/ninejy/log-pilot:0.9.7-filebeat-oss-7.4.2
8. 执行命令创建 Daemonset
kubectl apply -f manifests/efk/log-pilot/log-pilot-filebeat.yaml
9. 验证
kubectl -n kube-system get pods | grep log-pilot
10. 部署应用测试日志收集
# myapp-test.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-test
spec:
replicas: 3
selector:
matchLabels:
app: myapp-test
template:
metadata:
labels:
app: myapp-test
spec:
containers:
- name: myapp-container
image: registry.cn-shanghai.aliyuncs.com/ninejy/hello:v5
ports:
- containerPort: 80
env:
- name: aliyun_logs_myappStdout
value: "stdout"
- name: aliyun_logs_myappFile
value: "/var/log/app/*.log"
volumeMounts:
- name: myapp-log
mountPath: /var/log/app
volumes:
- name: myapp-log
emptyDir: {}
部署测试应用并访问一下刚部署的应用,使生成一些日志
kubectl apply -f myapp-test.yaml kubectl get pod -o wide
# myapp-test-b5bf9975-nz2kk 1/1 Running 0 143m 172.20.2.7 192.168.0.63 curl 172.20.2.7:28080
# [2021-03-14 13:30:48] Version --> v5.0, Hostname --> myapp-test-b5bf9975-nz2kk # 获取 kibana 访问地址
kubectl cluster-info | grep kibana
浏览器打开 kibana 访问地址,创建 'index pattern', 之后就能看到应用的日志已经到 elasticsearch 中了
补充:通过 Api-server 访问 kibana (dashboard 一样的)
# 获取客户端证书, 进行 base64 解码后保存到 kubecfg.crt
grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d > kubecfg.crt # 获取客户端公钥, 进行 base64 解码后保存到 kubecfg.key
grep 'client-key-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d > kubecfg.key # 提取 kubecfg.crt 和 kubecfg.key 文件内容, 生成 P12 安全证书, 并保存到 kubecfg.p12 文件
openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-client" # 说明: 生成安全证书时, 需要设置提取密码, 你可以设置自定义密码或设置密码为空 # 将安全证书下载到本地, 以 Windows10 操作系统为例, 证书的安装步骤如下
# 1. 双击证书文件, 弹出证书导入向导对话框, 确定要导入的证书文件
# 2. 输入生成安全证书时设置的自定义密码
# 3. 设置证书保存位置
# 4. 完成证书导入 # kubectl cluster-info | grep kibana # 这条命令获取 kibana 的访问地址
# https://192.168.0.61:6443/api/v1/namespaces/kube-system/services/kibana-logging/proxy
# 浏览器输入上面获取的地址即可访问 kibana
更多详细的 log-pilot 介绍请参考文档
阿里云介绍文档: https://help.aliyun.com/document_detail/86552.html
介绍文档2: https://yq.aliyun.com/articles/674327
k8s 日志收集之 EFK的更多相关文章
- k8s日志收集方案
k8s日志收集方案 三种收集方案的优缺点: 下面我们就实践第二种日志收集方案: 一.安装ELK 下面直接采用yum的方式安装ELK(源码包安装参考:https://www.cnblogs.com/De ...
- k8s日志收集及存档
k8s日志收集架构图 利用阿里开源的工具log-pilot,往kafka内写日志,然后吐一份至es,另外一份用flume消费kafka数据落盘
- 容器云平台No.9~kubernetes日志收集系统EFK
EFK介绍 EFK,全称Elasticsearch Fluentd Kibana ,是kubernetes中比较常用的日志收集方案,也是官方比较推荐的方案. 通过EFK,可以把集群的所有日志收集到El ...
- K8S学习笔记之k8s日志收集实战
0x00 简介 本文主要介绍在k8s中收集应用的日志方案,应用运行中日志,一般情况下都需要收集存储到一个集中的日志管理系统中,可以方便对日志进行分析统计,监控,甚至用于机器学习,智能分析应用系统问题, ...
- k8s日志收集配置
容器日志样例 172.101.32.1 - - [03/Jun/2019:17:14:10 +0800] "POST /ajaxVideoQueues!queryAllUser.action ...
- docker搭建日志收集系统EFK
EFK Elasticsearch是一个数据搜索引擎和分布式NoSQL数据库的组合,提过日志的存储和搜索功能. Fluentd是一个消息采集,转化,转发工具,目的是提供中心化的日志服务. Kibana ...
- Kubernetes 系列(八):搭建EFK日志收集系统
Kubernetes 中比较流行的日志收集解决方案是 Elasticsearch.Fluentd 和 Kibana(EFK)技术栈,也是官方现在比较推荐的一种方案. Elasticsearch 是一个 ...
- 微服务从代码到k8s部署应有尽有系列(十一、日志收集)
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...
- 关于K8s集群器日志收集的总结
本文介绍了kubernetes官方提供的日志收集方法,并介绍了Fluentd日志收集器并与其他产品做了比较.最后介绍了好雨云帮如何对k8s进行改造并使用ZeroMQ以消息的形式将日志传输到统一的日志处 ...
随机推荐
- 初学算法之最基础的stl队列
简记为先进先出(first in first out) 它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作. 实用: #include <queue>//头 ...
- 大数据开发--Hbase协处理器案例
大数据开发--Hbase协处理器案例 1. 需求描述 在社交网站,社交APP上会存储有大量的用户数据以及用户之间的关系数据,比如A用户的好友列表会展示出他所有的好友,现有一张Hbase表,存储就是当前 ...
- Spring Cloud Alibaba+Nacos搭建微服务架构
1. Spring Cloud Alibaba 简介 Spring Cloud Alibaba是阿里巴巴为分布式应用提供的一站式解决方案,能够更方便快捷地搭建分布式平台,nacos拥有着替换eu ...
- 技术分享: CSS3 系列
技术分享: CSS3 系列 css 一键换肤 css 打印样式,媒体查询 css 禁用选择 css 性能优化 css 计算单位 css 3D 特效 refs xgqfrms 2012-2020 www ...
- macOS & Catalina vs Big Sur
macOS & Catalina vs Big Sur 乍一看,macOS的色彩更加丰富,最大的变化就是明亮,略带卡通风格的iOS形状的图标. 一切都变得更加圆润,感觉一切都变得更大了. 这可 ...
- YouTube 视频下载工具
YouTube 视频下载工具 我不生产视频,只是优秀视频的搬运工! YouTube-dl https://github.com/search?q=youtube-dl https://github.c ...
- Set-Cookie & Secure & HttpOnly & SameSite
Set-Cookie & Secure & HttpOnly & SameSite HTTP/Headers/Set-Cookie Set-Cookie https://dev ...
- MBP 2018
MBP 2018 touch pad MacBook Pro 如何调节键盘背光 https://support.apple.com/zh-cn/HT202310 F6 & F5 如何清洁 Ma ...
- Apple Watch Series 6 全天候视网膜显示屏和全天候高度计是什么鬼
Apple Watch Series 6 全天候视网膜显示屏和全天候高度计是什么鬼 Apple Watch Series 6 / Apple Watch Series 5 全天候视网膜显示屏 LTPO ...
- Web 全栈开发 Redis 面试题
Web 全栈开发 Redis 面试题 Redis 大 key 问题 https://www.cnblogs.com/xgqfrms/p/13601959.html Redis 数据结构 Redis 初 ...