热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

EFKLK日志采集工具链部署指南

本文档详细介绍了如何构建和配置EFKLK(Elasticsearch,Fluentd,Kibana,Kafka)日志采集工具链,包括命名空间创建、Elasticsearch镜像拉取与容器运行、证书生成及配置、Helm安装等步骤。

首先,我们需要创建一个命名空间来管理所有的日志相关组件:

kubectl create namespace logging

接着,拉取 Elasticsearch 的 Docker 镜像,并运行一个临时容器来生成必要的 SSL 证书:

docker pull elasticsearch:7.13.1
# 启动容器生成证书
docker run --rm --name elasticsearch-certgen -it --entrypoint=/bin/sh elasticsearch:7.13.1 -c \
"elasticsearch-certutil ca --out /tmp/elastic-stack-ca.p12 --pass '' && \
elasticsearch-certutil cert --name security-node --dns security-node --ca /tmp/elastic-stack-ca.p12 --pass '' --ca-pass '' --out /tmp/elastic-certificates.p12"
# 将证书复制到主机
docker cp elasticsearch-certgen:/tmp/elastic-certificates.p12 ./
# 清理容器
docker rm -f elasticsearch-certgen
# 将 PKCS12 证书转换为 PEM 格式
openssl pkcs12 -nodes -passin pass:'' -in elastic-certificates.p12 -out elastic-certificate.pem

然后,使用 Kubernetes Secret 对象存储这些证书以及 Elasticsearch 的访问凭证:

kubectl create secret generic elastic-certs --from-file=elastic-certificates.p12 -n logging
kubectl create secret generic elastic-auth --from-literal=username=elastic --from-literal=password=your_password -n logging

为了方便管理和部署,我们将使用 Helm 来安装 Elasticsearch 和其他组件。首先,添加官方的 Helm 仓库并更新本地缓存:

helm repo add elastic https://helm.elastic.co
helm repo update

下载 Elasticsearch 的 Helm Chart 并解压,进入目录后,根据需要编辑配置文件,如 values-master.yamlvalues-data.yamlvalues-client.yaml,设置集群名称、节点角色、资源请求等参数。例如,对于主节点,配置可能如下所示:

clusterName: "elasticsearch"
nodeGroup: "master"
roles:
master: "true"
ingest: "false"
data: "false"
image: "elasticsearch"
imageTag: "7.13.1"
replicas: 3
resources:
requests:
cpu: "2000m"
memory: "2Gi"
limits:
cpu: "2000m"
memory: "2Gi"
persistence:
enabled: true
volumeClaimTemplate:
storageClassName: "csi-rbd-sc"
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
protocol: http
secretMounts:
- name: elastic-certs
secretName: elastic-certs
path: "/usr/share/elasticsearch/config/certs"
esConfig:
elasticsearch.yml: |
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: "/usr/share/elasticsearch/config/certs/elastic-certificates.p12"
xpack.security.transport.ssl.truststore.path: "/usr/share/elasticsearch/config/certs/elastic-certificates.p12"
extraEnvs:
- name: ELASTIC_USERNAME
valueFrom:
secretKeyRef:
name: elastic-auth
key: username
- name: ELASTIC_PASSWORD
valueFrom:
secretKeyRef:
name: elastic-auth
key: password
antiAffinity: "soft"
tolerations:
- operator: "Exists"

使用 Helm 安装各个组件:

helm install es-master -f values-master.yaml -n logging .
helm install es-data -f values-data.yaml -n logging .
helm install es-client -f values-client.yaml -n logging .

同样地,对于 Kibana 的配置,创建或编辑 values-prod.yaml 文件,设置 Kibana 的镜像、Elasticsearch 的连接地址、资源请求等参数:

image: "kibana"
imageTag: "7.13.2"
elasticsearchHosts: "http://es-client:9200"
extraEnvs:
- name: "ELASTICSEARCH_USERNAME"
valueFrom:
secretKeyRef:
name: elastic-auth
key: username
- name: "ELASTICSEARCH_PASSWORD"
valueFrom:
secretKeyRef:
name: elastic-auth
key: password
resources:
requests:
cpu: "500m"
memory: "1Gi"
limits:
cpu: "500m"
memory: "1Gi"
kibanaConfig:
kibana.yml: |
i18n.locale: "zh-CN"
service:
type: NodePort
nodePort: "30601"

最后,使用 Helm 安装 Kibana:

helm install kibana -f values-prod.yaml -n logging .

为了收集和转发 Kubernetes 集群中的日志,我们还需要配置 Fluentd。创建一个 ConfigMap 对象来定义 Fluentd 的配置文件,例如 fluentd-conf.yaml

apiVersion: v1
kind: ConfigMap
metadata:
name: fluentd-conf
namespace: logging
data:
containers.input.conf: |

