热门标签 | 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 集群的日志收集、分析和可视化。


推荐阅读
  • 科研单位信息系统中的DevOps实践与优化
    本文探讨了某科研单位通过引入云原生平台实现DevOps开发和运维一体化,显著提升了项目交付效率和产品质量。详细介绍了如何在实际项目中应用DevOps理念,解决了传统开发模式下的诸多痛点。 ... [详细]
  • docker镜像重启_docker怎么启动镜像dock ... [详细]
  • Kubernetes 实践指南:初次体验
    本文介绍了如何通过官方提供的简易示例,快速上手 Kubernetes (K8S),并深入理解其核心概念和操作流程。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • 本文详细介绍了 Kubernetes 集群管理工具 kubectl 的基本使用方法,涵盖了一系列常用的命令及其应用场景,旨在帮助初学者快速掌握 kubectl 的基本操作。 ... [详细]
  • 全能终端工具推荐:高效、免费、易用
    介绍一款备受好评的全能型终端工具——MobaXterm,它不仅功能强大,而且完全免费,适合各类用户使用。 ... [详细]
  • 前言Git是目前最流行的版本控制系统,在它的基础之上,GitHub和GitLab成为当前最流行的代码托管平台,它们均提供的代码评审、项目管理、持续集成等功能,越来越多的互联网企业都 ... [详细]
  • 深入解析 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 次。 ... [详细]
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
  • 深入解析Serverless架构模式
    本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • Kubernetes与Docker cgroup驱动不匹配问题及解决方案
    当Kubernetes (k8s) 的cgroup驱动设置为systemd,而Docker使用的是cgroupfs时,这种不一致性可能导致kubectl命令执行失败。本文将详细介绍如何检查和调整Docker的cgroup驱动以确保与Kubernetes兼容。 ... [详细]
  • 本文探讨了在CentOS操作系统中遇到的Docker服务启动失败以及Docker命令无响应的问题,并提供了一套详细的排查与解决步骤。 ... [详细]
  • 本文将详细介绍Docker的网络架构,包括Docker自带的几种网络模式及其创建方法,探讨容器间及容器与外部世界的通信方式。此外,还将简要介绍单主机环境下的容器网络配置。 ... [详细]
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社区 版权所有