温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Centos7下如何快速部署EFK服务

发布时间:2022-02-17 10:05:36 来源:亿速云 阅读:204 作者:iii 栏目:开发技术
# CentOS7下如何快速部署EFK服务 ## 前言 在当今大数据时代,日志管理已成为IT系统运维和业务分析的重要环节。传统的日志管理方式如直接查看日志文件、使用grep等命令进行简单过滤已经无法满足企业级应用的需求。EFK(Elasticsearch + Fluentd + Kibana)堆栈作为新一代的日志收集、存储和可视化解决方案,凭借其高性能、可扩展性和易用性,已成为众多企业的首选方案。 本文将详细介绍在CentOS7操作系统下如何快速部署EFK服务,涵盖从环境准备到各个组件的安装配置,再到最终的集成测试全过程。通过本文的指导,读者可以在短时间内搭建起一套完整的日志管理系统,满足企业级日志处理需求。 ## 第一章:EFK架构概述 ### 1.1 EFK组件介绍 EFK由三个核心组件组成,每个组件承担不同的角色: 1. **Elasticsearch**:分布式搜索和分析引擎,负责日志的存储、索引和检索 - 基于Lucene构建,提供近实时的搜索能力 - 支持水平扩展,可处理PB级数据 - 提供RESTful API接口,便于集成 2. **Fluentd**:开源数据收集器,负责日志的收集、过滤和转发 - 采用插件式架构,支持多种输入输出方式 - 提供强大的日志过滤和转换能力 - 内存占用低,性能优异 3. **Kibana**:数据可视化平台,提供日志分析和展示功能 - 丰富的图表类型和仪表板功能 - 支持交互式查询和数据分析 - 用户友好的界面,降低使用门槛 ### 1.2 EFK与传统方案的对比 相比传统的ELK(使用Logstash)架构,EFK具有以下优势: | 特性 | EFK (Fluentd) | ELK (Logstash) | |---------------|---------------------|---------------------| | 资源占用 | 内存占用低(~40MB) | 内存占用高(~500MB) | | 性能 | 高吞吐量 | 相对较低 | | 可靠性 | 内置重试机制 | 需要额外配置 | | 部署复杂度 | 简单 | 较复杂 | | 插件生态 | 丰富 | 非常丰富 | ### 1.3 EFK工作流程 典型的EFK日志处理流程如下: 1. **日志收集**:Fluentd从各种数据源(应用日志、系统日志、网络设备日志等)收集日志数据 2. **日志处理**:Fluentd对收集到的日志进行解析、过滤和格式化 3. **日志存储**:处理后的日志被发送到Elasticsearch进行索引和存储 4. **日志展示**:用户通过Kibana查询、分析和可视化日志数据 ## 第二章:环境准备 ### 2.1 系统要求 在开始部署前,请确保您的CentOS7系统满足以下要求: - **硬件配置**: - 最低配置:2核CPU,4GB内存,50GB磁盘空间 - 生产环境推荐:8核CPU,16GB内存,500GB+ SSD存储 - **软件环境**: - CentOS 7.6或更高版本 - JDK 11或更高版本(Elasticsearch依赖) - Ruby 2.4+(Fluentd依赖) ### 2.2 系统初始化配置 #### 2.2.1 更新系统 ```bash sudo yum update -y sudo yum install -y epel-release 

2.2.2 关闭SELinux

sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config 

2.2.3 防火墙配置

sudo systemctl start firewalld sudo firewall-cmd --add-port={9200/tcp,5601/tcp,24224/tcp,24224/udp} --permanent sudo firewall-cmd --reload 

2.2.4 优化系统参数

编辑/etc/sysctl.conf,添加以下内容:

vm.max_map_count=262144 fs.file-max=65536 

应用配置:

sudo sysctl -p 

2.3 安装Java环境

Elasticsearch依赖Java环境,推荐安装OpenJDK 11:

sudo yum install -y java-11-openjdk java-11-openjdk-devel 

验证安装:

java -version 

第三章:Elasticsearch安装与配置

3.1 安装Elasticsearch

3.1.1 添加Elasticsearch仓库

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch 

创建仓库文件/etc/yum.repos.d/elasticsearch.repo

[elasticsearch-7.x] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md 

3.1.2 安装Elasticsearch

sudo yum install -y elasticsearch 

3.1.3 配置Elasticsearch

编辑主配置文件/etc/elasticsearch/elasticsearch.yml