@id fluentd-containers.log
@type tail
path /var/log/containers/*.log
pos_file /var/log/es-containers.log.pos
tag raw.kubernetes.*
read_from_head true

@type multi_format

format json
time_key time
time_format %Y-%m-%dT%H:%M:%S.%NZ


format /^(?



forward.input.conf: |

@id forward
@type forward

output.conf: |

@id elasticsearch
@type elasticsearch
@log_level info
include_tag_key true
host es-client
port 9200
user elastic
password your_password
logstash_format true
logstash_prefix k8s
request_timeout 30s

@type file
path /var/log/fluentd-buffers/kubernetes.system.buffer
flush_mode interval
retry_type exponential_backoff
flush_thread_count 2
flush_interval 5s
retry_forever
retry_max_interval 30
chunk_limit_size 2M
queue_limit_length 8
overflow_action block

此外,还可以根据需要定制 Fluentd 的 Dockerfile,以包含额外的插件,如 Kafka 支持:

cat <FROM quay.io/fluentd_elasticsearch/fluentd:v3.2.0
RUN echo "source 'https://mirrors.tuna.tsinghua.edu.cn/rubygems/'" > Gemfile && gem install bundler
RUN gem install fluent-plugin-kafka -v 0.16.1 --no-document
EOF
docker build -t ecloudedu/fluentd-kafka:v3.2.0 .
docker push ecloudedu/fluentd-kafka:v3.2.0

通过上述步骤,您可以成功部署 EFKLK 日志采集工具链,实现 Kubernetes 集群的日志收集、分析和可视化。


推荐阅读
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • Kubernetes 实践指南:初次体验
    本文介绍了如何通过官方提供的简易示例,快速上手 Kubernetes (K8S),并深入理解其核心概念和操作流程。 ... [详细]
  • 本文详细介绍了 Kubernetes 集群管理工具 kubectl 的基本使用方法,涵盖了一系列常用的命令及其应用场景,旨在帮助初学者快速掌握 kubectl 的基本操作。 ... [详细]
  • 全能终端工具推荐:高效、免费、易用
    介绍一款备受好评的全能型终端工具——MobaXterm,它不仅功能强大,而且完全免费,适合各类用户使用。 ... [详细]
  • 前言Git是目前最流行的版本控制系统,在它的基础之上,GitHub和GitLab成为当前最流行的代码托管平台,它们均提供的代码评审、项目管理、持续集成等功能,越来越多的互联网企业都 ... [详细]
  • Docker入门与实践指南
    本文介绍了Docker的基础知识,包括其作为开源应用容器引擎的特点,以及如何利用Docker将应用程序及其依赖项打包成轻量级的容器镜像。同时,还详细讲解了Docker的核心概念、安装过程及基本命令操作。 ... [详细]
  • 本文探讨了亚马逊Go如何通过技术创新推动零售业的发展,以及面临的市场和隐私挑战。同时,介绍了亚马逊最新的‘刷手支付’技术及其潜在影响。 ... [详细]
  • Java性能优化指南 | 制定有效的性能优化策略
    探讨Java应用性能优化的方法与策略,包括性能测试技巧、常见问题及解决方案,旨在帮助开发者提升系统性能。 ... [详细]
  • Alluxio 1.5.0 版本发布:增强功能与优化
    Alluxio 1.5.0 开源版本引入了多项新特性和改进,旨在提升数据访问速度和系统互操作性。 ... [详细]
  • 深入解析 RuntimeClass 及多容器运行时应用
    本文旨在探讨RuntimeClass的起源、功能及其在多容器运行时环境中的实际应用。通过详细的案例分析,帮助读者理解如何在Kubernetes集群中高效管理不同类型的容器运行时。 ... [详细]
  • Kubernetes 1.9.0 Alpha.1 发布公告 [Kubernetes 最新动态]
    近日,Kubernetes 社区发布了两个新版本:1.8.0 RC.1 和 1.9.0 Alpha.1。这是 k8s 1.9.0 的首次发布,自 v1.8.0 Alpha.3 以来进行了大量更新,共提交了 279 次。 ... [详细]
  • Docker基础指南与核心命令解析
    本文全面介绍了Docker的基本概念、安装方法、核心命令及其用法,并深入探讨了Docker容器的数据卷管理及应用部署策略,适合初学者快速掌握Docker技术。 ... [详细]
  • Jenkins更新指南
    本文档详细介绍了如何准备和执行Jenkins的升级过程,包括从官方源下载最新镜像、镜像的本地处理与上传至私有仓库,以及通过修改配置文件和重启服务完成Jenkins的版本更新。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 像跟踪分布式服务调用那样跟踪Go函数调用链 | Gopher Daily (2020.12.07) ʕ◔ϖ◔ʔ
    每日一谚:“Acacheisjustamemoryleakyouhaven’tmetyet.”—Mr.RogersGo技术专栏“改善Go语⾔编程质量的50个有效实践” ... [详细]
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社区 版权所有