当前位置: 首页 > news >正文

ELK分布式日志平台搭建 + ES集群安全与监控综合实践

一、Elasticsearch

1.1 集群部署

server1:

  • 本地rpm方式安装Elasticsearch 7.6.1
  • 修改系统资源软硬限制,ES需要大量打开文件、创建线程,系统默认限制过低,运行一段时间会崩溃。

[root@server1 ~]# rpm -ivh elasticsearch-7.6.1-x86_64.rpm

[root@server1 ~]# cd /etc/elasticsearch/

  • 修改ES核心配置文件,义集群名称、节点名称、集群节点地址、开放外部访问,实现多台机器组建集群。

[root@server1 elasticsearch]# vim elasticsearch.yml

  • 修改系统资源软硬限制,ES需要大量打开文件、创建线程,系统默认限制过低,运行一段时间会崩溃。

[root@server1 elasticsearch]# vim /etc/security/limits.conf

  • 修改systemd服务配置,通过systemd启动的程序会忽略limits.conf,必须在服务文件内单独声明资源上限。

[root@server1 elasticsearch]# vim /usr/lib/systemd/system/elasticsearch.service

  • 重载服务

[root@server1 elasticsearch]# systemctl daemon-reload

  • 临时关闭swap交换分区,ES官方禁用swap;内存和磁盘交换会极大降低检索性能,容易引发集群卡顿、节点脱离集群。

[root@server1 elasticsearch]# swapoff -a

  • 将下方图片圈出来的一行注释掉,永久关闭 swap 分区

[root@server1 elasticsearch]# vim /etc/fstab

  • 启动ES并设置开机自启

[root@server1 elasticsearch]# systemctl daemon-reload
[root@server1 elasticsearch]# systemctl enable --now elasticsearch

  • 查看是否配置成功

  • 免密登录,将改过的配置文件拷贝给server2和server3,记得修改node.name为本机名称,如果注释掉就不用管了,否则很有可能开启不了

ssh-keygen

ssh-copy-id server2

ssh-copy-id server3

[root@server1 elasticsearch]# scp elasticsearch.yml server2:/etc/elasticsearch/

[root@server1 elasticsearch]# scp /etc/security/limits.conf server2:/etc/security/
[root@server1 elasticsearch]# scp /usr/lib/systemd/system/elasticsearch.service

  • server2和server3上的操作和server1操作一样

[root@server2 ~]# swapoff -a
[root@server2 ~]# vim /etc/fstab
[root@server2 ~]# systemctl daemon-reload
[root@server2 ~]# systemctl start elasticsearch
[root@server2 ~]# systemctl enable --now elasticsearch

1.2 Cerebro部署

Cerebro:ES集群Web可视化管理工具,图形化查看节点、分片、索引状态,替代大量curl命令。

  • 新打开一个虚拟机server4,不要在ES集群上安装下载,很有可能因为内存不够而崩溃。
  • 安装yum工具集,提供yum-config-manager命令,用来添加第三方软件源。
  • 加阿里云Docker官方yum源
  • 完整安装Docker引擎、客户端、容器运行时、compose插件

yum install -y yum-utils

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

  • 后台运行cerebro容器

systemctl enable --now docker

docker run -d --name cerebro -p 9000:9000 lmenezes/cerebro

  • 浏览器访问,填写集群内任一节点的IP地址

  • 此时master为server1

1.3 集群节点角色划分

  • 修改配置文件/etc/elasticsearch/elasticsearch.yml

server1

server2

server3

  • 重新配置后重启服务,server2为master,会自动选举master

  • 故意down掉server2的elasticsearch,会自动选举server1为master

  • 启动服务,server2自动加入集群,此时为从

二、logstash——数据采集

  • 重新开了个虚拟机server5

2.1 部署

  • 安装JDK11,Logstash7.6.1 运行依赖Java环境,必须预先部署JDK。
  • Logstash负责采集→过滤→输出日志
  • 命令行临时启动一条简易管道,验证Logstash能否正常启动,测试基础输入输出流程。

[root@server5 ~]# yum install -y jdk-11.0.15_linux-x64_bin.rpm

[root@server5 ~]# yum install -y logstash-7.6.1.rpm
[root@server5 ~]# /usr/share/logstash/bin/logstash -e 'input { stdin { } } output { stdout {} }'

  • 出现successfully,可输入数据

