ELK企业级日志分析平台3——ES数据备份 集群监控 ELFK+Kafka 架构部署
1 ES数据备份与恢复1.1 配置快照仓库nfsnfs 服务端配置[rootserver4 ~]# yum install -y nfs-utils[rootserver4 ~]# mkdir -p /data/es-backup# 创建ES快照专用存储目录[rootserver4 ~]# chmod 777 /data/es-backup/# 给目录最高读写权限避免ES权限不足无法写入快照[rootserver4 ~]# vim /etc/exports# 共享目录允许所有客户端访问[rootserver4 ~]# exportfs -rv# 设置NFS开机自启并立即启动NFS服务[rootserver4 ~]# systemctl enable --now nfsES节点配置[rootserver1 ~]# yum install -y nfs-utils[rootserver1 ~]# mkdir -p /data/es-backup# 创建本地挂载目录和NFS服务端共享目录同名统一快照存储路径[rootserver1 ~]# mount 192.168.40.144:/data/es-backup /data/es-backup# 挂载NFS服务端共享目录[rootserver1 ~]# vim /etc/elasticsearch/elasticsearch.yml# 声明ES允许创建快照仓库的本地目录[rootserver1 ~]# systemctl restart elasticsearchserver2和server3同上滚动重启ES集群重启之后恢复默认值1.2 通过 API 创建仓库验证仓库是否创建成功在 cerebro 页面也可查看到1.3 快照管理创建快照备份所有索引备份指定索引列出仓库中所有快照查看单个快照详情监控快照进度恢复快照删除快照只剩 syslog 的快照2 ES集群监控2.1 启用xpack认证X-Pack 是 Elastic 官方为 Elastic Stack包括 Elasticsearch、Kibana 等打造的一个扩展组件包为原本开源的 Elasticsearch 补充了大量企业级和运维管理所需的高级特性。核心功能安全 (Security)提供用户身份验证、基于角色的访问控制RBAC、节点间加密通信以及审计日志等。它能有效防止未授权访问和数据泄露。监控 (Monitoring)提供集群、节点、索引等维度的实时性能监控和可视化。这就是你之前看到的 Kibana 监控页面的数据来源。告警 (Alerting / Watcher)允许你基于数据或集群状态的变化设置条件触发邮件、Webhook等多种方式的告警通知。机器学习 (Machine Learning)提供自动异常检测和预测能力无需复杂算法就能发现数据中的规律和异常。SQL允许你使用标准的 SQL 语句来查询 Elasticsearch 中的数据降低了使用门槛。图表分析 (Graph)用于探索数据实体间的关联关系适合知识图谱等场景。报告 (Reporting)可以将 Kibana 的可视化图表生成 PDF 等格式的报告。在server1上生成证书[rootserver1 ~]# cd /usr/share/elasticsearch/[rootserver1 elasticsearch]# bin/elasticsearch-certutil ca#设置密码为空[rootserver1 elasticsearch]# bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12[rootserver1 elasticsearch]# cp elastic-certificates.p12 /etc/elasticsearch[rootserver1 elasticsearch]# cd /etc/elasticsearch/[rootserver1 elasticsearch]# chown elasticsearch elastic-certificates.p12[rootserver1 elasticsearch]# vim elasticsearch.yml[rootserver1 elasticsearch]# systemctl restart elasticsearch.service拷贝证书到其它集群节点[rootserver1 elasticsearch]# scp elastic-certificates.p12 server2:/etc/elasticsearch/[rootserver1 elasticsearch]# scp elastic-certificates.p12 server3:/etc/elasticsearch/server2配置[rootserver2 ~]# chown elasticsearch /etc/elasticsearch/elastic-certificates.p12[rootserver2 ~]# vim /etc/elasticsearch/elasticsearch.yml[rootserver2 ~]# systemctl restart elasticsearch.service1.xpack.security.enabled:true开启 Xpack 安全认证开启后访问 ES 必须账号密码2.xpack.security.transport.ssl.enabled:true开启集群内部通信 SSL 加密节点之间数据传输加密防止抓包窃取分片数据3.xpack.security.transport.ssl.verification_mode: certificate证书校验模式校验对方节点证书合法性拒绝无证书 / 非法证书节点加入集群4.xpack.security.transport.ssl.keystore.path密钥库路径存放当前节点私钥 证书用于对外通信加密5.xpack.security.transport.ssl.truststore.path信任库路径存放集群所有节点的公钥证书用来验证其他节点身份server3同server2等待所有集群节点重启成功后设置认证账户密码[rootserver1 elasticsearch]# cd /usr/share/elasticsearch/[rootserver1 elasticsearch]# bin/elasticsearch-setup-passwords interactive#为了方便这里我的密码全部设置的一样的ES启用xpack之后其它服务都需要配置认证用户名 elastic 密码为自行设置的密码head插件在访问时需要在url中输入用户和密码[rootserver4 ~]# cd elasticsearch-head-master/[rootserver4 elasticsearch-head-master]# npm run start 访问http://192.168.40.144:9100/?auth_userelasticauth_passwordwestos配置 logstash 访问将账户和密码写进配置文件[rootserver5 ~]# cd /etc/logstash/conf.d/[rootserver5 conf.d]# vim beats.conf启动程序[rootserver5 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/beats.conf配置 kibana 访问[rootserver4 elasticsearch-head-master]# cd /etc/kibana/[rootserver4 kibana]# vim kibana.yml[rootserver4 kibana]# systemctl restart kibana.service区分两个账户和密码kibana.yml里的 kibana 账号后台服务账号yamlelasticsearch.username:kibanaelasticsearch.password:westos作用Kibana 程序自己后台连接 ES 用Kibana 启动时自动用这个账号去 ES 创建 / 维护.kibana索引、保存仪表盘、搜索记录、空间配置权限很低只允许操作 Kibana 专属索引不能用来网页登录全程后台自动执行浏览器看不到这个账号。网页登录的 elastic 账号超级管理员账号作用人手动登录页面、操作业务数据内置最高权限超级账号能查所有索引、创建用户、修改权限、集群配置打开192.168.40.144:5601弹出的登录框需要输入用户名elastic这个账号不会写到 kibana.yml 配置里。测试[rootserver1 elasticsearch]# ab -c1 -n 100 http://192.168.40.144/index.html[rootserver2 ~]# ab -c1 -n 200 http://192.168.40.144/index.htmlserver5终端有日志打印输出2.2 metricbeat 监控Metricbeat 是 Elastic Stack 中的轻量指标采集器属于 Beats 家族专门采集服务器、中间件、数据库性能监控指标不采集日志。核心作用采集系统指标CPU、内存、磁盘、网络、负载组件监控ES、Logstash、MySQL、Nginx、Redis 运行状态输出到 Elasticsearch搭配 Cerebro/Kibana 做监控面板已经检测到 Elasticsearch 节点选择启动metricbeat的节点然后根据提示步骤操作将metricbeat-7.6.1-x86_64.rpm上传到server1的/root[rootserver1 ~]# scp metricbeat-7.6.1-x86_64.rpm server2:[rootserver1 ~]# scp metricbeat-7.6.1-x86_64.rpm server3:[rootserver1 ~]# rpm -ivh metricbeat-7.6.1-x86_64.rpm[rootserver1 ~]# cd /etc/metricbeat/modules.d/[rootserver1 modules.d]# metricbeat modules enable elasticsearch-xpack# 开启 elasticsearch-xpack 监控模块采集 ES 性能数据[rootserver1 modules.d]# vim elasticsearch-xpack.yml# ES 开启了 xpack 安全认证Metricbeat 访问 ES 接口必须携带管理员账号密码否则采集指标会报错[rootserver1 modules.d]# cd ..[rootserver1 metricbeat]# vim metricbeat.yml# 指定采集到的监控指标最终写入的 ES 服务地址所有监控数据统一存入该 ES 集群同样Metricbeat 写入数据必须携带管理员账号密码[rootserver1 metricbeat]# systemctl enable --now metricbeat.service等待 kibana 页面响应出现如下界面即为成功server2配置[rootserver2 ~]# rpm -ivh metricbeat-7.6.1-x86_64.rpm[rootserver2 ~]# cd /etc/metricbeat/modules.d[rootserver2 modules.d]# metricbeat modules enable elasticsearch-xpack[rootserver2 modules.d]# vim elasticsearch-xpack.yml[rootserver2 modules.d]# cd ..[rootserver2 metricbeat]# vim metricbeat.yml[rootserver2 metricbeat]# systemctl enable --now metricbeat.serviceserver3同server2三个节点都设置好后退出设置模式已经可以监测到数据2.3 ES 日志采集安装 filebeat 并修改配置文件[rootserver1 ~]# rpm -ivh filebeat-7.6.1-x86_64.rpm[rootserver1 ~]# cd /etc/filebeat/modules.d[rootserver1 modules.d]# filebeat modules enable elasticsearch[rootserver1 modules.d]# vim elasticsearch.yml在文件顶端的网址可以获取要配置的内容配置 filebeat 输出到 ES[rootserver1 modules.d]# cd ..[rootserver1 filebeat]# vim filebeat.yml[rootserver1 filebeat]# systemctl enable --now filebeat.service已经可以看到server1的日志server2和server3以此类推即可看到三个节点的日志3 ELFK Kafka 架构部署ELFK Elasticsearch Logstash Filebeat Kibana中间引入 Kafka 消息队列形成Filebeat → Kafka → Logstash → Elasticsearch ← Kibana高可用日志架构。Kafka 日志缓冲中间件核心作用1削峰填谷保护后端服务业务高峰期如秒杀、接口大量报错会瞬间产生海量日志。无 Kafka日志全部直打 Logstash瞬间流量过载会导致 Logstash 阻塞、宕机日志丢失有 Kafka突发日志先存入 Kafka 队列缓存Logstash 按自身性能匀速消费不会被峰值流量打垮。2生产消费解耦两端互不依赖Filebeat生产者只负责把日志丢进 Kafka不用关心 Logstash 是否在线、是否故障Logstash消费者可以随意启停、扩容、更新配置期间日志全部存在 Kafka不会丢失两者独立运行任意一端维护不影响另一端工作。3日志持久化兜底防止数据丢失Kafka 会把日志磁盘持久化 多副本存储可自定义保存时长7 天 / 30 天。如果 Logstash、ES 集群故障停机日志会完整保存在 Kafka服务恢复后 Logstash 能接着断点消费不会丢日志。4多消费复用一套日志同一个 Kafka 日志主题topic可以搭建多组消费端一组 Logstash 清洗日志存入 ES用于运维查询另一套程序读取日志做安全审计、大数据统计不用让 Filebeat 重复推送多份日志节省服务器带宽与资源。新开server6、server7、server8在各台机器上的/etc/hosts中加入解析server6配置[rootserver6 ~]# rpm -ivh jdk-17.0.17_linux-x64_bin.rpm[rootserver6 ~]# tar zxf kafka_2.12-3.9.1.tgz -C /opt[rootserver6 ~]# mv /opt/kafka_2.12-3.9.1 /opt/kafka[rootserver6 ~]# cd /opt/kafka/config/kraft[rootserver6 kraft]# cp server.properties{,.bak}# 备份配置文件[rootserver6 kraft]# mkdir /opt/kafka/logs[rootserver6 kraft]# vim server.properties将修改好的配置文件传给server7、server8[rootserver6 kraft]# scp server.properties server7:/opt/kafka/config/kraft/server.properties[rootserver6 kraft]# scp server.properties server8:/opt/kafka/config/kraft/server.propertiesserver7和server8配置与server6相同分别把配置文件中除30行以外的146改成147和148server6节点生成存储目录唯一的 UUID集群所有节点必须共用同一个 Cluster ID标识这是同一套 Kafka 集群[rootserver6 kraft]# KAFKA_CLUSTER_ID$(/opt/kafka/bin/kafka-storage.sh random-uuid)[rootserver6 kraft]# echo ${KAFKA_CLUSTER_ID}I3bAtanwTmqvTKLDiP7suA三台主机用该 uuid 格式化 kafka 存储目录/opt/kafka/bin/kafka-storage.shformat-tI3bAtanwTmqvTKLDiP7suA-c/opt/kafka/config/kraft/server.properties三台主机启动 Kafka/opt/kafka/bin/kafka-server-start.sh-daemon/opt/kafka/config/kraft/server.properties jpsKafka 集群任意节点创建 Topic[rootserver6 kraft]# /opt/kafka/bin/kafka-topics.sh --create --topic testtopics --bootstrap-server localhost:9092 --replication-factor 3 --partitions 3Kafka 集群任意节点查看 Topic[rootserver7 kraft]# /opt/kafka/bin/kafka-topics.sh --list --bootstrap-server localhost:9092testtopicsKafka 集群任意节点生产者测试[rootserver6 kraft]# /opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic testtopics111222333444555Kafka 集群任意节点查看主题[rootserver7 kraft]# /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic testtopics --from-beginningKafka 集群任意节点查看 topic 详细信息[rootserver7 kraft]# /opt/kafka/bin/kafka-topics.sh --bootstrap-server server6:9092,server7:9092,server8:9092 --topic testtopics --describeFIlebeat 配置文件修改[rootserver4 ~]# cd /etc/filebeat/[rootserver4 filebeat]# vim filebeat.yml[rootserver4 filebeat]# systemctl restart filebeat.service[rootserver4 filebeat]# filebeat test config -c /etc/filebeat/filebeat.yml[rootserver4 filebeat]# filebeat test output -c /etc/filebeat/filebeat.ymlKafka 集群任意节点消费者测试[rootserver8 kraft]# /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic apache-logs --from-beginningLogstash 消费 Topic 消息[rootserver5 ~]# cd /etc/logstash/conf.d/[rootserver5 conf.d]# vim kafka.conf[rootserver5 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/kafka.conf前台打印大量日志测试ab-c1-n300http://192.168.40.144/index.html监控可看到访问情况