cluster.name: efk-cluster node.name: node-1 path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch network.host: 0.0.0.0 http.port: 9200 discovery.seed_hosts: ["127.0.0.1"] cluster.initial_master_nodes: ["node-1"] bootstrap.memory_lock: true 

配置JVM参数(/etc/elasticsearch/jvm.options):

-Xms2g -Xmx2g 

3.1.4 启动Elasticsearch

sudo systemctl daemon-reload sudo systemctl enable elasticsearch sudo systemctl start elasticsearch 

3.1.5 验证安装

curl -X GET "localhost:9200/" 

正常输出示例:

{ "name" : "node-1", "cluster_name" : "efk-cluster", "cluster_uuid" : "xxxxxxxx", "version" : { "number" : "7.10.2", "build_flavor" : "default", "build_type" : "rpm", "build_hash" : "xxxxxx", "build_date" : "2021-01-13T00:42:12.435326Z", "build_snapshot" : false, "lucene_version" : "8.7.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" } 

3.2 Elasticsearch优化配置

3.2.1 内存锁定配置

编辑/etc/systemd/system/multi-user.target.wants/elasticsearch.service,添加:

[Service] LimitMEMLOCK=infinity 

重新加载配置:

sudo systemctl daemon-reload sudo systemctl restart elasticsearch 

3.2.2 索引生命周期管理

对于日志类数据,建议配置索引生命周期策略:

curl -X PUT "localhost:9200/_ilm/policy/log_policy" -H 'Content-Type: application/json' -d' { "policy": { "phases": { "hot": { "actions": { "rollover": { "max_size": "50GB", "max_age": "30d" } } }, "delete": { "min_age": "90d", "actions": { "delete": {} } } } } } ' 

第四章:Fluentd安装与配置

4.1 安装Fluentd

4.1.1 通过td-agent安装

curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent4.sh | sh 

4.1.2 安装必要插件

sudo /usr/sbin/td-agent-gem install fluent-plugin-elasticsearch sudo /usr/sbin/td-agent-gem install fluent-plugin-multi-format-parser 

4.2 配置Fluentd

编辑主配置文件/etc/td-agent/td-agent.conf

<source> @type forward port 24224 bind 0.0.0.0 </source> <source> @type tail path /var/log/messages pos_file /var/log/td-agent/syslog.log.pos tag system.syslog <parse> @type syslog </parse> </source> <filter system.**> @type record_transformer <record> hostname ${hostname} </record> </filter> <match system.**> @type elasticsearch host localhost port 9200 logstash_format true logstash_prefix system logstash_dateformat %Y.%m.%d include_tag_key true type_name fluentd <buffer> @type file path /var/log/td-agent/buffer/elasticsearch flush_interval 10s </buffer> </match> 

4.3 启动Fluentd服务

sudo systemctl enable td-agent sudo systemctl start td-agent 

4.4 测试日志收集

发送测试日志:

echo '{"message":"test log"}' | fluent-cat debug.test 

检查Elasticsearch中是否已创建索引:

curl -X GET "localhost:9200/_cat/indices?v" 

第五章:Kibana安装与配置

5.1 安装Kibana

sudo yum install -y kibana 

5.2 配置Kibana

编辑配置文件/etc/kibana/kibana.yml

server.port: 5601 server.host: "0.0.0.0" server.name: "efk-kibana" elasticsearch.hosts: ["http://localhost:9200"] kibana.defaultAppId: "discover" logging.dest: /var/log/kibana/kibana.log 

5.3 启动Kibana

sudo systemctl enable kibana sudo systemctl start kibana 

5.4 访问Kibana

在浏览器中访问:http://<your-server-ip>:5601

第六章:EFK集成与测试

6.1 配置索引模式

  1. 登录Kibana后,进入”Management” > “Stack Management”
  2. 选择”Index Patterns” > “Create index pattern”
  3. 输入索引模式名称:system-*
  4. 选择时间字段:@timestamp
  5. 点击”Create index pattern”

6.2 日志查询测试

  1. 进入”Discover”页面
  2. 选择system-*索引模式
  3. 查看收集到的系统日志

6.3 创建仪表板

  1. 进入”Dashboard” > “Create dashboard”
  2. 添加可视化组件:
    • 添加”Data Table”展示日志详情
    • 添加”Pie Chart”展示日志类型分布
    • 添加”Line Chart”展示日志时间分布
  3. 保存仪表板

第七章:高级配置与优化

7.1 Fluentd性能优化

7.1.1 多worker配置

<system> workers 4 </system> 

7.1.2 缓冲区优化

<match system.**> @type elasticsearch # ...其他配置... <buffer> @type file path /var/log/td-agent/buffer/elasticsearch chunk_limit_size 8MB total_limit_size 4GB flush_interval 5s retry_max_interval 30 retry_forever true </buffer> </match> 

7.2 Elasticsearch集群配置

7.2.1 添加新节点

在其他服务器上重复Elasticsearch安装步骤,修改配置文件:

cluster.name: efk-cluster node.name: node-2 discovery.seed_hosts: ["node1-ip"] cluster.initial_master_nodes: ["node-1"] 

7.2.2 分片与副本配置

curl -X PUT "localhost:9200/_template/log_template" -H 'Content-Type: application/json' -d' { "index_patterns": ["system-*"], "settings": { "number_of_shards": 3, "number_of_replicas": 1 } } ' 

7.3 安全配置

7.3.1 启用Elasticsearch安全功能

编辑elasticsearch.yml

xpack.security.enabled: true xpack.security.transport.ssl.enabled: true 

设置密码:

sudo /usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive 

7.3.2 配置Kibana使用认证

编辑kibana.yml

elasticsearch.username: "kibana_system" elasticsearch.password: "your_password" 

第八章:常见问题排查

8.1 Elasticsearch常见问题

问题1:启动失败,报错”max virtual memory areas vm.max_map_count [65530] is too low”

解决方案:

sudo sysctl -w vm.max_map_count=262144 

问题2:节点无法加入集群

检查: - 网络连通性 - 集群名称是否一致 - discovery.seed_hosts配置是否正确

8.2 Fluentd常见问题

问题1:日志未发送到Elasticsearch

检查:

sudo tail -f /var/log/td-agent/td-agent.log 

常见原因: - Elasticsearch服务不可达 - 缓冲区已满 - 网络防火墙阻止

问题2:高负载导致日志延迟

解决方案: - 增加Fluentd worker数量 - 调整缓冲区大小 - 考虑使用Fluent Bit作为轻量级替代

8.3 Kibana常见问题

问题1:无法连接到Elasticsearch

检查: - Elasticsearch服务状态 - Kibana配置中的Elasticsearch地址 - 安全认证配置

问题2:仪表板加载缓慢

优化建议: - 减少一次显示的数据量 - 使用索引模式过滤不必要的数据 - 增加Kibana服务器资源

第九章:生产环境最佳实践

9.1 架构设计建议

  • 小型环境:单节点部署所有组件
  • 中型环境:分离Elasticsearch和数据节点
  • 大型环境
    • 专用Master节点(3个)
    • 多个Data节点
    • 独立的Ingest节点
    • 独立的Kibana节点

9.2 监控方案

9.2.1 Elasticsearch监控

启用内置监控:

xpack.monitoring.enabled: true xpack.monitoring.elasticsearch.collection.enabled: true 

9.2.2 使用Prometheus监控EFK

配置Fluentd暴露Prometheus指标:

<source> @type prometheus port 24231 </source> <source> @type prometheus_output_monitor interval 10 </source> 

9.3 备份与恢复策略

9.3.1 使用快照备份

配置共享存储:

path.repo: ["/mnt/elasticsearch_backups"] 

创建仓库:

curl -X PUT "localhost:9200/_snapshot/my_backup" -H 'Content-Type: application/json' -d' { "type": "fs", "settings": { "location": "/mnt/elasticsearch_backups" } } ' 

创建快照:

curl -X PUT "localhost:9200/_snapshot/my_backup/snapshot_1?wait_for_completion=true" 

第十章:扩展与进阶

10.1 收集Docker容器日志

配置Fluentd收集Docker日志:

<source> @type forward port 24224 bind 0.0.0.0 </source> <source> @type tail path /var/lib/docker/containers/*/*-json.log pos_file /var/log/td-agent/docker.log.pos tag docker.* <parse> @type json time_key time time_format %Y-%m-%dT%H:%M:%S.%NZ </parse> </source> 

10.2 收集Kubernetes日志

使用Fluentd DaemonSet部署:

”`yaml apiVersion: apps/v1 kind: DaemonSet metadata: name: fluentd namespace: logging spec: selector: matchLabels: app: fluentd template: metadata: labels: app: fluentd spec: containers: - name: fluentd image: fluent/fluentd-kubernetes-daemonset:v1.11.5-debian-elasticsearch7-1.0 env: - name: FLUENT_ELASTICSEARCH_HOST value: “elasticsearch.logging.svc.cluster.local” - name: FLUENT_ELASTICSEARCH_PORT value: “920

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI