热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

k8s日志收集之EFK

如今越来越多的应用部署在容器之中,如何收集日志也是一个很重要的问题。服务出问题了,排查问题需要给开发看日志。服务一般会在多个不同的pod中,一个一个的登进去看也的确不方便。业务数据
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

 


推荐阅读
  • ElasticSearch成功安装完毕。 测试数据添加出现{  error:{    root_cause ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了sqlserver云存储和本地存储的区别,云存储是将数据存储在网络上,方便查看和调用;本地存储是将数据存储在电脑磁盘上,只能在存储的电脑上查看。同时提供了几种启动sqlserver的方法。此外,还介绍了如何导出数据库的步骤和工具。 ... [详细]
  • Windows简单部署Exceptionless
    部署准备Elasticsearch、Exceptionless.API、Exceptionless.UI、URLRewrite、.NET运行时 1、安装ElasticSearch1 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • MACElasticsearch安装步骤及验证方法
    本文介绍了MACElasticsearch的安装步骤,包括下载ZIP文件、解压到安装目录、启动服务,并提供了验证启动是否成功的方法。同时,还介绍了安装elasticsearch-head插件的方法,以便于进行查询操作。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文介绍了使用postman操作ElasticSearch的步骤,包括下载安装postman、发送http请求给ElasticSearch、添加索引等操作。详细介绍了postman的安装和配置,以及如何使用postman发送http请求给ElasticSearch,并添加索引。通过本文的指导,读者可以快速上手使用postman操作ElasticSearch。 ... [详细]
  • ElasticSerach初探第一篇认识ES+环境搭建+简单MySQL数据同步+SpringBoot整合ES
    一、认识ElasticSearch是一个基于Lucene的开源搜索引擎,通过简单的RESTfulAPI来隐藏Lucene的复杂性。全文搜索,分析系统&# ... [详细]
  • 此版本重点升级了Online代码生成器,支持更多的控件生成,所见即所得,极大的提高开发效率;同时做了数据库兼容专项工作,让Online开发兼容更多数据库:Mysql、SqlServer、Oracle、Postgresql等!!!项目介绍 ... [详细]
author-avatar
火云邪神
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有