2.2 输出插件

  • 编写持久化配置文件test.conf

[root@server5 ~]# cd /etc/logstash/
[root@server5 logstash]# cd conf.d/
[root@server5 conf.d]# vim test.conf

  • 加载配置文件启动Logstash

[root@server5 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/test.conf

  • 此时界面有数据

2.3 head插件

  • 解压phantomjs压缩包
  • 将phantomjs二进制程序复制到全局PATH目录
  • 安装字体依赖库,phantomjs运行缺少字体库会直接启动报错。
  • 验证phantomjs环境是否安装成功,无报错代表环境就绪;Ctrl+C退出。

yum install -y bzip2

tar jxf phantomjs-2.1.1-linux-x86_64.tar.bz2
cd phantomjs-2.1.1-linux-x86_64
cp bin/phantomjs /usr/local/bin/
yum install -y fontconfig
phantomjs

  • 安装NodeJS,elasticsearch-head基于Node.js开发,npm打包、启动服务必须依赖node环境。
  • 使用国内淘宝镜像下载项目所有依赖包

rpm -ivh nodejs-9.11.2-1nodesource.x86_64.rpm

yum install -y unzip
unzip elasticsearch-head-master.zip
cd elasticsearch-head-master/
npm install --registry=https://registry.npmmirror.com/

  • 配置Head前端默认连接的ES集群地址

[root@server4 elasticsearch-head-master]# vim _site/app.js

  • 在第4388行,修改成集群内的节点IP

  • 后台启动 head 服务
  • head默认占用9100端口

[root@server4 elasticsearch-head-master]# npm run start &

[root@server4 elasticsearch-head-master]# netstat -antlp|grep :9100
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 20156/grunt

  • ES集群开启跨域配置,添加下面图片圈出来的两行,开启ES跨域资源共享,允许所有地址跨域访问ES

[root@server1 ~]# vim /etc/elasticsearch/elasticsearch.yml

  • 重启服务

[root@server1 ~]# systemctl restart elasticsearch.service

  • 浏览器访问http://192.168.159.154:9100

  • 停止server2的elasticsearch,集群健康状态变为yellow

  • 将server2再次打开,由于ES集群分片自动均衡机制,会自动加入集群,且在页面,显示server2成功加入集群,ES内部自动同步分片数据;集群状态自动恢复green

2.4 file插件

[root@server5 conf.d]# vim test.conf

  1. file{}作用:文件输入插件,持续采集磁盘日志文件,生产环境主流采集方式,替代stdin 测试插件;可以持续监控日志新增内容,类似 tail -f。
  2. path => "/var/log/messages"作用:指定要监控采集的日志文件路径,/var/log/messages是CentOS系统全局系统日志,用来做实验数据源。
  3. start_position => "beginning"作用:首次读取文件时,默认值是end,首次启动只读取新增日志;实验需要读取历史日志,因此修改为beginning。
  • 加载 file 采集配置启动Logstash:

[root@server5 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/test.conf

  • 会自动生成

Logstash File插件会维护sincedb偏移量文件,记录:文件inode、已经读到哪个字节位置。

  • 先清理偏移量,保证可以从头读取,如果看不到最新日期的数据写入,则是数据冗余了,删掉下方文件

[root@server5 ~]# cd /usr/share/logstash/data/plugins/inputs/file

[root@server5 file]# l.
. .. .sincedb_452905a167cf4509fd08acb964fdb20c
[root@server5 file]# rm -f .sincedb_452905a167cf4509fd08acb964fdb20c
重新启动Logstash

[root@server5 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/test.conf

  • 就能看到新的日期数据写入

2.5 syslog插件

[root@server5 conf.d]# vim rys.conf

  1. input { syslog {} }:启用 syslog 输入插件,默认监听UDP 514端口,接收标准syslog协议报文; 自动解析syslog协议格式,自动拆分出程序名、优先级、设备类型、日志源 IP 等字段,不需要手动正则切割。
  2. stdout {}:控制台打印日志,调试观察解析效果。
  3. elasticsearch { ... }:将解析完成的syslog日志写入ES集群;index => "rsyslog-%{+YYYY.MM.dd}":按日期生成独立索引,区分文件采集日志与syslog转发日志。

[root@server5 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/rys.conf

[root@server1 ~]# vim /etc/rsyslog.conf

  • 加载新的日志转发规则

[root@server1 ~]# systemctl restart rsyslog.service
[root@server1 ~]# logger server1

  • 此时网页页面也有

2.6 多行合并插件

  • 将 server1上ES日志文件拷贝至server5,作为file插件监控的日志源文件。

[root@server1 ~]# cd /var/log/elasticsearch
[root@server1 elasticsearch]# scp my-es.log server5:/var/log/

[root@server5 conf.d]# vim myes.conf

[root@server5 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/myes.conf

  • 此时错误为一行输出


2.7 grok过滤插件

Apache访问日志是单行纯文本字符串,无法直接统计IP、请求方式、状态码、URI。

grok插件:使用正则模板,把非结构化日志自动切割成独立结构化字段,方便ES检索、Kibana绘图统计。

  • 搭建Apache测试环境
  • 压力测试产生访问日志

[root@server5 ~]# yum install -y httpd
[root@server5 ~]# systemctl enable --now httpd
[root@server5 ~]# echo www.westos.org > /var/www/html/index.html
[root@server1 ~]# ab -c1 -n 300 http://192.168.159.155/index.html

[root@server5 conf.d]# vim grok.conf

[root@server5 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/grok.conf

三、firebeat日志分析

  • Filebeat安装与启用Apache模块

rpm -ivh filebeat-7.6.1-x86_64.rpm

cd /etc/filebeat/modules.d

filebeat modules enableapache

3.1 Filebeat直接输出Elasticsearch

vim apache.yml

  • 日志流向:Filebeat采集 → 直接写入ES。

vim /etc/filebeat/filebeat.yml

# 校验配置语法是否合法

[root@server5 modules.d]# filebeat test config -c /etc/filebeat/filebeat.yml

# 测试输出连通性

[root@server5 modules.d]# filebeat test output -c /etc/filebeat/filebeat.yml

# 测试输出连通性

[root@server5 modules.d]# systemctl enable --now filebeat

3.2 Filebeat输出到Logstash

  • 修改配置文件

vim/etc/logstash/conf.d/beats.conf

  • 修改filebeat.yml,注释elasticsearch输出,启用logstash输出

四、kibana可视化

  • 下载安装kibana,并配置文件,修改成下方图片的模样

[root@server5 ~]# rpm -ivh kibana-7.6.1-x86_64.rpm
[root@server5 ~]# cd /etc/kibana/
[root@server5 kibana]# vim kibana.yml

  • 启动kibana服务,确认端口已被监听

[root@server5 kibana]# systemctl enable --now kibana
[root@server5 kibana]# systemctl start kibana
[root@server5 kibana]# netstat -antlp |grep :5601


  • 浏览器访问5601端口,进入后创建索引模式,按以下图片进行

  • 新建可视化,可自行进行选择创建

  • 添加可视化图形或指标

  • 添加仪表板,把多张图表整合到一个大屏,实现日志监控面板。

五、Elasticsearch快照备份与恢复

5.1 备份快照

  • 创建共享目录并配置权限,ES运行用户需要读写目录,放宽权限避免权限拒绝

[root@server5 ~]# yum install -y nfs-utils

[root@server5 ~]# mkdir -p /data/es-backup
[root@server5 ~]# chmod 777 /data/es-backup/
[root@server5 ~]# vim /etc/exports

  • 编辑NFS共享配置文件

[root@server5 ~]# systemctl enable --now nfs

  • 在elasticsearch三个节点,同时安装nfs-utils,并且配置同样的以下操作

[root@server2 ~]# mkdir -p /data/es-backup

  • 挂载远端 NFS 共享目录

[root@server2 ~]# mount 192.168.159.155:/data/es-backup /data/es-backup

  • 确认已经挂载成功

  • 修改配置文件elasticsearch.yml,定义快照仓库允许使用的本地路径

[root@server2 ~]# vim /etc/elasticsearch/elasticsearch.yml

  • 重启服务

[root@server2 ~]# systemctl restart elasticsearch

5.2 滚动重启

  • 点击扳手
  • 设置临时分片策略(滚动重启前执行)

PUT _cluster/settings

{

"transient": {

"cluster.routing.allocation.enable": "primaries"

}

}

  • 出现“true”表示成功

  • 集群全部节点重启完成,恢复默认分片策略

PUT _cluster/settings

{

"transient": {

"cluster.routing.allocation.enable": null

}

}

5.3 API创建快照仓库

  • type: fs:仓库类型为本地文件系统仓库;
  • location:存储路径,与path.repo配置保持一致;
  • compress: true:开启快照文件压缩,节省磁盘空间。

PUT /_snapshot/my_backup

{

"type": "fs",

"settings": {

"location": "/data/es-backup",

"compress": true

}

}

  • 验证已经有了
  • 验证仓库创建成功

GET /_snapshot/my_backup

5.4 创建快照(数据备份操作)

快照支持两种模式:备份集群全部索引、仅备份指定索引。

5.4.1 备份集群内所有索引

PUT /_snapshot/my_backup/snapshot_all_20260811 # 快照名称(快照名称带上日期,方便后期区分管理)

5.4.2 只备份指定索引

  • indices:指定需要备份的索引,支持通配符“*”,多个索引用逗号隔开;
  • ignore_unavailable: true:如果部分索引不存在,不中断备份任务;
  • include_global_state: false:不备份集群全局状态(索引模板、别名等)。恢复时避免覆盖集群现有模板。

PUT /_snapshot/my_backup/snapshot_all_20260811

{

"indices": "syslog-*",

"ignore_unavailable": true,

"include_global_state": false

}

5.4.3 查看仓库内所有快照

GET /_snapshot/my_backup/_all

5.4.4 查看单个快照

GET /_snapshot/my_backup/snapshot_all_20260811

5.4.5 监控快照进度

GET /_snapshot/my_backup/snapshot_all_20260811/_status

5.5 恢复快照

# 关闭待恢复索引 POST /apachelog-*/_close # 执行快照恢复 POST /_snapshot/my_backup/snapshot_apachelog_20260812/_restore { "indices": "apachelog-*", "ignore_unavailable": true, "include_global_state": false } # 恢复完成后开启索引 POST /apachelog-*/_open

六、ES集群监控

6.1 xpack认证

  • server1上生成SSL证书,开启集群传输层SSL加密

cd /usr/share/elasticsearch/

  • 生成CA根证书

bin/elasticsearch-certutil ca

  • 使用CA签发集群通信证书elastic-certificates.p12

bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

  • 将证书移动至ES配置目录

cp elastic-certificates.p12 /etc/elasticsearch
cd /etc/elasticsearch/

  • 修改文件属主为elasticsearch运行用户

chown elasticsearch elastic-certificates.p12

  • 修改所有节点elasticsearch.yml配置,三个节点都需要

vim elasticsearch.yml
systemctl restart elasticsearch

  • 证书分发至其余节点

[root@server1 elasticsearch]# scp elastic-certificates.p12 server2:/etc/elasticsearch/
[root@server1 elasticsearch]# scp elastic-certificates.p12 server3:/etc/elasticsearch/

  • server2上执行相同操作,但配置内容有所不一样

[root@server2 ~]# chown elasticsearch /etc/elasticsearch/elastic-certificates.p12
[root@server2 ~]# vim /etc/elasticsearch/elasticsearch.yml

[root@server2 ~]# systemctl restart elasticsearch

  • server3上和server2同样执行相同操作

[root@server3 ~]# chown elasticsearch /etc/elasticsearch/elastic-certificates.p12
[root@server3 ~]# vim /etc/elasticsearch/elasticsearch.yml

[root@server3 ~]# systemctl restart elasticsearch

  • 设置ES内置预留用户密码,server1设置密码

[root@server1 elasticsearch]# bin/elasticsearch-setup-passwords interactive

  • ES启动安全机制后,必须初始化内置账号密码:elastic、kibana、logstash_system、beats_system、apm_system、remote_monitoring_user

  • 配套组件适配账号密码访问 ES
  • 开启安全后Head无法直连,访问地址格式需要追加认证参数http://192.168.159.154:9100/?auth_user=elastic&auth_password=elastic

[root@server4 ~]# cd elasticsearch-head-master/
[root@server4 elasticsearch-head-master]# npm run start &

[root@server4 ~]# docker start cerebro

  • 修改logstash配置文件

[root@server5 ~]# vim /etc/logstash/conf.d/grok.conf

[root@server5 ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/grok.conf

  • 修改kibana文件

[root@server5 kibana]# vim kibana.yml

  • kibana通过用户和密码正常访问

6.2 Metricbeat 部署,实现ES集群监控采集

server1、server2、server3执行相同的操作

  • 安装metricbeat监控

[root@server1 ~]# rpm -ivh metricbeat-7.6.1-x86_64.rpm

[root@server1 ~]# cd /etc/metricbeat/modules.d/

  • 启用ES监控模块

[root@server1 modules.d]# metricbeat modules enable elasticsearch-xpack

  • 修改模块配置elasticsearch-xpack.yml,一般用自己的本机IP,监测的是本机状况和数据

[root@server1 modules.d]# vim elasticsearch-xpack.yml

  • 修改metricbeat.yml,配置输出ES地址与账号,最好统一用一个节点的

[root@server1 metricbeat]# vim metricbeat.yml

[root@server1 metricbeat]# systemctl enable --now metricbeat.service

  • 点击内部检测,进入设置模式,当所有步骤配置好后,会全部metricbeat进行监测

  • server2和server3的操作一样
http://www.cnnetsun.cn/news/4009867.html

相关文章:

  • 从零基础到行业标杆,揭秘哈尔滨微网站建设的高质量落地全流程解析与避坑指南
  • C# System.IO 文件操作核心指南:从流抽象到异步高性能实战
  • 全面解读2024年卫生局网站建设方案:如何打造亲民高效的健康服务门户
  • 文山微网站建设全攻略:从零基础搭建到获客转化,中小企业必看的深度解析
  • 淮安营销型网站建设:如何让企业在激烈的市场浪潮中真正突围而出
  • 哪个商城网站建设好,资深从业者深度解析避坑指南与实战经验
  • 探索高校 门户网站 建设背景下的数字化转型与校园品牌重塑深层逻辑
  • 书画院网站建设方案:打造高端文化数字门户的深度规划与实施策略
  • 网站建设服务有哪些:揭秘中小企业官网搭建的真相与避坑指南,助你打造高转化率数字名片
  • 揭秘国家机构网站建设背后的硬功夫与软实力,如何打造权威信赖的数字窗口
  • 五华网站建设怎么选?揭秘优帮云高性价比建站方案与企业数字化突围指南
  • 临夏州建设局网站如何高效查询最新政策与办事指南全流程解析
  • 从0到1搭建专属官网:网站建设熊猫建站如何帮助企业打破流量瓶颈实现低成本高转化?
  • 手把手教你学 Simulink—— 考虑磁饱和效应的 IPMSM 最大转矩(MTPA)控制仿真(落地版)
  • 2024年最新版电子商务网站建设模板下载指南:让独立品牌从小白到老手的逆袭之路
  • 2024年网站建设青雀深度解析与企业官网搭建实战指南
  • 五河网站建设哪家好?避开这些坑,手把手教你选出最靠谱的设计团队
  • 揭秘网站建设报价单PPT背后的行业潜规则与避坑指南:如何看懂那份让你晕头转向的费用清单
  • 昆明移动网站建设:从底层逻辑到落地执行,一套不绕弯子的实操指南
  • C语言文件操作核心:从文本/二进制读写到高效I/O与错误处理
  • 挑战腾讯Robotics X多模态感知工程师面试,视觉+触觉融合才是硬核考点
  • 医疗器械网站建设方案:如何构建一个既专业又具备高转化率的数字化营销阵地
  • 深度解析枣阳建设局网站如何助力城市更新与民生改善的实用指南
  • sql如何建设网站数据库从零基础到高性能架构设计的深度实践指南
  • 方山网站建设怎么做?揭秘本地企业如何打造高转化官网与小程序
  • 在北仑建设局网站办理业务的那些事儿,普通市民该如何高效避坑与指引
  • 为什么你的贵阳网站建设端觉体验这么差?资深开发者揭秘那些被忽视的细节
  • 在网站建设交流论坛探讨技术趋势与经验分享的深度之旅
  • 贸易公司寮步网站建设极致发烧:从源码到服务器的每一行代码都值得被尊重
  • 昆明网站建设推荐q479185700上墙